G1BILLET/G1BILLETS.sh

222 lines
8.5 KiB
Bash
Raw Normal View History

2021-01-24 19:21:49 +01:00
#!/bin/bash
################################################################################
# Author: Fred (support@qo-op.com)
# Version: 1.0
2021-01-24 19:21:49 +01:00
# 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##*/}"
2021-01-24 19:21:49 +01:00
################################################################################
# Create different king of G1BILLET(s) with $MONTANT DU or TW IPNS
# ${MY_PATH}/G1BILLETS.sh 5 986397643 ticket # MONTANT # UNIQID # STYLE #
2021-01-24 19:21:49 +01:00
################################################################################
MONTANT="$1"
[[ $MONTANT == "0" ]] && MONTANT=""
### COMMAND MODE ###
if [[ $MONTANT != "daemon" ]]; then
2022-12-06 01:00:20 +01:00
[[ $MONTANT == "" ]] && MONTANT="___"
2021-01-24 19:21:49 +01:00
UNIQID="$2"
[[ $UNIQID == "0" ]] && UNIQID=""
2022-12-06 01:00:20 +01:00
[[ $UNIQID == "" ]] && UNIQID=$(${MY_PATH}/diceware.sh 1 | xargs)${RANDOM:0:2}$(${MY_PATH}/diceware.sh 1 | xargs)
STYLE="$3"
2021-01-24 19:21:49 +01:00
2022-12-06 01:00:20 +01:00
## CHECK STYLE IS EMAIL
if [[ "${STYLE}" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
2022-12-06 01:30:46 +01:00
# echo "PLAYER : $STYLE"
2022-12-06 01:00:20 +01:00
EMAIL=${STYLE}
STYLE="astro"
fi
## PLANCHE PDF DE 6 BILLETS PAR DEFAUT
2021-01-27 16:45:53 +01:00
NBbillets=6
[[ "${STYLE}" == "ticket" || "${STYLE}" == "xbian" || "${STYLE}" == "astro" ]] && NBbillets=1
2021-01-27 16:45:53 +01:00
2021-01-26 23:05:18 +01:00
# CHECK IF $STYLE IMAGES EXIST
2022-02-19 17:38:40 +01:00
[[ ! -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
2021-01-24 19:21:49 +01:00
2021-01-27 16:45:53 +01:00
# CREATION DE $NBbillets BILLETS DE $MONTANT DU
2021-01-24 19:21:49 +01:00
boucle=0;
while [ $boucle -lt $NBbillets ]
do
2022-02-19 17:38:40 +01:00
boucle=$((boucle+1))
mkdir -p "${MY_PATH}/tmp/g1billet/${UNIQID}"
2022-02-19 17:38:40 +01:00
NUMBER=$(${MY_PATH}/diceware.sh 4 | xargs)
UN=$(echo ${NUMBER} | jq -Rr @uri)
2022-02-19 17:38:40 +01:00
SECRET=$(${MY_PATH}/diceware.sh 4 | xargs)
DE=$(echo ${SECRET} | jq -Rr @uri)
2022-02-19 17:38:40 +01:00
# CREATION CLEF BILLET
BILLETPUBKEY=$(python3 ${MY_PATH}/key_create_dunikey.py "$NUMBER" "$SECRET")
rm -f /tmp/secret.dunikey
2021-01-24 19:21:49 +01:00
## ASTRO : FIND TW ADDRESS + EMAIL = CREATE PLAYER on 1234 API
2022-12-06 01:00:20 +01:00
[[ "$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} && echo "/ipns/$ASTRONAUTENS" \
&& [[ ${EMAIL} ]] && echo 'curl -s "https://astroport.copylaradio.com/?salt='$UN'&pepper='$DE'&g1pub=on&email='$EMAIL'"'
2022-12-06 01:00:20 +01:00
# CREATION FICHIER IMAGE BILLET dans ${MY_PATH}/tmp/g1billet/${UNIQID}
$(${MY_PATH}/MAKE_G1BILLET.sh "${NUMBER}" "${SECRET}" "${MONTANT}" "${BILLETPUBKEY}" "${UNIQID}" "${STYLE}" "${ASTRONAUTENS}" "${EMAIL}")
2022-11-24 22:45:03 +01:00
2021-01-24 19:21:49 +01:00
done
2022-02-19 17:38:40 +01:00
if [[ "${STYLE}" == "ticket" || "${STYLE}" == "xbian" || "${STYLE}" == "astro" ]]
2021-02-03 15:10:49 +01:00
then
# ONE FILE ONLY
2022-12-06 14:49:27 +01:00
cp ${MY_PATH}/tmp/g1billet/${UNIQID}/*.jpg ${MY_PATH}/tmp/g1billet/${UNIQID}.jpg
2022-11-24 22:45:03 +01:00
2022-02-19 17:38:40 +01:00
# CLEANING TEMP FILES
2022-12-06 14:49:27 +01:00
rm -Rf ${MY_PATH}/tmp/g1billet/${UNIQID}
2022-02-19 17:38:40 +01:00
# ALLOWS ANY USER TO DELETE
2022-12-06 14:49:27 +01:00
chmod 777 ${MY_PATH}/tmp/g1billet/${UNIQID}.jpg
export ZFILE="${MY_PATH}/tmp/g1billet/${UNIQID}.jpg"
2021-02-03 15:56:02 +01:00
else
2022-12-06 14:49:27 +01:00
# 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
2022-02-19 17:38:40 +01:00
# NB!! if "not autorized" then edit /etc/ImageMagick-6/policy.xml and comment
# <!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
# CLEANING TEMP FILES
2022-12-06 14:49:27 +01:00
rm -Rf ${MY_PATH}/tmp/g1billet/${UNIQID}
2022-02-19 17:38:40 +01:00
# ALLOWS ANY USER TO DELETE
2022-12-06 14:49:27 +01:00
chmod 777 ${MY_PATH}/tmp/g1billet/${UNIQID}.pdf
export ZFILE="${MY_PATH}/tmp/g1billet/${UNIQID}.pdf"
2021-02-03 15:10:49 +01:00
fi
### LAST LINE INFORM DAEMON
echo "$ZFILE"
else
################################################################################
## MAKE IT A NETWORK MICRO SERVICE -- PORTS : INPUT=33101 OUTPUT=33102
2022-12-06 23:23:30 +01:00
############## CLEAN START DEAMON MODE ###
2022-12-06 23:52:18 +01:00
pidportinuse=$(ps axf --sort=+utime | grep -w "nc -l -p 33101" | grep -v -E 'color=auto|grep' | awk '{gsub(/^ +| +$/,"")} {print $0}' | tail -n 1 | cut -d " " -f 1)
2022-12-06 23:23:30 +01:00
[[ $pidportinuse ]] && kill -9 $pidportinuse && echo "KILLING 33101 $pidportinuse"
2022-12-07 00:18:36 +01:00
pidportinuse=$(ps axf --sort=+utime | grep -w "nc -l -p 33102" | grep -v -E 'color=auto|grep' | awk '{gsub(/^ +| +$/,"")} {print $0}' | tail -n 1 | cut -d " " -f 1)
[[ $pidportinuse ]] && kill -9 $pidportinuse && echo "KILLING NOT COLLECTED THREAD $pidportinuse"
#####################################################################
myIP=$(hostname -I | awk '{print $1}' | head -n 1)
isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
2022-12-07 00:14:22 +01:00
if [[ $isLAN ]]; then
HNAME="http://g1billet.localhost"
RNAME="$HNAME:33102"
else
HNAME="http://$(hostname)"
2022-12-07 00:16:00 +01:00
RNAME="https://qo-op.com/33102"
2022-12-07 00:14:22 +01:00
fi
HTTPWELLCOME='HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET
Server: Astroport
Content-Type: text/html; charset=UTF-8
2022-12-06 22:51:12 +01:00
<!DOCTYPE html><html>
<head>
2022-12-06 23:11:06 +01:00
<title>[G1BILLET] HTTP MICRO SERVICE - 33101 - 33102 -</title>
2022-12-07 00:14:22 +01:00
<meta http-equiv="refresh" content="30; url='$RNAME'" />
2022-12-06 22:51:12 +01:00
<style>
#countdown { display: flex; justify-content: center; align-items: center; color: #0e2c4c; font-size: 20px; width: 60px; height: 60px; background-color: #e7d9fc; border-radius: 50%;}
</style>
</head>
<body>
2022-12-07 00:14:22 +01:00
<center><h1><a href="'$RNAME'">(♥‿‿♥)</a>.</h1></center>
2022-12-06 22:51:12 +01:00
<center><div id="countdown"></div></center>
<script>
var timeLeft = 30;
var elem = document.getElementById("countdown");
var timerId = setInterval(countdown, 1000);
function countdown() {
if (timeLeft == -1) {
clearTimeout(timerId);
doSomething();
} else {
elem.innerHTML = timeLeft + " s";
timeLeft--;
}
}
</script>
</body></html>'
function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
while true; do
echo "=================================================="
echo "$ME DAEMON RUNNING $HNAME:33101"
echo "TW : $HNAME:33101/?m=0&u=0&type=astro${RANDOM}@yopmail.com"
REQ=$(echo "$HTTPWELLCOME" | nc -l -p 33101 -q 1) ## # WAIT FOR 33101 PORT CONTACT
2022-12-06 23:16:47 +01:00
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
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 "=================================================="
2022-12-06 23:16:47 +01:00
echo "$MOATS : $HOSTP "
echo "=================================================="
2022-12-06 23:16:47 +01:00
echo "$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);
2022-12-06 23:16:47 +01:00
#~ 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)
2022-12-06 23:52:18 +01:00
pidportinuse=$(ps axf --sort=+utime | grep -w "nc -l -p 33102" | grep -v -E 'color=auto|grep' | awk '{gsub(/^ +| +$/,"")} {print $0}' | tail -n 1 | cut -d " " -f 1)
[[ $pidportinuse ]] && kill -9 $pidportinuse && echo "KILLING NOT COLLECTED THREAD $pidportinuse"
# 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.G1BILLET
Cache-Control: public
Content-Transfer-Encoding: Binary
Content-Length:'${BSIZE}'
Content-Disposition: attachment; filename='${FILE_NAME}'
2022-12-06 23:16:47 +01:00
' > ${MY_PATH}/tmp/http.${MOATS}
2022-12-06 23:16:47 +01:00
cat ${ZFILE} >> ${MY_PATH}/tmp/http.${MOATS}
2022-12-06 23:16:47 +01:00
cat ${MY_PATH}/tmp/http.${MOATS} | nc -l -p 33102 -q 1 > /dev/null 2>&1
echo "DELIVERED ${MOATS} : http://g1billet.localhost:33102"
rm -f "${ZFILE}"
2022-12-06 23:16:47 +01:00
rm -f "${MY_PATH}/tmp/http.${MOATS}"
done
fi
exit 0