Commit d7f0ef79 authored by matograine's avatar matograine
Browse files

Merge branch 'silkaj8' into 'master'

Silkaj8

See merge request !9
parents 4e8a61df 02529d00
config.sh
auth_g1cotis/
d_hebdomadaire/
d_mensuel/
d_quotidien/
d_reboot/
logs/
......@@ -24,38 +24,33 @@ Vous trouverez (un peu) plus d'informations sur [le site](g1pourboire.fr/G1cotis
Il vous faut tout d'abord installer les dépendances :
Silkaj : version spécifique à G1Cotis, en attendant la 0.8 officielle.
Diceware
bc
* Sous Debian Buster ou Ubuntu 19.X GNU/Linux:
`# apt update ; apt upgrade ; apt install diceware bc pipenv libsodium23`
`# wget https://git.duniter.org/matograine/silkaj/-/archive/g1cotis-multioutput/silkaj-g1cotis-multioutput.tar.gz`
`# tar -xf silkaj-g1cotis-multioutput.tar.gz`
`# cd silkaj-g1cotis-multioutput`
`# pipenv install "-e ."`
* Sous Debian Stretch : voir [ce post](https://blog.jytou.fr/2018/06/02/installing-a-working-python-environment-and-silkaj-on-a-raspberry-pi-3-with-raspbian-jessie/) pour pour installer Silkaj en pipenv. Puis :
`# apt install diceware bc`
* Sous Debian 11 ou Ubuntu 21.04 GNU/Linux:
`# apt update ; apt upgrade ; apt install diceware bc silkaj`
* Sous d'autres distributions : je ne sais pas, indiquez-moi comment vous faites ! Voici [le site de Silkaj](https://silkaj.duniter.org/index.html)
* vérifiez que vous avez bien la version 0.8 ou 0.9:
`$ silkaj --version`
Ensuite :
* Placez-vous dans le /home de l'utilisateur qui va lancer Ğ1cotis, connecté comme cet utilisateur.
* Télécharger la dernière release (0.3.1) en .tar.gz :
`$ wget https://git.duniter.org/matograine/g1-cotis/-/archive/0.3.1/g1-cotis-0.3.1.tar.gz`
`$ wget https://git.duniter.org/matograine/g1-cotis/-/archive/master/g1-cotis-master.zip`
* La déziper où vous le souhaitez :
`$ tar -xf g1-cotis-0.3.1.tar.gz`
`$ tar -xf g1-cotis-master.tar.gz`
* Renommer (si vous le souhaitez) :
`$ mv g1-cotis-0.3.1 G1cotis`
`$ mv g1-cotis-master G1cotis`
* Rendez ce dossier inaccessible pour les autres utilisateurs :
`$ chmod 700 G1cotis`
* Vous placer dans le dossier :
`$ cd G1cotis`
* Editer le fichier config.sh en fonction des paramètres locaux (dossier, noeud, monnaie, dossier **silkaj-g1cotis-multioutput**) :
`$ nano config.sh`
* Créer le premier compte :
`$ cp config.sh.example config.sh ; nano config.sh`
* Créer le premier compte (vous devez être dans le dossier G1cotis):
`$ bash nouveau-compte.sh`
* Modifiez le crontab en suivant les recommandations du script :
`$ crontab -e `
......@@ -64,6 +59,25 @@ Tous les dossiers nécessaires seront créés à la première création de compt
Pour une mise à jour, déplacez simplement les dossiers d_\<periode\> ; auth_g1cotis et le config.sh de l'ancien dossier vers le nouveau.
## Mise à jour depuis la version 3.1
```
# faites une sauvegarde
cp G1cotis G1cotis.OLD
# mettez à jour Silkaj
sudo apt upgrade silkaj
# Ou installez-le
sudo apt install silkaj
silkaj --version # doit indiquer la version 0.8 ou 0.9
# Installez la version courante
wget https://git.duniter.org/matograine/g1-cotis/-/archive/master/g1-cotis-master.tar.gz
tar -xf g1-cotis-master.tar.gz
# déplacez les fichiers modifiés
cp -r g1-cotis-master/* G1cotis/
```
## Configuration
Des questions vous seront posées à l'éxécution de `bash nouveau-compte.sh`, il vous suffit d'y répondre.
......@@ -105,10 +119,8 @@ NB : le service de virement récurrent ne gère pas d'alerte courriel si le comp
D'autre part, il ne peut pas être lancé comme script fonctionnant au reboot, il tourne forcément sur un serveur.
Je ne proposerai pas de service ouvert, cependant j'invite qui le souhaite à proposer ce service à ses connaissances. Si vous le faites, j'aurais plaisir à le savoir ;-)
Je n'ai pas les compétences pour créer une interface web, mais elle me semble un ajout utile. Si un.e dev veut faire un fork, soyez lae bienvenu.e !
### Licence CECILL ###
Cet ensemble de scripts est publié sous licence CECILL 2.1, compatible avec la licence GNU.
Aucune garantie n'est apportée : c'est le premier code que je publie, et je code comme un ~~cochon~~ autodidacte débutant.
Aucune garantie n'est apportée.
......@@ -7,19 +7,17 @@ export PATH=$PATH:/usr/local/bin # utile pour l'utiliser en tâche CRON.
#### Paramètres de l'instance G1Cotis ####
# Dossier G1Cotis (indiquer le chemin complet)
# !! Ne mettez pas de / à la fin !! exemple : /home/toto/G1cotis
dossier=/home/UTILISATEUR/G1cotis
dossier=/home/USER/G1cotis
#### Paramètres Silkaj ####
## Choisir le noeud Duniter sur lequel vous vous connectez (de préférence un noeud régional, ou personnel, différent de g1.duniter.org)
noeud="g1.librelois.fr:443 #"g1.presles.be:443" "g1.duniter.org:443"
noeud="duniter.adn.life" #"g1.duniter.org:443"
## monnaie (Ğ1 ou ĞTest). Si vous travaillez sur la ĞTest, il vous faudra aussi modifier le noeud.
monnaie=Ğ1
##monnaie=ĞTest
#monnaie=ĞTest
## Si vous avez installé Silkaj en environnement virtuel :
## Chemin vers le dossier contenant Silkaj :
cd /home/UTILISATEUR/silkaj-g1cotis-multioutput
silkaj="pipenv run silkaj"
########################
......@@ -40,3 +38,31 @@ dossier_hebdo=$dossier/d_hebdomadaire
dossier_mens=$dossier/d_mensuel
dossier_reboot=$dossier/d_reboot
###################
## Vérifications ##
###################
if ! command -v diceware &> /dev/null ; then
echo "Erreur : diceware ne semble pas installé."
exit
fi
if ! command -v bc &> /dev/null ; then
echo "Erreur : bc ne semble pas installé."
exit
fi
if ! command -v silkaj &> /dev/null ; then
echo "Erreur : silkaj ne semble pas installé."
exit
fi
if silkaj --version | grep 8 &> /dev/null ; then
ep="-p"
elif silkaj --version | grep 9 &> /dev/null ; then
ep="-ep"
fi
......@@ -16,7 +16,7 @@ done
adr_verif ()
{
echo "Vérification de l'adresse..."
$silkaj -p $noeud balance "$1" | grep Total > /dev/null
silkaj $ep $noeud balance "$1" | grep Total > /dev/null
return $?
}
......
......@@ -7,7 +7,6 @@
## envoie le reste au compte destinataire définitif.
## Il se lance depuis init_g1cotis.sh.
## Ce script prévoit la gestion d'une liste de commentaires dans le fichier du compte, de forme "lst_com=( com_1 com_2 ... )" SANS ACCENT, APOSTROPHE, etc...
## La configuration de cette liste se fait directement dans le fichier.
......@@ -17,8 +16,7 @@ auth=$dossier_auth/$recept.auth # fichier d'authentification du compte intermé
#### Log ####
echo "===================="
echo "compte $compte"
echo "clef $recept"
echo "compte $compte : $recept"
####### Début du script #######
......@@ -47,7 +45,7 @@ fi
## Réserve
## Montant
while true ; do
montant=$($silkaj -p $noeud balance $recept | grep "Total Quantitative" | cut -d'=' -f2 | cut -d' ' -f2- | sed -e "s/ $monnaie//g" | bc )
montant=$(silkaj $ep $noeud balance $recept | grep "Total amount (unit|relative)" | sed -e "s/│ Total amount (unit|relative)\s*│//g" | sed -e "s/$monnaie.*$//" | bc)
if [ "$?" == "0" ] ; then
break
else
......@@ -66,31 +64,37 @@ elif [ $montant_round -lt $min ] ; then # S'il n'y a pas assez de monnai
elif [ $montant_round -ge $min ] ; then
echo "montant : " $montant $monnaie
## Création de la liste d'outputs
output=${lst_tx[0]}
## Création de la liste de récipiendaires
recipients="-r ${lst_tx[0]}"
a=1
while [ $a -lt ${#lst_tx[@]} ] ; do
output=$output:${lst_tx[$a]}
recipients="$recipients -r ${lst_tx[$a]}"
a=$((a+1))
done
output=$output:$fin
recipients="$recipients -r $fin"
## Création de la liste de montants
amount=$(echo "$montant * ${lst_p[0]} * 0.01 " | bc )
restant=$(echo "$montant - $amount" | bc)
first_amount=$(echo "$montant * ${lst_p[0]} * 0.01 " | bc )
amount="-a $first_amount"
restant=$(echo "$montant - $first_amount" | bc)
a=1
while [ $a -lt ${#lst_p[@]} ] ; do
p=${lst_p[$a]}
cot=$(echo "$montant * $p * 0.01 " | bc )
amount=$amount:$cot
amount="$amount -a $cot"
restant=$(echo "$restant - $cot" | bc )
a=$((a+1))
done
amount=$amount:$restant
amount="$amount -a $restant"
## Commentaire
if [[ $comment == "" ]] ; then
comment="G1Cotis"
fi
## envoi transaction
$silkaj -p $noeud -af --file $auth tx -y --output=$output --amount="$amount" --comment="$comment"
silkaj $ep $noeud -af --file $auth tx -y $recipients $amount -c $comment
## fin du script
fi
......@@ -104,4 +108,5 @@ lst_tx=""
lst_p=""
comment=""
amount=""
recipients=""
......@@ -12,8 +12,7 @@
auth=$dossier_auth/$recept.auth # fichier d'authentification du compte intermédiaire, de forme <CLEF_PUB>.auth
echo "===================="
echo "compte $compte"
echo "clef $recept"
echo "compte $compte : $recept"
####### Début du script #######
......@@ -32,7 +31,7 @@ fi
## Montant
while true ; do
montant=$($silkaj -p $noeud balance $recept | grep "Total Quantitative" | cut -d'=' -f2 | cut -d' ' -f2- | sed -e "s/ $monnaie//g" | bc )
montant=$(silkaj $ep $noeud balance $recept | grep "Total amount (unit|relative)" | sed -e "s/│ Total amount (unit|relative)\s*│//g" | sed -e "s/$monnaie.*$//" | bc)
if [ "$?" == "0" ] ; then
break
else
......@@ -56,7 +55,7 @@ elif [ $(echo "100 * $montant_round" | bc) -ge $(echo "100 * $virt_recur" | bc)
## Envoi du virement : 5 tentatives
a=0
while [ $a -le 5 ] ; do
$silkaj -p $noeud -af --file $auth tx -y --output="$fin" --amount="$virt_recur" --comment="$com"
silkaj $ep $noeud -af --file $auth tx -y -r "$fin" -a "$virt_recur" -c "$com"
if [ $? == 0 ] ; then
echo "virement effectué" ; break
elif [ $a -eq 5 ] ; then
......
......@@ -58,7 +58,7 @@ echo -n "Connaissez-vous déjà les identifiants pour ce compte ? (o/N) : "
read ouinon
if [ "$ouinon" == "o" ] || [ "$ouinon" == "O" ] ; then
printf "\nNous allons créer le fichier d'authentification pour ce compte. Soyez sûr.e de vous rappeler des identifiants, Ğ1Cotis ne les enregistrera pas.\nEntrez les identifiants lorsque Silkaj vous le demandera.\n\nEn attente de Silkaj...\n\n"
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
rm -f ./authfile ; silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "\nClef publique : $pubkey pour le compte $nom. Est-ce juste ? (o/N) : "
read ouinon
......@@ -76,7 +76,7 @@ read ouinon
mdp=$(diceware -d - --no-caps)
printf "\nNous vous proposons un identifiant secret et un mot de passe, basés sur Diceware. \nEcrivez-les (copier-coller) quand Silkaj vous les demandera.\nRappel : <Ctrl+Maj+C> et <Ctrl+Maj+V> pour copier-coller dans le terminal.\nSoyez sûr.e de vous en rappeler, Ğ1Cotis ne les enregistrera pas. \n\nID (à copier-coller)= $id\nMDP (à copier-coller)= $mdp\n\nEn attente de Silkaj...\n\n"
rappel=yes
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
rm -f ./authfile ; silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "recept=$pubkey\n" >> $fichier
mv ./authfile $dossier_auth/$pubkey.auth
......
......@@ -56,7 +56,7 @@ echo -n "Connaissez-vous déjà les identifiants pour ce compte ? (o/N) : "
read ouinon
if [ "$ouinon" == "o" ] || [ "$ouinon" == "O" ] ; then
printf "\nNous allons créer le fichier d'authentification pour ce compte. Soyez sûr.e de vous rappeler des identifiants, Ğ1Cotis ne les enregistrera pas.\nEntrez les identifiants lorsque Silkaj vous le demandera.\n\nEn attente de Silkaj ...\n\n"
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
rm -f ./authfile ; silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "\nClef publique : $pubkey pour le compte $nom. Est-ce juste ? (o/N) : "
read ouinon
......@@ -74,7 +74,7 @@ read ouinon
mdp=$(diceware -d - --no-caps)
printf "\nNous vous proposons un identifiant secret et un mot de passe, basés sur Diceware. \nEcrivez-les (copier-coller) quand Silkaj vous les demandera.\nRappel : <Ctrl+Maj+C> et <Ctrl+Maj+V> pour copier-coller dans le terminal.\nSoyez sûr.e de vous en rappeler, Ğ1Cotis ne les enregistrera pas. \n\nID (à copier-coller)= $id\nMDP (à copier-coller)= $mdp\n\nEn attente de Silkaj ... \n\n"
rappel=yes
rm -f ./authfile ; $silkaj authfile > /tmp/$nom
rm -f ./authfile ; silkaj authfile > /tmp/$nom
pubkey=$(cat /tmp/$nom | grep "Authentication file 'authfile' generated and stored in current folder for following public key:" | cut -d':' -f2 | sed 's/.\{1\}//' ) #| cut -d' ' -f2- | sed -e 's/ $monnaie//g' )
printf "recept=$pubkey\n" >> $fichier
mv ./authfile $dossier_auth/$pubkey.auth
......@@ -100,7 +100,7 @@ done
printf "## Adresse du compte destinataire :\nfin=$fin\n\n" >> $fichier
printf "\n##################################################\n#### Configuration du montant ####\n################################################## \n\n"
printf "\n##################################\n#### Configuration du montant ####\n################################# \n\n"
while true ; do
printf "Quel montant voulez-vous verser ? : "
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment