diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..bd03b9f5 Binary files /dev/null and b/.DS_Store differ diff --git a/12345.sh b/12345.sh index 6ee1fab5..af1f11ba 100755 --- a/12345.sh +++ b/12345.sh @@ -86,12 +86,15 @@ while true; do myHtml >> ~/.zen/tmp/${MOATS}/${PORT}.myHOST.http ## REPLACE RESPONSE PORT - sed -i -e "s~http://127.0.0.1:12345~http://${myIP}:${PORT}~g" \ + sed -i -e "s~http://127.0.0.1:12345~http://127.0.0.1:${PORT}~g" \ ~/.zen/tmp/${MOATS}/${PORT}.myHOST.http ## WAN REDIRECT TO HTTPS:// + /${PORT} [ -z "$isLAN" ] \ - && sed -i -e "s~http://${myIP}:${PORT}~${myASTROPORT}/${PORT}~g" ~/.zen/tmp/${MOATS}/${PORT}.myHOST.http + && sed -i -e "s~http://127.0.0.1:${PORT}~${myASTROPORT}/${PORT}~g" ~/.zen/tmp/${MOATS}/${PORT}.myHOST.http + + [ -n "$(zIp)" ]\ + && sed -i -e "s~http://127.0.0.1:${PORT}~$(zIp):${PORT}~g" ~/.zen/tmp/${MOATS}/${PORT}.myHOST.http ## UPLANET HOME LINK REPLACEMENT sed -i -e "s~https://qo-op.com~${myUPLANET}~g" ~/.zen/tmp/${MOATS}/${PORT}.myHOST.http @@ -133,7 +136,7 @@ while true; do ( nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && echo " (‿/‿) $PORT CONSUMED in "`expr $(date +%s) - $start`" seconds." ) & else mySalt | \ - sed "s~http://127.0.0.1:12345~${myASTROPORT}:${PORT}~g" | \ + sed "s~http://127.0.0.1:12345~http://${myASTROPORT}:${PORT}~g" | \ sed "s~https://qo-op.com~${myUPLANET}~g" | \ ( nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && echo " (‿/‿) $PORT CONSUMED in "`expr $(date +%s) - $start`" seconds." ) & fi diff --git a/20h12.process.sh b/20h12.process.sh index 9a1f3a07..c10183ca 100755 --- a/20h12.process.sh +++ b/20h12.process.sh @@ -4,8 +4,8 @@ # 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/tools/my.sh" +MY_PATH="`( cd \"${MY_PATH}\" && pwd )`" # absolutized and normalized +. "${MY_PATH}/tools/my.sh" start=`date +%s` echo "20H12 (♥‿‿♥) $(hostname -f) $(date)" espeak "Ding" > /dev/null 2>&1 @@ -15,18 +15,23 @@ LOWMODE=$(sudo systemctl status ipfs | grep disabled) ## IPFS DISABLED - START O [[ ! $(netstat -tan | grep 5001 | grep LISTEN) ]] && LOWMODE="NO 5001" ## IPFS IS STOPPED [[ ! $isLAN ]] && LOWMODE="" ## LOWMODE ONLY FOR LAN STATION # echo "$USER ALL=(ALL) NOPASSWD:/bin/systemctl" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/systemctl') + sudo systemctl restart ipfs && sleep 10 + floop=0 while [[ ! $(netstat -tan | grep 5001 | grep LISTEN) ]]; do sleep 10 ((floop++)) && [ $floop -gt 36 ] \ && echo "ERROR. IPFS daemon not restarting" \ - && $MY_PATH/tools/mailjet.sh "support@qo-op.com" "/tmp/20h12.log" "IPFS RESTART ERROR 20H12" \ + && ${MY_PATH}/tools/mailjet.sh "support@qo-op.com" "/tmp/20h12.log" "IPFS RESTART ERROR 20H12" \ && exit 1 done -# espeak "CODE git pull" > /dev/null 2>&1 -## REMOVE TMP BUT KEEP SWARM +# show ZONE.sh cache of the day +echo "TODAY UPlanet landings" +ls ~/.zen/tmp/ZONE_* 2>/dev/null + +## REMOVE TMP BUT KEEP SWARM and coucou mv ~/.zen/tmp/swarm ~/.zen/swarm mv ~/.zen/tmp/coucou ~/.zen/coucou rm -Rf ~/.zen/tmp/* @@ -39,36 +44,46 @@ mv ~/.zen/coucou ~/.zen/tmp/coucou && rm -Rf ~/.zen/G1BILLET/tmp/* ## UPDATE Astroport.ONE code -cd ~/.zen/Astroport.ONE/ +cd ${MY_PATH}/ git pull ## SOON /ipns/ Address !!! # espeak "20 HOURS 12 MINUTES. ASTROBOT RUNNING." > /dev/null 2>&1 ## Updating yt-dlp -$MY_PATH/youtube-dl.sh +${MY_PATH}/youtube-dl.sh sudo youtube-dl -U -# Refresh ~/.zen/game/world/G1VOEU -# NOW RUN FROM PLAYER.refresh.sh !! ~/.zen/Astroport.ONE/RUNTIME/VOEUX.refresh.sh +## DRAGON SSH WOT +echo "DRAGONS WOT OFF" +${MY_PATH}/RUNTIME/DRAGON_p2p_ssh.sh off +## PING BOOSTRAP & SWARM NODES +${MY_PATH}/ping_bootstrap.sh > /dev/null 2>&1 + +##################################### # espeak "Players refresh" > /dev/null 2>&1 # Refresh ~/.zen/game/players/PLAYER -~/.zen/Astroport.ONE/RUNTIME/PLAYER.refresh.sh - +##################################### +${MY_PATH}/RUNTIME/PLAYER.refresh.sh +##################################### +##################################### # espeak "REFRESHING UPLANET" > /dev/null 2>&1 -~/.zen/Astroport.ONE/RUNTIME/UPLANET.refresh.sh - +##################################### +${MY_PATH}/RUNTIME/UPLANET.refresh.sh +##################################### +##################################### # espeak "REFRESHING NODE" > /dev/null 2>&1 -~/.zen/Astroport.ONE/RUNTIME/NODE.refresh.sh - +##################################### +${MY_PATH}/RUNTIME/NODE.refresh.sh +##################################### ## if [[ ! $isLAN ]]; then ## REFRESH BOOSTRAP LIST (OFFICIAL SWARM) espeak "bootstrap refresh" > /dev/null 2>&1 ipfs bootstrap rm --all > /dev/null 2>&1 - for bootnode in $(cat ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | grep -Ev "#") # remove comments + for bootnode in $(cat ${MY_PATH}/A_boostrap_nodes.txt | grep -Ev "#") # remove comments do ipfsnodeid=${bootnode##*/} ipfs bootstrap add $bootnode @@ -85,23 +100,23 @@ seconds=$((dur % 60)) echo "DURATION ${hours} hours ${minutes} minutes ${seconds} seconds" echo "20H12 (♥‿‿♥) Execution time was $dur seconds." -# ~/.zen/Astroport.ONE/tools/ipfs_P2P_forward.sh ## COULD FORWARD LOCAL TCP PORT TO SWARM -rm ~/.zen/game/players/localhost/latest ## MAIL LOG : support@qo-op.com ## -$MY_PATH/tools/mailjet.sh "support@qo-op.com" "/tmp/20h12.log" "20H12" +${MY_PATH}/tools/mailjet.sh "support@qo-op.com" "/tmp/20h12.log" "20H12" espeak "DURATION ${hours} hours ${minutes} minutes ${seconds} seconds" > /dev/null 2>&1 +## RESTART + # espeak "Restarting Astroport Services" > /dev/null 2>&1 ## CLOSING API PORT [[ -s ~/.zen/.pid ]] && kill -9 $(cat ~/.zen/.pid) > /dev/null 2>&1 ## KILL ALL REMAINING nc killall nc 12345.sh > /dev/null 2>&1 -## OPEN API ENGINE +## SYSTEMD OR NOT SYSTEMD if [[ ! -f /etc/systemd/system/astroport.service ]]; then - ~/.zen/Astroport.ONE/12345.sh > ~/.zen/tmp/12345.log & + ${MY_PATH}/12345.sh > ~/.zen/tmp/12345.log & PID=$! echo $PID > ~/.zen/.pid else @@ -111,16 +126,24 @@ else fi -echo "IPFS LOW MODE ?" +echo "IPFS DAEMON LEVEL" +######### IPFS DAMEON NOT RUNNING ALL DAY ## IF IPFS DAEMON DISABLED : WAIT 1H & STOP IT [[ $LOWMODE != "" ]] \ - && echo "ON. $LOWMODE" \ - && sleep 360 \ + && echo "STOP IPFS $LOWMODE" \ + && sleep 3600 \ && sudo systemctl stop ipfs \ && exit 0 -echo "OFF. RESTART IPFS" +echo "HIGH. RESTART IPFS" sleep 60 sudo systemctl restart ipfs +################################# +### DRAGON WOT : SSH P2P RING OPENING +################################# +sleep 30 +echo "DRAGONS WOT ON" +${MY_PATH}/RUNTIME/DRAGON_p2p_ssh.sh + exit 0 diff --git a/API/DRAGONS.sh b/API/DRAGONS.sh new file mode 100755 index 00000000..12dd0768 --- /dev/null +++ b/API/DRAGONS.sh @@ -0,0 +1,79 @@ +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +################################################################################ +## API: DRAGONS +## Used by OSM2IPFS welcome.html +# ?zone=DEG&ulat=LAT&ulon=LON +## Search for TW numbers in received zone # >> return json +################################################################################ +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +. "${MY_PATH}/../tools/my.sh" + +start=`date +%s` + +echo "PORT=$1 +THAT=$2 +AND=$3 +THIS=$4 +APPNAME=$5 +WHAT=$6 +OBJ=$7 +VAL=$8 +MOATS=$9 +COOKIE=$10" +PORT="$1" THAT="$2" AND="$3" THIS="$4" APPNAME="$5" WHAT="$6" OBJ="$7" VAL="$8" MOATS="$9" COOKIE="$10" +### transfer variables according to script + +[[ $MOATS == "" ]] && echo "MISSING MOATS" && exit 1 + +HTTPCORS="HTTP/1.1 200 OK +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +Access-Control-Allow-Methods: GET +Server: Astroport.ONE +Content-Type: text/html; charset=UTF-8 + +" + +function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +# PREPARE HTTP RESPONSE (application/json) +mkdir -p ~/.zen/tmp/${MOATS}/ +echo "${HTTPCORS}" > ~/.zen/tmp/${MOATS}/http +sed -i "s~text/html~application/json~g" ~/.zen/tmp/${MOATS}/http + +# ------------------------------------------------------------------- # +# GET/?dragons +# ------------------------------------------------------------------- # +## RUNNING UPLANET STATIONS GPS DETECTION +rm ~/.zen/tmp/DRAGONS.json + +if [[ ! -s ~/.zen/tmp/DRAGONS.json ]]; then + + echo " ## cat ***/GPS.json" + cat ~/.zen/tmp/${IPFSNODEID}/GPS.json 2>/dev/null | jq -c '.[] + {ipfsnodeid: "'$IPFSNODEID'"}' > ~/.zen/tmp/${MOATS}/gps.grid + cat ~/.zen/tmp/swarm/12D*/GPS.json 2>/dev/null | jq -c '.[] + {ipfsnodeid: "'$IPFSNODEID'"}' | sort -u >> ~/.zen/tmp/${MOATS}/gps.grid + + cat ~/.zen/tmp/${MOATS}/gps.grid | jq -s '.' | sed -e 's/\[/[/' -e 's/\]/]/' -e 's/},{/},\n{/g' > ~/.zen/tmp/DRAGONS.json +fi + +#~ jq 'unique_by(.umap)' ~/.zen/tmp/DRAGONS.json > ~/.zen/tmp/DRAGONS_no_duplicates.json +#~ mv ~/.zen/tmp/DRAGONS_no_duplicates.json ~/.zen/tmp/DRAGONS.json +echo " ***** WELCOME DRAGONS =========== " +cat ~/.zen/tmp/DRAGONS.json + +### SEND RESPONSE ON PORT +cat ~/.zen/tmp/DRAGONS.json >> ~/.zen/tmp/${MOATS}/http +( + cat ~/.zen/tmp/${MOATS}/http | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + rm -Rf ~/.zen/tmp/${MOATS} && echo "BLURP DRAGONS.json" +) & + +## TIMING +end=`date +%s` +echo "(DRAGONS) Operation time was "`expr $end - $start` seconds. +exit 0 diff --git a/API/QRCODE.sh b/API/QRCODE.sh index d263a11f..b1c7a27b 100755 --- a/API/QRCODE.sh +++ b/API/QRCODE.sh @@ -87,31 +87,40 @@ fi ############################################################################### if [[ ${QRCODE} == "station" ]]; then - #~ # Keep 2nd try of the day - #~ [[ ! -s ~/.zen/tmp/_ISTATION ]] \ - #~ && mv ~/.zen/tmp/ISTATION ~/.zen/tmp/_ISTATION \ - #~ || cp ~/.zen/tmp/_ISTATION ~/.zen/tmp/ISTATION + ## CHECK FOR ANY ALREADY RUNNING make_image_ipfs_index_carousel + carouselrunning=$(ps axf --sort=+utime | grep -w 'make_image_ipfs_index_carousel' | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) if [[ ! -s ~/.zen/tmp/ISTATION ]]; then - ## GENERATE PLAYER G1 TO ZEN ACCOUNTING - ISTATION=$($MY_PATH/../tools/make_image_ipfs_index_carousel.sh | tail -n 1) - echo $ISTATION > ~/.zen/tmp/ISTATION ## STATION G1WALLET CAROUSEL + if [[ $carouselrunning ]]; then + ISTATION="/ipfs/QmVTHH8sTXEqRBsvcKo5jDo16rvp7Q7ERyHZP5vmWUxeS6" ## G1WorldCrafting.jpg + else + ## GENERATE PLAYER G1 TO ZEN ACCOUNTING + ISTATION=$($MY_PATH/../tools/make_image_ipfs_index_carousel.sh | tail -n 1) + echo $ISTATION > ~/.zen/tmp/ISTATION ## STATION G1WALLET CAROUSEL + fi else ISTATION=$(cat ~/.zen/tmp/ISTATION) fi - ## SHOW G1PALPAY FRONT (IFRAME) - sed "s~_STATION_~${myIPFSW}${ISTATION}/~g" $MY_PATH/../templates/ZenStation/index.html > ~/.zen/tmp/${MOATS}/index.htm - [[ ! $isLAN ]] && sed -i "s~MENU~HOSTING~g" ~/.zen/tmp/${MOATS}/index.htm - sed -i "s~http://127.0.0.1:8080~${myIPFSW}~g" ~/.zen/tmp/${MOATS}/index.htm - sed -i "s~http://127.0.0.1:33101~${myG1BILLET}~g" ~/.zen/tmp/${MOATS}/index.htm - sed -i "s~http://astroport.localhost:1234~${myASTROPORT}~g" ~/.zen/tmp/${MOATS}/index.htm - WSTATION="/ipfs/$(ipfs add -q ~/.zen/tmp/${MOATS}/index.htm)" - echo $WSTATION > ~/.zen/tmp/WSTATION - end=`date +%s` - echo "NEW WSTATION ${myIPFSW}${WSTATION} Execution time was "`expr $end - $start` seconds. - ## SEND TO WSTATION PAGE - sed "s~_TWLINK_~${myIPFSW}${WSTATION}/~g" ${MY_PATH}/../templates/index.302 > ~/.zen/tmp/${MOATS}/index.redirect + ## LOG IPFSNODEID : IPCity + Wheater + more... + ${MY_PATH}/../tools/IPFSNODEID.weather.sh > ~/.zen/tmp/${IPFSNODEID}/weather.txt + echo "" > ~/.zen/tmp/${IPFSNODEID}/_index.html + + ## SHOW ZenStation FRONT + sed "s~_STATION_~${myIPFS}${ISTATION}/~g" $MY_PATH/../templates/ZenStation/index.html > ~/.zen/tmp/${MOATS}/index.htm + sed -i "s~2L8vaYixCf97DMT8SistvQFeBj7vb6RQL7tvwyiv1XVH~${WORLDG1PUB}~g" ~/.zen/tmp/${MOATS}/index.htm + sed -i "s~http://127.0.0.1:8080~${myIPFS}~g" ~/.zen/tmp/${MOATS}/index.htm + sed -i "s~http://127.0.0.1:33101~${myG1BILLET}~g" ~/.zen/tmp/${MOATS}/index.htm + sed -i "s~http://astroport.localhost:1234~${myASTROPORT}~g" ~/.zen/tmp/${MOATS}/index.htm + + WSTATION="/ipfs/$(ipfs add -q ~/.zen/tmp/${MOATS}/index.htm)" + echo $WSTATION > ~/.zen/tmp/WSTATION + + end=`date +%s` + echo "NEW WSTATION ${myIPFS}${WSTATION} Execution time was "`expr $end - $start` seconds. + + ##302 REDIRECT TO WSTATION IPFS + sed "s~_TWLINK_~${myIPFS}${WSTATION}/~g" ${MY_PATH}/../templates/index.302 > ~/.zen/tmp/${MOATS}/index.redirect sed -i "s~Set-Cookie*~Set-Cookie: $COOKIE~" ~/.zen/tmp/${MOATS}/index.redirect echo "url='"${myIPFSW}${WSTATION}"'" >> ~/.zen/tmp/${MOATS}/index.redirect ( @@ -486,7 +495,7 @@ if [[ ${QRCODE:0:5} == "@@@@@" ]]; then && ipfs name publish -k ${player}_${VoeuName} /ipfs/${MILGRAM} & ) & - echo "PLEASE RETRY IN 30 SECONDS GETTING MESSAGE FROM IPFS" >> ~/.zen/tmp/${MOATS}/disco + echo "PLEASE RETRY IN 30 SECONDS GETTING MESSAGE FROM IPFS" >> ~/.zen/tmp/${MOATS}/disco ( cat ~/.zen/tmp/${MOATS}/disco | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 echo "BLURP $PORT" && rm -Rf ~/.zen/tmp/${MOATS} @@ -604,7 +613,7 @@ if [[ ${QRCODE:0:2} == "G1" && ${AND} == "tw" ]]; then ############################################## echo "## IPNS G1Voeu APP REDIRECT" tiddlywiki --load ${INDEX} --output ~/.zen/tmp --render '.' "${MOATS}.g1voeu.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[G1Voeu]]' - cat ~/.zen/tmp/${MOATS}.g1voeu.json | jq -r '.[].wish' > ~/.zen/tmp/${MOATS}.g1wishes.txt + cat ~/.zen/tmp/${MOATS}.g1voeu.json | jq -r 'map(select(.wish != null)) | .[].wish' > ~/.zen/tmp/${MOATS}.g1wishes.txt cat ~/.zen/tmp/${MOATS}.g1wishes.txt while read WISH do @@ -641,6 +650,7 @@ fi ################################################################################ ## QRCODE = IPNS or G1PUB ? Can be ASTRONAUTENS or G1PUB format ZCHK="$(echo $THAT | cut -d ':' -f 2-)" # ChK or ZEN +[[ $ZCHK == $THAT ]] && ZCHK="" QRCODE="${QRCODE%%:*}" ## TRIM :ChK ################################################################################ ################################################################################ @@ -650,7 +660,7 @@ echo "IPNS2G1=${IPNS2G1} ZCHK=${ZCHK}" [[ ${ZCHK} == "" && ${#IPNS2G1} -ge 40 && ${QRCODE::4} == "12D3" ]] \ && echo "${PORT} QRCODE IS IPNS ADDRESS : ${myIPFS}/ipns/${QRCODE}" \ && (echo "$HTTPCORS Loading from IPFS" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) \ - && echo "PRULS /ipns/${QRCODE} $PORT" && rm -Rf ~/.zen/tmp/${MOATS} \ + && echo "GLUPS /ipns/${QRCODE} $PORT" && rm -Rf ~/.zen/tmp/${MOATS} \ && exit 0 ## TEST G1 TYPE ( try g1_to_ipfs ) @@ -658,7 +668,7 @@ ASTROTOIPNS=$(${MY_PATH}/../tools/g1_to_ipfs.py ${QRCODE} 2>/dev/null) [[ ! ${ASTROTOIPNS} ]] \ && echo "${PORT} INVALID QRCODE : ${QRCODE}" \ && (echo "$HTTPCORS ERROR - INVALID QRCODE : ${QRCODE}" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) \ - && echo "PRULS INVALID ${QRCODE} $PORT" && rm -Rf ~/.zen/tmp/${MOATS} \ + && echo "GLUPS INVALID ${QRCODE} $PORT" && rm -Rf ~/.zen/tmp/${MOATS} \ && exit 1 ################################################################################ echo "############################################################################" @@ -673,29 +683,23 @@ echo ">>> ${QRCODE} g1_to_ipfs $ASTROTOIPNS" && ZEN=$(echo "($VISITORCOINS - 1) * 10" | bc | cut -d '.' -f 1) \ || ZEN="-10" - DISPLAY="$VISITORCOINS G1" + DISPLAY="$VISITORCOINS G1" ## WALLET VIERGE ########################################### if [[ $VISITORCOINS == "null" || ${ZEN} -lt 10 ]]; then - echo "!! LOW ZEN WALLET ZEN=${ZEN}" + DISPLAY="$DISPLAY + !! LOW ZEN WALLET ZEN=${ZEN}" - echo "${HTTPCORS}" > ~/.zen/tmp/${MOATS}/index.redirect - echo "LOW ZEN WARNING - PLEASE CHARGE... only ${ZEN} ZEN - " >> ~/.zen/tmp/${MOATS}/index.redirect - ( - cat ~/.zen/tmp/${MOATS}/index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 - echo "BLURP null ZEN $PORT" && rm -Rf ~/.zen/tmp/${MOATS} - ) & - exit 0 + DISPLAY="$DISPLAYLOW ZEN WARNING + PLEASE CHARGE... ${ZEN} ZEN" fi ## WE SEND WALLET AMOUNT DISPLAY ( - echo "$HTTPCORS ${ZCHK}:${QRCODE}${DISPLAY}SCAN WALLET" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + echo "$HTTPCORS ${QRCODE}:${ZCHK}:${DISPLAY}SCAN WALLET" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 echo "BLURP ${DISPLAY} $PORT" && rm -Rf ~/.zen/tmp/${MOATS} ) & diff --git a/API/SALT.sh b/API/SALT.sh index e1db3ad9..04dcbc9b 100755 --- a/API/SALT.sh +++ b/API/SALT.sh @@ -26,34 +26,38 @@ Content-Type: text/html; charset=UTF-8 " mkdir -p ~/.zen/tmp/${MOATS}/ - [[ ! $APPNAME || $SALT == "pepper" ]] && echo "NO APPNAME - BAD APP - CONTINUE" && (echo "$HTTPCORS ERROR - BAD CREDENTIALS" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 - ############################################################################ - # WRITING API # SALT # PEPPER # MAKING THE KEY EXIST ######### - ################### KEY GEN ################################### - echo ">>>>>>>>>>>>>> Application LaBureautique >><< APPNAME = $APPNAME <<<<<<<<<<<<<<<<<<<<" +[[ ! $APPNAME || $SALT == "pepper" ]] \ + && echo "NO APPNAME - BAD APP - CONTINUE" \ + && (echo "$HTTPCORS ERROR - BAD CREDENTIALS" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) \ + && exit 1 - [[ ! $SALT ]] && (echo "$HTTPCORS ERROR - SALT MISSING" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 - [[ ! $PEPPER || ${PEPPER:0:2} == "G1" ]] && (echo "$HTTPCORS ERROR - BAD OR PEPPER MISSING" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 +############################################################################ +# WRITING API # SALT # PEPPER # MAKING THE KEY EXIST ######### +################### KEY GEN ################################### +echo ">>>>>>>>>>>>>> Application LaBureautique >><< APPNAME = $APPNAME <<<<<<<<<<<<<<<<<<<<" - ## SAVE "salt" "pepper" DEBUG REMOVE OR PASS ENCRYPT FOR SECURITY REASON - echo "PLAYER : \"$SALT\" \"$PEPPER\" : $APPNAME ($WHAT)" - echo "\"$SALT\" \"$PEPPER\"" > ~/.zen/tmp/${MOATS}/${MOATS}.secret.june +[[ ! $SALT ]] && (echo "$HTTPCORS ERROR - SALT MISSING" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 +[[ ! $PEPPER || ${PEPPER:0:2} == "G1" ]] && (echo "$HTTPCORS ERROR - BAD OR PEPPER MISSING" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 - # CALCULATING ${MOATS}.secret.key + G1PUB - ${MY_PATH}/../tools/keygen -t duniter -o ~/.zen/tmp/${MOATS}/${MOATS}.secret.key "$SALT" "$PEPPER" - G1PUB=$(cat ~/.zen/tmp/${MOATS}/${MOATS}.secret.key | grep 'pub:' | cut -d ' ' -f 2) - [[ ! ${G1PUB} ]] && (echo "$HTTPCORS ERROR - (╥☁╥ ) - KEYGEN COMPUTATION DISFUNCTON" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 - echo "G1PUB : ${G1PUB}" +## SAVE "salt" "pepper" DEBUG REMOVE OR PASS ENCRYPT FOR SECURITY REASON +echo "PLAYER : \"$SALT\" \"$PEPPER\" : $APPNAME ($WHAT)" +echo "\"$SALT\" \"$PEPPER\"" > ~/.zen/tmp/${MOATS}/${MOATS}.secret.june - ## CALCULATING ${MOATS}.${G1PUB}.ipns.key ADDRESS - ipfs key rm ${G1PUB} > /dev/null 2>&1 - rm -f ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key - ${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key "$SALT" "$PEPPER" - ASTRONAUTENS=$(ipfs key import ${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key ) - [[ ! ${ASTRONAUTENS} ]] && (echo "$HTTPCORS ERROR - (╥☁╥ ) - ASTRONAUTENS COMPUTATION DISFUNCTON" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 +# CALCULATING ${MOATS}.secret.key + G1PUB +${MY_PATH}/../tools/keygen -t duniter -o ~/.zen/tmp/${MOATS}/${MOATS}.secret.key "$SALT" "$PEPPER" +G1PUB=$(cat ~/.zen/tmp/${MOATS}/${MOATS}.secret.key | grep 'pub:' | cut -d ' ' -f 2) +[[ ! ${G1PUB} ]] && (echo "$HTTPCORS ERROR - (╥☁╥ ) - KEYGEN COMPUTATION DISFUNCTON" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 +echo "G1PUB : ${G1PUB}" - echo "TW ADDRESS : $myIPFS/ipns/${ASTRONAUTENS}" - echo +## CALCULATING ${MOATS}.${G1PUB}.ipns.key ADDRESS +ipfs key rm ${G1PUB} > /dev/null 2>&1 +rm -f ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key +${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key "$SALT" "$PEPPER" +ASTRONAUTENS=$(ipfs key import ${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key ) +[[ ! ${ASTRONAUTENS} ]] && (echo "$HTTPCORS ERROR - (╥☁╥ ) - ASTRONAUTENS COMPUTATION DISFUNCTON" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 1 + +echo "TW ADDRESS : $myIPFS/ipns/${ASTRONAUTENS}" +echo ######################################## ## APPNAME SELECTION ######################## @@ -62,156 +66,155 @@ mkdir -p ~/.zen/tmp/${MOATS}/ ############################################## # MESSAGING : GET MESSAGE FROM GCHANGE+ ############################################## - if [[ $APPNAME == "messaging" ]]; then +if [[ $APPNAME == "messaging" ]]; then - ( ## & SUB PROCESS + ( ## & SUB PROCESS - echo "Extracting ${G1PUB} messages..." - ~/.zen/Astroport.ONE/tools/timeout.sh -t 12 \ - ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key read -n 10 -j > ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json - [[ ! -s ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json || $(grep -v -E 'Aucun message à afficher' ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json) == "True" ]] && echo "[]" > ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json + echo "Extracting ${G1PUB} messages..." + ~/.zen/Astroport.ONE/tools/timeout.sh -t 12 \ + ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key read -n 10 -j > ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json + [[ ! -s ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json || $(grep -v -E 'Aucun message à afficher' ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json) == "True" ]] && echo "[]" > ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json - ~/.zen/Astroport.ONE/tools/timeout.sh -t 12 \ - ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key read -n 10 -j -o > ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json - [[ ! -s ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json || $(grep -v -E 'Aucun message à afficher' ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json) == "True" ]] && echo "[]" > ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json + ~/.zen/Astroport.ONE/tools/timeout.sh -t 12 \ + ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key read -n 10 -j -o > ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json + [[ ! -s ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json || $(grep -v -E 'Aucun message à afficher' ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json) == "True" ]] && echo "[]" > ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json - echo "Creating messages In/Out JSON ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json" - echo '[' > ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json - cat ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json - echo "," >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json - cat ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json - echo ']' >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json + echo "Creating messages In/Out JSON ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json" + echo '[' > ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json + cat ~/.zen/tmp/${MOATS}/messin.${G1PUB}.json >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json + echo "," >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json + cat ~/.zen/tmp/${MOATS}/messout.${G1PUB}.json >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json + echo ']' >> ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json - ## ADDING HTTP/1.1 PROTOCOL HEADER - echo "$HTTPCORS" > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - sed -i "s~text/html~application/json~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - cat ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + ## ADDING HTTP/1.1 PROTOCOL HEADER + echo "$HTTPCORS" > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + sed -i "s~text/html~application/json~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + cat ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - ## SEND REPONSE PROCESS IN BACKGROUD - ( cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && rm ~/.zen/tmp/${MOATS}/${MOATS}* ) & - #~ ( ## USING IPNS SESSION KEY - #~ REPONSE=$(cat ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json | ipfs add -q) - #~ ipfs name publish --allow-offline --key=${PORT} /ipfs/$REPONSE - #~ echo "SESSION ${myIPFS}/ipns/$SESSIONNS " - #~ ) & + ## SEND REPONSE PROCESS IN BACKGROUD + ( cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && rm ~/.zen/tmp/${MOATS}/${MOATS}* ) & + #~ ( ## USING IPNS SESSION KEY + #~ REPONSE=$(cat ~/.zen/tmp/${MOATS}/${MOATS}.messaging.json | ipfs add -q) + #~ ipfs name publish --allow-offline --key=${PORT} /ipfs/$REPONSE + #~ echo "SESSION ${myIPFS}/ipns/$SESSIONNS " + #~ ) & - end=`date +%s` - dur=`expr $end - $start` - echo ${MOATS}:${G1PUB}:${PLAYER}:${APPNAME}:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings - cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1 + end=`date +%s` + dur=`expr $end - $start` + echo ${MOATS}:${G1PUB}:${PLAYER}:${APPNAME}:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings + cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1 - ) & ## & SUB PROCESS + ) & ## & SUB PROCESS - end=`date +%s` - echo " Messaging launch (☓‿‿☓) Execution time was "`expr $end - $start` seconds. - exit 0 - fi - ######################## MESSAGING END + end=`date +%s` + echo " Messaging launch (☓‿‿☓) Execution time was "`expr $end - $start` seconds. + exit 0 +fi +######################## MESSAGING END ######################################## # G1PUB : REDIRECT TO GCHANGE OR TW + EMAIL => CREATE PLAYER ! ######################################## - if [[ "$APPNAME" == "g1pub" ]]; then +if [[ "$APPNAME" == "g1pub" ]]; then - if [[ "$OBJ" != "email" ]]; then - ## WITH NO EMAIL -> Open Gchange Profile & Update TW cache - [[ ${WHAT} == "astro" ]] && REPLACE="https://$myTUBE/ipns/${ASTRONAUTENS}" \ - || REPLACE="$myGCHANGE/#/app/user/${G1PUB}" - echo ${REPLACE} + if [[ "$OBJ" != "email" ]]; then + ## WITH NO EMAIL -> Open Gchange Profile & Update TW cache + [[ ${WHAT} == "astro" ]] && REPLACE="https://$myTUBE/ipns/${ASTRONAUTENS}" \ + || REPLACE="$myGCHANGE/#/app/user/${G1PUB}" + echo ${REPLACE} - ## REDIRECT TO TW OR GCHANGE PROFILE - sed "s~_TWLINK_~${REPLACE}/~g" ~/.zen/Astroport.ONE/templates/index.302 > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - ## USED BY https://git.p2p.legal/La_Bureautique/zeg1jeux/src/branch/main/lib/Fred.class.php#L81 - echo "url='"${REPLACE}"'" >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + ## REDIRECT TO TW OR GCHANGE PROFILE + sed "s~_TWLINK_~${REPLACE}/~g" ~/.zen/Astroport.ONE/templates/index.302 > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + ## USED BY https://git.p2p.legal/La_Bureautique/zeg1jeux/src/branch/main/lib/Fred.class.php#L81 + echo "url='"${REPLACE}"'" >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - ### REPONSE=$(echo $myGCHANGE/#/app/user/${G1PUB}/ | ipfs add -q) - ### ipfs name publish --allow-offline --key=${PORT} /ipfs/$REPONSE - ### echo "SESSION ${myIPFS}/ipns/$SESSIONNS " - ( - cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 - ${MY_PATH}/../tools/TW.cache.sh ${ASTRONAUTENS} ${MOATS} - rm ~/.zen/tmp/${MOATS}/${MOATS}* - ) & - end=`date +%s` - echo $APPNAME" (0‿‿0) ${WHAT} Execution time was "`expr $end - $start` seconds. - exit 0 + ### REPONSE=$(echo $myGCHANGE/#/app/user/${G1PUB}/ | ipfs add -q) + ### ipfs name publish --allow-offline --key=${PORT} /ipfs/$REPONSE + ### echo "SESSION ${myIPFS}/ipns/$SESSIONNS " + ( + cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + ${MY_PATH}/../tools/TW.cache.sh ${ASTRONAUTENS} ${MOATS} + rm ~/.zen/tmp/${MOATS}/${MOATS}* + ) & + end=`date +%s` + echo $APPNAME" (0‿‿0) ${WHAT} Execution time was "`expr $end - $start` seconds. + exit 0 - else + else - # CREATE PLAYER : ?salt=PHRASE%20UNE&pepper=PHRASE%20DEUX&g1pub=on&email=EMAIL&pseudo=PROFILENAME - # WHAT can contain urlencoded FullURL - EMAIL="${VAL,,}" # lowercase + # CREATE PLAYER : ?salt=PHRASE%20UNE&pepper=PHRASE%20DEUX&g1pub=on&email=EMAIL&pseudo=PROFILENAME + # WHAT can contain urlencoded FullURL + EMAIL="${VAL,,}" # lowercase - [[ ! ${EMAIL} ]] && (echo "$HTTPCORS ERROR - MISSING ${EMAIL} FOR ${WHAT} CONTACT" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 0 - - ## CHECK WHAT IS EMAIL - if [[ "${EMAIL}" =~ ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then - echo "VALID EMAIL OK" - else - echo "BAD EMAIL" - (echo "$HTTPCORS KO ${EMAIL} : bad '" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 0 - fi - - ## CREATE PSEUDO FROM - if [[ ! $PSEUDO ]]; then - PSEUDO=$(echo ${EMAIL} | cut -d '@' -f 1) - PSEUDO=${PSEUDO,,}; PSEUDO=${PSEUDO%%[0-9]*}${RANDOM:0:4} - fi - - if [[ ! -d ~/.zen/game/players/${EMAIL} ]]; then - - echo "# ASTRONAUT NEW VISA Create VISA.new.sh in background (~/.zen/tmp/email.${EMAIL}.${MOATS}.txt)" - - ( - startvisa=`date +%s` - [[ "$SALT" == "0" && "$PEPPER" == "0" ]] && SALT="" && PEPPER="" # "0" "0" means random salt pepper - #~ echo "VISA.new : \"$SALT\" \"$PEPPER\" \"${EMAIL}\" \"$PSEUDO\" \"${WHAT}\"" > ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt - ${MY_PATH}/../RUNTIME/VISA.new.sh "$SALT" "$PEPPER" "${EMAIL}" "$PSEUDO" "${WHAT}" >> ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt - - ${MY_PATH}/../tools/mailjet.sh "${EMAIL}" ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt "LOG ZenCard creation" ## Send VISA.new log to EMAIL - - echo "Le code de votre ASTROID est ${PASS}, scannez-le sur La♥Box ẐenStation (demo : https://astroport.copylaradio.com)" > ~/.zen/tmp/${MOATS}/intro.txt - - ## EXECUTE LAST LINE - $(cat ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt | tail -n 1) - echo "export ASTROTW=/ipns/$ASTRONAUTENS ASTROG1=$G1PUB ASTROMAIL=$PLAYER ASTROFEED=$FEEDNS PASS=$PASS" - - BILLETNAME=$(echo "$SALT" | sed 's/ /_/g') - mpack -a -s "La♥Box : ASTROID :+: TW :+: " -d ~/.zen/tmp/${MOATS}/intro.txt \ - ~/.zen/G1BILLET/tmp/g1billet/${PASS}/${BILLETNAME}.BILLET.jpg ${PLAYER} - - end=`date +%s` - dur=`expr $end - $startvisa` - echo ${MOATS}:${G1PUB}:${PLAYER}:VISA:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings - cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1 - ) & - - echo "$HTTPCORS - - ASTRONAUTE $PSEUDO - KEY : $SALT:$PEPPER:${EMAIL} - TW : ${myIPFS}/ipns/${ASTRONAUTENS} - STATION : ${myIPFS}/ipns/$IPFSNODEIDplease wait.... - export ASTROTW=/ipns/${ASTRONAUTENS} ASTROG1=${G1PUB} ASTROMAIL=${EMAIL} ASTROIPFS=${myIPFS}" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & - - exit 0 - - else - - # ASTRONAUT EXISTING ${EMAIL} - CHECK=$(cat ~/.zen/game/players/${EMAIL}/secret.june | grep -w "$SALT") - [[ $CHECK ]] && CHECK=$(cat ~/.zen/game/players/${EMAIL}/secret.june | grep -w "$PEPPER") - [[ ! $CHECK ]] && (echo "$HTTPCORS - WARNING - PLAYER ${EMAIL} ALREADY HERE" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 0 - - fi - - ################################################################################################### - end=`date +%s` - echo " (☓‿‿☓) Execution time was "`expr $end - $start` seconds. - - fi + [[ ! ${EMAIL} ]] && (echo "$HTTPCORS ERROR - MISSING ${EMAIL} FOR ${WHAT} CONTACT" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 0 + ## CHECK WHAT IS EMAIL + if [[ "${EMAIL}" =~ ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then + echo "VALID EMAIL OK" + else + echo "BAD EMAIL" + (echo "$HTTPCORS KO ${EMAIL} : bad '" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && exit 0 fi + + ## CREATE PSEUDO FROM + if [[ ! $PSEUDO ]]; then + PSEUDO=$(echo ${EMAIL} | cut -d '@' -f 1) + PSEUDO=${PSEUDO,,}; PSEUDO=${PSEUDO%%[0-9]*}${RANDOM:0:4} + fi + + if [[ ! -d ~/.zen/game/players/${EMAIL} ]]; then + + echo "# ASTRONAUT NEW VISA Create VISA.new.sh in background (~/.zen/tmp/email.${EMAIL}.${MOATS}.txt)" + + ( + startvisa=`date +%s` + [[ "$SALT" == "0" && "$PEPPER" == "0" ]] && SALT="" && PEPPER="" # "0" "0" means random salt pepper + #~ echo "VISA.new : \"$SALT\" \"$PEPPER\" \"${EMAIL}\" \"$PSEUDO\" \"${WHAT}\"" > ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt + ${MY_PATH}/../RUNTIME/VISA.new.sh "$SALT" "$PEPPER" "${EMAIL}" "$PSEUDO" "${WHAT}" >> ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt + + #~ ${MY_PATH}/../tools/mailjet.sh "${EMAIL}" ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt "LOG ZenCard creation" ## Send VISA.new log to EMAIL + + echo "ASTROID PIN=${PASS}, operate on all La♥Box Web3 ẐenStation (WWW : https://astroport.copylaradio.com)" + ## :: TRICK :: EXECUTE LAST VISA.new.sh output LINE : export above VARs + $(cat ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt | tail -n 1) + echo "export ASTROTW=/ipns/$ASTRONAUTENS ASTROG1=$G1PUB ASTROMAIL=$PLAYER ASTROFEED=$FEEDNS PASS=$PASS" + + BILLETNAME=$(echo "$SALT" | sed 's/ /_/g') + #~ mpack -a -s "La♥Box : ASTROID :+: TW :+: " -d ~/.zen/tmp/${MOATS}/intro.txt \ + #~ ~/.zen/G1BILLET/tmp/g1billet/${PASS}/${BILLETNAME}.BILLET.jpg ${PLAYER} + + end=`date +%s` + dur=`expr $end - $startvisa` + echo ${MOATS}:${G1PUB}:${PLAYER}:VISA:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings + cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1 + ) & + + echo "$HTTPCORS + + ASTRONAUTE $PSEUDO + KEY : $SALT:$PEPPER:${EMAIL} + TW : ${myIPFS}/ipns/${ASTRONAUTENS} + STATION : ${myIPFS}/ipns/$IPFSNODEIDplease wait.... + export ASTROTW=/ipns/${ASTRONAUTENS} ASTROG1=${G1PUB} ASTROMAIL=${EMAIL} ASTROIPFS=${myIPFS}" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & + + exit 0 + + else + + # ASTRONAUT EXISTING ${EMAIL} + CHECK=$(cat ~/.zen/game/players/${EMAIL}/secret.june | grep -w "$SALT") + [[ $CHECK ]] && CHECK=$(cat ~/.zen/game/players/${EMAIL}/secret.june | grep -w "$PEPPER") + [[ ! $CHECK ]] && (echo "$HTTPCORS - WARNING - PLAYER ${EMAIL} ALREADY HERE" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 0 + + fi + + ################################################################################################### + end=`date +%s` + echo " (☓‿‿☓) Execution time was "`expr $end - $start` seconds. + + fi + +fi ######################################## ######################################## @@ -219,291 +222,294 @@ mkdir -p ~/.zen/tmp/${MOATS}/ #TESTCRAFT=ON nodeid dataid ######################################## ######################################## - if [[ "$APPNAME" == "testcraft" ]]; then +if [[ "$APPNAME" == "testcraft" ]]; then - ( # testcraft & SUB PROCESS +( # testcraft & SUB PROCESS - start=`date +%s` - ## RECORD DATA MADE IN BROWSER (JSON) - OBJID=$OBJ - DATAID=$VAL + start=`date +%s` + ## RECORD DATA MADE IN BROWSER (JSON) + OBJID=$OBJ + DATAID=$VAL - ## export PLAYER - ${MY_PATH}/../tools/TW.cache.sh ${ASTRONAUTENS} ${MOATS} + ## export PLAYER + ${MY_PATH}/../tools/TW.cache.sh ${ASTRONAUTENS} ${MOATS} - ## IS IT INDEX JSON - echo "${PLAYER} $APPNAME IS ${WHAT}" - mkdir -p ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER} + ## IS IT INDEX JSON + echo "${PLAYER} $APPNAME IS ${WHAT}" + mkdir -p ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER} - [[ $WHAT == "on" ]] && WHAT="json" # data mimetype (default "on" = json) + [[ $WHAT == "on" ]] && WHAT="json" # data mimetype (default "on" = json) - ## TODO : modify timeout if isLAN or NOT - [[ $isLAN ]] && WAIT=3 || WAIT=12 - echo "1ST TRY : ipfs --timeout ${WAIT}s cat /ipfs/$DATAID > ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT}" - ipfs --timeout ${WAIT}s cat /ipfs/$DATAID > ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} + ## TODO : modify timeout if isLAN or NOT + [[ $isLAN ]] && WAIT=3 || WAIT=12 + echo "1ST TRY : ipfs --timeout ${WAIT}s cat /ipfs/$DATAID > ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT}" + ipfs --timeout ${WAIT}s cat /ipfs/$DATAID > ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh - if [[ ! -s ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ]]; then + if [[ ! -s ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ]]; then - echo "IPFS TIMEOUT >>> (°▃▃°) $DATAID STILL MISSING GATEWAY BANGING FOR IT (°▃▃°)" - array=(${myIPFSGW}/ipfs/:hash https://ipns.co/:hash https://dweb.link/ipfs/:hash https://ipfs.io/ipfs/:hash https://ipfs.fleek.co/ipfs/:hash https://ipfs.best-practice.se/ipfs/:hash https://gateway.pinata.cloud/ipfs/:hash https://gateway.ipfs.io/ipfs/:hash https://cf-ipfs.com/ipfs/:hash https://cloudflare-ipfs.com/ipfs/:hash) - # size=${#array[@]}; index=$(($RANDOM % $size)); echo ${array[$index]} ## TODO CHOOSE RANDOM + echo "IPFS TIMEOUT >>> (°▃▃°) $DATAID STILL MISSING GATEWAY BANGING FOR IT (°▃▃°)" + array=(${myIPFSGW}/ipfs/:hash https://ipns.co/:hash https://dweb.link/ipfs/:hash https://ipfs.io/ipfs/:hash https://ipfs.fleek.co/ipfs/:hash https://ipfs.best-practice.se/ipfs/:hash https://gateway.pinata.cloud/ipfs/:hash https://gateway.ipfs.io/ipfs/:hash https://cf-ipfs.com/ipfs/:hash https://cloudflare-ipfs.com/ipfs/:hash) + # size=${#array[@]}; index=$(($RANDOM % $size)); echo ${array[$index]} ## TODO CHOOSE RANDOM - # official ipfs best gateway from https://luke.lol/ipfs.php - for nicegw in ${array[@]}; do + # official ipfs best gateway from https://luke.lol/ipfs.php + for nicegw in ${array[@]}; do - [[ $(cat ~/.zen/tmp/.ipfsgw.bad.twt | grep -w $nicegw) ]] && echo "<<< BAD GATEWAY >>> $nicegw" && exit 0 - gum=$(echo "$nicegw" | sed "s~:hash~$DATAID~g") - echo "LOADING $gum" - curl -m 5 -so ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} "$gum" - [[ $? != 0 ]] && echo "(✜‿‿✜) BYPASSING" + [[ $(cat ~/.zen/tmp/.ipfsgw.bad.twt | grep -w $nicegw) ]] && echo "<<< BAD GATEWAY >>> $nicegw" && exit 0 + gum=$(echo "$nicegw" | sed "s~:hash~$DATAID~g") + echo "LOADING $gum" + curl -m 5 -so ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} "$gum" + [[ $? != 0 ]] && echo "(✜‿‿✜) BYPASSING" - if [[ -s ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ]]; then + if [[ -s ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ]]; then - MIME=$(mimetype -b ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT}) - GOAL=$(ipfs add -q ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT}) + MIME=$(mimetype -b ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT}) + GOAL=$(ipfs add -q ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT}) - if [[ ${GOAL} != ${DATAID} ]]; then - echo " (╥☁╥ ) - BAD ${WHAT} FORMAT ERROR ${MIME} - (╥☁╥ )" - ipfs pin rm /ipfs/${GOAL} - rm ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} - # NOT A JSON AVOID BANISHMENT - echo $nicegw >> ~/.zen/tmp/.ipfsgw.bad.twt - exit 0 + if [[ ${GOAL} != ${DATAID} ]]; then + echo " (╥☁╥ ) - BAD ${WHAT} FORMAT ERROR ${MIME} - (╥☁╥ )" + ipfs pin rm /ipfs/${GOAL} + rm ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} + # NOT A JSON AVOID BANISHMENT + echo $nicegw >> ~/.zen/tmp/.ipfsgw.bad.twt + exit 0 - else - ## GOT IT !! IPFS ADD - ipfs pin add /ipfs/${GOAL} - ## + TW ADD (new_file_in_astroport.sh) + else + ## GOT IT !! IPFS ADD + ipfs pin add /ipfs/${GOAL} + ## + TW ADD (new_file_in_astroport.sh) - echo "(♥‿‿♥) FILE UPLOAD OK"; echo - break + echo "(♥‿‿♥) FILE UPLOAD OK"; echo + break - fi + fi - else + else - echo " (⇀‿‿↼) - NO FILE - (⇀‿‿↼)" - exit 0 + echo " (⇀‿‿↼) - NO FILE - (⇀‿‿↼)" + exit 0 - fi + fi - done + done - fi ## NO DIRECT IPFS - GATEWAY TRY + fi ## NO DIRECT IPFS - GATEWAY TRY - ## REALLY NO FILE FOUND !!! - [[ ! -s ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ]] && \ - echo "$HTTPCORS ERROR (╥☁╥ ) - $DATAID TIMEOUT - (╥☁╥ )" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & + ## REALLY NO FILE FOUND !!! + [[ ! -s ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ]] && \ + echo "$HTTPCORS ERROR (╥☁╥ ) - $DATAID TIMEOUT - (╥☁╥ )" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & - ## SPECIAL index.[json/html/...] MODE. - [[ ${WHAT} == "index" ]] && cp ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/index.json + ## SPECIAL index.[json/html/...] MODE. + [[ ${WHAT} == "index" ]] && cp ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/index.json ## TODO MAKE MULTIFORMAT DATA & INDEX # RWHAT=$(echo "$WHAT" | cut -d '.' -f 1) # TWHAT=$(echo "$WHAT" | cut -d '.' -f 2) # cp ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${RWHAT}.${TWHAT} - ## REPONSE ON PORT - echo "$HTTPCORS" > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - sed -i "s~text/html~application/json~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - cat ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + ## REPONSE ON PORT + echo "$HTTPCORS" > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + sed -i "s~text/html~application/json~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + cat ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - (cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && rm ~/.zen/tmp/${MOATS}/${MOATS}.* ) & - - ## REPONSE ON IPFSNODEID - ( - start=`date +%s` - echo "¯\_༼༽_/¯ $IPFSNODEID $PLAYER SIGNALING" - ROUTING=$(ipfs add -rwq ~/.zen/tmp/${IPFSNODEID}/* | tail -n 1 ) - ipfs name publish /ipfs/$ROUTING - echo "DONE" - end=`date +%s` - dur=`expr $end - $start` - echo ${MOATS}:${G1PUB}:${PLAYER}:SELF:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings - cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1 - ) & + (cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && rm ~/.zen/tmp/${MOATS}/${MOATS}.* ) & + ## REPONSE ON IPFSNODEID + ( + start=`date +%s` + echo "¯\_༼༽_/¯ $IPFSNODEID $PLAYER SIGNALING" + ROUTING=$(ipfs add -rwq ~/.zen/tmp/${IPFSNODEID}/* | tail -n 1 ) + ipfs name publish /ipfs/$ROUTING + echo "DONE" end=`date +%s` dur=`expr $end - $start` - echo ${MOATS}:${G1PUB}:${PLAYER}:${APPNAME}:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings + echo ${MOATS}:${G1PUB}:${PLAYER}:SELF:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1 + ) & - ) & # testcraft & SUB PROCESS + end=`date +%s` + dur=`expr $end - $start` + echo ${MOATS}:${G1PUB}:${PLAYER}:${APPNAME}:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings + cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1 - end=`date +%s` - echo "(☓‿‿☓) Execution time was "`expr $end - $start` seconds. - exit 0 - fi +) & # testcraft & SUB PROCESS + + end=`date +%s` + echo "(☓‿‿☓) Execution time was "`expr $end - $start` seconds. + exit 0 +fi ############################################## # PAY : /?salt=SALT&pepper=PEPPER&pay=1&dest=G1PUB APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8 MOATS=$9 ############################################## - if [[ $APPNAME == "pay" ]]; then - ( - echo "$HTTPCORS" > ~/.zen/tmp/$PLAYER.pay.$WHAT.http +if [[ $APPNAME == "pay" ]]; then +( + echo "$HTTPCORS" > ~/.zen/tmp/$PLAYER.pay.$WHAT.http - if [[ $WHAT =~ ^[0-9]+$ ]]; then + if [[ $WHAT =~ ^[0-9]+$ ]]; then - echo "${MY_PATH}/../tools/PAY4SURE.sh ~/.zen/tmp/${MOATS}/${MOATS}.secret.key pay -a ${WHAT} -p ${VAL} -c 'Bro'" - ${MY_PATH}/../tools/PAY4SURE.sh "${HOME}/.zen/tmp/${MOATS}/${MOATS}.secret.key" "${WHAT}" "${VAL}" "Bro" - echo "PAY4SURE " >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http + echo "${MY_PATH}/../tools/PAY4SURE.sh ~/.zen/tmp/${MOATS}/${MOATS}.secret.key pay -a ${WHAT} -p ${VAL} -c 'Bro'" + ${MY_PATH}/../tools/PAY4SURE.sh "${HOME}/.zen/tmp/${MOATS}/${MOATS}.secret.key" "${WHAT}" "${VAL}" "Bro" + echo "PAY4SURE " >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http - fi + fi - if [[ "$WHAT" == "history" ]]; then - sed -i "s~text/html~application/json~g" ~/.zen/tmp/$PLAYER.pay.$WHAT.http - ~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \ - ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key history -j >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http - fi + if [[ "$WHAT" == "history" ]]; then + sed -i "s~text/html~application/json~g" ~/.zen/tmp/$PLAYER.pay.$WHAT.http + ~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \ + ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key history -j >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http + fi - if [[ "$WHAT" == "get" ]]; then - sed -i "s~text/html~application/json~g" ~/.zen/tmp/$PLAYER.pay.$WHAT.http - ~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \ - ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key get >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http - fi + if [[ "$WHAT" == "get" ]]; then + sed -i "s~text/html~application/json~g" ~/.zen/tmp/$PLAYER.pay.$WHAT.http + ~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \ + ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key get >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http + fi - if [[ "$WHAT" == "balance" ]]; then - ~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \ - ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key balance >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http - fi + if [[ "$WHAT" == "balance" ]]; then + ~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \ + ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key balance >> ~/.zen/tmp/$PLAYER.pay.$WHAT.http + fi - cat ~/.zen/tmp/$PLAYER.pay.$WHAT.http - (cat ~/.zen/tmp/$PLAYER.pay.$WHAT.http | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && rm ~/.zen/tmp/$PLAYER.pay.$WHAT.http ) & - end=`date +%s` - echo "(G_G ) G1BANK Operation time was "`expr $end - $start` seconds. - exit 0 - ) & - fi + cat ~/.zen/tmp/$PLAYER.pay.$WHAT.http + (cat ~/.zen/tmp/$PLAYER.pay.$WHAT.http | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && rm ~/.zen/tmp/$PLAYER.pay.$WHAT.http ) & + end=`date +%s` + echo "(G_G ) G1BANK Operation time was "`expr $end - $start` seconds. + exit 0 +) & +fi ############################################## # FRIEND ★ &friend=G1PUB&stars=1 // APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8 MOATS=$9 ############################################## - if [[ $APPNAME == "friend" ]]; then +if [[ $APPNAME == "friend" ]]; then - ## CHECK IF ASKING FRIEND TW EXISTS - #~ ipfs --timeout 60s ls /ipns/${ASTRONAUTENS} - #~ [ $? != 0 ] && echo "BAD VISITOR" && exit 0 + ## CHECK IF ASKING FRIEND TW EXISTS + #~ ipfs --timeout 60s ls /ipns/${ASTRONAUTENS} + #~ [ $? != 0 ] && echo "BAD VISITOR" && exit 0 - g1friend=${WHAT} - stars=${VAL:-1} // Default 1 ★ + g1friend=${WHAT} + stars=${VAL:-1} // Default 1 ★ - $MY_PATH/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key stars -p $g1friend -n $stars > ~/.zen/tmp/${MOATS}/${MOATS}.log + $MY_PATH/../tools/jaklis/jaklis.py -k ~/.zen/tmp/${MOATS}/${MOATS}.secret.key stars -p $g1friend -n $stars > ~/.zen/tmp/${MOATS}/${MOATS}.log - ( - echo "$HTTPCORS $(cat ~/.zen/tmp/${MOATS}/${MOATS}.log)"| nc -l -p ${PORT} -q 1 > /dev/null 2>&1 - ) & + ( + echo "$HTTPCORS $(cat ~/.zen/tmp/${MOATS}/${MOATS}.log)"| nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + ) & - rm ~/.zen/tmp/${MOATS}/${MOATS}.* - end=`date +%s` - echo $APPNAME "(☉_☉ ) ${MESTAR} Execution time was "`expr $end - $start` seconds. - exit 0 - fi + rm ~/.zen/tmp/${MOATS}/${MOATS}.* + end=`date +%s` + echo $APPNAME "(☉_☉ ) ${MESTAR} Execution time was "`expr $end - $start` seconds. + exit 0 +fi ############################################## # GETIPNS ############################################## - if [[ $APPNAME == "getipns" ]]; then - ( echo "$HTTPCORS - url='"${ASTRONAUTENS}"'" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && echo "SLURP getipns : ${ASTRONAUTENS}" ) & - end=`date +%s` - echo $APPNAME "(☉_☉ ) /ipns/${ASTRONAUTENS} Execution time was "`expr $end - $start` seconds. - rm ~/.zen/tmp/${MOATS}/${MOATS}.* - exit 0 - fi +if [[ $APPNAME == "getipns" ]]; then + ( echo "$HTTPCORS + url='"${ASTRONAUTENS}"'" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && echo "SLURP getipns : ${ASTRONAUTENS}" ) & + end=`date +%s` + echo $APPNAME "(☉_☉ ) /ipns/${ASTRONAUTENS} Execution time was "`expr $end - $start` seconds. + rm ~/.zen/tmp/${MOATS}/${MOATS}.* + exit 0 +fi ############################################## # GETG1PUB ############################################## - if [[ $APPNAME == "getg1pub" ]]; then - ( - echo "$HTTPCORS - url='"${G1PUB}"'" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && echo "SLURP getg1pub : ${G1PUB}" - echo "BLURP ${PORT}" - ) & - end=`date +%s` - echo $APPNAME "(☉_☉ ) /ipns/${ASTRONAUTENS} Execution time was "`expr $end - $start` seconds. - rm ~/.zen/tmp/${MOATS}/${MOATS}* - exit 0 - fi +if [[ $APPNAME == "getg1pub" ]]; then + ( + echo "$HTTPCORS + url='"${G1PUB}"'" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 && echo "SLURP getg1pub : ${G1PUB}" + echo "BLURP ${PORT}" + ) & + end=`date +%s` + echo $APPNAME "(☉_☉ ) /ipns/${ASTRONAUTENS} Execution time was "`expr $end - $start` seconds. + rm ~/.zen/tmp/${MOATS}/${MOATS}* + exit 0 +fi ############################################## # LOGIN ############################################## - if [[ $APPNAME == "login" ]]; then +if [[ $APPNAME == "login" ]]; then - ## INSTALL PLAYER IPNS KEY ON STATION - [[ "${SALT}" =~ ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]] \ - && PLAYER=${SALT} \ - || PLAYER=${WHAT} + ## INSTALL PLAYER IPNS KEY ON STATION + [[ "${SALT}" =~ ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]] \ + && PLAYER=${SALT} \ + || PLAYER=${WHAT} - ipfs key import ${PLAYER} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key - ASTRONAUTENS=$(ipfs key list -l | grep -w $PLAYER | cut -d ' ' -f1) + ipfs key import ${PLAYER} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${MOATS}.${G1PUB}.ipns.key + ASTRONAUTENS=$(ipfs key list -l | grep -w $PLAYER | cut -d ' ' -f1) - #~ WSTATION=$(cat ~/.zen/tmp/WSTATION 2>/dev/null) - #~ [[ $WSTATION != "" ]] \ - #~ && REPLACE=${myIPFS}${WSTATION} \ - #~ || REPLACE=${myIPFS}/ipns/${ASTRONAUTENS} + #~ WSTATION=$(cat ~/.zen/tmp/WSTATION 2>/dev/null) + #~ [[ $WSTATION != "" ]] \ + #~ && REPLACE=${myIPFS}${WSTATION} \ + #~ || REPLACE=${myIPFS}/ipns/${ASTRONAUTENS} - REPLACE=${myIPFS}/ipns/${ASTRONAUTENS} + REPLACE=${myIPFS}/ipns/${ASTRONAUTENS} - USALT=$(echo "$SALT" | jq -Rr @uri) - UPEPPER=$(echo "$PEPPER" | jq -Rr @uri) - echo "/?salt=${USALT}&pepper=${UPEPPER} IS LOGIN - OPEN TW -" - sed "s~_TWLINK_~${REPLACE}~g" ~/.zen/Astroport.ONE/templates/index.302 > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - ## SET COOKIE - #~ sed -i "s~_USALT_~${USALT}~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - #~ sed -i "s~_UPEPPER_~${UPEPPER}~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - echo "url='"${REPLACE}"'" >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - ( - cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 - echo "BLURP ${PORT}" - ) & - rm ~/.zen/tmp/${MOATS}/${MOATS}* - end=`date +%s` - echo $APPNAME "(☉_☉ ) Execution time was "`expr $end - $start` seconds. - exit 0 + USALT=$(echo "$SALT" | jq -Rr @uri) + UPEPPER=$(echo "$PEPPER" | jq -Rr @uri) + echo "/?salt=${USALT}&pepper=${UPEPPER} IS LOGIN - OPEN TW -" + sed "s~_TWLINK_~${REPLACE}~g" ~/.zen/Astroport.ONE/templates/index.302 > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + ## SET COOKIE + #~ sed -i "s~_USALT_~${USALT}~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + #~ sed -i "s~_UPEPPER_~${UPEPPER}~g" ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + echo "url='"${REPLACE}"'" >> ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect + ( + cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + echo "BLURP ${PORT}" + ) & + rm ~/.zen/tmp/${MOATS}/${MOATS}* + end=`date +%s` + echo $APPNAME "(☉_☉ ) Execution time was "`expr $end - $start` seconds. + exit 0 - fi +fi ############################################## # LOGOUT ############################################## - if [[ $APPNAME == "logout" ]]; then +if [[ $APPNAME == "logout" ]]; then - ## REMOVE PLAYER IPNS KEY FROM STATION - [[ "${SALT}" =~ ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]] \ - && PLAYER=${SALT} \ - || PLAYER=${WHAT} + ## REMOVE PLAYER IPNS KEY FROM STATION + [[ "${SALT}" =~ ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]] \ + && PLAYER=${SALT} \ + || PLAYER=${WHAT} - echo "$PLAYER LOGOUT OK" > ~/.zen/tmp/${MOATS}/${MOATS}.log + echo "$PLAYER LOGOUT OK" > ~/.zen/tmp/${MOATS}/${MOATS}.log - ipfs key rm ${G1PUB} >> ~/.zen/tmp/${MOATS}/${MOATS}.log - ipfs key rm ${PLAYER} >> ~/.zen/tmp/${MOATS}/${MOATS}.log + ipfs key rm ${G1PUB} >> ~/.zen/tmp/${MOATS}/${MOATS}.log + ipfs key rm ${PLAYER} >> ~/.zen/tmp/${MOATS}/${MOATS}.log - echo "$HTTPCORS $(cat ~/.zen/tmp/${MOATS}/${MOATS}.log)"| nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & - end=`date +%s` - echo $APPNAME "(☉_☉ ) Execution time was "`expr $end - $start` seconds. - rm ~/.zen/tmp/${MOATS}/${MOATS}.* - exit 0 + echo "$HTTPCORS $(cat ~/.zen/tmp/${MOATS}/${MOATS}.log)"| nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & + end=`date +%s` + echo $APPNAME "(☉_☉ ) Execution time was "`expr $end - $start` seconds. + rm ~/.zen/tmp/${MOATS}/${MOATS}.* + exit 0 - fi +fi - ################################################################################################### - ################################################################################################### +################################################################################################### +################################################################################################### - ## END RESPONDING - [[ ! -s ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect ]] && echo "$HTTPCORS PORT=$1 THAT=$2 AND=$3 THIS=$4 APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8 MOATS=$9 url=/user/$G1PUB" > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > ~/.zen/tmp/${MOATS}/${MOATS}.official.swallow & - echo "HTTP 1.1 PROTOCOL DOCUMENT READY" - echo "${MOATS} -----> PAGE AVAILABLE -----> http://${myHOST}:${PORT}" +## END RESPONDING +[[ ! -s ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect ]] \ + && echo "$HTTPCORS PORT=$1 THAT=$2 AND=$3 THIS=$4 APPNAME=$5 WHAT=$6 OBJ=$7 VAL=$8 MOATS=$9 url=/user/$G1PUB" \ + > ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect - end=`date +%s` - echo $type" (J‿‿J) Execution time was "`expr $end - $start` seconds. - rm ~/.zen/tmp/${MOATS}/${MOATS}.* +cat ~/.zen/tmp/${MOATS}/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > ~/.zen/tmp/${MOATS}/${MOATS}.official.swallow & +echo "HTTP 1.1 PROTOCOL DOCUMENT READY" +echo "${MOATS} -----> PAGE AVAILABLE -----> http://${myHOST}:${PORT}" + +end=`date +%s` +echo $type" (J‿‿J) Execution time was "`expr $end - $start` seconds. +rm ~/.zen/tmp/${MOATS}/${MOATS}.* exit 0 diff --git a/API/UPLANET.sh b/API/UPLANET.sh index 9cc9dfd7..6af7321e 100755 --- a/API/UPLANET.sh +++ b/API/UPLANET.sh @@ -167,15 +167,14 @@ echo "UMAPNS : ${myIPFS}/ipns/${UMAPNS}" ## ALL TEST PASSED -> CREATE ZENCARD + ASTROID NPASS=$(echo "${RANDOM}${RANDOM}${RANDOM}${RANDOM}" | tail -c-9) ## NOUVEAU PASS 8 CHIFFRES -PPASS=$(head /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 2) ## STRONGER TW SECURITY "AlpH4nUm" -DPASS=$(head /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 2) ## STRONGER TW SECURITY "AlpH4nUm" +PPASS=$(head /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 4) ## STRONGER TW SECURITY "AlpH4nUm" NPASS=$(head /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 10) ## STRONGER TW SECURITY "AlpH4nUm" ## CREATE ASTRONAUTE TW ON CURRENT ASTROPORT ( -echo VISA.new.sh "${EMAIL}_${PPASS}_${DPASS}" "${NPASS}" "${EMAIL}" "UPlanet" "/ipns/${UMAPNS}" "${LAT}" "${LON}" +echo VISA.new.sh "${EMAIL}_${PPASS}" "${NPASS}" "${EMAIL}" "UPlanet" "/ipns/${UMAPNS}" "${LAT}" "${LON}" ##### (☉_☉ ) ####### -${MY_PATH}/../RUNTIME/VISA.new.sh "${EMAIL}_${PPASS}_${DPASS}" "${NPASS}" "${EMAIL}" "UPlanet" "/ipns/${UMAPNS}" "${LAT}" "${LON}" >> ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt +${MY_PATH}/../RUNTIME/VISA.new.sh "${EMAIL}_${PPASS}" "${NPASS}" "${EMAIL}" "UPlanet" "/ipns/${UMAPNS}" "${LAT}" "${LON}" >> ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt ## TO REMOVE : MONITOR ${MY_PATH}/../tools/mailjet.sh "support@qo-op.com" ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt "LOG VISA.new $EMAIL" ## Send VISA.new log to EMAIL @@ -187,7 +186,7 @@ echo "(TW REGISTRATION) Operation time was "`expr $end - $start` seconds. ######################################## ## Calculating TW IPNS ADDRESS -TWADD=$(${MY_PATH}/../tools/keygen -t ipfs "${EMAIL}_${PPASS}_${DPASS}" "${NPASS}") +TWADD=$(${MY_PATH}/../tools/keygen -t ipfs "${EMAIL}_${PPASS}" "${NPASS}") ## HTTP nc ON PORT RESPONSE echo "$HTTPCORS @@ -219,7 +218,7 @@ echo "$HTTPCORS UPlanet Registration Your AstroID seeds are: - ${EMAIL}_${PPASS}_${DPASS} + ${EMAIL}_${PPASS} ${NPASS} Generating account... diff --git a/API/ZONE.sh b/API/ZONE.sh index 48ae96b2..a647ccbf 100755 --- a/API/ZONE.sh +++ b/API/ZONE.sh @@ -7,8 +7,7 @@ ## API: ZONE ## Used by OSM2IPFS map_render.html & other UPlanet Client App # ?zone=DEG&ulat=LAT&ulon=LON -## Search for TW numbers in received zone -# = json +## Search for TW numbers in received zone # >> return json ################################################################################ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized @@ -42,80 +41,105 @@ function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } ## RUNNING UPLANET LAT/LON TW DETECTION mkdir -p ~/.zen/tmp/${MOATS}/ -# GET RECEPTION : zone=0.001&ulat=0.02&ulon=0.01 -DEG=${THAT} -[[ -z $DEG ]] && DEG=1 -# DEG=$(echo "$DEG * 10" | bc -l ) -LAT=${THIS} -[[ -z $LAT ]] && LAT=0.00 -LON=${WHAT} -[[ -z $LON ]] && LON=0.00 - # PREPARE HTTP RESPONSE (application/json) echo "${HTTPCORS}" > ~/.zen/tmp/${MOATS}.http sed -i "s~text/html~application/json~g" ~/.zen/tmp/${MOATS}.http -LAT=$(makecoord $LAT) -LON=$(makecoord $LON) +# ------------------------------------------------------------------- # +# GET/?zone=0.001&ulat=0.02&ulon=0.01 +# ------------------------------------------------------------------- # -echo "REQUEST $LAT / $LON / $DEG" +DEG="${THAT}" +[[ -z ${DEG} ]] && DEG=1 +# DEG=$(echo "${DEG} * 10" | bc -l ) -## REGION & ABOVE LEVEL -if [[ $DEG == "0.1" || $DEG == "1" ]]; then - LAT=$(echo ${LAT} | cut -d '.' -f 1) - LON=$(echo ${LON} | cut -d '.' -f 1) - ZONE="_${LAT}_${LON}" - echo "ZONE = ${ZONE}" - ZONEG1PUB=$(${MY_PATH}/../tools/keygen -t duniter "${UPLANETNAME}${ZONE}" "${UPLANETNAME}${ZONE}") - ZONETW="/ipns/"$(${MY_PATH}/../tools/keygen -t ipfs "${YESTERDATE}${UPLANETNAME}${ZONE}" "${YESTERDATE}${UPLANETNAME}${ZONE}") +LAT="${THIS}" +[[ -z $LAT ]] && LAT=0.00 -fi +LON="${WHAT}" +[[ -z $LON ]] && LON=0.00 -## SECTOR LEVEL -if [[ $DEG == "0.01" ]]; then - SECLAT="${LAT::-1}" - SECLON="${LON::-1}" - SECTOR="_${SECLAT}_${SECLON}" - echo "SECTOR = ${SECTOR}" - ZONEG1PUB=$(${MY_PATH}/../tools/keygen -t duniter "${UPLANETNAME}${SECTOR}" "${UPLANETNAME}${SECTOR}") - ZONETW="/ipns/"$(${MY_PATH}/../tools/keygen -t ipfs "${YESTERDATE}${UPLANETNAME}${SECTOR}" "${YESTERDATE}${UPLANETNAME}${SECTOR}") +LAT=$(makecoord ${LAT}) +LON=$(makecoord ${LON}) +JSON="ZONE_${LAT}_${LON}_${DEG}.json" -fi +[[ $(date +"%H%M") -gt 2012 ]] \ + && THEDATE=${TODATE} \ + || THEDATE=${YESTERDATE} +echo "${THEDATE}" -## UMAP LEVEL -if [[ $DEG == "0.001" ]]; then - swarmnum=$(ls -d ~/.zen/tmp/swarm/*/UPLANET/__/_*_*/_*.?_*.?/_${LAT}*_${LON}*/TW/* 2>/dev/null | wc -l ) - nodenum=$(ls -d ~/.zen/tmp/${IPFSNODEID}/UPLANET/__/_*_*/_*.?_*.?/_${LAT}*_${LON}*/TW/* 2>/dev/null | wc -l ) - totnum=$(( swarmnum + nodenum )) - echo " ## UMAP _${LAT}*_${LON}* = ${totnum} PLAYERs" + ## SECTOR LEVEL + if [[ ${DEG} == "0.01" ]]; then + SECLAT="${LAT::-1}" + SECLON="${LON::-1}" + SECTOR="_${SECLAT}_${SECLON}" + echo "SECTOR = ${SECTOR}" + ZONEG1PUB=$(${MY_PATH}/../tools/keygen -t duniter "${UPLANETNAME}${SECTOR}" "${UPLANETNAME}${SECTOR}") + ZONEINDEX="/ipns/"$(${MY_PATH}/../tools/keygen -t ipfs "${THEDATE}${UPLANETNAME}${SECTOR}" "${THEDATE}${UPLANETNAME}${SECTOR}")"/_index.html" + JSON="ZONE${SECTOR}_${DEG}.json" - G1PUB=$(${MY_PATH}/../tools/keygen -t duniter "${UPLANETNAME}${LAT}" "${UPLANETNAME}${LON}") - ${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${UMAP}.priv "${YESTERDATE}${UPLANETNAME}${LAT}" "${YESTERDATE}${UPLANETNAME}${LON}" - ipfs key rm ${G1PUB} > /dev/null 2>&1 ## AVOID ERROR ON IMPORT - UMAPNS=$(ipfs key import ${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${UMAP}.priv) + fi - echo '{ "gridNumbers": [ {"lat": '${LAT}', "lon": '${LON}', "number": "(_'${LAT}'_'${LON}') = '${totnum}'", "ipns": "'${myIPFS}/ipns/${UMAPNS}/_index.html'" } ] }' >> ~/.zen/tmp/${MOATS}.http - cat ~/.zen/tmp/${MOATS}.http | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & - rm -Rf ~/.zen/tmp/${MOATS}/ - end=`date +%s` - echo "(UMAP)_${LAT}_${LON} ${YESTERDATE} $UMAPNS Operation time was "`expr $end - $start` seconds. - exit 0 + ## REGION & ABOVE LEVEL + if [[ ${DEG} == "0.1" || ${DEG} == "1" ]]; then + LAT=$(echo ${LAT} | cut -d '.' -f 1) + LON=$(echo ${LON} | cut -d '.' -f 1) + ZONE="_${LAT}_${LON}" + echo "ZONE = ${ZONE}" + ZONEG1PUB=$(${MY_PATH}/../tools/keygen -t duniter "${UPLANETNAME}${ZONE}" "${UPLANETNAME}${ZONE}") + ZONEINDEX="/ipns/"$(${MY_PATH}/../tools/keygen -t ipfs "${THEDATE}${UPLANETNAME}${ZONE}" "${THEDATE}${UPLANETNAME}${ZONE}") + JSON="ZONE${ZONE}_${DEG}.json" -fi + fi -## ALL OTHER DEG : SEARCH FOR UPLANET TW NUMBERS -echo '{ "gridNumbers": [' >> ~/.zen/tmp/${MOATS}.http +echo " JSON = ${JSON}" + +if [[ ! -s ~/.zen/tmp/${JSON} ]]; then + + ## UMAP LEVEL + if [[ ${DEG} == "0.001" ]]; then + + swarmnum=$(ls -d ~/.zen/tmp/swarm/*/UPLANET/__/_*_*/_*.?_*.?/_${LAT}*_${LON}*/TW/* 2>/dev/null | wc -l ) + nodenum=$(ls -d ~/.zen/tmp/${IPFSNODEID}/UPLANET/__/_*_*/_*.?_*.?/_${LAT}*_${LON}*/TW/* 2>/dev/null | wc -l ) + totnum=$(( swarmnum + nodenum )) + echo " ## UMAP _${LAT}*_${LON}* = ${totnum} PLAYERs" + + G1PUB=$(${MY_PATH}/../tools/keygen -t duniter "${UPLANETNAME}${LAT}" "${UPLANETNAME}${LON}") + ${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${UMAP}.priv "${THEDATE}${UPLANETNAME}${LAT}" "${THEDATE}${UPLANETNAME}${LON}" + ipfs key rm ${G1PUB} > /dev/null 2>&1 ## AVOID ERROR ON IMPORT + UMAPNS=$(ipfs key import ${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${UMAP}.priv) + + echo '{ "gridNumbers": [ {"lat": '${LAT}', "lon": '${LON}', "number": "(_'${LAT}'_'${LON}') = '${totnum}'", "ipns": "'${myIPFS}/ipns/${UMAPNS}/_index.html'" } ] }' \ + > ~/.zen/tmp/${MOATS}/http.grid + + cp ~/.zen/tmp/${MOATS}/http.grid ~/.zen/tmp/${JSON} + cat ~/.zen/tmp/${JSON} >> ~/.zen/tmp/${MOATS}.http + + cat ~/.zen/tmp/${MOATS}.http | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & + + rm -Rf ~/.zen/tmp/${MOATS}/ + end=`date +%s` + echo "(UMAP)_${LAT}_${LON} ${THEDATE} $UMAPNS Operation time was "`expr $end - $start` seconds. + exit 0 + + fi + + ############################################## + ## SEARCH FOR UPLANET TW NUMBERS IN THAT ZONE + echo '{ "gridNumbers": [' >> ~/.zen/tmp/${MOATS}/http.grid + + for i in $(seq 0 9); + do + + ZLAT=$(echo "$LAT + ${DEG} * $i" | bc -l) + [[ -z ${ZLAT} ]] && ZLAT=0 -for i in $(seq 0 9); -do - ZLAT=$(echo "$LAT + $DEG * $i" | bc -l ) - [[ -z ${ZLAT} ]] && ZLAT=0 - # [[ ! $(echo $ZLAT | grep "\." ) ]] && ZLAT="${ZLAT}." for j in $(seq 0 9); do - ZLON=$(echo "$LON + $DEG * $j" | bc -l ) + + ZLON=$(echo "$LON + ${DEG} * $j" | bc -l) [[ -z ${ZLON} ]] && ZLON=0 - # [[ ! $(echo $ZLON | grep "\." ) ]] && ZLON="${ZLON}." + echo " ## SEARCH UPLANET/__/_*_*/_*.?_*.?/_${ZLAT}*_${ZLON}*" swarmnum=$(ls -d ~/.zen/tmp/swarm/*/UPLANET/__/_*_*/_*.?_*.?/_${ZLAT}*_${ZLON}*/TW/* 2>/dev/null | wc -l ) nodenum=$(ls -d ~/.zen/tmp/${IPFSNODEID}/UPLANET/__/_*_*/_*.?_*.?/_${ZLAT}*_${ZLON}*/TW/* 2>/dev/null | wc -l ) @@ -123,22 +147,35 @@ do [[ $totnum -gt 9 ]] && displaynum="X" || displaynum=$totnum - [[ $displaynum != "0" ]] && echo '{"lat": '${ZLAT}', "lon": '${ZLON}', "number": "'${displaynum}'", "ipns": "'${ZONETW}'" } - ,' >> ~/.zen/tmp/${MOATS}.http && echo "$DEG :" '{"lat": '${ZLAT}', "lon": '${ZLON}', "number": "'${totnum}'", "ipns": "'${ZONETW}'" }' + [[ $displaynum != "0" ]] && echo '{"lat": '${ZLAT}', "lon": '${ZLON}', "number": "'${displaynum}'", "ipns": "'${ZONEINDEX}'" } + ,' >> ~/.zen/tmp/${MOATS}/http.grid \ + && echo "${DEG} :" '{"lat": '${ZLAT}', "lon": '${ZLON}', "number": "'${totnum}'", "ipns": "'${ZONEINDEX}'" }' done -done -sed -i '$ d' ~/.zen/tmp/${MOATS}.http ## REMOVE LAST ',' + done -echo ']}' >> ~/.zen/tmp/${MOATS}.http + [[ ! $(cat ~/.zen/tmp/${MOATS}/http.grid | tail -n 1 | grep 'gridNumbers' ) ]] \ + && sed -i '$ d' ~/.zen/tmp/${MOATS}/http.grid ## REMOVE LAST ',' + + echo ']}' >> ~/.zen/tmp/${MOATS}/http.grid + + echo "## ADD TO CACHE ~/.zen/tmp/${JSON}" + cp ~/.zen/tmp/${MOATS}/http.grid ~/.zen/tmp/${JSON} + +fi + +cat ~/.zen/tmp/${JSON} | jq -c ### SEND RESPONSE ON PORT -cat ~/.zen/tmp/${MOATS}.http | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 & - +cat ~/.zen/tmp/${JSON} >> ~/.zen/tmp/${MOATS}.http +( + cat ~/.zen/tmp/${MOATS}.http | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 + rm ~/.zen/tmp/${MOATS}/http.grid 2>/dev/null + rm ~/.zen/tmp/${MOATS}.http && echo "BLURP ${JSON}" +) & ## CLEANING rm -Rf ~/.zen/tmp/${MOATS}/ - ## TIMING end=`date +%s` echo "(ZONE) Operation time was "`expr $end - $start` seconds. diff --git a/APY/addfile.sh b/APY/addfile.sh new file mode 100755 index 00000000..76d0a9a4 --- /dev/null +++ b/APY/addfile.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# Usage: bash addfile.sh + +filename="$1" +mime_type="$2" +file_type="$3" + +echo "Processing file: $filename" +echo "MIME type: $mime_type" +echo "File type: $file_type" + +# Check file type and perform corresponding treatment +case $file_type in + "video") + if [[ $mime_type == *"video"* ]]; then + # Video processing logic + echo "Video processing..." + # Add more processing steps as needed + else + echo "Invalid file type for video processing" + fi + ;; + "audio") + if [[ $mime_type == *"audio"* ]]; then + # Audio processing logic + echo "Audio processing..." + # Add more processing steps as needed + else + echo "Invalid file type for audio processing" + fi + ;; + "text") + if [[ $mime_type == *"text"* ]]; then + # Text processing logic + echo "Text processing..." + # Add more processing steps as needed + else + echo "Invalid file type for text processing" + fi + ;; + *) + echo "Unknown file type: $file_type" + ;; +esac + +echo "File processing complete." diff --git a/APY/upload_video.10101.py b/APY/upload_video.10101.py new file mode 100755 index 00000000..ac6c78a5 --- /dev/null +++ b/APY/upload_video.10101.py @@ -0,0 +1,170 @@ +#!/usr/bin/python3 +from fastapi import FastAPI, File, UploadFile, Form, HTTPException +from fastapi.responses import HTMLResponse, JSONResponse +import subprocess +import os +import magic + +app = FastAPI() + +# HTML form for file upload +html_form = """ + + + + + + + File Upload and Processing + + + + + + File Upload and Processing + + + + Choose file type: + + Video + + Audio + + Text + + + Loading... + + + + + + + + + + +""" + +@app.get("/") +async def read_root(): + return HTMLResponse(content=html_form, status_code=200) + +def get_mime_type(file: UploadFile): + mime = magic.Magic() + mime_type = mime.from_buffer(file.file.read(1024)) + return mime_type + +@app.post("/upload") +async def create_upload_file(file: UploadFile = File(...), convert_to: str = Form(...)): + # Validate file size + max_file_size = 100 * 1024 * 1024 # 100MB + if file.file.__sizeof__() > max_file_size: + raise HTTPException(status_code=400, detail="File size exceeds the limit of 100MB") + + # Check the file type + mime_type = get_mime_type(file) + print(f"Detected MIME type: {mime_type}") + + # Save the uploaded file to a temporary location + with open(file.filename, "wb") as f: + f.write(file.file.read()) + + # Continue with the processing logic + # Run the post-treatment Bash script + logs = subprocess.run(["bash", "addfile.sh", file.filename, mime_type, convert_to], capture_output=True, text=True).stdout + + # Optionally, you can remove the temporary file + os.remove(file.filename) + + return JSONResponse(content={"filename": file.filename, "mime_type": mime_type, "convert_to": convert_to, "message": "File processed successfully.", "logs": logs}) + +if __name__ == "__main__": + import uvicorn + + uvicorn.run(app, host="0.0.0.0", port=10101) diff --git a/ASTROBOT/G1Kodi.sh b/ASTROBOT/G1Kodi.sh index b6dc4f71..8a262666 100755 --- a/ASTROBOT/G1Kodi.sh +++ b/ASTROBOT/G1Kodi.sh @@ -168,8 +168,26 @@ while read TITRE; do TEXT="{{!!titre}} ({{!!year}}){{!!sub}} {{!!desc}} Bande Annonce - Envoyez un don. Recevez le lien vers ce film dans votre messagerie Cesium+ - " + + Voir ce Film: + Installez Cesium+ + + + + + + + + + + Flashez, envoyez un don... + ce soir,recevez le lien dans votre messagerie. + + + + + + " ## MAKING TIDDLER echo "## Creation json tiddler ~/.zen/game/players/${PLAYER}/G1Kodi/${TITLE}.dragdrop.json" diff --git a/ASTROBOT/N1Monit.sh b/ASTROBOT/N1Monit.sh deleted file mode 100755 index b77fc817..00000000 --- a/ASTROBOT/N1Monit.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -######################################################################## -# Version: 0.5 -# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) -######################################################################## -# PAD COCODING : https://pad.p2p.legal/s/G1Monit -# KODI SERVICE : Publish and Merge Friends Monit Movies into RSS Stream -######################################################################## -######################################################################## -MY_PATH="`dirname \"$0\"`" # relative -MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -ME="${0##*/}" - -. "${MY_PATH}/../tools/my.sh" - -echo "$ME RUNNING" -######################################################################## -## SCAN FOR PAYMENT HISTORY -## BUILD python NetworkX script -## SEND MESSAGE TO SOURCEG1PUB -######################################################################## -## THIS SCRIPT IS RUN WHEN A WALLET RECEIVED A TRANSACTION WITH COMMENT STARTING WITH N1Monit -######################################################################## -INDEX="$1" -[[ ! ${INDEX} ]] && INDEX="$HOME/.zen/game/players/.current/ipfs/moa/index.html" -[[ ! -s ${INDEX} ]] && echo "ERROR - Please provide path to source TW index.html" && exit 1 -[[ ! -s ${INDEX} ]] && echo "ERROR - Fichier TW absent. ${INDEX}" && exit 1 - -PLAYER="$2" -[[ ! ${PLAYER} ]] && PLAYER="$(cat ~/.zen/game/players/.current/.player 2>/dev/null)" -[[ ! ${PLAYER} ]] && echo "ERROR - Please provide PLAYER" && exit 1 - -ASTRONAUTENS=$(ipfs key list -l | grep -w ${PLAYER} | cut -d ' ' -f1) -[[ ! ${ASTRONAUTENS} ]] && echo "ERROR - Clef IPNS ${PLAYER} introuvable!" && exit 1 - -G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub) -[[ ! $G1PUB ]] && echo "ERROR - G1PUB ${PLAYER} VIDE" && exit 1 - -# Extract tag=tube from TW -MOATS="$3" -[[ ! ${MOATS} ]] && MOATS=$(date -u +"%Y%m%d%H%M%S%4N") - -IPUBKEY="$4" -[[ ! ${IPUBKEY} ]] && echo "ERROR - MISSING COMMAND ISSUER !" && exit 1 - -TH="$5" -[[ ! ${TH} ]] && echo "ERROR - MISSING COMMAND TITLE HASH ADDRESS !" && exit 1 - -echo "${PLAYER} : ${IPUBKEY} SEEKING FOR ${TH} -${ASTRONAUTENS} ${G1PUB} " - -#~ ################################################################### -#~ ## CREATE APP NODE PLAYER PUBLICATION DIRECTORY -#~ ################################################################### -mkdir -p $HOME/.zen/tmp/${MOATS} && echo $HOME/.zen/tmp/${MOATS} - -## EXERCICE ### TODO ### -## USE https://networkx.org/documentation/stable/tutorial.html# -## EXTRACT HISTORY WITH jaklis -## CREATE A PYTHON SCRIPT CREATING the 1st level of TX -echo "import networkx as nx -import matplotlib.pyplot as plt -G = nx.Graph() -... -G.add_node(SRCPUB) -G.add_node(DSTPUB) -G.edges[SRCPUB, DSTPUB]['g1'] = AMOUNT -... -nx.draw(G, with_labels=True, font_weight='bold') -plt.show() -" -## EXTEND N1Script WITH MORE FUNCTIONS... exemples ... -## N1Vote: permet de pratiquer le Vote Quadratique -## N1Conf: permet de signifier la Confiance -## ... - -exit 0 diff --git a/A_boostrap_nodes.txt b/A_boostrap_nodes.txt index 87f4d3cc..615a559f 100644 --- a/A_boostrap_nodes.txt +++ b/A_boostrap_nodes.txt @@ -1,4 +1,4 @@ -# CONTAINS Address of 1st Bootstrap Stations (24/24 Public IP) - DO NOT EDIT MANUALY - +# UPlanet Swarm Bootstrap Stations # Adapt for your domain # # https://ipfs.copylaradio.com ipfs.copylaradio.com ################################################################# # astroport.libra.copylaradio.com @@ -7,9 +7,6 @@ # scorpio.copylaradio.com /dnsaddr/scorpio.copylaradio.com/p2p/12D3KooWS8EiLNay8qVnFaULpxW1X9sGZZz4wV8E6E3QEwCRktry -# astroport.sonic.copylaradio.com -# /ip4/161.97.174.60/tcp/4001/p2p/12D3KooWJnzYzJBtruXZwUQJriF1ePtDQCUQp4aNBV5FjpYVdfhc - ################################################################# ###### WISHING TO ADD YOUR NODE TO OFFICIAL ASTROPORT BOOSTRAP LIST ? ###### ===> CONTACT support@qo-op.com diff --git a/A_boostrap_ssh.txt b/A_boostrap_ssh.txt new file mode 100644 index 00000000..20cceadc --- /dev/null +++ b/A_boostrap_ssh.txt @@ -0,0 +1,6 @@ +## SSH PUBLIC KEYS +## SEEDS OF THE DRAGONS WOT +## https://pad.p2p.legal/keygen +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEtg3SlRxtzsQnsBSeU83W0tvUyBTUvOU5lhjlbZVPCZ support@qo-op.com +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILTzTegcBD3WwIyTwT3kIh6jGqyLZzEzXhcuF6IhAjlc +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHJBG6lim4ZmSmpU+GbOKJXO9arfRCP5TdKlhGa4CLJp diff --git a/BOOKS/HowTo_natools.py.md b/BOOKS/HowTo_natools.py.md new file mode 100644 index 00000000..e985a6e3 --- /dev/null +++ b/BOOKS/HowTo_natools.py.md @@ -0,0 +1,48 @@ +To use `natools` for message encryption (to destination) and signature (from sender), you would typically follow these steps: + +### 1. Generate Key Pairs: + - Both the sender and the recipient need to generate their key pairs (public and private keys). You can use the `natools` script to generate keys. + + ```bash + # Sender generate keys + python3 natools.py privkey -k ~/.zen/game/sender_secret.dunikey -f cred + python3 natools.py pubkey -k ~/.zen/game/sender_secret.dunikey -o sender_public_key + + # Recipient generates keys + python3 natools.py privkey -k ~/.zen/game/myswarm_secret.dunikey -f cred + python3 natools.py pubkey -k ~/.zen/game/myswarm_secret.dunikey -o recipient_public_key + ``` + +### 2. Encrypt the Message: + - The sender uses the recipient's public key to encrypt the message. + + ```bash + python3 natools.py encrypt -i plaintext.txt -k recipient_public_key -o encrypted_message.bin + ``` + +### 3. Sign the Message: + - The sender signs the original message using their private key. + + ```bash + python3 natools.py sign -i plaintext.txt -k sender_private_key -o signature.bin + ``` + +### 4. Verify the Signature: + - The recipient uses the sender's public key to verify the signature. + + ```bash + python3 natools.py verify -i plaintext.txt -p sender_public_key + ``` + + - The script will output "Signature OK!" if the verification is successful. + +### 5. Decrypt the Message: + - The recipient uses their private key to decrypt the message. + + ```bash + python3 natools.py decrypt -i encrypted_message.bin -k recipient_private_key -o decrypted_message.txt + ``` + +Now you have successfully performed message encryption to the destination and signature from the sender using the `natools` script. Adjust the file paths and content as needed for your specific use case. + +Note: Ensure that both sender and recipient securely store their private keys. Public keys can be shared openly. The encrypted message, signature, and decrypted message are intermediate files used for illustration; adjust as needed in your application. diff --git a/BOOSTRAP/OC_API.md b/BOOKS/OC_API.md similarity index 100% rename from BOOSTRAP/OC_API.md rename to BOOKS/OC_API.md diff --git a/BOOSTRAP/Readme.md b/BOOKS/Readme.md similarity index 99% rename from BOOSTRAP/Readme.md rename to BOOKS/Readme.md index ed8f275f..68017209 100644 --- a/BOOSTRAP/Readme.md +++ b/BOOKS/Readme.md @@ -123,7 +123,7 @@ ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEtg3SlRxtzsQnsBSeU83W0tvUyBTUvOU5lhjlbZVPCZ * “keygen” https://git.p2p.legal/STI/Astroport.ONE/src/branch/master/tools/keygen * “natools” https://git.p2p.legal/STI/Astroport.ONE/src/branch/master/tools/natools.py * “jaklis” https://git.p2p.legal/axiom-team/jaklis -* “ipfs” https://git.p2p.legal/STI/Astroport.ONE/src/branch/master/kubo_v0.20.0_linux.install.sh +* “ipfs” https://git.p2p.legal/STI/Astroport.ONE/src/branch/master/install.kubo_v0.20.0_linux.sh ## ASTROPORT CREW GILET https://astroport.myspreadshop.fr/create?product=a68ad31e-d554-4c75-821d-97b00d6ad13f&view=2 diff --git a/BOOKS/TheNetworkState.pdf b/BOOKS/TheNetworkState.pdf new file mode 100644 index 00000000..2dbda2a8 Binary files /dev/null and b/BOOKS/TheNetworkState.pdf differ diff --git a/docker-compose.duniter.yml b/DOCKER/docker-compose.duniter.yml similarity index 100% rename from docker-compose.duniter.yml rename to DOCKER/docker-compose.duniter.yml diff --git a/docker-compose.duniter1.8.7.yml b/DOCKER/docker-compose.duniter1.8.7.yml similarity index 100% rename from docker-compose.duniter1.8.7.yml rename to DOCKER/docker-compose.duniter1.8.7.yml diff --git a/DOCKER/docker-compose.minetest.yml b/DOCKER/docker-compose.minetest.yml new file mode 100644 index 00000000..c8824bd5 --- /dev/null +++ b/DOCKER/docker-compose.minetest.yml @@ -0,0 +1,16 @@ +version: '3.6' + +services: + minetest: + image: lscr.io/linuxserver/minetest:latest + container_name: minetest + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + - "CLI_ARGS=--gameid minetest --port 30000" #optional + volumes: + - /path/to/data:/config/.minetest + ports: + - 30000:30000/udp + restart: unless-stopped diff --git a/docker-compose.nextcloud.yml b/DOCKER/docker-compose.nextcloud.yml similarity index 100% rename from docker-compose.nextcloud.yml rename to DOCKER/docker-compose.nextcloud.yml diff --git a/docker-compose.nginx-proxy-manager.yml b/DOCKER/docker-compose.nginx-proxy-manager.yml similarity index 100% rename from docker-compose.nginx-proxy-manager.yml rename to DOCKER/docker-compose.nginx-proxy-manager.yml diff --git a/README.md b/README.md index fb9be1da..92cc9f0b 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,10 @@ [Astroport DEV Journal](https://pad.p2p.legal/s/AstroportDEVJournal#) -**Embark on a Cosmic Journey with ZenCard Payment System and Astroport.ONE** +**Embark on a Cosmic Journey with AstroID & ZenCard System and Astroport.ONE** Are you weary of the constraints of traditional payment systems and concerned about the reliability -of your distributed storage solutions? Look no further! Our revolutionary ZenCard Payment System +of your distributed storage solutions? Look no further! Our revolutionary ZenCard QRCode based Payment System and Astroport.ONE v1.0 seamlessly blend cutting-edge blockchain technology with interplanetary storage, offering you a commission-free and secure solution. @@ -19,19 +19,6 @@ the planet is sliced into 0.01° segments, ensuring locally registered Tiddlers As a network engineer and system administrator committed to the Common Good, join us in constructing Astroport.ONE and shaping the future of secure and reliable distributed storage. -**ZenCard Payment System: Empowering Transactions, Empowering Dreams** - -As blockchain makers, our ZenCard Payment System is not merely a crypto wallet; it's a game-changing payment card and terminal solution. -Our controlled coin-emitting blockchain transfers 1 coin to your ZenCard per fiat money unit saved in the fiscal host. -This unique approach makes blockchain accessible to everyone. - -Become a donor and a shareholder, receiving Coins equivalent to the Euros paid. Achieve a stable coin state of "1=1" through seamless transactions -with a Host capable of sending and receiving Euros to users with zero fees, facilitated by PayPal integration. - -Activate your account on UPlanet, make donations to https://opencollective.com/made-in-zen, and receive encrypted wallets via email—printed -in QRCode format for added security. Step into a future where financial transactions are commission-free, -and data is securely stored across the cosmos. - **Station Extra-Terrestre Astroport.ONE: Where Innovation Meets Tranquility** In the midst of this technological revolution, discover the Station Extra-Terrestre Astroport.ONE. @@ -73,43 +60,21 @@ At this point, if it exists "ASTROBOT/G1Tag.sh" program will publish the data re # INSTALLATION (Linux Mint / Ubuntu / DEBIAN) -There is 2 methods one for server and one for Linux Mint desktop - -## SERVER : Using DOCKER (and MyOS) - -the easiest way to automaticaly deploy and host Astroport.ONE services - -``` -# install minimal requirements -sudo apt install git docker make - -# clone Astroport.ONE repo -git clone https://github.com/papiche/Astroport.ONE.git - -cd Astroport.ONE -make -make install - -``` -If your computer is running 24/24, you can join our "Boostrap list" & officially become a [TW UPlanet hoster](https://talk.tiddlywiki.org/t/uplanet-a-planet-full-of-tws/8193?u=papiche) - -> DOCKER MODE NOT READY TO USE !! FOLLOW AND ADAPT NEXT STEP - -## DESKTOP : Using install.sh script - Tested on "Linux Mint" (Debian like distro compatible), the **hacker way for using & buidling new blockchain services** ... -``` -# install on system wide -# SOURCE GIT.P2P.LEGAL -bash <(wget -qO- https://git.p2p.legal/qo-op/Astroport.ONE/raw/branch/master/install.sh) +INSTALL COMMAND -# SOURCE GITHUB +``` bash <(wget -qO- https://raw.githubusercontent.com/papiche/Astroport.ONE/master/install.sh) ``` -> PLEASE REPORT ANY ISSUES +> TODO: MORE MODULAR INSTALL. +> CREATE adventure explaining it + +## DRAGONS WOT + +Once you install Astroport.ONE... If all has gone well, you should find these processes running... @@ -126,7 +91,12 @@ If all has gone well, you should find these processes running... ``` -# LAUNCH +> Become Official REGIONAL Station +> - follow "PGP/SSH/IPFSNODEID" linking procedure - +> https://pad.p2p.legal/keygen + + +# DESKTOP After installation, you should have 3 new shortcuts on your desktop @@ -134,6 +104,10 @@ After installation, you should have 3 new shortcuts on your desktop * REC" allows you to save your files on IPFS and publish their Capusle in your TW. * G1BILLET" lets you create ZenCards and other useful QRCodes +NB : If you use "Nemo" as file manager. You can "ipfs add" any file (with no space in file name) by right click it. + +> TODO : detect OS and FILE MANAGER to adapt desktop linking and right clic action + ## How to manage your "Astroport"! You need to create a "PLAYER". @@ -144,8 +118,9 @@ It is defined by email, salt, pepper, lat, lon and PASS ``` Browse available functions -A Station can host multiple "PLAYER and its TiddlyWiki". +A Station can host multiple "PLAYERs and TiddlyWikis". +--- # "BASH API" : "♥BOX" ## http://astroport.localhost:1234 @@ -356,7 +331,9 @@ GET /?player=${PLAYER}&moa=json&tag=G1CopierYoutube > CAN BE EXTENDED ## ➤ AMZQR : Create a QRCode with "amzqr" -### ```/?amzqr=${URLENCODEDSTRING}&logo=${IMAGE}``` +```http +GET /?amzqr=${URLENCODEDSTRING}&logo=${IMAGE} +``` | Parameter | Type | Description | | :-------- | :------- | :-------------------------------- | @@ -366,19 +343,21 @@ GET /?player=${PLAYER}&moa=json&tag=G1CopierYoutube check available "logo.png" in [./images](./images) ## ➤ UPLANET : Create Umap, AstroID & ZenCard for PLAYER (email) -### ```/?uplanet=${PLAYER}&salt=${LAT}&pepper=${LON}&g1pub=${PASS}``` +```http +GET /?uplanet=${PLAYER}&zlat=${LAT}&zlon=${LON}&g1pub=${PASS} +``` | Parameter | Type | Description | | :-------- | :------- | :-------------------------------- | | `uplanet` | `email` | **Required** Your EMAIL token | -| `salt` | `decimal` | **Required** LATITUDE with 2 decimals digits | -| `pepper` | `decimal` | **Required** LONGITUDE with 2 decimals digits | +| `zlat` | `decimal` | **Required** LATITUDE with 2 decimals digits | +| `zlon` | `decimal` | **Required** LONGITUDE with 2 decimals digits | | `g1pub` | `string` | **Facultative** choose Umap AstroID PASS | Create à Umap key (LAT/LON), then a PLAYER TW with GPS as Umap IPNS reference This API is used by OSM2IPFS code. -UPlanet Entrance : https://qo-op.com +* [UPlanet Entrance](https://qo-op.com) ### ➤ QRCODE (API SandBox) ```http @@ -498,12 +477,13 @@ http://localhost:12345 renvoi un json | created | date de creation du document | | hostname | nom de la station | | myIP | adresse IP de la station | -| ipfsnodeid | date de creation du document | +| ipfsnodeid | Clef publique, balise de la station | | astroport | Lien vers l'API de la station | | g1station | Lien vers la carte PLAYER de la Station | | g1swarm | Lien vers la carte des cartes des Stations de l'essaim | -Afin de propager la carte chaque Stations lors de son raffraichissement de cache demande aux Boostrap de la récupérer +Afin de propager la carte chaque station lors de son raffraichissement de cache + envoi aux Boostrap une requête pour upload (```/ipns/${IPFSNODEID}```) ``` STATION MAP UPSYNC : http://$nodeip:12345/?${GNODEID}=${IPFSNODEID} ``` diff --git a/RUNTIME/DRAGON_p2p_ssh.sh b/RUNTIME/DRAGON_p2p_ssh.sh new file mode 100755 index 00000000..ac25d2a8 --- /dev/null +++ b/RUNTIME/DRAGON_p2p_ssh.sh @@ -0,0 +1,89 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.2 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# Activate SUPPORT MODE: open ssh over IPFS +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +. "$MY_PATH/../tools/my.sh" +######################################################################## +YOU=$(myIpfsApi) || er+=" ipfs daemon not running" +[[ "$YOU" == "" || "${IPFSNODEID}" == "" ]] && echo "ERROR : $er " && exit 1 +######################################################################## +## THIS SCRIPT COPY BOOSTRAP PUBKEY +### AND OPEN IPFS P2P SSH FORWARD ON CHANNEL +# Make Station publish SSH port on "/x/ssh-$(IPFSNODEID)" +######################################################################## +## use STOP or OFF to finish forwarding + +PARAM="$1" +if [[ "${PARAM,,}" == "off" || "${PARAM,,}" == "stop" ]]; then + ipfs p2p close --all + rm ~/.zen/tmp/${IPFSNODEID}/x_ssh.sh 2>/dev/null + rm ~/.zen/tmp/${IPFSNODEID}/y_ssh.pub 2>/dev/null + echo "STOP" && exit 0 +fi + +############################################ +## DISTRIBUTE DRAGON SSH WOT SEED +# A_boostrap_ssh.txt +############################################ +while IFS= read -r line +do + LINE=$(echo "$line" | grep "ssh-ed25519" | grep -Ev "#") # Remove # & not ssh-ed25519 + [[ ! ${LINE} ]] && continue + if [[ ! $(cat ~/.ssh/authorized_keys | grep "${LINE}") ]] + then + echo "# ADDING ${LINE} to ~/.ssh/authorized_keys" + mkdir -p ~/.ssh && echo "${LINE}" >> ~/.ssh/authorized_keys + else + echo "TRUSTING ${LINE}" + fi +done < ${MY_PATH}/../A_boostrap_ssh.txt + +############################################ +## PUBLISH SSH PUBKEY OVER IPFS +## KITTY ssh-keygen style +[[ -s ~/.ssh/id_ed25519.pub ]] && cp ~/.ssh/id_ed25519.pub ~/.zen/tmp/${IPFSNODEID}/y_ssh.pub +## DRAGONz PGP/SSH style (https://pad.p2p.legal/keygen) +gpg --export-ssh-key $(cat ~/.zen/game/players/.current/.player) 2>/dev/null > ~/.zen/tmp/${IPFSNODEID}/z_ssh.pub +[[ -z ~/.zen/tmp/${IPFSNODEID}/z_ssh.pub ]] && rm ~/.zen/tmp/${IPFSNODEID}/z_ssh.pub # remove empty file + +############################################ +### FORWARD SSH PORT over /x/ssh-${IPFSNODEID} +############################################ +echo "Lanching /x/ssh-${IPFSNODEID}" + +[[ ! $(ipfs p2p ls | grep "/x/ssh-${IPFSNODEID}") ]] \ + && ipfs p2p listen /x/ssh-${IPFSNODEID} /ip4/127.0.0.1/tcp/22 + +ipfs p2p ls + +echo +############################################ +## PREPARE x_ssh.sh +## REMOTE ACCESS COMMAND FROM DRAGONS +############################################ +PORT=22000 +PORT=$((PORT+${RANDOM:0:3})) + +echo '#!/bin/bash +if [[ ! $(ipfs p2p ls | grep x/ssh-'${IPFSNODEID}') ]]; then + ipfs --timeout=10s ping -n 4 /p2p/'${IPFSNODEID}' + [[ $? == 0 ]] \ + && ipfs p2p forward /x/ssh-'${IPFSNODEID}' /ip4/127.0.0.1/tcp/'${PORT}' /p2p/'${IPFSNODEID}' \ + && ssh '${USER}'@127.0.0.1 -p '${PORT}' + || echo "CONTACT IPFSNODEID FAILED - ERROR -" +fi +' > ~/.zen/tmp/${IPFSNODEID}/x_ssh.sh + +cat ~/.zen/tmp/${IPFSNODEID}/x_ssh.sh + +############################################ +echo +echo "ipfs cat /ipns/${IPFSNODEID}/x_ssh.sh | bash" +############################################ + +exit 0 diff --git a/RUNTIME/G1PalPay.sh b/RUNTIME/G1PalPay.sh index c4a0b62d..e29014c3 100755 --- a/RUNTIME/G1PalPay.sh +++ b/RUNTIME/G1PalPay.sh @@ -12,29 +12,28 @@ ME="${0##*/}" . "${MY_PATH}/../tools/my.sh" - CESIUM=${myCESIUM} - GCHANGE=${myGCHANGE} +CESIUM=${myCESIUM} +GCHANGE=${myGCHANGE} -echo "(✜‿‿✜) G1PalPay : Receiving & Relaying payments to emails found in comment" echo "$ME RUNNING" ######################################################################## -# PALPAY SERVICE +# PALPAY SERVICE : MONITOR INCOMING TX & NEW TIDDLERS ######################################################################## ######################################################################## -INDEX="$1" +INDEX="$1" ## TW file [[ ! ${INDEX} ]] && INDEX="$HOME/.zen/game/players/.current/ipfs/moa/index.html" [[ ! -s ${INDEX} ]] && echo "ERROR - Please provide path to source TW index.html" && exit 1 [[ ! -s ${INDEX} ]] && echo "ERROR - Fichier TW absent. ${INDEX}" && exit 1 -PLAYER="$2" +PLAYER="$2" ## PLAYER [[ ! ${PLAYER} ]] && PLAYER="$(cat ~/.zen/game/players/.current/.player 2>/dev/null)" [[ ! ${PLAYER} ]] && echo "ERROR - Please provide PLAYER" && exit 1 -ASTRONAUTENS=$(ipfs key list -l | grep -w ${PLAYER} | cut -d ' ' -f1) +ASTRONAUTENS=$(ipfs key list -l | grep -w ${PLAYER} | cut -d ' ' -f1) ## TW /ipns/ [[ ! ${ASTRONAUTENS} ]] && echo "ERROR - Clef IPNS ${PLAYER} introuvable!" && exit 1 -G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub) +G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub) ## PLAYER WALLET [[ ! $G1PUB ]] && echo "ERROR - G1PUB ${PLAYER} VIDE" && exit 1 # Extract tag=tube from TW @@ -47,23 +46,32 @@ MOATS="$3" mkdir -p $HOME/.zen/tmp/${IPFSNODEID}/G1PalPay/${PLAYER}/ mkdir -p $HOME/.zen/game/players/${PLAYER}/G1PalPay/ mkdir -p $HOME/.zen/tmp/${MOATS} -echo "=========== ( ◕‿◕) (◕‿◕ ) ==============" +echo "=========== ( ◕‿◕) (◕‿◕ ) ============== ${PLAYER} +${INDEX}" +echo "(✜‿‿✜) G1PalPay : CHECK LAST 10 TX comment" # CHECK LAST 10 INCOMING PAYMENTS ~/.zen/Astroport.ONE/tools/timeout.sh -t 12 \ ${MY_PATH}/../tools/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey history -n 10 -j > $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json [[ ! -s $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json ]] \ -&& echo "NO PAYMENT HISTORY" \ +&& echo "NO PAYMENT HISTORY.......................... EXIT" \ && exit 1 ############################## ########################################################## ############# CHECK FOR N1COMMANDs IN PAYMENT COMMENT +# TODO check amout > 0 ################################################################# +cat $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json | jq -rc .[] +## TREAT ANY COMMENT STARTING WITH N1: +## EXTRACT /ASTROBOT/N1ProgramNames +ls ${MY_PATH}/../ASTROBOT/ | grep "N1" | cut -d "." -f 1 > ~/.zen/tmp/${MOATS}/N1PROG -## TREAT ANY COMMENT STARTING WITH N1 -cat $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json | jq -rc .[] | grep 'N1' > ~/.zen/tmp/${MOATS}/myN1.json +while read prog; do + cat $HOME/.zen/game/players/${PLAYER}/G1PalPay/${PLAYER}.duniter.history.json | jq -rc .[] | grep "$prog" >> ~/.zen/tmp/${MOATS}/myN1.json +done < ~/.zen/tmp/${MOATS}/N1PROG +# got N1 incoming TX while read NLINE; do ## COMMENT FORMAT = N1$CMD:$TH:$TRAIL TXIDATE=$(echo ${NLINE} | jq -r .date) @@ -72,7 +80,10 @@ while read NLINE; do COMMENT=$(echo ${NLINE} | jq -r .comment) CMD=$(echo ${COMMENT} | cut -d ':' -f 1 | cut -c -12 ) # Maximum 12 characters CMD - [[ $(cat ~/.zen/game/players/${PLAYER}/.ndate) -ge $TXIDATE ]] && echo "$CMD $TXIDATE from $TXIPUBKEY ALREADY TREATED - continue" && continue + # Verify last recorded acting date (avoid running twice) + [[ $(cat ~/.zen/game/players/${PLAYER}/.ndate) -ge $TXIDATE ]] \ + && echo "$CMD $TXIDATE from $TXIPUBKEY ALREADY TREATED - continue" \ + && continue TH=$(echo ${COMMENT} | cut -d ':' -f 2) TRAIL=$(echo ${COMMENT} | cut -d ':' -f 3-) @@ -114,7 +125,9 @@ while read LINE; do COMMENT=$(echo $JSON | jq -r .comment) echo ">>> TODO CHECK TX HAPPENS LAST 24H (WHAT IS TXIDATE=$TXIDATE FORMAT ??)" - [[ $(cat ~/.zen/game/players/${PLAYER}/.atdate) -ge $TXIDATE ]] && echo "PalPay $TXIDATE from $TXIPUBKEY ALREADY TREATED - continue" && continue + [[ $(cat ~/.zen/game/players/${PLAYER}/.atdate) -ge $TXIDATE ]] \ + && echo "PalPay $TXIDATE from $TXIPUBKEY ALREADY TREATED - continue" \ + && continue ## GET EMAILS FROM COMMENT TXIMAILS=($(echo "$COMMENT" | grep -E -o "\b[a-zA-Z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b")) @@ -123,9 +136,11 @@ while read LINE; do echo "N=${#TXIMAILS[@]}" N=${#TXIMAILS[@]} SHARE=$(echo "scale=2; $TXIAMOUNT / $N" | bc) + ## SHARE is received AMOUT divided by numbers of EMAILS in comment echo "$TXIDATE $TXIPUBKEY $TXIAMOUNT [$TXIAMOUNTUD] $TXIMAILS % $SHARE %" + # let's loop over TXIMAILS for EMAIL in "${TXIMAILS[@]}"; do [[ ${EMAIL} == $PLAYER ]] && echo "ME MYSELF" && continue @@ -144,8 +159,8 @@ while read LINE; do [[ ! ${ASTROG1} ]] \ && echo "SORRY ${EMAIL} YOUR ACCOUNT IS MISSING" \ - && echo " BRO. $PLAYER WISH TO SEND YOU SOME ẐEN (♥‿‿♥)... Join UPlanet and receive it" > ~/.zen/tmp/palpay.bro \ - && ${MY_PATH}/../tools/mailjet.sh "${EMAIL}" ~/.zen/tmp/palpay.bro "NEED FOR ACCOUNT" \ + && echo " BRO. $PLAYER WISH TO SEND YOU SOME ẐEN (♥‿‿♥)... Join UPlanet to receive it