#!/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##*/}" echo "EXECUTE $ME ($1=phone, $2=guilde)" phone="$1" guilde="$2" my_guildes="$guilde" [[ ! -f /tmp/${phone}_message ]] && echo "NO MESSAGE /tmp/${phone}_message" && exit 1 message="$(cat /tmp/${phone}_message)" ######################################################################## echo "## GET STATION G1PUB" ######################################################################## YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) || er+=" ipfs daemon not running" [[ ! -f /home/${YOU}/.zen/secret.dunikey ]] && echo "Crypto is missing... please provide /home/${YOU}/.zen/secret.dunikey by installing 'astrXbian' TestNet" && exit 1 G1PUB=$(cat /home/${YOU}/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) SMSADMIN="$(cat /home/${YOU}/.zen/SMSADMIN)" ######################################################################## echo "## sha256sum($phone)" ######################################################################## phonehash=$(echo $phone | sha256sum | cut -d ' ' -f1) ######################################################################## echo "=> ${phonehash}" ######################################################################## ## CREATION DU "HOME" /PHONE/${phonehash} if [[ -d /home/${YOU}/.zen/SMS/PHONE/${phonehash} ]]; then NEW=0 xzuid=$(cat "/home/${YOU}/.zen/SMS/PHONE/${phonehash}/xzuid.txt") echo "OK $phone already registered it is $xzuid" else mkdir -p /home/${YOU}/.zen/SMS/PHONE/${phonehash}/ fi ######################################################################## ## NOUVEAU /PHONE/${phonehash} : INSCRIPTION AUX GUILDES DE BASE if [[ ! $xzuid ]]; then NEW=1 ## CHECK IF GUILDE EXISTS [[ ${phone} != $SMSADMIN ]] && [[ ! -d /home/${YOU}/.zen/SMS/GUILDES/${guilde} ]] && echo "AUCUNE GUILDE ${guilde} - EXIT -" && exit 1 ######################################################################## echo "## GESTION IDENTITES: G1 NEXTCLOUD QRCODE + GUILDES" ######################################################################## ## MAKE UNIQ xzuid xzuid=$($MY_PATH/diceware.sh 1 | xargs)${RANDOM:0:4} while [[ "$(cat /home/${YOU}/.zen/SMS/PHONE/*/xzuid.txt 2>/dev/null)" == "${xzuid}" ]] do xzuid=$($MY_PATH/diceware.sh 1 | xargs)${RANDOM:0:4} done echo "$xzuid" > /home/${YOU}/.zen/SMS/PHONE/${phonehash}/xzuid.txt echo "=> NOUVEAU $xzuid WELCOME <=" ######################################################################## echo "## $xzuid / $phone => NEW DUNIKEY & QRCODE" ######################################################################## echo "#!/bin/bash sudo gammu sendsms TEXT \"_PHONE_\" -text \"Heureux de vous accueillir. $xzuid est votre Identité Interplanétaire MadeInZion/OneNation émise par Astroport.\"" > /home/${YOU}/.zen/SMS/PHONE/${phonehash}/$(date -u +%s%N | cut -b1-13).tosend.sh ######################################################################## echo "## MAKE secret.dunikey" ######################################################################## sudo rm /tmp/secret.dunikey 2>/dev/null $MY_PATH/key_create_dunikey.py "$xzuid" "$phone" [[ ! $? == 0 ]] && echo "FAILED" && exit 1 g1pub=$(cat /tmp/secret.dunikey | grep "pub" | cut -d ' ' -f 2) g1sec=$(cat /tmp/secret.dunikey | grep "sec" | cut -d ' ' -f 2) echo $g1pub > /home/${YOU}/.zen/SMS/PHONE/${phonehash}/g1pub.txt G1=$(cat /home/${YOU}/.zen/SMS/PHONE/${phonehash}/g1pub.txt) [[ "$my_guildes" != "MIZ" ]] && my_guildes="MIZ;$my_guildes" ######################################################################## echo "## MAKING QRCODES FOR $G1" ######################################################################## qrencode -s 6 -o "/home/${YOU}/.zen/SMS/PHONE/${phonehash}/QR.png" "$g1pub" echo "# CREATE 4 DIGIT PASS" PASS=$(echo "${RANDOM}${RANDOM}${RANDOM}" | tail -c-5) && echo "$PASS" > /tmp/${xzuid}.pin echo "# $PASS SYMETRIC ENCRYPTION CODE" echo "$g1sec" > /tmp/${xzuid}.sec openssl enc -aes-256-cbc -salt -in /tmp/${xzuid}.sec -out "/tmp/${xzuid}.sec.ssl" -k $PASS sslsec=$(cat /tmp/${xzuid}.sec.ssl | base58) qrencode -s 6 -o "/home/${YOU}/.zen/SMS/PHONE/${phonehash}/QRSEC.png" "$sslsec" echo "## /home/${YOU}/.zen/SMS/PHONE/${phonehash}/QRSEC.png ($PASS) => $sslsec" ######################################################################## echo "## SAVING /home/${YOU}/.zen/SMS/PHONE/${phonehash}/secret.dunikey.encrypt" ######################################################################## $MY_PATH/natools.py encrypt -p $G1PUB -i /tmp/secret.dunikey -o /home/${YOU}/.zen/SMS/PHONE/${phonehash}/secret.dunikey.encrypt [[ ! $? == 0 ]] && echo "FAILED" && exit 1 ######################################################################## echo "CREATING EXTRATERRESTRIAL AVATAR PICTURE" ######################################################################## $MY_PATH/timeout.sh -t 10 curl -s https://thispersondoesnotexist.com/image -o /home/${YOU}/.zen/SMS/PHONE/${phonehash}/avatar.jpg if [[ -f /home/${YOU}/.zen/SMS/PHONE/${phonehash}/avatar.jpg ]]; then ######################################################################## echo "CREATING GCHANGE+ PROFILE" ######################################################################## $MY_PATH/timeout.sh -t 10 $MY_PATH/jaklis/jaklis.py -k /tmp/secret.dunikey -n "https://data.gchange.fr" set --name "${xzuid}" --avatar "/home/${YOU}/.zen/SMS/PHONE/${phonehash}/avatar.jpg" #GCHANGE+ [[ $? == 0 ]] && my_guildes="GCHANGE;$my_guildes" && mkdir -p /home/${YOU}/.zen/SMS/GUILDES/GCHANGE/INPUT ######################################################################## echo "CREATING CESIUM+ PROFILE" ######################################################################## $MY_PATH/timeout.sh -t 10 $MY_PATH/jaklis/jaklis.py -k /tmp/secret.dunikey -n "https://g1.data.e-is.pro" set --name "${xzuid}" --avatar "/home/${YOU}/.zen/SMS/PHONE/${phonehash}/avatar.jpg" #CESIUM+ [[ $? == 0 ]] && my_guildes="CESIUM;$my_guildes" && mkdir -p /home/${YOU}/.zen/SMS/GUILDES/CESIUM/INPUT fi ######################################################################## echo "## Encrypt ${phone} into /home/${YOU}/.zen/SMS/PHONE/${phonehash}/passwd.encrypt" ######################################################################## echo ${phone} > /tmp/${phone}_phone $MY_PATH/natools.py encrypt -p $G1PUB -i /tmp/${phone}_phone -o /home/${YOU}/.zen/SMS/PHONE/${phonehash}/passwd.encrypt [[ ! $? == 0 ]] && echo "Encrypt ${phone} FAILED" && exit 1 || rm /tmp/${phone}_phone ######################################################################## echo "## Encrypt ${xzuid}.pin into /home/${YOU}/.zen/SMS/PHONE/${phonehash}/pin.encrypt" ######################################################################## $MY_PATH/natools.py encrypt -p $G1PUB -i /tmp/${xzuid}.pin -o /home/${YOU}/.zen/SMS/PHONE/${phonehash}/pin.encrypt [[ ! $? == 0 ]] && echo "Encrypt ${xzuid}.pin FAILED" && exit 1 || rm /tmp/${xzuid}.pin ######################################################################## ## NEXTCLOUD LINKS ######################################################################## if [[ -f /var/www/nextcloud/occ ]]; then ######################################################################## echo "## NEXTCLOUD : ${xzuid} / ${phone} " ######################################################################## sudo su -s /bin/sh www-data -c "export OC_PASS=\"${phone}\" && php /var/www/nextcloud/occ user:add --password-from-env --group=\"MIZ\" --display-name=\"${xzuid}\" ${xzuid}" [[ $? == 0 ]] && my_guildes="NEXTCLOUD;$my_guildes" && mkdir -p /home/${YOU}/.zen/SMS/GUILDES/NEXTCLOUD/INPUT fi echo "=> $xzuid/$phone PASS=$PASS G1=$G1" ######################################################################## ## UTILISATEUR DEJA CONNU : RECUPERATION ID ET CLEFS $G1, $PASS else $MY_PATH/natools.py decrypt -f pubsec -k "/home/${YOU}/.zen/secret.dunikey" -i "/home/${YOU}/.zen/SMS/PHONE/${phonehash}/pin.encrypt" -o "/tmp/${phonehash}.pin" PASS=$(cat /tmp/${phonehash}.pin) && rm /tmp/${phonehash}.pin G1=$(cat /home/${YOU}/.zen/SMS/PHONE/${phonehash}/g1pub.txt) $MY_PATH/natools.py decrypt -f pubsec -k "/home/${YOU}/.zen/secret.dunikey" -i "/home/${YOU}/.zen/SMS/PHONE/${phonehash}/secret.dunikey.encrypt" -o "/tmp/secret.dunikey" echo "=> $xzuid/$phone DEJA INSCRIT PASS=$PASS G1=$G1" fi ######################################################################## ## NOUVELLE INSCRIPTION GUILDE (pas encore de lien INPUT/${phone}) # WELCOME MESSAGE is first GUIDE MESSAGE containing INTR0 keyword (INTRn) AGUIDE=$(ls /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/*_guide.txt | head -n 1 2>/dev/null) [[ $AGUIDE ]] \ && AMESS="$(cat $AGUIDE | grep "INTR0" | sed 's/INTR0//g' )" \ && WELCOME="$AMESS" \ || WELCOME="${xzuid} - GUILDE ${guilde} - SMS et Actions - Changez le monde https://oasis.astroport.com" ## Creation du message de bienvenue [[ ! -L /home/${YOU}/.zen/SMS/PHONE/${phonehash}/GUILDES/${guilde} ]] && echo "#!/bin/bash sudo gammu sendsms TEXT \"_PHONE_\" -text \"${WELCOME}\"" > /home/${YOU}/.zen/SMS/PHONE/${phonehash}/INTR0.${guilde}.tosend.sh ######################################################################## ## SCORE DU GUIDE SUR GCHANGE ?? OU ADMIN = 5 ######################################################################## $MY_PATH/timeout.sh -t 10 $MY_PATH/jaklis/jaklis.py -k /tmp/secret.dunikey -n "https://data.gchange.fr" stars -p "$G1" > /tmp/$G1.stars [ $? -eq 0 ] && XUIDSCORE=$(cat /tmp/$G1.stars | jq .score) || XUIDSCORE=0 ## SCORE > 4 DONNE DROIT DE CREER ET DIALOGUER AVEC LES GUILDES. SCORE=$(echo $XUIDSCORE | cut -d '.' -f 1) echo "***** ${xzuid} SCORE GCHANGE = $SCORE *****" ## MESSAGE DU GUIDE DE LA GUILDE OU DE L'ADMIN DE LA STATION ? if [[ $SCORE -ge 4 || ${phone} == $SMSADMIN ]]; then [[ ${phone} == $SMSADMIN ]] && SCORE=5 ## ADMIN SCORE=5 echo "GUILDE ADMIN ${guilde}/OUTPUT/" mkdir -p /home/${YOU}/.zen/SMS/GUILDES/${guilde}/MEMBERS/ mkdir -p /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/ mkdir -p /home/${YOU}/.zen/SMS/GUILDES/${guilde}/OUTPUT/ ## PREPARATION DU MESSAGE POUR LA GUILDE (_SEND2GUILDE.sh cut for long messages) if [[ ${message} != "${guilde}" && ${message} != "" ]]; then echo "[${guilde}] ${message}" > /tmp/sms_${guilde} ${MY_PATH}/_SEND2GUILDE.sh "${guilde}" ## Prepare /GUILDES/${guilde} tosend.sh files ;) fi echo "ADMIN GUILDE [${xzuid}/${SCORE}/${guilde}] ${message}" ## VERIFICATION DES LIENS AVEC LA GUILDE [[ ! -d /home/${YOU}/.zen/SMS/PHONE/${phonehash}/GUILDES ]] && mkdir -p /home/${YOU}/.zen/SMS/PHONE/${phonehash}/GUILDES [[ ! -L /home/${YOU}/.zen/SMS/PHONE/${phonehash}/GUILDES/${guilde} ]] && ln -s /home/${YOU}/.zen/SMS/GUILDES/${guilde} /home/${YOU}/.zen/SMS/PHONE/${phonehash}/GUILDES/${guilde} [[ ! -L /home/${YOU}/.zen/SMS/GUILDES/${guilde}/MEMBERS/${phone} ]] && ln -s /home/${YOU}/.zen/SMS/PHONE/${phonehash} /home/${YOU}/.zen/SMS/GUILDES/${guilde}/MEMBERS/${phone} ## HISTORIQUE MESSAGES du GUIDE avec MAJ SCORE # récupération anciens historiques du guide [[ $(ls /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/*_${phone}_guide.txt 2>/dev/null) ]] \ && cat /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/*_${phone}_guide.txt > /tmp/input_${phone}.sms # effacement historiques rm -f /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/*_${phone}_guide.txt # mise à jour /GUILDES/${guilde}/INPUT/${SCORE}_${phone}_guide.txt mv /tmp/input_${phone}.sms /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/${SCORE}_${phone}_guide.txt echo "${message}" >> /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/${SCORE}_${phone}_guide.txt exit 0 ## TRAITEMENT SPECIAL GUIDE ADMIN TERMINE fi ######################################################################## #GUILDE################################################################# ## RECUPERATION DE LA LIST DES GUILDES $my_guildes my_array=($(echo $my_guildes | tr ";" "\n")) #Print the split string for guilde in "${my_array[@]}" do [[ ${guilde} == "" ]] && continue ######################################################################## ## MEMORISATION INPUT, LIENS PHONE <-> GUILDE & NEXTCLOUD ######################################################################## if [[ -d /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT ]]; then ## MEMORISATION DU MESSAGE dans GUILDES/${guilde}/INPUT/ echo "${message}" >> /home/${YOU}/.zen/SMS/GUILDES/${guilde}/INPUT/${phone}.txt ## LIEN vers GUILDES/${guilde} dans PHONE/${phonehash}/GUILDES/ mkdir -p /home/${YOU}/.zen/SMS/PHONE/${phonehash}/GUILDES/ ln -s /home/${YOU}/.zen/SMS/GUILDES/${guilde} /home/${YOU}/.zen/SMS/PHONE/${phonehash}/GUILDES/${guilde} ## LIEN vers PHONE/${phonehash} dans GUILDES/${guilde}/MEMBERS/ mkdir -p /home/${YOU}/.zen/SMS/GUILDES/${guilde}/MEMBERS/ ln -s /home/${YOU}/.zen/SMS/PHONE/${phonehash} /home/${YOU}/.zen/SMS/GUILDES/${guilde}/MEMBERS/${phone} ## CREATION /MadeInZion/${guilde}/${xzuid} dans NEXTCLOUD if [[ -f /var/www/nextcloud/occ ]]; then sudo mkdir -p /var/www/nextcloud/data/${xzuid}/files/MadeInZion/${guilde}/${xzuid} ### IDEA !! USE /var/www/nextcloud/data/${xzuid} AS $HOME for SSH OPENPGP access... TODO ? fi ## CONFIRMATION SMS : INSCRIPTION A LA GUILDE echo "#!/bin/bash sudo gammu sendsms TEXT \"_PHONE_\" -text \"Inscription à ${guilde} : OK\"" > /home/${YOU}/.zen/SMS/PHONE/${phonehash}/$(date -u +%s%N | cut -b1-13).tosend.sh chmod +x /home/${YOU}/.zen/SMS/PHONE/${phonehash}/*.tosend.sh else ## GUILDE INCONNUE REPONSE SMS echo "#!/bin/bash sudo gammu sendsms TEXT \"_PHONE_\" -text \"Guilde ${guilde} inconnue. Trouvez ou proposez la votre sur https://oasis.astroport.com\"" > /home/${YOU}/.zen/SMS/PHONE/${phonehash}/$(date -u +%s%N | cut -b1-13).tosend.sh chmod +x /home/${YOU}/.zen/SMS/PHONE/${phonehash}/*.tosend.sh fi done ##################################################################GUILDE ######################################################################## ######################################################################## ## TAURUS LIVE DEMO PRINT ID + MESSAGE # Si une imprimante à autocollant est branchée => Impression Identité Numérique Directe # NB: Disable power off : https://github.com/pklaus/brother_ql/issues/50 # echo -n -e '\x1b\x69\x55\x41\x00\x00' | brother_ql -m QL-700 -p /dev/usb/lp0 send - ######################################################################## ## DOC IMAGE MAGICK https://legacy.imagemagick.org/Usage/layers/#append ######################################################################## if [[ $NEW == 1 ]]; then ts=$(date -u +%s%N | cut -b1-13) # PRINT MadeInZion_G1_ASTROPORT LOGO if [[ -e /dev/usb/lp0 ]]; then brother_ql_create --model QL-700 $MY_PATH/../img/MadeInZion_G1_ASTROPORT.png --label-size 62 > /tmp/LOGO.bin brother_ql_print /tmp/LOGO.bin /dev/usb/lp0 fi sudo cp $MY_PATH/../img/MadeInZion_G1_ASTROPORT.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/ # PRINT QR.png CREDENTIALS AND QR CODES if [[ -e /dev/usb/lp0 ]]; then brother_ql_create --model QL-700 /home/${YOU}/.zen/SMS/PHONE/${phonehash}/QR.png --label-size 62 > /tmp/${ts}_QR.bin brother_ql_print /tmp/${ts}_QR.bin /dev/usb/lp0 rm /tmp/${ts}_QR.bin else echo "NO PRINTER" fi sudo cp /home/${YOU}/.zen/SMS/PHONE/${phonehash}/QR.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/${G1}_QR.png # PRINT ${xzuid} ${phone} convert -background White label:"${xzuid} ${phone}" -append /tmp/${ts}_ID.png if [[ -e /dev/usb/lp0 ]]; then brother_ql_create --model QL-700 /tmp/${ts}_ID.png --label-size 62 > /tmp/${ts}_ID.bin brother_ql_print /tmp/${ts}_ID.bin /dev/usb/lp0 rm /tmp/${ts}_ID.bin /tmp/${ts}_ID.png fi sudo cp /tmp/${ts}_ID.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/ID_${G1}.png # PRINT QRSEC.png if [[ -e /dev/usb/lp0 ]]; then brother_ql_create --model QL-700 /home/${YOU}/.zen/SMS/PHONE/${phonehash}/QRSEC.png --label-size 62 > /tmp/${ts}_QRSEC.bin brother_ql_print /tmp/${ts}_QRSEC.bin /dev/usb/lp0; rm /tmp/${ts}_QRSEC.bin fi sudo cp /home/${YOU}/.zen/SMS/PHONE/${phonehash}/QRSEC.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/ # PRINT $PASS convert -background White label:"CODE SECRET : ${PASS} " -append /tmp/${ts}_PASS.png if [[ -e /dev/usb/lp0 ]]; then brother_ql_create --model QL-700 /tmp/${ts}_PASS.png --label-size 62 > /tmp/${ts}_PASS.bin brother_ql_print /tmp/${ts}_PASS.bin /dev/usb/lp0 rm /tmp/${ts}_PASS.bin /tmp/${ts}_PASS.png fi sudo cp /tmp/${ts}_PASS.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/PASS.png # Change Nextcloud files permission sudo chmod 775 /var/www/nextcloud/data/${xzuid}/files/MadeInZion 2>/dev/null sudo chown -R www-data:${YOU} /var/www/nextcloud/data/${xzuid}/files/MadeInZion 2>/dev/null else ## PUT DATA IN NEXTCLOUD FOLDER ( I dont' care if commands fails 2>/dev/null ) sudo cp .$MY_PATH/../img/MadeInZion_G1_ASTROPORT.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/ 2>/dev/null sudo cp /home/${YOU}/.zen/SMS/PHONE/${phonehash}/avatar.jpg /var/www/nextcloud/data/${xzuid}/files/MadeInZion/ 2>/dev/null sudo cp /home/${YOU}/.zen/SMS/PHONE/${phonehash}/QR.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/QR_${G1}.png 2>/dev/null sudo cp /home/${YOU}/.zen/SMS/PHONE/${phonehash}/QRSEC.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/QRSEC_${G1}.png 2>/dev/null convert -background White label:"${xzuid} ${phone}" -append /tmp/${ts}_ID.png 2>/dev/null sudo cp /tmp/${ts}_ID.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/ID_${G1}.png 2>/dev/null convert -background White label:"CODE SECRET : ${PASS} " -append /tmp/${ts}_PASS.png 2>/dev/null sudo cp /tmp/${ts}_PASS.png /var/www/nextcloud/data/${xzuid}/files/MadeInZion/PASS.png 2>/dev/null # Change Nextcloud files permission sudo chmod 775 /var/www/nextcloud/data/${xzuid}/files/MadeInZion 2>/dev/null sudo chown -R www-data:${YOU} /var/www/nextcloud/data/${xzuid}/files/MadeInZion 2>/dev/null fi exit 0