Astroport.ONE/tools/VOEUX.print.sh

230 lines
10 KiB
Bash
Executable File

#!/bin/bash
########################################################################
# Version: 0.3
# 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
. "$MY_PATH/my.sh"
PLAYER_=$1 # ${PLAYER}(_dice_words) for sub-subkey
PLAYER=$(echo "${PLAYER_}" | cut -d '_' -f 1 | cut -d ' ' -f 1) ## EMAIL_dice_words kinds
VoeuName=$2
MOATS=$3
G1PUB=$4
[[ ${PLAYER} == "" ]] && PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null)
[[ ${PLAYER} == "" ]] && echo "PLAYER manquant" && exit 1
[[ ${G1PUB} == "" ]] && G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub 2>/dev/null)
[[ ${G1PUB} == "" ]] && echo "G1PUB manquant" && exit 1
PASS=$(echo "${RANDOM}${RANDOM}${RANDOM}${RANDOM}" | tail -c-7)
UPASS=$(date '+%Y%m') # YYYYMM
DPASS=$(date '+%Y%m%d') # YYYYMMDD
PPASS=$(cat ~/.zen/game/players/.current/.pass 2>/dev/null)
############################################################ G1Voeu.sh use
############################################################ PRINT G1Milgram (once a month)
if [[ ${G1PUB} != "" && ${VoeuName} != "" && ${MOATS} != "" ]]; then
echo "MAKE ASTROID+@"
mkdir -p ~/.zen/tmp/${MOATS}
#################################################################
## MAKING SPECIAL amrzqr => G1Milgram TICKET = G1Missive
## LE QRCODE CORRESPOND A LA CLEF DERIVE "${PLAYER_} :: G1${VoeuName} ${G1PUB}" avec PASS=YYYYMM
# LINK TO G1BILLET with MAKE_G1BILLET.sh :: ${PLAYER}_dice_words :: G1${VoeuName} ${G1PUB}"
# PLAYER G1Voeu G1BILLET+ (derivated key)
SECRET1="${PLAYER}"
SECRET2="G1${VoeuName} ${G1PUB}"
## ATTACHED G1BILLET+ "EMAIL_SEC1_SEC2"
[[ $(echo ${PLAYER_} | grep '_' ) ]] \
&& echo "G1BILLET+ interlinked : salt pepper refining" \
&& murge=($(echo "${PLAYER_}" | cut -d '_' -f 2- | sed 's/_/ /g' | xargs)) \
&& i=$(( ${#murge[@]} / 2 )) && i=$(( i + 1 )) \
&& extra1=$(echo "${murge[@]}" | rev | cut -d ' ' -f $i- | rev) \
&& extra2=$(echo "${murge[@]}" | cut -d ' ' -f $i-) \
&& echo "extra1=${extra1} extra2=${extra2}"
## @PASS PLAYER IPFS KEY
echo "@PASS - G1Voeu"
${MY_PATH}/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${VoeuName}.ipfskey "${SECRET1}" "${SECRET2}"
## EXTRA @PASS G1BILLET IPFS KEY
if [[ ${extra1} != "" && ${extra2} != "" ]]; then
MESSAGE="G1BILLET+ MESSAGE BOX - $(date)" ## VOEU=G1BILLET+ ##
echo "$MESSAGE"
${MY_PATH}/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${VoeuName}.EXTRA.ipfskey "${extra1}" "${extra2}"
## TAKES TOO MUCH TIME -- USER WILL INIT G1BILLET+ MESSAGE LATER
#~ echo "$MESSAGE" > ~/.zen/tmp/${MOATS}/MESSAGE
#~ BILLETNS=$(ipfs key import ${MOATS} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${VoeuName}.EXTRA.ipfskey)
#~ rm ~/.zen/tmp/${MOATS}/${VoeuName}.EXTRA.ipfskey
#~ ## INSERT MESSAGE IN G1BILLET+ IPNS key
#~ (
#~ IPONE=$(ipfs add -q ~/.zen/tmp/${MOATS}/MESSAGE)
#~ ipfs name publish -k ${MOATS} /ipfs/${IPONE}
#~ ipfs key rm ${MOATS}
#~ ) &
fi
USALT=$(echo "${PLAYER_}" | jq -Rr @uri)
UPEPPER=$(echo "${SECRET2}" | jq -Rr @uri)
DISCO="/?salt=${USALT}&pepper=${UPEPPER}"
echo "${DISCO}" > ~/.zen/tmp/${MOATS}/topgp
rm -f ~/.zen/tmp/${MOATS}/gpg.asc
cat ~/.zen/tmp/${MOATS}/topgp | gpg --symmetric --armor --batch --passphrase "$UPASS" -o ~/.zen/tmp/${MOATS}/gpg.asc
cp ${MY_PATH}/../images/g1magicien.png ~/.zen/tmp/${MOATS}/result.png
## MAKE amzqr WITH @@@@@ PGP ASTROID FORMAT (%40)
amzqr "$(cat ~/.zen/tmp/${MOATS}/gpg.asc | tr '-' '@' | tr '\n' '-' | tr '+' '_' | jq -Rr @uri )" \
-d "$HOME/.zen/tmp/${MOATS}" \
-l H \
-p ~/.zen/tmp/${MOATS}/result.png
convert -gravity northwest -pointsize 25 -fill black -draw "text 5,5 \"${PLAYER} - ${UPASS} -\"" ~/.zen/tmp/${MOATS}/result_qrcode.png ~/.zen/tmp/${MOATS}/layer1.png
convert -gravity southeast -pointsize 25 -fill black -draw "text 5,5 \"${VoeuName}\"" ~/.zen/tmp/${MOATS}/layer1.png ~/.zen/tmp/${MOATS}/START.png
IMAGIC=$(ipfs add -Hq ~/.zen/tmp/${MOATS}/START.png | tail -n 1)
echo ${IMAGIC}
## SENDING EMAIL TOO LONG (BETTER FROM ./command.sh) #############
#~ echo "(•‿‿•) SCAN https://astroport.com/scan" > ~/.zen/tmp/${MOATS}/intro.txt
#~ mpack -a -s "(•‿‿•) : Missive ${VoeuName} - ${UPASS} - La♥Box" -d ~/.zen/tmp/${MOATS}/intro.txt ~/.zen/tmp/${MOATS}/START.png ${PLAYER} &
exit 0
fi
############################################################
############################################################
## COMMAND LINE MODE
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
[[ ! ${MOATS} ]] && MOATS=$(date -u +"%Y%m%d%H%M%S%4N") && mkdir -p ~/.zen/tmp/${MOATS}
###############################
## EXTRACT G1Voeu from PLAYER TW
echo "Exporting ${PLAYER} TW [tag[G1Voeu]]"
rm -f ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1voeu.json
tiddlywiki --load ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html --output ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu --render '.' "${PLAYER}.g1voeu.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[G1Voeu]]'
[[ ! -s ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1voeu.json ]] && echo "AUCUN G1VOEU - EXIT -" && exit 1
cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1voeu.json | jq -r '.[].wish' > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1wishes.txt
echo "VOEUX : ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1wishes.txt "$(cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1wishes.txt | wc -l)
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
vlist=""
for v in $(cat ~/.zen/game/players/${PLAYER}/voeux/*/*/.title); do
g1pub=$(grep -r $v ~/.zen/game/players/${PLAYER}/voeux/ 2>/dev/null | head -n 1 | rev | cut -d '/' -f 2 | rev )
#~ echo "$v : $g1pub"
#~ echo '------------------------------------------------------------------'
vlist=($v:$g1pub ${vlist[@]})
done
#~ echo "${vlist[@]}"
PS3='Choisissez le voeux ___ '
select zwish in "${vlist[@]}"; do
case ${zwish} in
"QUITTER")
exit 0
;;
*) echo "IMPRESSION ${voeu}"
VoeuName=$(echo ${zwish} | cut -d ':' -f1) ## Get VoeuName
voeu=$(echo ${zwish} | cut -d ':' -f2) ## Get G1PUB part
VOEUXNS=$(ipfs key list -l | grep -w ${voeu} | cut -d ' ' -f1)
choices=("TW" "Ğ1" "Ğ1Milgram")
PS3='Imprimer le QR (TW DApp) ou de son portefeuille (Ğ1) ?'
select typ in "${choices[@]}"; do
case $typ in
"TW")
echo "Changer de Gateway $myIPFS ?"
read GW && [[ ! $GW ]] && GW="$myIPFS"
qrencode -s 12 -o "$HOME/.zen/game/world/${VoeuName}/${voeu}/QR.WISHLINK.png" "$GW/ipns/$VOEUXNS"
convert $HOME/.zen/game/world/${VoeuName}/${voeu}/QR.WISHLINK.png -resize 600 ~/.zen/tmp/${MOATS}/START.png
echo " QR code ${VoeuName} : $GW/ipns/$VOEUXNS"
break
;;
"Ğ1")
qrencode -s 12 -o "$HOME/.zen/game/world/${VoeuName}/${voeu}/G1PUB.png" "${voeu}"
convert $HOME/.zen/game/world/${VoeuName}/${voeu}/G1PUB.png -resize 600 ~/.zen/tmp/${MOATS}/START.png
break
;;
"Ğ1Milgram")
GW="(•‿‿•) ___ https://g1sms.fr ___"
# CREATE G1Milgram
IMAGIC=$(${MY_PATH}/VOEUX.print.sh "${PLAYER}" "${VoeuName}" "${MOATS}" | tail -n 1)
## EXTRACT TEXT FROM TIDDLER
tiddlywiki --load ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html --output ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu \
--render '.' "${PLAYER}.${VoeuName}.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' "${VoeuName}"
## USE TEXT FROM TIDDLER
cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.${VoeuName}.json | jq -r '.[].text' | html2text > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.txt
echo "
${VoeuName} [ ${PLAYER} ] ${UPASS}" >> ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.txt
MILGRAM=$(ipfs add -q ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/index.txt)
xdg-open http://ipfs.localhost:8080/ipfs/${IMAGIC}
# ${VoeuName} key
IK=$(ipfs key list -l | grep -w "${PLAYER}_${VoeuName}" | cut -d ' ' -f 1 )
[[ $IK ]] && ipfs key rm ${PLAYER}_${VoeuName}
ipfs key import ${PLAYER}_${VoeuName} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${VoeuName}.ipfskey
IK=$(ipfs key list -l | grep -w "${PLAYER}_${VoeuName}" | cut -d ' ' -f 1 )
xdg-open http://ipfs.localhost:8080/ipfs/${MILGRAM}
(
echo "${VoeuName} ${UPASS} G1Milgram emitted ${PLAYER}"
xdg-open http://ipfs.localhost:8080/ipns/${IK}
ipfs name publish -k ${PLAYER}_${VoeuName} /ipfs/${MILGRAM}
) &
break
;;
"")
echo "Mauvais choix."
;;
esac
done
convert -gravity northeast -pointsize 30 -fill black -draw "text 50,2 \"${VoeuName} ($typ)\"" ~/.zen/tmp/${MOATS}/START.png ~/.zen/tmp/${MOATS}/g1voeu1.png
convert -gravity southeast -pointsize 30 -fill black -draw "text 100,2 \"${GW}\"" ~/.zen/tmp/${MOATS}/g1voeu1.png ~/.zen/tmp/${MOATS}/g1voeu.png
#~ echo "~/.zen/tmp/${MOATS}/g1voeu.png READY ?"
[[ $XDG_SESSION_TYPE == 'x11' || $XDG_SESSION_TYPE == 'wayland' ]] && xdg-open ~/.zen/tmp/${MOATS}/g1voeu.png
LP=$(ls /dev/usb/lp* 2>/dev/null | head -n1)
[[ ! $LP ]] && echo "NO PRINTER FOUND - Brother QL700 validated" && continue
echo "IMPRESSION LIEN TW VOEU"
brother_ql_create --model QL-700 --label-size 62 ~/.zen/tmp/${MOATS}/g1voeu.png > ~/.zen/tmp/${MOATS}/toprint.bin 2>/dev/null
sudo brother_ql_print ~/.zen/tmp/${MOATS}/toprint.bin $LP
;;
esac
done
## DEV MODE : AUDIT CODE & ACTIVATE REMOVE FOR SECURITY (OR USE encrypted RAM DISK for ~/.zen/tmp )
# rm -Rf ~/.zen/tmp/${MOATS}