G1BILLET version "astro" - http service - http://g1billet.localhost:33101

This commit is contained in:
fred 2022-12-06 22:16:21 +01:00
parent 70eab68ea1
commit 37d5b86253
3 changed files with 146 additions and 31 deletions

View File

@ -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
<!DOCTYPE html><html><head>
<title>[Astroport] G1BILLET MICRO SERVICE - 33101 - 33102 -</title>
<meta http-equiv="refresh" content="5; url=http://g1billet.localhost:33102" />
</head><body>
<p><a href="http://g1billet.localhost:33102">(♥‿‿♥)</a>.</p>
</body></html>'
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 "&param=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

View File

@ -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"

View File

@ -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
```