diff --git a/debug/GSM_PWRKEY.py b/debug/GSM_PWRKEY.py new file mode 100755 index 0000000..037387e --- /dev/null +++ b/debug/GSM_PWRKEY.py @@ -0,0 +1,10 @@ +import RPi.GPIO as GPIO +import time +GPIO.setmode(GPIO.BOARD) +GPIO.setup(7, GPIO.OUT) +while True: + GPIO.output(7, GPIO.LOW) + time.sleep(4) + GPIO.output(7, GPIO.HIGH) + break +GPIO.cleanup() diff --git a/email.txt b/email.txt index be468db..650f4e0 100755 --- a/email.txt +++ b/email.txt @@ -1,4 +1,4 @@ From: support@qo-op.com -To: EMAIL -Subject: SUBJECT -MESSAGE +To: _EMAIL +Subject: _SUBJECT +_MESSAGE diff --git a/shell/0.sms.command.sh b/shell/0.sms.command.sh new file mode 100755 index 0000000..90534ac --- /dev/null +++ b/shell/0.sms.command.sh @@ -0,0 +1,28 @@ +# Author: Fred (support@qo-op.com) +# Version: 0.2 +# License: GPL (http://www.google.com/search?q=GPL) +################################################################################ +# READ /tmp/sms.commands and RUN it.. TODO, add keys for security ;) +################################################################################# +# RECEIVE COMMAND FROM zen_sms.php +# +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi +if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi + +[[ -f /tmp/sms.commands ]] && echo "" > /tmp/sms.commands +tail -fn 1 /tmp/sms.commands | while read -r line +do + [[ $line != "" ]] && mycmd="$GPATH/shell/sms_AUTH.sh $line" && echo "RUN: $mycmd" && eval "$mycmd" +done diff --git a/shell/cron_MINUTE.sh b/shell/cron_MINUTE.sh index 60f8c23..a07be58 100755 --- a/shell/cron_MINUTE.sh +++ b/shell/cron_MINUTE.sh @@ -24,7 +24,7 @@ source ./shell/functions.sh timebar=$(date +%H:%M) minut=$(date +%M | sed 's/^0*//') [[ $minut == "" ]] && minut=0 -log "__CRON:cron_MINUTE.sh - $minut - It is $timebar ... $1" +# log "__CRON:cron_MINUTE.sh - $minut - It is $timebar ... $1" ################################################################## ################################################################## @@ -46,7 +46,7 @@ curl -s https://duniter-g1.p2p.legal/tx/history/$NODE_G1PUBKEY/times/$TIMEBEFORE while read SMS_1_TEXT do export $SMS_1_TEXT - log "$NODE_G1PUBKEY TX PENDING !! COMMENT = " $SMS_1_TEXT + log "$NODE_G1PUBKEY TX PENDING $timebar !! COMMENT = " $SMS_1_TEXT # TODO: VERIFY SOURCE PUBKEY IS RELATED TO A WALLET # PUBKEY= # WALLET=$(grep -Rwl "$PUBKEY" ./wallets/*/*.pub | head -n 1) @@ -78,12 +78,12 @@ while [[ $FROM != "" && $SUBJECT != "" ]]; do export SMS_1_NUMBER=$(echo -n $WALLET | cut -d '/' -f 3) #TODO CHANGE ON NEXT SHA RELEASE # $SMS_1_NUMBER && $SMS_1_TEXT => RUN ./sms_received.sh [[ $SMS_1_TEXT != "" && $SMS_1_NUMBER ]] && log "EMAIL CMD = $SMS_1_NUMBER $SMS_1_TEXT" && ./sms_received.sh - cat ./email.txt | sed s/EMAIL/"${FROM}"/g | sed s/SUBJECT/"G1sms+ EMAIL ACK"/g | sed s/MESSAGE/"$SMS_1_TEXT OK"/g | ssmtp ${FROM} + cat ./email.txt | sed s/_EMAIL/"${FROM}"/g | sed s/_SUBJECT/"G1sms+ EMAIL ACK"/g | sed s/_MESSAGE/"$SMS_1_TEXT OK"/g | ssmtp ${FROM} else if [[ $FROM != "" ]]; then log "MAIL RECEIVED! NO GOOD SENDER: $FROM" curl -s --user "vir@g1sms.fr:Z1cG1V1r!" pop3://pop.bookmyname.com/1 --request dele --list-only - cat ./email.txt | sed s/EMAIL/"${FROM}"/g | sed s/SUBJECT/"G1sms+ INCONNU"/g | sed s/MESSAGE/"Portefeuille G1sms inconnu"/g | ssmtp ${FROM} + cat ./email.txt | sed s/_EMAIL/"${FROM}"/g | sed s/_SUBJECT/"G1sms+ INCONNU"/g | sed s/_MESSAGE/"Portefeuille G1sms inconnu"/g | ssmtp ${FROM} fi #log "NO MAIL" fi diff --git a/shell/key_create_dunikey.py b/shell/key_create_dunikey.py new file mode 100755 index 0000000..32720c8 --- /dev/null +++ b/shell/key_create_dunikey.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# This Python script gets Duniter creddentials as arguments, and writes a PubSec file that should be compatible with Cesium and Silkaj(DuniterPy) clients. +# launch with : +# python3 key_create_dnuikey.py + +# depends on duniterpy 0.56 + +### Licence - WTFPL +# This script was written my Matograine, in the hope that it will be helpful. +# Do What The Fuck you like with it. There is : +# * no guarantee that this will work +# * no support of any kind +# +# If this is helpful, please consider making a donation to the developper's pubkey : 78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8 +# Have fun + +from sys import argv +from duniterpy.key import SigningKey + +# path to save to +path = "/tmp/secret.dunikey" + +key = SigningKey.from_credentials(argv[1], argv[2], None) +key.save_pubsec_file(path) +print( + "G1 Wallet: ", + key.pubkey, +) diff --git a/shell/sms_AUTH.sh b/shell/sms_AUTH.sh new file mode 100755 index 0000000..c04b4d7 --- /dev/null +++ b/shell/sms_AUTH.sh @@ -0,0 +1,52 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi +if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi +cd $GPATH +source ./shell/init.sh +source ./shell/functions.sh + +PHONE=$1 +VALEUR=$2 +TODAY=$(date '+%Y%m%d') +log "__SUB:sms_AUTH.sh ($PHONE, $VALEUR)" +[[ $VALEUR == "" ]] && echo "Valeur totale des G1Billets?" && exit +[[ $PHONE != "" ]] && sms_INIT_ACCOUNT "$PHONE" "NOSMS" || exit +[[ $UNKNOWN == "unknown" ]] && echo "Envoyer N au $MASTERPHONE" && exit + +# Get AMOUNTG1, AMOUNTLOVE, AMOUNTDU +AMOUNTG1=$(./silkaj/silkaj amount "$PUBKEY") +AMOUNTDU=$(bc -l <<< "scale=2; $AMOUNTG1 / $DUFACTOR") +AMOUNTLOVE=$(bc -l <<< "scale=0; $AMOUNTG1 * 100 / $DUFACTOR") + +# Convert amount to G1 unit +VIR=$(bc -l <<< "scale=2; $VALEUR * $DUFACTOR / 100") + +# Need at least $MIN G1 available! +MIN=$(bc -l <<< "$AMOUNTG1 - $LIMIT") +testmin=$( echo "${VIR} < ${MIN}" | bc -l ) +SMSPIN=$((1000 + RANDOM % 9999)) + +log "__SUB:sms_AUTH.sh: CODE $SMSPIN : $VIR < $MIN ? $testmin" +if [[ "$testmin" -eq "1" ]] +then + mess="CODE: $SMSPIN" + # Send response SMS + sms_SEND "$PHONE" "$mess" + echo $SMSPIN > /tmp/$PHONE.PIN.auth + echo $SMSPIN +else + text="Solde: $AMOUNTLOVE LOVE ($AMOUNTG1 G1 = $AMOUNTDU DU) +Insuffisant (minimum $VIR G1 + $LIMIT G1)" + sms_ERROR "$PHONE" "$text" + echo "Minimum $VIR G1 + $LIMIT G1" +fi +log "__SUB:sms_AUTH.sh: END sms_AUTH.sh " +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit diff --git a/shell/sms_BILLET.sh b/shell/sms_BILLET.sh index 991be39..26d1917 100755 --- a/shell/sms_BILLET.sh +++ b/shell/sms_BILLET.sh @@ -160,7 +160,7 @@ Support: $ADMINPSEUDO ($ADMINPHONE) sms_SEND "$phone" "$mess" # ADMIN ALERT SMS + TODO Add ADMINEMAIL parameter in "install.sh" sms_SEND "$ADMINPHONE" "$MEMBER vient de créer $NBbillets G1Billets de $VALbillet $UNIT ($TRANSAC G1): $MAIL" - cat ./email.txt | sed s/EMAIL/frenault@linkeo.com/g | sed s/SUBJECT/Creation_G1Billets/g | sed s/MESSAGE/"$MEMBER ($PHONE) vient de creer $NBbillets G1Billets de $VALbillet $UNIT ($TRANSAC G1) vers $MAIL"/g | ssmtp "frenault@linkeo.com" + cat ./email.txt | sed s/_EMAIL/frenault@linkeo.com/g | sed s/_SUBJECT/Creation_G1Billets/g | sed s/_MESSAGE/"$MEMBER ($PHONE) vient de creer $NBbillets G1Billets de $VALbillet $UNIT ($TRANSAC G1) vers $MAIL"/g | ssmtp "frenault@linkeo.com" ##################################### # Amount too High, solde insuffisant diff --git a/shell/sms_BILLETCHK.sh b/shell/sms_BILLETCHK.sh index b0e0c1d..fca22aa 100755 --- a/shell/sms_BILLETCHK.sh +++ b/shell/sms_BILLETCHK.sh @@ -7,21 +7,22 @@ source ./shell/functions.sh log "X sms_BILLETCHK.sh $0" PHONE="$1" -CODE="$2 $3" -SEC="$4 $5 $6 $7" - +CODE="" # Construct billet path -bpath=$(echo "$CODE" | sed 's/ /_/g') +bpath=$(echo "$2 $3" | sed 's/ /_/g') +[[ -d "./billets/$bpath" ]] && CODE="$2 $3" && SEC="$4 $5 $6 $7" && zpath=$bpath -if [ -d "./billets/$bpath" ] -then - SECRET=$(cat "./billets/$bpath/note.secret") - SALT=$(cat "./billets/$bpath/note.salt") - VALbillet=$(cat "./billets/$bpath/note.value") - UNIT=$(cat "./billets/$bpath/note.unit") - BILLETPUBKEY=$(cat "./billets/$bpath/note.pubkey") +oldpath=$(echo "$2 $3 $4 $5" | sed 's/ /_/g') +[[ -d "./billets/$oldpath" ]] && CODE="$2 $3 $4 $5" && SEC="$6 $7 $8" && zpath=$oldpath - AMOUNTG1=$(./silkaj/silkaj amount "$BILLETPUBKEY") +if [[ $CODE != "" ]]; then + SECRET=$(cat "./billets/$zpath/note.secret") + SALT=$(cat "./billets/$zpath/note.salt") + VALbillet=$(cat "./billets/$zpath/note.love") + UNIT="LOVE" + BILLETPUBKEY=$(cat "./billets/$zpath/note.pubkey") + + G1=$(./silkaj/silkaj amount "$BILLETPUBKEY") log "Billet: $AMOUNTG1 ($VALbillet $UNIT): $BILLETPUBKEY" # NO GOOD SECRET @@ -29,11 +30,11 @@ then # SEND ACTUAL BILLET VALUE mess="[G1SMS] Billet de $VALbillet $UNIT Valide! -Valeur: $AMOUNTG1 G1 +Valeur: $G1 G1 https://www.g1sms.fr/contact" sms_SEND "$PHONE" "$mess" - log "BILLETCHK: $VALbillet $UNIT ($AMOUNTG1 G1)" - log_history $PHONE "BILLET_CHK, $AMOUNTG1, $bpath" + log "BILLETCHK: $VALbillet $UNIT ($G1 G1)" + log_history $PHONE "BILLET_CHK, $G1, $zpath" else # TRANSFER & DESTROY sms_INIT_ACCOUNT "$PHONE" "NOSMS" @@ -41,35 +42,43 @@ https://www.g1sms.fr/contact" # Account creation sms_INIT_ACCOUNT "$PHONE" fi - log "./silkaj/silkaj transaction --auth-scrypt -salt=\"$CODE\" -password=\"$SEC$SALT\" --amount=\"$AMOUNTG1\" --output=\"$PUBKEY\" --comment=\"THIRD_PARTY_MANAGER:$NODE_G1PUBKEY:G1SMS:ENCAISSEMENT:$CODE\" -y" - PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$CODE" -password="$SEC$SALT" --amount="$AMOUNTG1" --output="$PUBKEY" --comment="THIRD_PARTY_MANAGER:$NODE_G1PUBKEY:ENCAISSEMENT:$CODE" -y) - +################ BUG SILKAJ TX + log "python3 ./shell/key_create_dunikey.py $CODE / $SEC $SALT" +# [[ $SALT != "" ]] && PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$CODE" -password="$SEC $SALT" --amount="$G1" --output="$PUBKEY" --comment="THIRD_PARTY_MANAGER:$NODE_G1PUBKEY:ENCAISSEMENT:$CODE" -y) \ +# || PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$CODE" -password="$SEC" --amount="$G1" --output="$PUBKEY" --comment="THIRD_PARTY_MANAGER:$NODE_G1PUBKEY:ENCAISSEMENT:$CODE" -y) +# MAKE .dunikey file and use latest silkaj + [[ $SALT != "" ]] && python3 ./shell/key_create_dunikey.py "$CODE" "$SEC $SALT" \ + || python3 ./shell/key_create_dunikey.py "$CODE" "$SEC" + log "silkaj -p duniter-g1.p2p.legal:443 -af --file /tmp/secret.dunikey tx --output $PUBKEY --amount $G1" + PAY=$(silkaj -p duniter-g1.p2p.legal:443 -af --file /tmp/secret.dunikey tx --output $PUBKEY --amount $G1 -y) + log "$PAY" +### TODO AMELIORER ANALYSE DU RETOUR SILKAJ if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" ]]; then # DESTROY BILLET - rm -Rf ./billets/$bpath + rm -Rf ./billets/$zpath # DESTROY PUBLIC CACHE in /tmp - if [ -d "/tmp/billets_valides/$bpath" ]; then - rm -Rf /tmp/billets_valides/$bpath + if [ -d "/tmp/billets_valides/$zpath" ]; then + rm -Rf /tmp/billets_valides/$zpath fi SOLDE=$(./silkaj/silkaj amount "$PUBKEY") mess="[G1SMS] -ENCAISSEMENT de $VALbillet $UNIT ($AMOUNTG1 G1) +ENCAISSEMENT de $VALbillet $UNIT ($G1 G1) dans portefeuille $UIDNA ($PHONE) OK! Solde: $SOLDE G1" sms_SEND "$PHONE" "$mess" - log "BILLETCHK DESTROY: $VALbillet $UNIT ($AMOUNTG1 G1)" + log "BILLETCHK DESTROY: $VALbillet $UNIT ($G1 G1)" log "=> $PUBKEY" - log_history $PHONE "BILLET_CHK, $AMOUNTG1, $bpath, $PUBKEY" + log_history $PHONE "BILLET_CHK, $G1, $zpath, $PUBKEY" else - sms_ERROR "$PHONE" "Erreur! Transaction Impossible! Valeur du G1Billet $AMOUNTG1 G1. Contactez $ADMINPSEUDO : $ADMINPHONE" + sms_ERROR "$PHONE" "Erreur! Transaction Impossible! Valeur du G1Billet $G1 G1. Contactez $ADMINPSEUDO : $ADMINPHONE" fi fi else - sms_SEND "$PHONE" "BILLET \"$CODE\" INCONNU !!" - log_history $PHONE "BILLET_CHK, ERROR, $bpath" + sms_SEND "$PHONE" "BILLET \"$CODE\" inconnu !!" + log_history $PHONE "BILLET_CHK, ERROR, $zpath" fi log "END sms_BILLETCHK.sh" diff --git a/shell/sms_EMAIL.sh b/shell/sms_EMAIL.sh index 9f0990b..e0ea429 100755 --- a/shell/sms_EMAIL.sh +++ b/shell/sms_EMAIL.sh @@ -39,7 +39,7 @@ fi # SEND EMAIL WITH ssmtp SUBJECT="[G1sms+] $MEMBER, Message de votre portefeuille monnaie libre $UIDNA ($PHONE)" MESSAGE="Bonjour $MEMBER\n\nVotre porte-monnaie G1sms $UIDNA ($PHONE) a choisi votre email comme contact.\nPour commander vos G1Billets, envoyez par SMS à $MASTERPHONE :\nBILL 10/20/50/100/200/500/1000\n\n\nA bientot <3\n$ADMINPSEUDO ($ADMINPHONE)" -cat ./email.txt | sed s/EMAIL/"${mail}"/g | sed s/SUBJECT/"${SUBJECT}"/g | sed s/MESSAGE/"${MESSAGE}"/g | ssmtp ${mail} +cat ./email.txt | sed s/_EMAIL/"${mail}"/g | sed s/_SUBJECT/"${SUBJECT}"/g | sed s/_MESSAGE/"${MESSAGE}"/g | ssmtp ${mail} mpack -s "[G1sms+] $PHONE, $UIDNA :: Envoyer 'BILL nnn' à $MASTERPHONE pour fabriquer des G1Billets (ci-joint exemple de verso)" ./Dos_G1Billets.odt ${mail} log "__SUB:sms_EMAIL.sh: Send welcome EMAIL to $mail via ssmtp"