SMS Double Authentification
This commit is contained in:
parent
43963548ea
commit
164bf129d8
|
@ -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()
|
|
@ -1,4 +1,4 @@
|
|||
From: support@qo-op.com
|
||||
To: EMAIL
|
||||
Subject: SUBJECT
|
||||
MESSAGE
|
||||
To: _EMAIL
|
||||
Subject: _SUBJECT
|
||||
_MESSAGE
|
||||
|
|
|
@ -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
|
||||
#<?php
|
||||
#header("Access-Control-Allow-Origin: *");
|
||||
#if (strlen($_REQUEST['num']) == 10 ) {
|
||||
# $newNumber = preg_replace('/^0?/', '+33', $_REQUEST['num']);
|
||||
# $data = '"'.$newNumber.'" "'.$_REQUEST['val'].'"'.PHP_EOL;
|
||||
# $fp = fopen('/tmp/sms.commands', 'a');
|
||||
# fwrite($fp, $data);
|
||||
#} else {
|
||||
# return false;
|
||||
#}
|
||||
#?>
|
||||
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
|
|
@ -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
|
||||
|
|
|
@ -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 <id> <mdp>
|
||||
|
||||
# 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,
|
||||
)
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue