From 37d5b86253d487cde7b586790fb32e065a92973c Mon Sep 17 00:00:00 2001 From: fred Date: Tue, 6 Dec 2022 22:16:21 +0100 Subject: [PATCH] G1BILLET version "astro" - http service - http://g1billet.localhost:33101 --- G1BILLETS.sh | 132 +++++++++++++++++++++++++++++++++++++++-------- MAKE_G1BILLET.sh | 7 ++- README.md | 38 +++++++++++--- 3 files changed, 146 insertions(+), 31 deletions(-) diff --git a/G1BILLETS.sh b/G1BILLETS.sh index 42e6b19..268f72d 100755 --- a/G1BILLETS.sh +++ b/G1BILLETS.sh @@ -1,20 +1,27 @@ #!/bin/bash ################################################################################ # Author: Fred (support@qo-op.com) -# Version: 0.1 +# Version: 1.0 # 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 ME="${0##*/}" + ################################################################################ -# Create and print 6 G1Billets de $MONTANT DU -# ${MY_PATH}/G1BILLETS.sh 5 986397643 ticket +# Create different king of G1BILLET(s) with $MONTANT DU or TW IPNS +# ${MY_PATH}/G1BILLETS.sh 5 986397643 ticket # MONTANT # UNIQID # STYLE # ################################################################################ MONTANT="$1" +[[ $MONTANT == "0" ]] && MONTANT="" + +### COMMAND MODE ### +if [[ $MONTANT != "daemon" ]]; then + [[ $MONTANT == "" ]] && MONTANT="___" UNIQID="$2" +[[ $UNIQID == "0" ]] && UNIQID="" [[ $UNIQID == "" ]] && UNIQID=$(${MY_PATH}/diceware.sh 1 | xargs)${RANDOM:0:2}$(${MY_PATH}/diceware.sh 1 | xargs) STYLE="$3" @@ -26,55 +33,57 @@ STYLE="$3" STYLE="astro" fi -## PLANCHE DE 6 BILLETS PAR DEFAUT +## PLANCHE PDF DE 6 BILLETS PAR DEFAUT NBbillets=6 - -[[ "$STYLE" == "xbian" ]] && NBbillets=1 ## STYLE=xbian => 1 BILLET -[[ "$STYLE" == "1" ]] && NBbillets=1 && STYLE="" ## 1 BILLET PDF -[[ "$STYLE" == "ticket" ]] && NBbillets=1 && echo "TICKET" ## 1 BILLET JPG -[[ "$STYLE" == "astro" ]] && NBbillets=1 - +[[ "${STYLE}" == "ticket" || "${STYLE}" == "xbian" || "${STYLE}" == "astro" ]] && NBbillets=1 # CHECK IF $STYLE IMAGES EXIST [[ ! -f ${MY_PATH}/images/fond${STYLE}.jpg ]] && echo "missing fond${STYLE}.jpg" && exit 1 [[ ! -f ${MY_PATH}/images/g1${STYLE}.png ]] && echo "missing g1${STYLE}.jpg" && exit 1 [[ ! -f ${MY_PATH}/images/logo${STYLE}.png ]] && echo "missing logo${STYLE}.jpg" && exit 1 -mkdir -p "${MY_PATH}/tmp/g1billet/${UNIQID}" - # CREATION DE $NBbillets BILLETS DE $MONTANT DU boucle=0; while [ $boucle -lt $NBbillets ] do boucle=$((boucle+1)) + mkdir -p "${MY_PATH}/tmp/g1billet/${UNIQID}" NUMBER=$(${MY_PATH}/diceware.sh 4 | xargs) + UN=$(echo ${NUMBER} | jq -Rr @uri) SECRET=$(${MY_PATH}/diceware.sh 4 | xargs) + DE=$(echo ${SECRET} | jq -Rr @uri) # CREATION CLEF BILLET BILLETPUBKEY=$(python3 ${MY_PATH}/key_create_dunikey.py "$NUMBER" "$SECRET") - rm -f ${MY_PATH}/tmp/secret.dunikey + rm -f /tmp/secret.dunikey + ## ASTRO : FIND TW ADDRESS + EMAIL = CREATE PLAYER on 1234 API [[ "$STYLE" == "astro" ]] \ - && ${MY_PATH}/keygen -t ipfs -o ${MY_PATH}/tmp/g1billet/${UNIQID}.ipns.key "$NUMBER" "$SECRET" \ - && ASTRONAUTENS=$(ipfs key import ${UNIQID} -f pem-pkcs8-cleartext ${MY_PATH}/tmp/g1billet/${UNIQID}.ipns.key) \ - && rm -f ${MY_PATH}/tmp/g1billet/${UNIQID}.ipns.key \ - && ipfs key rm ${UNIQID} > /dev/null &2>1 \ - && [[ $EMAIL ]] && curl -s "https://astroport.copylaradio.com/?salt=$NUMBER$pepper=$SECRET&g1pub=on&email=$EMAIL" + && ${MY_PATH}/keygen -t ipfs -o ${MY_PATH}/tmp/g1billet.${UNIQID}.ipns.key "$NUMBER" "$SECRET" \ + && ASTRONAUTENS=$(ipfs key import ${UNIQID} -f pem-pkcs8-cleartext ${MY_PATH}/tmp/g1billet.${UNIQID}.ipns.key) \ + && rm -f ${MY_PATH}/tmp/g1billet.${UNIQID}.ipns.key \ + && ipfs key rm ${UNIQID} && echo "/ipns/$ASTRONAUTENS" \ + && [[ ${EMAIL} ]] && echo 'curl -s "https://astroport.copylaradio.com/?salt='$UN'&pepper='$DE'&g1pub=on&email='$EMAIL'"' - # CREATION FICHIER IMAGE BILLET - $(${MY_PATH}/MAKE_G1BILLET.sh "${NUMBER}" "${SECRET}" "${MONTANT}" "${BILLETPUBKEY}" "${UNIQID}" "${STYLE}" "${ASTRONAUTENS}") + # CREATION FICHIER IMAGE BILLET dans ${MY_PATH}/tmp/g1billet/${UNIQID} + $(${MY_PATH}/MAKE_G1BILLET.sh "${NUMBER}" "${SECRET}" "${MONTANT}" "${BILLETPUBKEY}" "${UNIQID}" "${STYLE}" "${ASTRONAUTENS}" "${EMAIL}") done if [[ "${STYLE}" == "ticket" || "${STYLE}" == "xbian" || "${STYLE}" == "astro" ]] then + + # ONE FILE ONLY cp ${MY_PATH}/tmp/g1billet/${UNIQID}/*.jpg ${MY_PATH}/tmp/g1billet/${UNIQID}.jpg # CLEANING TEMP FILES rm -Rf ${MY_PATH}/tmp/g1billet/${UNIQID} # ALLOWS ANY USER TO DELETE chmod 777 ${MY_PATH}/tmp/g1billet/${UNIQID}.jpg + export ZFILE="${MY_PATH}/tmp/g1billet/${UNIQID}.jpg" + else + # MONTAGE DES IMAGES DES BILLETS VERS ${MY_PATH}/tmp/g1billet/${UNIQID}.pdf montage ${MY_PATH}/tmp/g1billet/${UNIQID}/*.jpg -tile 2x3 -geometry 964x459 ${MY_PATH}/tmp/g1billet/${UNIQID}.pdf # NB!! if "not autorized" then edit /etc/ImageMagick-6/policy.xml and comment @@ -83,7 +92,88 @@ else rm -Rf ${MY_PATH}/tmp/g1billet/${UNIQID} # ALLOWS ANY USER TO DELETE chmod 777 ${MY_PATH}/tmp/g1billet/${UNIQID}.pdf + export ZFILE="${MY_PATH}/tmp/g1billet/${UNIQID}.pdf" + fi +### LAST LINE INFORM DAEMON +echo "$ZFILE" -exit +else +################################################################################ +## MAKE IT A NETWORK MICRO SERVICE -- PORTS : INPUT=33101 OUTPUT=33102 +############## DEAMON MODE ### +##################################################################### +HTTPWELLCOME='HTTP/1.1 200 OK +Server: Astroport +Content-Type: text/html; charset=UTF-8 + + + [Astroport] G1BILLET MICRO SERVICE - 33101 - 33102 - + + +

(♥‿‿♥).

+ ' + +function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +while true; do + echo "==================================================" + echo "$ME DAEMON MODE http://g1billet.localhost:33101/?m=0&u=0&type=astro@yopmail.com" + REQ=$(echo "$HTTPWELLCOME" | nc -l -p 33101 -q 1) ## # WAIT FOR 33101 PORT CONTACT + + URL=$(echo "$REQ" | grep '^GET' | cut -d ' ' -f2 | cut -d '?' -f2) ### CONTACT URL #### + HOSTP=$(echo "$REQ" | grep '^Host:' | cut -d ' ' -f2 | cut -d '?' -f2) + HOST=$(echo "$HOSTP" | cut -d ':' -f 1) + + echo "==================================================" + echo "$HOSTP" + echo "==================================================" + echo "GET RECEPTION : $URL" + arr=(${URL//[=&]/ }) + # PARAM (x 3) EXTRACT "¶m=value" + ONE=$(urldecode ${arr[0]} | xargs); TWO=$(urldecode ${arr[2]} | xargs); THREE=$(urldecode ${arr[4]} | xargs); + MONTANT=$(urldecode ${arr[1]} | xargs); UNIQID=$(urldecode ${arr[3]} | xargs); STYLE=$(urldecode ${arr[5]} | xargs); + echo "DECODED : $ONE=$MONTANT & $TWO=$UNIQID & $THREE=$STYLE" + + echo ${MY_PATH}/${ME} '"'$MONTANT'"' '"'$UNIQID'"' '"'$STYLE'"' + # EXECUTE COMMAND + LOG=$(${MY_PATH}/${ME} "$MONTANT" "$UNIQID" "$STYLE") + IPNS=$(echo "$LOG" | grep '/ipns/') + echo "IPNS : $IPNS" + CURL=$(echo "$LOG" | grep -w curl) + echo "CURL : $CURL" + ZFILE=$(echo "$LOG" | tail -n 1) + +# FIND JPG or PDF +FILE_NAME="$(basename "${ZFILE}")" +EXT="${FILE_NAME##*.}" +BSIZE=$(du -b "${ZFILE}" | awk '{print $1}' | tail -n 1) + +# SEND BACK TO HTTP 33102 +echo 'HTTP/1.1 200 OK +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +Access-Control-Allow-Methods: GET +Server: Astroport +Cache-Control: public +Content-Transfer-Encoding: Binary +Content-Length:'${BSIZE}' +Content-Disposition: attachment; filename='${FILE_NAME}' +' > ${MY_PATH}/tmp/http.33102 + +cat ${ZFILE} >> ${MY_PATH}/tmp/http.33102 + +echo "GET IT : http://g1billet.localhost:33102" +cat ${MY_PATH}/tmp/http.33102 | nc -l -p 33102 -q 1 > /dev/null 2>&1 +echo "SERVED" + +rm -f "${ZFILE}" +rm -f "${MY_PATH}/tmp/http.33102" + +done + + +fi + +exit 0 diff --git a/MAKE_G1BILLET.sh b/MAKE_G1BILLET.sh index cc3ad39..e920eff 100755 --- a/MAKE_G1BILLET.sh +++ b/MAKE_G1BILLET.sh @@ -19,7 +19,10 @@ MONTANT="$3" NOTERIB="$4" UNIQID="$5" STYLE="$6" +## ASTRO TW MODE ASTRONAUTENS="$7" +EMAIL="$8" +[[ ! $EMAIL ]] && EMAIL="________@____________" if [[ "$NUMERO" == "" || "$SECRET" == "" || "$MONTANT" == "" || "$NOTERIB" == "" || "$UNIQID" == "" ]] then @@ -79,8 +82,8 @@ composite -compose Over -gravity NorthEast -geometry +50+25 -dissolve 90% "${MY if [[ "${STYLE}" == "xbian" || "${STYLE}" == "jeu" || "${STYLE}" == "astro" ]] then # CREATE PSEUDO for Gchange.fr - XZUID="________@____________" - BOTTOM="ACTIVER TW : https://astroport.copylaradio.com" + XZUID="$EMAIL" + BOTTOM="REBOOT : https://astroport.copylaradio.com" else XZUID="G1 BILLET" BOTTOM="Porte Monnaie Libre!! https://gchange.fr https://cesium.app" diff --git a/README.md b/README.md index dd796c8..18d3315 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # G1BILLET ## Présentation -Ce code est un générateur de G1BILLETS +Ce code est un générateur de G1BILLETS qui utilise dunitey.py keygen imagemagik -Il lance la fabrication de six "G1 Portefeuilles" vides à remplir soi-même ! -Les G1Billets sont assemblés dans un fichier PDF pour les imprimer facilement sur une imprimante A4 +Il lance la fabrication de "G1 Portefeuilles" vides à remplir soi-même ! +Les G1Billets sont assemblés dans un fichier PDF pour les imprimer facilement sur une imprimante A4 et vous en servir comme chéquier. Avant de vous en servir, utilisez Cesium pour flasher le QR Code et effectuer le virement correspondant à son montant sur chaque portefeuille. -Ensuite, offrez ces G1 Billets à qui vous voulez. +Ensuite, offrez ces G1Billets à qui vous voulez. -Son détenteur peut alors utiliser l'identifiant/mot de passe pour accéder au portefeuille correspondant. +Son détenteur peut alors utiliser l'identifiant/mot de passe pour contrôler la clef du portefeuille correspondant. * [DISCUSSION/FAQ/DETAILS](https://forum.monnaie-libre.fr/t/nouveau-g1-billets/14529?u=qoop) * [DEMO EN VIDEO](./G1BILLETS.mp4) @@ -27,10 +27,32 @@ NomFichier="nom_unique_du_pdf" # Correspond au nom du fichier créé dans /tmp/g Pour personnaliser vos G1Billets, modifiez les images dans le répertoire du même nom (en conservant les dimensions) La fabrication de la planche de G1Billets depuis un site web est possible en mettant le code dans un répertoire servi par un serveur web qui gère PHP... +## LANCEMENT MICRO HTTP SERVICE (SANS SERVEUR WEB) + +``` +./G1BILLETS.sh daemon +``` + +Une fois lancé de cette façon, G1BILLET se commande depuis un navigateur + +> Essayez le nouveau G1BILLET "astro" avec une adresse email, vous fabriquez un TW relié au G1BILLET. + +## Type "astro" + +Avec une adresse email, vous associez son TW à votre G1BILLET +``` +G1BILLETS.sh DAEMON MODE http://g1billet.localhost:33101/?m=0&u=0&type=astro@yopmail.com +./G1BILLETS.sh "0" "0" "astro@yopmail.com" +``` +Enregistrez votre G1BILLET... +Vous recevez les détails de sa fabrication dans votre boite email ;) + +Copiez ce G1BILLET en cachant ses secrets pour en faire votre "carte de visite TW" + ## Installation Pour Linux le seul système d'opération qui respecte votre liberté -Ma recommandation: [Linux Mint](https://www.linuxmint.com/) ou [TwisterOS](https://twisteros.com/) +Ma recommandation: [Linux Mint](https://www.linuxmint.com/) ou [TwisterOS](https://twisteros.com/) ``` # Installer git @@ -47,10 +69,10 @@ cd G1BILLET ``` -Ajoutez les dépendances nécessaire +Ajoutez les dépendances nécessaire ``` -sudo apt install python3 python3-pip imagemagick qrencode ttf-mscorefonts-installer +sudo apt install python3 python3-pip imagemagick qrencode ttf-mscorefonts-installer netcat-traditional sudo pip3 install duniterpy ```