2020-05-01 15:19:51 +02:00
#!/bin/bash
################################################################################
# Author: Fred (support@qo-op.com)
# Version: 0.1
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
###########################################################################################
###########################################################################################
echo "__SUB:tag_READ.sh: QRCODE READER : START"
2020-05-03 23:37:47 +02:00
source ./init.sh
source ./functions.sh
2020-05-01 15:19:51 +02:00
# DOUCHETTE ES TU LA?
2020-05-03 23:37:47 +02:00
if [ ! $G1TX ] ; then ./parle.sh "Branchez votre lecteur de QR code!" ; exit; fi
2020-05-01 15:19:51 +02:00
# TABLEAU MEMOIRE DE SCAN
declare -a act
declare -a obj
declare -a val
2020-05-03 23:37:47 +02:00
./parle.sh "Lecteur de G1 Tag. OK. Prêt"
2020-05-01 15:19:51 +02:00
cat /dev/ttyACM0 | while read line; do
lon = ${# line }
pref = $( echo $line | cut -d ":" -f 1)
qrvalue = $( echo $line | cut -d ":" -f 2)
log " __SUB:tag_READ.sh: SCAN /dev/ttyACM0 ( $lon ) :: $line "
case $pref in
RJ)
2020-05-03 23:37:47 +02:00
./parle.sh "R J"
2020-05-01 15:19:51 +02:00
R = $( echo $qrvalue | cut -d '#' -f 1)
J = $( echo $qrvalue | cut -d '#' -f 2)
log " __SUB:tag_READ.sh: Lecture G1Tag $R $J "
#
ID = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_id " ) ;
if [ [ " $ID " = = "" ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh "G1 Tag déjà capturé, veuillez le détruire!" ;
2020-05-01 15:19:51 +02:00
sms_SEND " $ADMINPHONE " " ADMIN! FRAUDE G1Tag RJ $R $J "
# TODO: ENQUETER auprès du CREATEUR de ce G1 Tag !!
continue
fi
RR = $( echo $ID | sed s/\ //g)
FID = $( echo $ID | awk '{print toupper($1)}' )
RVALUE = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_amount " ) ;
CURRENCY = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_currency " | awk '{print tolower($1)}' )
if [ [ " $CURRENCY " = = "zen" ] ] ; then CUR = "zène" ; else CUR = $CURRENCY ; fi # Correction du défaut de prononciation.
PASSENGER = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_passenger " ) ;
if [ [ " $PASSENGER " != "" ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh " Rec Tag Machine $PASSENGER ! Valeur $RVALUE $CUR " ;
2020-05-01 15:19:51 +02:00
else
G1VAL = $( bc -l <<< " scale=2; $RVALUE / 100 " | cut -d '.' -f 1)
log " __SUB:tag_READ.sh: G1Tag $FID . Valeur $RVALUE $CURRENCY = $G1VAL G1 "
2020-05-03 23:37:47 +02:00
./parle.sh " G1 Tag $FID . Valeur $RVALUE $CUR convertible en $G1VAL June "
2020-05-01 15:19:51 +02:00
fi
cmd = "RJ"
CASHBACK = ""
val += ( " $RVALUE " )
; ;
BJ)
2020-05-03 23:37:47 +02:00
./parle.sh "B J"
2020-05-01 15:19:51 +02:00
BB = $( echo $qrvalue | cut -d '#' -f 1)
J = $( echo $qrvalue | cut -d '#' -f 2)
log " __SUB:tag_READ.sh: Ouverture G1Tag $BB $J "
#
ID = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_id " ) ;
FID = $( echo $ID | awk '{print toupper($1)}' )
if [ [ " $ID " = = "" ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh "G1 Tag inconnu! veuillez le détruire!" ;
2020-05-01 15:19:51 +02:00
# sms_SEND "$ADMINPHONE" "ADMIN! FRAUDE G1Tag BJ $B $J"
# TODO: ENQUETER auprès du CREATEUR de ce G1 Tag !!
continue
fi
RR = $( echo $ID | sed s/\ //g)
BVALUE = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_amount " )
CURRENCY = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_currency " | awk '{print tolower($1)}' )
if [ [ " $CURRENCY " = = "zen" ] ] ; then CUR = "zène" ; else CUR = $CURRENCY ; fi # Correction du défaut de prononciation.
PASSENGER = $( su $YOU -c " ipfs cat /ipns/ $J /TAG_passenger " ) ;
# DIG PUBLISHING KEY
if [ [ -f /home/$YOU /.ipfs/keystore/$RR ] ] ; then
log " __SUB:tag_READ.sh: Clef de publication IPFS $RR déjà présente "
else
rm /tmp/TAG_publishkey.B.gpg
su $YOU -c " ipfs get -o /tmp/ /ipns/ $J /TAG_publishkey.B.gpg "
# CHECK IF OK
gpg -d --output /tmp/ipns.key --pinentry-mode= loopback --passphrase $BB /tmp/TAG_publishkey.B.gpg
if [ [ ! -f /tmp/ipns.key ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh " Erreur. Problème de déchiffrage PGP ${ FID } ! Vérifiez vos logs " ;
2020-05-01 15:19:51 +02:00
log " __SUB:tag_READ.sh: ERROR! gpg -d --output /tmp/ipns.key --pinentry-mode=loopback --passphrase $BB /tmp/TAG_publishkey.B.gpg "
continue
fi
mv /tmp/ipns.key /home/$YOU /.ipfs/keystore/$RR
log " __SUB:tag_READ.sh: Récupération de la clef de publication $RR "
2020-05-03 23:37:47 +02:00
./parle.sh " Récupération clef de publication du G1 Tag ${ FID } "
2020-05-01 15:19:51 +02:00
fi
if [ [ " $PASSENGER " != "" ] ] ; then
log " __SUB:tag_READ.sh: !!!! REC Tag = $BVALUE $CURRENCY "
2020-05-03 23:37:47 +02:00
./parle.sh " Rec Tag Machine! Valeur $BVALUE $CUR " ;
2020-05-01 15:19:51 +02:00
else
log " __SUB:tag_READ.sh: Ce G1 Tag contient $BVALUE $CURRENCY "
2020-05-03 23:37:47 +02:00
./parle.sh " Ce G1 Tag contient $BVALUE $CUR "
2020-05-01 15:19:51 +02:00
fi
cmd = "BJ"
val += ( " $BVALUE " )
; ;
*)
if [ [ $lon -eq 44 ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh "Portefeuille G1?"
2020-05-01 15:19:51 +02:00
J = $qrvalue
if [ [ " $J " != " ${ obj [0] } " ] ] ; then
2020-05-03 23:37:47 +02:00
VALUE = $( ./timeout.sh -t 15 ./silkaj/silkaj amount $J )
2020-05-01 15:19:51 +02:00
if [ [ " $( echo $VALUE | cut -d ':' -f 1) " != "Error" && " $VALUE " != "" ] ] ; then
log " __SUB:tag_READ.sh: Ce compte monnaie libre contient $VALUE G1 "
2020-05-03 23:37:47 +02:00
./parle.sh " Ce compte monnaie libre contient $VALUE G1 "
2020-05-01 15:19:51 +02:00
CASHBACK = " $J "
cmd = "G1"
val += ( " $VALUE " )
else
log " __SUB:tag_READ.sh: ERREUR QR code illisible. longueur $J = ${# J } "
if [ [ " $VALUE " = = "" ] ] ; then
2020-05-03 23:37:47 +02:00
DUNITER = $( ./checknodes.sh 'BAN' )
2020-05-01 15:19:51 +02:00
echo " TIMEOUT. CHANGE SILKAJ SERVER: $DUNITER "
2020-05-03 23:37:47 +02:00
./parle.sh " Temps dépassé. Changement de serveur $DUNITER "
2020-05-01 15:19:51 +02:00
CASHBACK = ""
else
2020-05-03 23:37:47 +02:00
./parle.sh "QR code inconnu."
2020-05-01 15:19:51 +02:00
CASHBACK = ""
fi
fi
else
2020-05-03 23:37:47 +02:00
./parle.sh " Ce compte monnaie libre contient ${ val [0] } G1 "
2020-05-01 15:19:51 +02:00
fi
else
2020-05-03 23:37:47 +02:00
./parle.sh "QR code de type inconnu"
2020-05-01 15:19:51 +02:00
fi
; ;
esac
###############################################################
# APRES G1 CASHBACK : G1 Tag BJ WRITE => ENCAISSEMENT
if [ [ " ${ cmd } " = = "BJ" && " $CASHBACK " != "" && -f /home/$YOU /.ipfs/keystore/${ RR } ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh "Encaissement du G1 Tag"
2020-05-01 15:19:51 +02:00
log " __SUB:tag_READ.sh: G1 tag de $BVALUE G1 ! /ipns/ $J Virement vers $CASHBACK ? "
2020-05-03 23:37:47 +02:00
./parle.sh "vers portefeuille G1"
2020-05-01 15:19:51 +02:00
# ipfs get G1Tag vers ./TAG/${RR}
mkdir -p ./TAG/${ RR } ; rm -f ./TAG/${ RR } /*; chown -R $YOU ./TAG/${ RR } /
log " __SUB:tag_READ.sh: ipfs get --output=./TAG/ ${ RR } /ipns/ $J "
su $YOU -c " ipfs get --output=./TAG/ ${ RR } /ipns/ $J "
2020-05-03 23:37:47 +02:00
if [ [ $( cat ./TAG/${ RR } /TAG_passenger) != "" ] ] ; then ./parle.sh " Impossible à encaisser. REC Tag ${ FID } . $( cat ./TAG/${ RR } /TAG_passenger) de Valeur $BVALUE " ; continue ; fi
2020-05-01 15:19:51 +02:00
# Make Silkaj TX
G1VAL = $( bc -l <<< " scale=2; $BVALUE / 100 " | cut -d '.' -f 1)
log " __SUB:tag_READ.sh: Silkaj TX $SWARM_G1AUTHFILE ( $G1VAL ) -> $CASHBACK "
PAY = $( ./silkaj/silkaj transaction --auth-file -file= " $SWARM_G1AUTHFILE " --amount= $G1VAL --output= $CASHBACK --comment= " [G1sms+] CAPTURE G1Tag $RR " -y)
log " __SUB:tag_READ.sh: Silkaj output = $PAY "
if [ [ " $( echo $PAY | cut -d '|' -f 1) " = = "KO" ] ] ; then
2020-05-03 23:37:47 +02:00
new = $( ./checknodes.sh "BAN" )
2020-05-01 15:19:51 +02:00
sms_ERROR " $ADMINPHONE " " Il est survenu un problème avec un virement. Retour silkaj: $PAY ... $new " ;
2020-05-03 23:37:47 +02:00
./parle.sh "Erreur de virement. Changement de serveur Duniter. Veuillez recommencer"
2020-05-01 15:19:51 +02:00
else
# ENCAISSEMENT G1Tag
2020-05-03 23:37:47 +02:00
./parle.sh " Transfert du Tag ${ FID } de $G1VAL G1 vers portefeuille OK "
2020-05-01 15:19:51 +02:00
# CAPTURE / DESTRUCTION du G1 Tag
echo "0" > " ./TAG/ ${ RR } /TAG_amount "
echo " ${ J } " > " ./TAG/ ${ RR } /TAG_ipns "
# Iterate
if [ [ -f ./TAG/${ RR } /TAG_n ] ] ; then NN = $( cat ./TAG/${ RR } /TAG_n) ; ( ( NN++) ) ; else NN = 0; fi
# TAG_actions
echo " $NN " > " ./TAG/ ${ RR } /TAG_n "
echo " ${ NANODATE } " > " ./TAG/ ${ RR } /TAG_nanodate "
echo " ${ IPFSNODEID } " > " ./TAG/ ${ RR } /TAG_writerid "
# EMPTY G1TAG ID AND REMOVE PUBLISHKEYS
echo "" > " ./TAG/ ${ RR } /TAG_id "
rm -f ./TAG/TAG_publishkey.*
log " __SUB:tag_READ.sh: Destruction G1Tag TAG_id $NN . ${ NANODATE } (par NODE ${ IPFSNODEID } ) => Value = 0 "
I = $( su $YOU -c " ipfs add -qr ./TAG/ ${ RR } | tail -n 1 " )
# TAG_chain
echo " $I " > " ./TAG/ ${ RR } /TAG_chain "
I = $( su $YOU -c " ipfs add -qr ./TAG/ ${ RR } | tail -n 1 " )
# IPNS $RR PUBLISH
J = $( su $YOU -c " ipfs name publish -k ${ RR } --quieter /ipfs/ ${ I } " )
log " __SUB:tag_READ.sh: Destruction de ce G1 Tag publish -k ${ RR } --quieter /ipfs/ ${ I } :: ipfs ls /ipns/ $J "
2020-05-03 23:37:47 +02:00
./parle.sh " ${ FID } G1 Tag vide. Merci de détruire ce G1 Tag! "
2020-05-01 15:19:51 +02:00
# CLEAN IPFS keystore: remove NOT created NODE keys
SOURCENODEID = $( cat " ./TAG/ ${ RR } /TAG_nodeid " )
if [ [ " ${ SOURCENODEID } " != " ${ IPFSNODEID } " ] ] ; then
rm -f /home/$YOU /.ipfs/keystore/${ RR }
fi
fi
else
# AJOUT MEMOIRE SCAN
2020-05-03 23:37:47 +02:00
./parle.sh "Mémorisation"
2020-05-01 15:19:51 +02:00
act += ( " $cmd " )
obj += ( " $J " )
fi
# FLUSH MEMOIRE 2 SCAN
if [ [ ${# act [@] } -eq 2 ] ] ; then
echo " ${ act [@] } "
echo " ${ obj [@] } "
echo " ${ val [@] } "
###############################################################
# PRESENTATION RJ puis BJ différents Tag WRITE = TRANSFERT G1 TAG
if [ [ " ${ act [0] } " = = "RJ" && " ${ act [1] } " = = "BJ" && " ${ obj [0] } " != " ${ obj [1] } " ] ] ; then
PASSENGER = $( su $YOU -c " ipfs cat /ipns/ ${ obj [1] } /TAG_passenger " ) ;
if [ [ " $PASSENGER " != "" ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh "Rec Tag Machine non transférable!" ;
2020-05-01 15:19:51 +02:00
else
log " __SUB:tag_READ.sh: Transfert de G1 Tag à G1 Tag. $BVALUE $CUR "
2020-05-03 23:37:47 +02:00
./parle.sh " Transfert de ${ val [1] } $CUR vers le G1 Tag ${ FID } "
log " __SUB:tag_READ.sh: $( ./tag_OP.sh ${ obj [1] } ${ obj [0] } ${ val [1] } $SWARM_G1AUTHFILE ) "
2020-05-01 15:19:51 +02:00
fi
CASHBACK = ""
fi
###############################################################
# PRESENTATION BJ identiques TRANSFORMATION G1 TAG en REC TAG
if [ [ " ${ act [0] } " = = "BJ" && " ${ act [1] } " = = "BJ" && " ${ obj [0] } " = = " ${ obj [1] } " ] ] ; then
PASSENGER = $( su $YOU -c " ipfs cat /ipns/ ${ obj [0] } /TAG_passenger " ) ;
if [ [ " $PASSENGER " != "" ] ] ; then
2020-05-03 23:37:47 +02:00
./parle.sh "Déjà Rec Tag Machine!" ;
2020-05-01 15:19:51 +02:00
else
log " __SUB:tag_READ.sh: Transformation du G1 Tag en Rec Tag. ${ val [0] } = ${ val [1] } "
2020-05-03 23:37:47 +02:00
./parle.sh " Transformation du G1 Tag ${ val [0] } $CUR en Rec Tag chargé de ${ FID } ... "
log " __SUB:tag_READ.sh: $( ./tag_OP.sh ${ obj [0] } ${ obj [0] } 0 $SWARM_G1AUTHFILE ) "
2020-05-01 15:19:51 +02:00
fi
CASHBACK = ""
fi
act = ( )
obj = ( )
val = ( )
2020-05-03 23:37:47 +02:00
./parle.sh "Nouveau cycle de lecture."
2020-05-01 15:19:51 +02:00
fi
2020-05-03 23:37:47 +02:00
./parle.sh "Flasher un QR code"
2020-05-01 15:19:51 +02:00
done