forked from STI/Astroport.ONE
254 lines
13 KiB
Bash
Executable File
254 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
|
################################################################################
|
|
# Author: Fred (support@qo-op.com)
|
|
# Version: 0.1
|
|
# 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 VOEUX.
|
|
# Attributed to a place shared through Astroport Ŋ1 confidence network IPFS layer
|
|
# PARAMETRES
|
|
# Promesse de virement du MONTANT, le nom du joueur PLAYER et sa G1PUB.
|
|
################################################################################
|
|
MONTANT="$1"
|
|
PLAYER="$2"
|
|
G1PUB="$3"
|
|
QRTW="$4" # Nombre de QR + TW5 à créer
|
|
|
|
[[ $MONTANT == "" ]] && MONTANT="_?_"
|
|
[[ $PLAYER == "" ]] && PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null)
|
|
[[ $PLAYER == "" ]] && echo "Second paramètre PLAYER manquant" && exit 1
|
|
PSEUDO=$(cat ~/.zen/game/players/$PLAYER/.pseudo 2>/dev/null)
|
|
[[ $G1PUB == "" ]] && G1PUB=$(cat ~/.zen/game/players/$PLAYER/.g1pub 2>/dev/null)
|
|
[[ $G1PUB == "" ]] && echo "Troisième paramètre G1PUB manquant" && exit 1
|
|
[[ $QRTW == "" ]] && QRTW=1
|
|
|
|
ASTRONAUTENS=$(ipfs key list -l | grep -w "${PLAYER}" | cut -d ' ' -f 1)
|
|
[[ $ASTRONAUTENS == "" ]] && echo "ASTRONAUTE manquant" && exit 1
|
|
|
|
echo "Bienvenue $PSEUDO ($PLAYER) : $G1PUB"
|
|
echo
|
|
|
|
########################################################
|
|
# BACKING UP Astronaute TW IPNS
|
|
mkdir -p ~/.zen/tmp/TW
|
|
rm -f ~/.zen/tmp/TW/index.html
|
|
ipfs --timeout 6s cat /ipns/$ASTRONAUTENS > ~/.zen/tmp/TW/index.html
|
|
|
|
if [ ! -s ~/.zen/tmp/TW/index.html ]; then
|
|
echo "ERROR IPNS TIMEOUT. Restoring local backup..."
|
|
TW=$(ipfs add -rHq ~/.zen/game/players/$PLAYER/ipfs/moa/index.html | tail -n 1)
|
|
ipfs name publish --key=$PLAYER /ipfs/$TW
|
|
else
|
|
# Backup
|
|
## TODO index.html are different => Add signaling tiddler
|
|
cp ~/.zen/tmp/TW/index.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
|
|
fi
|
|
########################################################
|
|
|
|
|
|
# CREATION DU VOEU (TODO: REMOVE OR ACTIVATE LOOP ?)
|
|
boucle=0;
|
|
while [ $boucle -lt $QRTW ]
|
|
do
|
|
boucle=$((boucle+1))
|
|
SALT=$(${MY_PATH}/tools/diceware.sh 3 | xargs)
|
|
PEPPER=$(${MY_PATH}/tools/diceware.sh 1 | xargs)
|
|
|
|
echo "Entrez un Titre pour ce Voeu"
|
|
read TITRE
|
|
PEPPER=$(echo "$TITRE" | sed -r 's/\<./\U&/g' | sed 's/ //g') # CapitalGluedWords
|
|
|
|
echo "# CREATION CLEF DE VOEUX"
|
|
${MY_PATH}/tools/keygen -t duniter -o ~/.zen/tmp/qrtw.dunikey "$SALT" "$PEPPER"
|
|
WISHKEY=$(cat ~/.zen/tmp/qrtw.dunikey | grep "pub:" | cut -d ' ' -f 2)
|
|
|
|
echo "# NOUVEAU VOEU ASTRONAUTE"
|
|
mkdir -p ~/.zen/game/players/$PLAYER/voeux/$WISHKEY/
|
|
${MY_PATH}/tools/keygen -t ipfs -o ~/.zen/game/players/$PLAYER/voeux/$WISHKEY/qrtw.ipfskey "$SALT" "$PEPPER"
|
|
VOEUXNS=$(ipfs key import $WISHKEY -f pem-pkcs8-cleartext ~/.zen/game/players/$PLAYER/voeux/$WISHKEY/qrtw.ipfskey)
|
|
# CRYPTO BUG. TODO use natools to protect and share key with Ŋ1 only ;)
|
|
myIP=$(hostname -I | awk '{print $1}' | head -n 1)
|
|
echo " QR code fonctionnel sur réseau IP local (qo-op) : $myIP"
|
|
|
|
echo "# UPGRADING WORLD WHISHKEY DATABASE"
|
|
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
|
|
|
|
mkdir -p ~/.zen/game/world/$WISHKEY/
|
|
echo $PEPPER > ~/.zen/game/world/$WISHKEY/.pepper
|
|
|
|
echo "# CREATION TW"
|
|
##########################################################################################
|
|
# ipfs key import _MEDIAKEY_ ~/.zen/Astroport.ONE/templates/_MEDIAKEY_.keystore.key
|
|
##############
|
|
# ipfs cat /ipfs/bafybeibqdoegifzejykmc3qw3e3drgsa5i7az6xwjlfcx7rbtcoj5unpkq > ~/.zen/Astroport.ONE/templates/twdefault.html
|
|
##########################################################################################
|
|
cp ~/.zen/Astroport.ONE/templates/twdefault.html ~/.zen/game/world/$WISHKEY/index.html
|
|
|
|
# PERSONNALISATION
|
|
sed -i "s~_BIRTHDATE_~${MOATS}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~_PSEUDO_~${PSEUDO}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~_PLAYER_~${PLAYER}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~_G1PUB_~${G1PUB}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~_WISHKEY_~${WISHKEY}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~_NUMBER_~${SALT}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~_SECRET_~${PEPPER}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
|
|
# IPNS KEY is WISHKEY / VOEUXNS
|
|
sed -i "s~_MEDIAKEY_~${WISHKEY}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~k2k4r8kxfnknsdf7tpyc46ks2jb3s9uvd3lqtcv9xlq9rsoem7jajd75~${VOEUXNS}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
# ASTROPORT LOCAL IP RELAY == Smartphone doesn't resolve LAN DNS. So using Astroport Station IP
|
|
sed -i "s~ipfs.infura.io~tube.copylaradio.com~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
sed -i "s~127.0.0.1~$myIP~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
|
|
# ADD API GW TIDDLERS for IPFS SAVE
|
|
##########################################################################################
|
|
# [{"title":"$:/ipfs/saver/api/http/local/5001","tags":"$:/ipfs/core $:/ipfs/saver/api","text":"http://127.0.0.1:5001"}]
|
|
# [{"title":"$:/ipfs/saver/gateway/local/myip","tags":"$:/ipfs/core $:/ipfs/saver/gateway","text":"http://127.0.0.1:8080"}]
|
|
##########################################################################################
|
|
tiddlywiki --verbose --load ~/.zen/game/world/$WISHKEY/index.html \
|
|
--import ~/.zen/Astroport.ONE/templates/data/local.api.json "application/json" \
|
|
--import ~/.zen/Astroport.ONE/templates/data/local.gw.json "application/json" \
|
|
--output ~/.zen/tmp --render "$:/core/save/all" "newindex.html" "text/plain"
|
|
[[ -s ~/.zen/tmp/newindex.html ]] && cp ~/.zen/tmp/newindex.html ~/.zen/game/world/$WISHKEY/index.html
|
|
|
|
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://'$myIP':8080", "http://127.0.0.1:8080", "http://astroport", "https://astroport.com", "https://qo-op.com", "https://tube.copylaradio.com", "http://'$(hostname)'.local:8080" ]'
|
|
## RESTART IPFS !?
|
|
|
|
echo "# CREATION QR CODE"
|
|
|
|
qrencode -s 12 -o "$HOME/.zen/game/world/$WISHKEY/QR.WISHLINK.png" "http://$myIP:8080/ipns/$VOEUXNS"
|
|
qrencode -s 12 -o "$HOME/.zen/game/world/$WISHKEY/QR.ASTROLINK.png" "http://$myIP:8080/ipns/$ASTRONAUTENS"
|
|
qrencode -s 12 -o "$HOME/.zen/game/world/$WISHKEY/QR.G1ASTRO.png" "$G1PUB"
|
|
qrencode -s 12 -o "$HOME/.zen/game/world/$WISHKEY/QR.G1WISH.png" "$WISHKEY"
|
|
qrencode -s 12 -o "$HOME/.zen/game/world/$WISHKEY/QR.IPNS.png" "/ipns/$VOEUXNS"
|
|
|
|
# Bricolage avec node tiddlywiki (TODO add tiddler with command line)
|
|
# A suivre .... https://talk.tiddlywiki.org/t/how-to-add-extract-modify-tiddlers-from-command-line-to-do-ipfs-media-transfer/4345/4
|
|
# cd ~/.zen/game/world/$WISHKEY
|
|
# tiddlywiki $WISHKEY --load ~/.zen/game/world/$WISHKEY/index.html --savewikifolder ./tw/
|
|
# cd -
|
|
|
|
#################################
|
|
# PREMIER TYPE /tmp/player.png
|
|
convert $HOME/.zen/game/world/$WISHKEY/QR.WISHLINK.png -resize 300 /tmp/QRWISHLINK.png
|
|
convert ${MY_PATH}/images/logoastro.png -resize 220 /tmp/ASTROLOGO.png
|
|
|
|
composite -compose Over -gravity NorthWest -geometry +350+10 /tmp/ASTROLOGO.png ${MY_PATH}/images/Brother_600x400.png /tmp/astroport.png
|
|
composite -compose Over -gravity NorthWest -geometry +0+0 /tmp/QRWISHLINK.png /tmp/astroport.png /tmp/one.png
|
|
convert -gravity northwest -pointsize 35 -fill black -draw "text 320,250 \"$PSEUDO\"" /tmp/one.png /tmp/hop.png
|
|
convert -gravity northwest -pointsize 30 -fill black -draw "text 20,320 \"$PEPPER\"" /tmp/hop.png /tmp/pseudo.png
|
|
convert -gravity northwest -pointsize 30 -fill black -draw "text 320,300 \"$SALT\"" /tmp/pseudo.png /tmp/salt.png
|
|
convert -gravity northwest -pointsize 33 -fill black -draw "text 320,350 \"$PEPPER\"" /tmp/salt.png /tmp/player.png
|
|
|
|
#################################
|
|
# SECOND TYPE /tmp/voeu.png
|
|
convert $HOME/.zen/game/world/$WISHKEY/QR.G1WISH.png -resize 300 /tmp/G1WISH.png
|
|
convert ${MY_PATH}/images/logojeu.png -resize 260 /tmp/MIZLOGO.png
|
|
|
|
composite -compose Over -gravity NorthWest -geometry +0+0 /tmp/G1WISH.png ${MY_PATH}/images/Brother_600x400.png /tmp/astroport.png
|
|
composite -compose Over -gravity NorthWest -geometry +300+0 /tmp/QRWISHLINK.png /tmp/astroport.png /tmp/one.png
|
|
composite -compose Over -gravity NorthWest -geometry +320+280 /tmp/MIZLOGO.png /tmp/one.png /tmp/two.png
|
|
|
|
convert -gravity northwest -pointsize 28 -fill black -draw "text 32,350 \"Ğ1 VOEU\"" /tmp/two.png /tmp/pep.png
|
|
convert -gravity northwest -pointsize 50 -fill black -draw "text 30,300 \"$PEPPER\"" /tmp/pep.png /tmp/voeu.png
|
|
|
|
# IMAGE DANS IPFS
|
|
IVOEUPLAY=$(ipfs add -Hq /tmp/player.png | tail -n 1)
|
|
|
|
IVOEU=$(ipfs add -Hq /tmp/voeu.png | tail -n 1)
|
|
## Replace Template G1Voeu image
|
|
sed -i "s~bafybeidhghlcx3zdzdah2pzddhoicywmydintj4mosgtygr6f2dlfwmg7a~${IVOEU}~g" ~/.zen/game/world/$WISHKEY/index.html
|
|
|
|
TEXT="<a target='_blank' href='"/ipns/${VOEUXNS}"'><img src='"/ipfs/${IVOEUPLAY}"'></a><br><br><a target='_blank' href='"/ipns/${VOEUXNS}"'>"${PEPPER}"</a>"
|
|
|
|
# NEW IVEU TIDDLER
|
|
echo "## Creation json tiddler : Qr${PEPPER} /ipfs/${IVOEU}"
|
|
echo '[
|
|
{
|
|
"title": "'${PEPPER}'",
|
|
"type": "'text/vnd.tiddlywiki'",
|
|
"ipns": "'/ipns/$VOEUXNS'",
|
|
"ipfs": "'/ipfs/$IVOEUPLAY'",
|
|
"text": "'$TEXT'",
|
|
"tags": "'voeu ${PEPPER}'"
|
|
}
|
|
]
|
|
' > ~/.zen/game/world/$WISHKEY/${PEPPER}.voeu.json
|
|
|
|
|
|
|
|
rm -f ~/.zen/tmp/newindex.html
|
|
|
|
echo "Nouveau Qr$PEPPER dans MOA $PSEUDO : http://127.0.0.1:8080/ipns/$ASTRONAUTENS"
|
|
tiddlywiki --verbose --load ~/.zen/game/players/$PLAYER/ipfs/moa/index.html \
|
|
--import ~/.zen/game/world/$WISHKEY/${PEPPER}.voeu.json "application/json" \
|
|
--output ~/.zen/tmp --render "$:/core/save/all" "newindex.html" "text/plain"
|
|
|
|
echo "PLAYER TW Update..."
|
|
if [[ -s ~/.zen/tmp/newindex.html ]]; then
|
|
echo "Mise à jour ~/.zen/game/players/$PLAYER/ipfs/moa/index.html"
|
|
cp -f ~/.zen/tmp/newindex.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
|
|
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
|
|
echo "Avancement blockchain TW $PLAYER : $MOATS"
|
|
cp ~/.zen/game/players/$PLAYER/ipfs/moa/.chain ~/.zen/game/players/$PLAYER/ipfs/moa/.chain.$MOATS
|
|
|
|
TW=$(ipfs add -Hq ~/.zen/game/players/$PLAYER/ipfs/moa/index.html | tail -n 1)
|
|
echo "ipfs name publish --key=$PLAYER /ipfs/$TW"
|
|
ipfs name publish --key=$PLAYER /ipfs/$TW
|
|
|
|
# MAJ CACHE TW $PLAYER
|
|
echo $TW > ~/.zen/game/players/$PLAYER/ipfs/moa/.chain
|
|
echo $MOATS > ~/.zen/game/players/$PLAYER/ipfs/moa/.moats
|
|
echo
|
|
fi
|
|
|
|
# PRINTING
|
|
LP=$(ls /dev/usb/lp* | head -n1)
|
|
[[ ! $LP ]] && echo "NO PRINTER FOUND - Brother QL700 validated"
|
|
echo "IMPRESSION VOEU"
|
|
brother_ql_create --model QL-700 --label-size 62 /tmp/player.png > /tmp/toprint.bin 2>/dev/null
|
|
sudo brother_ql_print /tmp/toprint.bin $LP
|
|
brother_ql_create --model QL-700 --label-size 62 /tmp/voeu.png > /tmp/toprint.bin 2>/dev/null
|
|
sudo brother_ql_print /tmp/toprint.bin $LP
|
|
|
|
# COPY QR CODE TO PLAYER ZONE
|
|
cp /tmp/player.png /tmp/voeu.png ~/.zen/game/players/$PLAYER/voeux/$WISHKEY/
|
|
echo "$PEPPER" > ~/.zen/game/players/$PLAYER/voeux/$WISHKEY/.title
|
|
echo "http://$myIP:8080/ipns/$VOEUXNS" > ~/.zen/game/players/$PLAYER/voeux/$WISHKEY/.link
|
|
cp ~/.zen/game/world/$WISHKEY/QR.WISHLINK.png ~/.zen/game/players/$PLAYER/voeux/$WISHKEY/
|
|
|
|
# PUBLISHING
|
|
echo "## ${PLAYER} RECORDING YOU WISH INTO BLOCKCHAIN"
|
|
echo "ipfs add -Hq ~/.zen/game/world/$WISHKEY/index.html
|
|
ipfs name publish --key=${WISHKEY} /ipfs/\$IPUSH"
|
|
IPUSH=$(ipfs add -Hq ~/.zen/game/world/$WISHKEY/index.html | tail -n 1)
|
|
ipfs name publish --key=${WISHKEY} /ipfs/$IPUSH 2>/dev/null
|
|
|
|
echo $IPUSH > ~/.zen/game/world/$WISHKEY/.chain
|
|
echo $MOATS > ~/.zen/game/world/$WISHKEY/.moats
|
|
|
|
## Creating Cesium+ Profil
|
|
$MY_PATH/tools/jaklis/jaklis.py -k ~/.zen/tmp/qrtw.dunikey -n "https://g1.data.presles.fr" set --name "G1Voeu $PEPPER" --avatar "/home/$USER/.zen/Astroport.ONE/images/logojune.jpg" --site "https://astroport.com/ipns/$VOEUXNS" #CESIUM+
|
|
[[ ! $? == 0 ]] && echo "CESIUM PROFILE CREATION FAILED !!!!"
|
|
|
|
echo "************************************************************"
|
|
echo "Hop, Une June pour ce Voeu"
|
|
echo $MY_PATH/tools/jaklis/jaklis.py -k ~/.zen/game/players/$PLAYER/secret.dunikey pay -a 1 -p $WISHKEY -c \'"$VOEUXNS G1Voeu $PEPPER"\' -m -v
|
|
echo "************************************************************"
|
|
|
|
$MY_PATH/tools/jaklis/jaklis.py -k ~/.zen/game/players/$PLAYER/secret.dunikey pay -a 1 -p $WISHKEY -c "$VOEUXNS G1Voeu $PEPPER" -m -v
|
|
echo "************************************************************"
|
|
echo
|
|
echo "Astronaute Ŋ1 : http://127.0.0.1:8080/ipns/$ASTRONAUTENS"
|
|
|
|
echo "CAPSULE A REVE $PEPPER : http://127.0.0.1:8080/ipns/$VOEUXNS"
|
|
|
|
|
|
done
|
|
|
|
exit 0
|