From 73eca2426cb3346d1dbea36b376f6b6196894150 Mon Sep 17 00:00:00 2001 From: qo-op Date: Fri, 24 Jan 2020 18:58:24 +0100 Subject: [PATCH] Add cron_MINUTE.sh : Execute G1sms CMD from EMAIL received on vir@g1sms.fr --- shell/cron_MINUTE.sh | 71 ++++++++++++++++++++++++++++++++++++++++++-- shell/functions.sh | 9 ++++-- shell/sms_EMAIL.sh | 6 ++-- shell/tag_READ_XY.sh | 6 ++-- sms_received.sh | 15 +++++----- 5 files changed, 91 insertions(+), 16 deletions(-) diff --git a/shell/cron_MINUTE.sh b/shell/cron_MINUTE.sh index 3eb4e60..460cb1d 100755 --- a/shell/cron_MINUTE.sh +++ b/shell/cron_MINUTE.sh @@ -22,13 +22,80 @@ source ./shell/init.sh source ./shell/functions.sh timebar=$(date +%H:%M) - +minut=$(date +%M) ################################################################## if [[ "$1" == "" ]]; then ################################################################## - echo "It is $timebar in the morning, or in the night? It depends on your day..." + echo "$minut MN - It is $timebar in the morning, or in the night? It depends on your day..." exit fi +log "__CRON: $timebar $1" +################################################################## + +################################################################## +################################################################## +################################################################## +# EVERY EVERY MINUTES +# START CHECK FOR EMAIL CMD +# START CHECK FOR TX CMD +EVERY=1 +################################################################## +if [[ $(($minut%$EVERY)) == 0 ]]; then +################################################################## +# CHECK FOR TX COMMAND +TIMEBEFORE=$(date --date="-$EVERY minutes" +"%s") +[[ $NODE_G1PUBKEY == "" ]] && NODE_G1PUBKEY="5sdcypPRDrzEirtTqXwzvNnMwGpjXK6EhNdti8qsdS4h" +TIMESTAMP=$(date +"%s") +log "GETTING last $EVERY mn TX : https://duniter-g1.p2p.legal/tx/history/$NODE_G1PUBKEY/times/$TIMEBEFORE/$TIMESTAMP" +curl -s https://duniter-g1.p2p.legal/tx/history/$NODE_G1PUBKEY/times/$TIMEBEFORE/$TIMESTAMP | jq '.history.pending' | jq '.[].comment' > /tmp/scan.json +while read SMS_1_TEXT +do + export $SMS_1_TEXT + log "$NODE_G1PUBKEY TX RECEIVED !! COMMENT = " $SMS_1_TEXT + # TODO: VERIFY SOURCE PUBKEY IS RELATED TO A WALLET + # PUBKEY= + # WALLET=$(grep -Rwl "$PUBKEY" ./wallets/*/*.pub | head -n 1) + # export SMS_1_NUMBER=$(echo $WALLET | cut -d '/' -f 3) #TODO CHANGE ON NEXT SHA RELEASE + # TODO: GET PHONE G1SMS (OPTION: SEND SMS FOR AUTH CHALENGE?) + # TODO: EXTRACT CMD FROM TX AND RELAY TO SMS_RECEIVED API + # TODO: MEMORIZE CMD TO MAKE IT ONLY ONE TIME!!!!!!! + +done < /tmp/scan.json + +# CHECK FOR EMAIL COMMAND +FROM="None" +SUBJECT="None" +# LOOP ON EVERY mn received emails +while [[ $FROM != "" && $SUBJECT != "" ]]; do + # GET POP3 From Address (TODO: CREATE != EMAILs FOR EACH NODE = UIDNA@g1sms.fr ) + FROM=$(curl -s --insecure --url "pop3://pop.bookmyname.com/1" --user "vir@g1sms.fr:Z1cG1V1r!" | grep From | head -n 1 | grep -i -o '[A-Z0-9._%+-]\+@[A-Z0-9.-]\+\.[A-Z]\{2,4\}' | tr -d '\r') + # GET POP3 Email Subject (remove carriage return | tr -d '\r' ) + export SMS_1_TEXT=$(curl -s --insecure --url "pop3://pop.bookmyname.com/1" --user "vir@g1sms.fr:Z1cG1V1r!" | grep Subject | head -n 1 | cut -d ':' -f 2 | sed -e 's/^[[:space:]]*//' | tr -d '\r') + # SHA256(FROM) as Search ./wallets + [[ $FROM != "" ]] && HMAIL=$(echo -n $FROM | sha256sum | cut -d ' ' -f 1) + # SEARCH for FROM corresponding WALLET + [[ $HMAIL != "" ]] && WALLET=$(grep -Rwl "$HMAIL" ./wallets/*/_email.sha | head -n 1) + # HAVE WALLET SOURCE + CMD: OK + if [[ $WALLET ]]; then + # DELETE EMAIL 1 + curl -s --user "vir@g1sms.fr:Z1cG1V1r!" pop3://pop.bookmyname.com/1 --request dele --list-only + # GET G1SMS PHONE NUMBER + 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} + 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} + fi + log "NO MAIL" + fi +done + +################################################################## +fi # END CHECK FOR EMAIL CMD ################################################################## ################################################################## diff --git a/shell/functions.sh b/shell/functions.sh index 85595a2..9c4cde6 100755 --- a/shell/functions.sh +++ b/shell/functions.sh @@ -320,6 +320,7 @@ log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" RIBFILE="./wallets/$PHONE/$PHONE.uidrib" # Contains phone wallet related UID Pubkey NAMEFILE="./wallets/$PHONE/$PHONE.uidname" # Contains the member UID related to wallet MAILFILE="./wallets/$PHONE/$PHONE.email" # Contains the member EMAIL (Send BILLET) + HMAILFILE="./wallets/$PHONE/_email.sha" # Contains sha256 EMAIL (Email CMD wallet owner search) GPGMAILFILE="./wallets/$PHONE/$PHONE.email.gpg" # Contains the member EMAIL (Send BILLET) UIDNAFILE="./wallets/$PHONE/$PHONE.uidna" # Contains the G1sms+ UID Name for recursive VIR GEOFILE="./wallets/$PHONE/$PHONE.uidgeo.json" # Contains the member GeoPoint from member Cesium+ related to wallet @@ -429,8 +430,8 @@ log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" # CYPHER EMAIL FILE if [[ ! -f "$GPGMAILFILE" ]]; then # ------------8<------------------ - log "__SUB:sms_INIT_ACCOUNT: NO EMAIL .gpg file, CREATING it" if [ -f "$MAILFILE" ]; then + log "__SUB:sms_INIT_ACCOUNT: NO EMAIL .gpg file, CREATING it" MAIL=$(cat "$MAILFILE"); echo "${GPGPASS}" | gpg -q --output "$GPGMAILFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$MAILFILE"; else @@ -441,9 +442,12 @@ log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" log "__SUB:sms_INIT_ACCOUNT: DECODING EMAIL .gpg... " echo "${GPGPASS}" | gpg -d -q --output "$MAILFILE" --yes --pinentry-mode loopback --passphrase-fd 0 "$GPGMAILFILE" MAIL=$(cat "$MAILFILE"); + # Double decypher (TODO: stop PGP for email) [[ $MAIL == "" && -f "$MAILFILE.node.crypt" ]] && ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "$MAILFILE.node.crypt" -o "$MAILFILE" && MAIL=$(cat "$MAILFILE"); # EMPTY CLEAR EMAIL FILE - [[ $MAIL != "" ]] && echo "" > "$MAILFILE" || log "SYSTEM ERROR :: MAIL EMPTY !!! GPG???" + [[ $MAIL != "" ]] && echo "" > "$MAILFILE" || log "SYSTEM ERROR :: MAIL EMPTY !!! GPG PROBLEM???" + # Create _email.sha + [[ $MAIL != "" && ! -f $HMAILFILE ]] && echo -n $MAIL | sha256sum | cut -d ' ' -f 1 > $HMAILFILE fi # ------------8<------------------ @@ -647,6 +651,7 @@ function add_contact(){ $sql "INSERT INTO user_group (id_group, id_pbk, id_pbk_groups, id_user) VALUES ('$id_user', '$id_user', '1', '1')" || exit 1 else log "${red}Contact already exist$c_" + #TODO: UPDATE Kalkun Contact database fi } diff --git a/shell/sms_EMAIL.sh b/shell/sms_EMAIL.sh index f70b16b..9f0990b 100755 --- a/shell/sms_EMAIL.sh +++ b/shell/sms_EMAIL.sh @@ -11,7 +11,7 @@ source ./shell/init.sh source ./shell/functions.sh -log "__SUB:sms_EMAIL.sh.sh: START ($1=phone, $2=mail)" +log "__SUB:sms_EMAIL.sh: START ($1=phone, $2=mail)" phone="$1" mail="$2" @@ -30,7 +30,7 @@ if [[ "$mail" != "" ]]; then echo "$mail" > "$MAILFILE" ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "$MAILFILE" -o "$MAILFILE.node.crypt" echo "" > "$MAILFILE" - log "__SUB:sms_EMAIL.sh.sh: EMAIL $MEMBER ($PHONE) NOUVEAU: $mail... Publishing to IPFS" + log "__SUB:sms_EMAIL.sh: EMAIL $MEMBER ($PHONE) NOUVEAU: $mail... Publishing to IPFS" ipfs_node_wallets_add else mail=$MAIL @@ -42,7 +42,7 @@ MESSAGE="Bonjour $MEMBER\n\nVotre porte-monnaie G1sms $UIDNA ($PHONE) a choisi v 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.sh: Send welcome EMAIL to $mail via ssmtp" +log "__SUB:sms_EMAIL.sh: Send welcome EMAIL to $mail via ssmtp" log_history $PHONE "EMAIL, $mail" mess="[G1sms+] diff --git a/shell/tag_READ_XY.sh b/shell/tag_READ_XY.sh index da8c145..9f6596f 100644 --- a/shell/tag_READ_XY.sh +++ b/shell/tag_READ_XY.sh @@ -14,8 +14,10 @@ function log () { echo "$line $1" >> /tmp/tag_READ_XY.log } -source ./shell/init.sh -source ./shell/functions.sh +############################################# +# No external dependance !!!! +#source ./shell/init.sh +#source ./shell/functions.sh ############################################## # NODE ENVIRONEMENT DETECTION ############################################## diff --git a/sms_received.sh b/sms_received.sh index 23ed95b..f422ac9 100755 --- a/sms_received.sh +++ b/sms_received.sh @@ -4,17 +4,19 @@ # PUBKEY G1 DU SWARMMASTER: 8qs69HriAdytcCLzvQGJ15XBwpjAVFx8JoVM2ahue1y7 # ipfs ls /ipns/QmZHTne3bjtMgaXWRqSbdKchJbgq2NaAeVSzFUN7ceYpif # -# G1sms+ est totalement décentralisé! Il peut être fait de multiples SWARM de Services dont les codes évoluent de façon décentralisé. -# Puis se mettent à jour autour des $ADMINPHONE par consensus d'utilisateurs ;) +# G1sms+ est constitué de multiples essaims (SWARM) qui évoluent de façon décentralisé. +# Ils se mettent à jour autour des $ADMINPHONE par consensus d'utilisateurs ;) # # Log => tail -f /tmp/g1sms.log -n 200 # gammu => tail -f /tmp/smsd.log -n 200 # +# PRODUCTION : RAM DISK / NO LOG # 2 commands needed to make the ramdisk if planning to run from ramdisk to gain some speed # sudo mkdir /mnt/ramdisk # sudo mount -t tmpfs -o size=50m tmpfs /mnt/ramdisk # -# Utiliser la commande ./search fournie pour fouiller dans le code, mais tout est ordonnancé d'ici, donc vous êtes au bon endroit pour commencer à farfouiller. +# Utiliser la commande ./search fournie pour fouiller dans le code, +# mais tout est ordonnancé à partir d'ici, vous êtes au bon endroit pour commencer à farfouiller. ############################################################################### # EN FAISANT PARTIE DU SWARM G1sms+ VOUS VOUS ENGAGEZ A ASSURER LA SECURITE # PHYSIQUE ET INFORMATIQUE DE VOTRE NOEUD ET NE PAS INTRODUIRE DE CODE MALVEILLANT @@ -23,7 +25,7 @@ # ELLE EST PROVISION EN CAS DE FRAUDE ET SA REATRIBUTION POURRA EVOLUER... # # Author: Fred (support@qo-op.com) -# Version: 0.1 +# Version: 0.2 # License: GPL (http://www.google.com/search?q=GPL) ################################################################################ @@ -109,7 +111,7 @@ case "$CMD" in ;; VIR) montant=$(echo "$TEXT" | awk '{print $2}' | grep -E "^\-?[0-9]+$") - membre=$(echo "$TEXT" | awk '{print $3}' | grep -E "([A-Za-z0-9\-\_]+$)") + membre=$(echo "$TEXT" | awk '{print $3}' | grep -E "([A-Za-z0-9\-\_]+$)") #TODO: UTF8 Char compatible? zöoma case if [[ "$montant" != "" && "$membre" != "" ]]; then ./shell/sms_VIR.sh "$PHONE" "$montant" "$membre" & else @@ -204,8 +206,7 @@ case "$CMD" in *) #./shell/sms_ERROR.sh "$PHONE" "$TEXT" & log "SMS forward to $ADMINPHONE" - sms_SEND "$ADMINPHONE" "ADMIN! BAD SMS FROM $PHONE -$TEXT" + sms_SEND "$ADMINPHONE" "$PHONE !! BAD CMD: $TEXT" ;; esac