175 lines
7.0 KiB
Bash
Executable File
175 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
################################################################################
|
|
# Author: Fred (support@qo-op.com)
|
|
# Version: 1.0
|
|
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
|
|
# RECORD RECURRENT PAYEMENTS WITH "Cesium+ ID" Pubkey TODO cron /home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS, Fusion avec sms_VIR.sh
|
|
################################################################################
|
|
MY_PATH="`dirname \"$0\"`" # relative
|
|
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
|
|
source $MY_PATH/init.sh
|
|
source $MY_PATH/functions.sh
|
|
|
|
log "__SUB:sms_REC.sh: START ($1=PHONE, $2=VIRDEST, $3=AMOUNT, $4=PERIOD, $5=TIME)"
|
|
|
|
PHONE="$1"
|
|
VIRDEST="$2"
|
|
AMOUNT=$3
|
|
PERIOD="$4"
|
|
TIME=$5
|
|
|
|
case "$PERIOD" in
|
|
J|D)
|
|
PERIOD="jour";
|
|
NEXTDATE="days";
|
|
;;
|
|
S|W)
|
|
PERIOD="semaine";
|
|
NEXTDATE="weeks";
|
|
;;
|
|
M)
|
|
PERIOD="mois";
|
|
NEXTDATE="months";
|
|
;;
|
|
A|Y)
|
|
PERIOD="année";
|
|
NEXTDATE="years";
|
|
;;
|
|
*)
|
|
sms_ERROR "$PHONE" "Erreur sur la période de votre virement! Jour, Semaine, Mois, Année? Valeur: J,S,M,A (ex: REC 10 Fred J 3)"
|
|
exit;
|
|
;;
|
|
esac
|
|
|
|
###########################################################
|
|
# Initialise PHONE, PIN, PUBKEY, UNIT
|
|
sms_INIT_ACCOUNT "$PHONE" "NOSMS"
|
|
if [[ $MEMBER == "" ]]; then MEMBER=$UIDNA; fi
|
|
###########################################################
|
|
# CHECK FOR ERRORS
|
|
if [[ $UNKNOWN == "unknown" ]]; then
|
|
sms_ERROR "$PHONE" "Porte-monnaie inconnu. Envoyez N (suivi de votre Pseudo membre) pour le créer."
|
|
exit
|
|
fi
|
|
if [[ "$MEMBER" == "" ]]; then
|
|
sms_ERROR "$PHONE" "Aucun membre associé à votre Portefeuille!? Envoyer N suivi de votre Pseudo membre pour activer les virements récurrents..."
|
|
exit
|
|
fi
|
|
|
|
###########################################################
|
|
# CALCULATE if wallet have enough for VIR+PERCENT
|
|
AMOUNT=$(bc -l <<< "$3 * $TIME")
|
|
accounting=($(make_accounting))
|
|
log "__SUB:sms_REC.sh: $(declare -p accounting)"
|
|
testmin=${accounting[0]}
|
|
VIR=$(bc -l <<< "scale=2; ${accounting[1]} / $TIME")
|
|
PERCENT=${accounting[2]}
|
|
CHARGE=${accounting[3]}
|
|
if [[ $testmin -eq 0 ]]; then
|
|
sms_ERROR "$PHONE" "Votre Porte-monnaie G1sms doit comporter un solde suffisant! Au minimum $CHARGE G1! Rechargez par Cesium (ou contactez https://g1sms.fr)."
|
|
exit
|
|
fi
|
|
|
|
###########################################################
|
|
# TODO Unify REC and VIR
|
|
# FIND VIRDEST into wallets, wallest-swarm OR duniter (silkaj)
|
|
if [[ "$VIRDEST" == "" || "$VIRDEST" == "$MEMBER" ]]; then
|
|
# VIR TO MEMBER PHONE OWNER
|
|
DESTMEM="$MEMBER"
|
|
DESTRIB="$MEMRIB"
|
|
log "__SUB:sms_VIR.sh: SEND TO MEMBER related wallet!!! $DESTRIB "
|
|
else
|
|
log "__SUB:sms_VIR.sh: SEARCH $VIRDEST related wallet!!! $DESTRIB "
|
|
DESTMEM="$VIRDEST"
|
|
# SEARCH IN WALLETS
|
|
LOCAL=$(grep -Rwl "$DESTMEM" /home/$YOU/.zen/g1sms_wallets/*/_uidname | tail -n 1 | cut -f 6 -d '/')
|
|
if [[ "$LOCAL" == "" ]]; then LOCAL=$(grep -Rwl "$DESTMEM" /home/$YOU/.zen/g1sms_wallets/*/_uidna | tail -n 1 | cut -f 6 -d '/'); fi
|
|
if [[ "$LOCAL" != "" ]]; then
|
|
# LOCAL G1sms account
|
|
DESTRIB=$(cat /home/$YOU/.zen/g1sms_wallets/$LOCAL/_pub)
|
|
DESTPHONE=$LOCAL
|
|
log "__SUB:sms_VIR.sh: FOUND LOCAL ($MASTERPHONE) G1sms+ wallet: $DESTRIB ($LOCAL)"
|
|
else
|
|
|
|
##################### REWRITE TODO
|
|
# SEARCH IN WALLETS SWARM (MEMBER THEN UIDNA)
|
|
# INSWARM=$(grep -Rwl "$DESTMEM" /home/$YOU/.zen/g1sms_wallets_swarm/*/*.uidname | tail -n 1 | cut -f 6 -d '/')
|
|
# if [[ "$INSWARM" == "" ]]; then INSWARM=$(grep -Rwl "$DESTMEM" /home/$YOU/.zen/g1sms_wallets_swarm/*/*.uidna | tail -n 1 | cut -f 6 -d '/'); fi
|
|
# if [[ "$INSWARM" != "" ]]; then
|
|
# REMOTENODE=$(cat /home/$YOU/.zen/g1sms_wallets_swarm/$INSWARM/MASTERPHONE.sms)
|
|
# DESTRIB=$(cat /home/$YOU/.zen/g1sms_wallets_swarm/$INSWARM/$INSWARM.pub)
|
|
# DESTPHONE=$INSWARM
|
|
# log "__SUB:sms_VIR.sh: FOUND SWARM ($REMOTENODE) G1sms+ wallet: $DESTRIB ($INSWARM)"
|
|
# else
|
|
##################### REWRITE TODO
|
|
# SEARCH WITH SILKAJ
|
|
DESTRIB=$(silkaj id "$DESTMEM" | grep -w "$DESTMEM" | awk '{print $2}')
|
|
log "__SUB:sms_VIR.sh: OUT OFF SWARM MEMBER wallet: $DESTRIB"
|
|
# fi
|
|
fi
|
|
fi
|
|
|
|
# ADD DATES TO VIREMENTS
|
|
if [[ "$DESTRIB" != "" ]]; then
|
|
duniter_server=$($MY_PATH/tools/duniter_getnode.sh)
|
|
log "__SUB:sms_REC.sh: TRAITEMENT DU VIREMENT DE $AMOUNT $UNIT = 1ER VIREMENT de $VIR G1 vers $VIRDEST ($DESTRIB) $TIME FOIS. OK..."
|
|
PAY=$(silkaj -p "$duniter_server" -af --file /home/$YOU/.zen/g1sms_wallets/$PHONE/secret.dunikey tx --output "$DESTRIB" --amount "$VIR" --comment "[G1sms+] REC 1/$TIME ($PERIOD)" -y)
|
|
if [[ "$(echo $PAY | grep 'successful')" == "" || "$PAY" == "" ]]; then
|
|
sms_ERROR "$PHONE" "Problème de payement $PAY";
|
|
log "__SUB:sms_REC.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
|
exit 1
|
|
fi
|
|
log "__SUB:sms_REC.sh: UPDATE /home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS with FUTURE PAYEMENTS? $PAY"
|
|
|
|
########### MAKE /home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS for NEXT ONES
|
|
if [[ -f "/home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS.gpg" ]]; then
|
|
# DECYPHER FILE FOR CHANGE
|
|
echo "${IPFSPrivKey}" | gpg -d -q --output "/home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS" --yes --pinentry-mode loopback --passphrase-fd 0 "/home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS.gpg"
|
|
fi
|
|
# WRITE NEW LINES INTO AN ARRAY FILE: VIREMENTS
|
|
boucle=$((TIME - 1))
|
|
num=0
|
|
while [[ boucle -gt 0 ]]; do
|
|
$((boucle --))
|
|
$((num ++))
|
|
NEXT=$(date --date="$num $NEXTDATE" '+%Y%m%d')
|
|
# ADD NEW LINE IN VIREMENTS
|
|
echo "$NEXT $MEMBER $PHONE $VIR $DESTRIB $DESTMEM $MEMBER#$TIME#$AMOUNT#$DESTMEM $boucle " >> /home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS
|
|
|
|
done
|
|
# CYPHER FILE
|
|
echo "${IPFSPrivKey}" | gpg -q --output "/home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS.gpg" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "/home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS"
|
|
# EMPTY CLEAR FILE
|
|
log "__SUB:sms_REC.sh: $(cat /home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS)"
|
|
echo "" > /home/$YOU/.zen/g1sms_wallets/$PHONE/VIREMENTS
|
|
###########
|
|
|
|
log "__SUB:sms_REC.sh: .....................................OK!!!"
|
|
|
|
# SEND ACK SMS
|
|
log "__SUB:sms_REC.sh: VIREMENTS RECURRENTS $MEMBER#$TIME#$AMOUNT#$DESTMEM => $VIR G1 pour $DESTMEM (pendant $TIME $PERIOD) + AJOUT"
|
|
mess="[G1sms+]
|
|
Virement de $VIR G1 pour $DESTMEM (pendant $TIME $PERIOD)
|
|
Total: $AMOUNT $UNIT
|
|
|
|
$MEMBER#$TIME#$AMOUNT#$DESTMEM
|
|
$DESTRIB"
|
|
|
|
sms_SEND "$PHONE" "$mess"
|
|
|
|
# Send DESTPHONE sms
|
|
if [[ "$DESTPHONE" != "" ]]; then
|
|
sms_SEND "$DESTPHONE" "[G1sms+] Bonjour $DESTMEM. Vous recev(r)ez un payement de $VIR G1 (pendant $TIME $PERIOD) de la part du portefeuille: $MEMBER $UIDNA."
|
|
fi
|
|
|
|
[[ -d /home/$YOU/.zen/g1sms_wallets/$PHONE ]] && [[ $(whoami) == "root" ]] && chown -R $YOU /home/$YOU/.zen/g1sms_wallets/$PHONE
|
|
|
|
else
|
|
log "__SUB:sms_REC.sh: ERROR $MEMBER: $DESTMEM DESTRIB NOT FOUND"
|
|
mess="[G1sms+] Virement annulé...
|
|
Destinataire: $DESTMEM inconnu! Vérifiez son existence."
|
|
sms_SEND "$PHONE" "$mess"
|
|
fi
|
|
|
|
log "__SUB:sms_REC.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|