Compare commits

...

89 Commits

Author SHA1 Message Date
fred 8088394bd5 VISA 2022-12-09 01:39:47 +01:00
fred e7d61bfca0 pousss 2022-12-09 01:21:21 +01:00
fred 155640fb2a compatibiliy 2022-12-09 01:09:17 +01:00
fred 337e842c27 docker user to PLAYER 2022-12-09 00:58:48 +01:00
fred 0c5ba0af2d zim 2022-12-08 23:19:09 +01:00
fred 4435717e5f yiu 2022-12-08 21:13:15 +01:00
fred c08db1782c # INIT WISH TW 2022-12-08 21:08:57 +01:00
fred 59eae6afe8 Create TW with URL 2022-12-08 20:31:04 +01:00
fred 65bffe8931 Astroport chain & moats activation 2022-12-08 19:43:30 +01:00
fred e9577844cb Add BunkeBOX Tiddler along with CopierYoutube voeu for next 20H12 2022-12-08 19:34:31 +01:00
fred 8d1de09958 Astroport.astroport.chain=_CHAIN_ /ipfs/bafybeidxavdjadjyvxf7mdebuniy5vzbma7r7pkceimqdb6zw3mkgupzhm 2022-12-08 19:06:32 +01:00
fred be48e0a52a ipfs cat /ipfs/bafybeiftunnb4nyk3b7yxkhvr4wolouw6rhqxi7iiz6rfkjobyg2s3u2l4 > templates/twdefault.html 2022-12-08 18:56:20 +01:00
fred 2af0af955b changing keys & servers 2022-12-07 17:27:14 +01:00
fred 8850bfa301 leading space was breaking 2022-12-06 23:45:15 +01:00
fred 53c5df9246 pidportinuse bad detect correction 2022-12-06 23:27:27 +01:00
fred d289d38c99 espeak 2022-12-06 21:13:20 +01:00
fred 82d9e72568 TODO INSERT INTO $:/plugins/astroport/lightbeams/state/subscriptions 2022-12-06 19:38:40 +01:00
fred edf7666915 sorry it was buggy 2022-12-06 18:39:14 +01:00
fred 7c03e22101 Lightbeam loaded 2022-12-06 18:33:28 +01:00
fred 847d4eccdc INSTALLATION (Docker) 2022-12-05 13:56:00 +01:00
fred ee633948f8 Welcome to myos docker land - make a user - make a player - 2022-12-05 13:41:20 +01:00
fred 2487607875 make make docker myos 2022-12-05 13:22:18 +01:00
fred 017186ddbb YEAR 2022-12-04 23:10:21 +01:00
fred 5044400869 VX 2022-12-04 23:02:09 +01:00
fred 3040a8eff0 speak 2022-12-04 19:12:02 +01:00
fred 9194845c8d no more official login. USER is becoming a PLAYER, seeding it's own IPFS, using a Docker on an Astroport NODE run by another PLAYER. So FRIENDS can invite other FRIENDS 2022-12-04 17:52:33 +01:00
fred cbc1b24f74 Using node & swarm cache to limit "yt + ipfs add" time. (PLAYER & 2022-12-04 17:29:50 +01:00
fred 674a8264e7 SEARCH ALREADY DONE IN 12345 Swarm 2022-12-04 17:02:29 +01:00
fred 29c2ad7051 CACHE IN ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/ 2022-12-04 17:01:18 +01:00
fred 20097f47d4 APP=RSS : PLAYER FPLAYER RSS PUBLICATION READY 2022-12-04 15:44:08 +01:00
fred 300cc6ecfc RSS IPFSNODEID PUBLICATION ~/.zen/tmp/${IPFSNODEID}/rss/${PLAYER}/${FPLAYER}.rss.json 2022-12-04 15:41:55 +01:00
fred eea825e1ea PUSH ${FPLAYER}.rss.json INTO 12345 SWARM KEY PUBLISH 2022-12-04 15:32:37 +01:00
fred 369dc621e0 ${FPLAYER}.rss.json 2022-12-04 15:12:18 +01:00
fred e170453c08 make a wish, and make it real 2022-12-04 15:06:09 +01:00
fred eb978ff5bc TODO CREATE 20H12 TIDDLER TO ADD TO MY W 2022-12-04 15:05:35 +01:00
fred 1979388f5c _canonical_uri 2022-12-03 16:54:40 +01:00
fred 0c979db133 december 2022-12-02 21:34:46 +01:00
fred 872ab9a1af best than ever 2022-12-02 19:38:05 +01:00
fred 6621311983 Multimedia IPFS TW 2022-12-02 17:45:45 +01:00
fred 7d815b67d0 Astroport can copy Web Sites into your TW. Please make it better connect it with archive.org 2022-12-02 15:14:19 +01:00
fred 57979b66bc Merge branch 'master' of https://git.p2p.legal/qo-op/Astroport.ONE 2022-12-01 20:12:12 +01:00
fred f01e0510e9 yep 2022-12-01 18:38:07 +01:00
fred b7ed00f0ef evolve 2022-12-01 18:26:21 +01:00
qo-op 7cb303e6b1 Merge pull request 'fix' (#19) from aya/Astroport.ONE:fix into master
Reviewed-on: qo-op/Astroport.ONE#19
<3
2022-11-29 21:15:39 +01:00
Yann Autissier 83b4422502 node is host 2022-11-29 19:28:53 +00:00
Yann Autissier 31608784f6 Merge remote-tracking branch 'origin/fix' into fix 2022-11-29 18:25:26 +00:00
fred c3510a1a93 takes video path & filename as param => export markers gifanime ipfs 2022-11-29 16:42:13 +01:00
fred 1124db1837 +1 2022-11-29 16:39:58 +01:00
aya 41efb1ee2f Merge branch 'master' into fix 2022-11-28 22:35:34 +01:00
aya e26d685118 Merge branch 'master' into fix 2022-11-28 22:34:04 +01:00
fred 9a552f92b6 picorez les TW de vos amis 2022-11-28 21:17:38 +01:00
aya 72de1568ce Merge branch 'master' into fix 2022-11-28 20:22:14 +01:00
Yann Autissier a8941d0b17 players 2022-11-28 20:19:01 +01:00
fred 86a32995ea et hop 2022-11-27 21:54:40 +01:00
fred a53223f887 IPFS FileUpload & G1lib crypto try 2022-11-27 18:08:44 +01:00
fred 3699d5bfff bugs killing & enhancement 2022-11-27 18:07:02 +01:00
fred 1ba3b338f5 --download-archive $HOME/.zen/.yt-dlp.list \ 2022-11-27 18:06:24 +01:00
Boris 779a823456 bobo's fix 2022-11-27 17:13:59 +01:00
fred 32f6824e4b send email from: support@g1sms.fr 2022-11-27 13:59:33 +01:00
fred b580c42a2c BRO Ŋ1 + Ŋ2 networks exploration 2022-11-27 13:59:03 +01:00
Boris 5da69c40b3 Merge branch 'master' into fix 2022-11-27 13:19:18 +01:00
Yann Autissier 08c287bbb0 fix 2022-11-27 08:06:59 +00:00
fred d39608c18b sudo youtube-dl -U 2022-11-27 05:00:45 +01:00
fred 08233a3c23 Install yt-dlp. Use "youtube-dl -U" to update 2022-11-27 04:58:52 +01:00
fred 8300d8ccfe START CLI MODE + API ENGINE 2022-11-27 04:55:35 +01:00
fred 30ca1b0c58 REFRESH PLAYERS FoF TW & WISHES + RESTART 1234 API ENGINE 2022-11-27 04:53:46 +01:00
fred a3eb8a8d51 IPFSNODEID 2022-11-27 04:49:12 +01:00
fred 3c49de86ee send -d "${liking_me}" -t "BRO !" -m ">>> (◕‿‿◕) <<< https://astroport.copylaradio.com >>> (◕‿‿◕) <<<" 2022-11-27 04:49:03 +01:00
fred f226666776 espeak 2022-11-27 02:20:57 +01:00
fred b3d11dba0d BRO? 2022-11-27 02:20:47 +01:00
fred 37d51db975 $myHOST 2022-11-26 19:36:54 +01:00
fred 4c7fa5b821 cc 2022-11-26 19:33:38 +01:00
fred 7b1ef13d43 CRYPTO ENCODING secret.dunikey -> TW _SECRET_ 2022-11-26 19:33:25 +01:00
qo-op 7ca11f2920 Merge pull request 'make player' (#18) from aya/Astroport.ONE:player into master
Reviewed-on: qo-op/Astroport.ONE#18
2022-11-26 16:21:43 +01:00
fred abca8a423b auto install ipfs for amd64 2022-11-25 20:58:43 +01:00
fred a06f6ced06 bash <(wget -qO- https://git.p2p.legal/qo-op/Astroport.ONE/raw/branch/master/install.sh) 2022-11-25 15:47:02 +01:00
fred 600059cfb3 Download & decompress# Install# Test & clean 2022-11-25 15:40:31 +01:00
fred 5129f17690 GIT_SSL_NO_VERIFY=true 2022-11-25 15:37:03 +01:00
fred 761911b909 kubo_v0.17.0_linux-amd64.tar.gz INSTALL 2022-11-25 15:33:45 +01:00
fred 9f83ac5468 LANCEMENT root INTERDIT. Utilisez un simple utilisateur du groupe "sudo" SVP 2022-11-25 15:32:19 +01:00
fred 0f878e922b kubo_v0.16.0_linux-amd64.install.sh 2022-11-25 15:29:20 +01:00
fred ada50bb265 desactivate IPNS PORT session key 2022-11-25 14:48:37 +01:00
fred ec3ad83c13 install 2022-11-25 14:02:58 +01:00
fred 0623b9e1c9 i don't care 2022-11-25 14:01:38 +01:00
Yann Autissier 819e330bb1 make player 2022-11-25 05:00:22 +00:00
fred 9522c4186f Docker & isLAN mixup 2022-11-24 19:39:09 +01:00
fred 0e5a16885e new bootstrap list 2022-11-23 19:45:38 +01:00
qo-op 64c7725dd1 Merge pull request 'fix' (#15) from aya/Astroport.ONE:fix into master
Reviewed-on: qo-op/Astroport.ONE#15
2022-11-23 19:34:44 +01:00
Yann Autissier ba01d0f602 fix 2022-11-23 18:28:20 +00:00
49 changed files with 1672 additions and 1055 deletions

View File

@ -1,9 +1,2 @@
DOCKER_IMAGES_MYOS=x2go:xfce-debian
NODE_ASTROPORT_SERVICE_1234_TAGS=urlprefix-astroport.${DOMAIN}/
NODE_VDI_ECRYPTERS=zen
NODE_VDI_LANG=${LANG}
NODE_VDI_PORT=45720
NODE_VDI_SUDOERS=
NODE_VDI_TZ=UTC
NODE_VDI_USERS=zen
UFW_UPDATE_ASTROPORT=1234 12245:12445/tcp
DOCKER_COMPOSE_VDI=true
DOMAIN=localhost

1
.gitignore vendored
View File

@ -1 +1,2 @@
.env
*.pyc

445
12345.sh
View File

@ -5,7 +5,7 @@
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
################################################################################
################################################################################
## ASTROPORT API SERVER http://$myIP:1234
## ASTROPORT API SERVER http://${myHOST}:1234
## ATOMIC GET REDIRECT TO ONE SHOT WEB SERVICE THROUGH PORTS
## ASYNCHRONOUS IPFS API
################################################################################
@ -17,8 +17,9 @@ MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
myIP=$(hostname -I | awk '{print $1}' | head -n 1)
isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
[[ ! $myIP || $isLAN ]] && myIP="ipfs.localhost"
[[ $isLAN ]] && myHOST="ipfs.localhost" && myHOSTPort="ipfs.localhost:8080" && myHTTP="http://" && myASTROPORT="http://astroport.localhost:1234" ## LAN STATION
[[ ! $isLAN ]] && myHOST="astroport.copylaradio.com" && myHOSTPort="ipfs.copylaradio.com" && myHTTP="https://" && myASTROPORT="https://astroport.copylaradio.com" ## WAN STATION
PORT=12345
@ -30,7 +31,7 @@ mkdir -p ~/.zen/tmp/coucou/
## CHECK FOR ANY ALREADY RUNNING nc
ncrunning=$(ps auxf --sort=+utime | grep -w 'nc -l -p 1234' | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1)
[[ $ncrunning ]] && echo "ERROR - API Server Already Running - http://$myIP:1234/?salt=totodu56&pepper=totodu56&getipns " && exit 1
[[ $ncrunning ]] && echo "ERROR - API Server Already Running - ${myHTTP}${myHOST}:1234/?salt=totodu56&pepper=totodu56&getipns " && exit 1
## NOT RUNNING TWICE
# Some client needs to respect that
@ -42,50 +43,56 @@ Server: Astroport.ONE
Content-Type: text/html; charset=UTF-8
"
echo "_________________________________________________________"
echo "LAUNCHING Astroport API Server - $TUBE - "
echo "_________________________________________________________ $(date)"
echo "LAUNCHING Astroport API Server - TUBE : $LIBRA - "
echo
echo "CREATE GCHANGE + TW http://$myIP:1234/?salt=totodu56&pepper=totodu56&g1pub=on&email=fred@astroport.com"
echo "GCHANGE ${myASTROPORT}/?salt=totodu56&pepper=totodu56&g1pub"
echo "OPEN TW ${myASTROPORT}/?salt=totodu56&pepper=totodu56&g1pub=astro"
echo "GCHANGE MESSAGING ${myASTROPORT}/?salt=totodu56&pepper=totodu56&messaging"
echo "CREATE SAME PLAYER : ${myASTROPORT}/?salt=totodu56&pepper=totodu56&g1pub=on&email=totodu56@yopmail.com"
echo
echo "OPEN TW R/W http://$myIP:1234/?salt=totodu56&pepper=totodu56&official"
echo "NEW PLAYER : ${myASTROPORT}/?salt=${RANDOM}&pepper=${RANDOM}&g1pub=on&email=astro${RANDOM}@yopmail.com"
echo
echo "GCHANGE MESSAGING http://$myIP:1234/?salt=totodu56&pepper=totodu56&messaging"
echo "GCHANGE PLAYER URL http://$myIP:1234/?salt=totodu56&pepper=totodu56&g1pub"
echo "BunkerBOX : ${myASTROPORT}/?salt=totodu56&pepper=totodu56&g1pub=_URL_&email=totodu56@yopmail.com"
echo
echo "TESTCRAFT http://$myIP:1234/?salt=totodu56&pepper=totodu56&testcraft=on&nodeid=12D3KooWK1ACupF7RD3MNvkBFU9Z6fX11pKRAR99WDzEUiYp5t8j&dataid=QmPXhrqQrS1bePKJUPH9cJ2qe4RrNjaJdRXaJzSjxWuvDi"
echo "TESTCRAFT ${myASTROPORT}/?salt=totodu56&pepper=totodu56&testcraft=on&nodeid=12D3KooWK1ACupF7RD3MNvkBFU9Z6fX11pKRAR99WDzEUiYp5t8j&dataid=QmPXhrqQrS1bePKJUPH9cJ2qe4RrNjaJdRXaJzSjxWuvDi"
echo "_________________________________________________________"
function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
#############################
########## MAIN ###############
#############################
while true; do
start=`date +%s`
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
## CHANGE NEXT PORT (HERE YOU CREATE A SOCKET QUEUE)
# EACH VISITOR RECEIVE COMMAND RESPONSE ON
## RANDOM PORT = RESPONSE SOCKET & IPNS SESSION TOKEN
[ ${PORT} -le 12345 ] && PORT=$((PORT+${RANDOM:0:2})) || PORT=$((PORT-${RANDOM:0:2}))
## RANDOM PORT SWAPPINESS AVOIDING COLLISION
## CHECK PORT IS FREE
pidportinuse=$(ps axf --sort=+utime | grep -w "nc -l -p ${PORT}" | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 2)
[[ $pidportinuse ]] && kill -9 $pidportinuse && echo "KILLING $portinuse " && continue
## RANDOM PORT SWAPPINESS AVOIDING COLLISION
## CHECK PORT IS FREE & KILL OLD ONE
pidportinuse=$(ps axf --sort=+utime | grep -w "nc -l -p ${PORT}" | grep -v -E 'color=auto|grep' | awk '{gsub(/^ +| +$/,"")} {print $0}' | tail -n 1 | cut -d " " -f 1)
[[ $pidportinuse ]] && kill -9 $pidportinuse && echo "KILLING $pidportinuse" && continue
## CHECK 12345 PORT RUNNING (PUBLISHING IPNS SWARM MAP)
## CHECK 12345 PORT RUNNING (STATION FoF MAP)
maprunning=$(ps auxf --sort=+utime | grep -w '_12345.sh' | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1)
#maprunning=$(ps auxf --sort=+utime | grep -w 'nc -l -p 12345' | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1)
[[ ! $maprunning ]] && ($MY_PATH/_12345.sh &) && echo '(ᵔ◡◡ᵔ) LAUNCHING http://'$myIP:'12345 (ᵔ◡◡ᵔ)'
[[ ! $maprunning ]] && ($MY_PATH/_12345.sh &) && echo '(ᵔ◡◡ᵔ) LAUNCHING '${myHTTP}${myHOST}:'12345 (ᵔ◡◡ᵔ)'
############### IPNS SESSION KEY TRY LATER
############### ACTIVATE USE ON QUICK IPFS DRIVE
### CREATE IPNS KEY - ACTIVATE WHITH ENOUGH BOOTSTRAP
### echo
### ipfs key rm ${PORT} > /dev/null 2>&1
### SESSIONNS=$(ipfs key gen ${PORT})
### echo "IPNS SESSION http://$myIP:8080/ipns/$SESSIONNS CREATED"
#~ echo
#~ ipfs key rm ${PORT} > /dev/null 2>&1
#~ SESSIONNS=$(ipfs key gen ${PORT})
#~ echo "IPNS SESSION ${myHTTP}${myHOST}Port/ipns/$SESSIONNS CREATED"
### # USE IT #
### MIAM=$(echo ${PORT} | ipfs add -q)
### ipfs name publish --allow-offline --key=${PORT} /ipfs/$MIAM
### end=`date +%s`
### echo ${PORT} initialisation time was `expr $end - $start` seconds.
### echo
### ipfs name publish --allow-offline -t 180s --key=${PORT} /ipfs/$MIAM &
###############
###############
@ -93,18 +100,22 @@ while true; do
SALT=""; PEPPER=""; APPNAME=""
############### ############### ############### ############### templates/index.http
# REPLACE myIP in http response template (fixing next API meeting point)
sed "s~127.0.0.1:12345~$myIP:${PORT}~g" $HOME/.zen/Astroport.ONE/templates/index.http > ~/.zen/tmp/coucou/${MOATS}.myIP.http
sed -i "s~127.0.0.1~$myIP~g" ~/.zen/tmp/coucou/${MOATS}.myIP.http
sed -i "s~:12345~:${PORT}~g" ~/.zen/tmp/coucou/${MOATS}.myIP.http
sed -i "s~_IPFSNODEID_~${IPFSNODEID}~g" ~/.zen/tmp/coucou/${MOATS}.myIP.http ## NODE PUBLISH HOSTED ${WHAT}'S JSON
sed -i "s~_HOSTNAME_~$(hostname)~g" ~/.zen/tmp/coucou/${MOATS}.myIP.http ## HOSTNAME
# REPLACE myHOST in http response template (fixing next API meeting point)
sed "s~127.0.0.1:12345~${myHOST}:${PORT}~g" $HOME/.zen/Astroport.ONE/templates/index.http > ~/.zen/tmp/coucou/${MOATS}.myHOST.http
sed -i "s~127.0.0.1~${myHOST}~g" ~/.zen/tmp/coucou/${MOATS}.myHOST.http
sed -i "s~:12345~:${PORT}~g" ~/.zen/tmp/coucou/${MOATS}.myHOST.http
sed -i "s~_SESSIONLNK_~${myHTTP}${myHOSTPort}/ipns/${SESSIONNS}~g" ~/.zen/tmp/coucou/${MOATS}.myHOST.http
sed -i "s~_IPFSNODEID_~${IPFSNODEID}~g" ~/.zen/tmp/coucou/${MOATS}.myHOST.http ## NODE PUBLISH
sed -i "s~_HOSTNAME_~$(hostname)~g" ~/.zen/tmp/coucou/${MOATS}.myHOST.http ## HOSTNAME
############### ############### ############### ###############
############################################################################
## SERVE LANDING REDIRECT PAGE ~/.zen/tmp/coucou/${MOATS}.myIP.http on PORT 1234 (LOOP BLOCKING POINT)
## SERVE LANDING REDIRECT PAGE ~/.zen/tmp/coucou/${MOATS}.myHOST.http on PORT 1234 (LOOP BLOCKING POINT)
############################################################################
REQ=$(cat $HOME/.zen/tmp/coucou/${MOATS}.myIP.http | nc -l -p 1234 -q 1) ## # WAIT FOR 1234 CONTACT
REQ=$(cat $HOME/.zen/tmp/coucou/${MOATS}.myHOST.http | nc -l -p 1234 -q 1) ## # WAIT FOR 1234 PORT CONTACT
URL=$(echo "$REQ" | grep '^GET' | cut -d ' ' -f2 | cut -d '?' -f2)
HOSTP=$(echo "$REQ" | grep '^Host:' | cut -d ' ' -f2 | cut -d '?' -f2)
HOST=$(echo "$HOSTP" | cut -d ':' -f 1)
@ -112,10 +123,10 @@ while true; do
[[ $URL == "/test" || $URL == "" ]] && continue
echo "************************************************************************* "
echo "ASTROPORT 1234 UP & RUNNING.......................... http://$HOST:1234 PORT"
echo "${MOATS} NEXT COMMAND DELIVERY PAGE http://$HOST:${PORT}"
echo "ASTROPORT 1234 UP & RUNNING.......................... ${myHTTP}$HOST:1234 PORT"
echo "${MOATS} NEXT COMMAND DELIVERY PAGE ${myHTTP}$HOST:${PORT}"
espeak "Ding" > /dev/null 2>&1
[[ $XDG_SESSION_TYPE == 'x11' ]] && espeak "Ding" >/dev/null 1>&2
echo "URL" > ~/.zen/tmp/coucou/${MOATS}.url ## LOGGING URL
@ -123,73 +134,81 @@ while true; do
start=`date +%s`
############################################################################
## / CONTACT - PUBLISH HTML HOMEPAGE (ADD HTTP HEADER)
## / CONTACT
if [[ $URL == "/" ]]; then
echo "/ CONTACT : http://$HOST:1234"
echo "___________________________ Preparing register.html"
echo "/ CONTACT : ${myHTTP}$HOSTP"
echo "___________________________ Preparing default return register.html"
echo "$HTTPCORS" > ~/.zen/tmp/coucou/${MOATS}.index.redirect ## HTTP 1.1 HEADER + HTML BODY
sed "s~127.0.0.1~$HOST~g" $HOME/.zen/Astroport.ONE/templates/register.html >> ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed -i "s~_IPFSNODEID_~${IPFSNODEID}~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed -i "s~_HOSTNAME_~$(hostname)~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
## Random Background image ;)
sed -i "s~.000.~.$(printf '%03d' $(echo ${RANDOM} % 18 | bc)).~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed "s~http://127.0.0.1:1234~${myHTTP}$HOSTP~g" $HOME/.zen/Astroport.ONE/templates/register.html >> ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed -i "s~_IPFSNODEID_~${IPFSNODEID}~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed -i "s~_HOSTNAME_~$(hostname)~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed -i "s~http://127.0.0.1:8080~${myHTTP}${myHOSTPort}~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
## Random Background image ;)
sed -i "s~.000.~.$(printf '%03d' $(echo ${RANDOM} % 18 | bc)).~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
cat ~/.zen/tmp/coucou/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
end=`date +%s`
echo " (☓‿‿☓) Execution time was "`expr $end - $start` seconds.
echo " (‿/‿) ${myHTTP}$HOSTP / Execution time was "`expr $end - $start` seconds.
continue
fi
############################################################################
############################################################################
############################################################################
# URL DECODING
############################################################################
echo "=================================================="
echo "GET RECEPTION : $URL"
arr=(${URL//[=&]/ })
# CHECK APPNAME
APPNAME=$(urldecode ${arr[4]})
WHAT=$(urldecode ${arr[5]})
[[ ${arr[0]} == "" || ${arr[1]} == "" ]] && (echo "$HTTPCORS ERROR - MISSING DATA" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
APPNAME=$(urldecode ${arr[4]} | xargs)
WHAT=$(urldecode ${arr[5]} | xargs)
########## CHECK GET PARAM NAMES
###################################################################################################
[[ ${arr[0]} == "" || ${arr[1]} == "" ]] && (echo "$HTTPCORS ERROR - MISSING DATA" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
###################################################################################################
# API ZERO ## Made In Zion & La Bureautique
if [[ ${arr[0]} == "salt" ]]; then
[[ ! $APPNAME ]] && echo "NO APPNAME - CONTINUE" && continue
############################################################################
# WRITING API # SALT # PEPPER # MAKING THE KEY EXIST #########
################### KEY GEN ###################################
echo ">>>>>>>>>>>>>> Application LaBureautique >><< APPNAME = $APPNAME <<<<<<<<<<<<<<<<<<<<"
SALT=$(urldecode ${arr[1]} | xargs);
[[ ! $SALT ]] && (echo "$HTTPCORS ERROR - SALT MISSING" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
PEPPER=$(urldecode ${arr[3]} | xargs)
[[ ! $PEPPER ]] && (echo "$HTTPCORS ERROR - PEPPER MISSING" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
APPNAME=$(urldecode ${arr[4]} | xargs)
[[ ! $APPNAME ]] && (echo "$HTTPCORS ERROR - APPNAME MISSING" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
WHAT=$(urldecode ${arr[5]} | xargs)
## SAVE "salt" "pepper" DEBUG REMOVE OR PASS ENCRYPT FOR SECURITY REASON
echo "PLAYER CREDENTIALS : \"$SALT\" \"$PEPPER\""
echo "PLAYER : \"$SALT\" \"$PEPPER\" : $APPNAME ($WHAT)"
echo "\"$SALT\" \"$PEPPER\"" > ~/.zen/tmp/coucou/${MOATS}.secret.june
# CALCULATING ${MOATS}.secret.key + G1PUB
${MY_PATH}/tools/keygen -t duniter -o ~/.zen/tmp/coucou/${MOATS}.secret.key "$SALT" "$PEPPER"
G1PUB=$(cat ~/.zen/tmp/coucou/${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 &) && continue
[[ ! ${G1PUB} ]] && (echo "$HTTPCORS ERROR - (╥☁╥ ) - KEYGEN COMPUTATION DISFUNCTON" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
echo "G1PUB : ${G1PUB}"
## CALCULATING IPNS ADDRESS
## CALCULATING ${MOATS}.${G1PUB}.ipns.key ADDRESS
ipfs key rm ${G1PUB} > /dev/null 2>&1
rm -f ~/.zen/tmp/coucou/${MOATS}.${G1PUB}.ipns.key
${MY_PATH}/tools/keygen -t ipfs -o ~/.zen/tmp/coucou/${MOATS}.${G1PUB}.ipns.key "$SALT" "$PEPPER"
ASTRONAUTENS=$(ipfs key import ${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/coucou/${MOATS}.${G1PUB}.ipns.key )
echo "ASTRONAUTE TW : http://$HOST:8080/ipns/${ASTRONAUTENS}"
[[ ! ${ASTRONAUTENS} ]] && (echo "$HTTPCORS ERROR - (╥☁╥ ) - ASTRONAUTENS COMPUTATION DISFUNCTON" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
echo "TW ADDRESS : ${myHTTP}$HOSTP/ipns/${ASTRONAUTENS}"
echo
################### KEY GEN ###################################
# Get PLAYER wallet amount
( ## SUB PROCESS
COINS=$($MY_PATH/tools/jaklis/jaklis.py -k ~/.zen/tmp/coucou/${MOATS}.secret.key balance)
@ -198,12 +217,15 @@ sed -i "s~.000.~.$(printf '%03d' $(echo ${RANDOM} % 18 | bc)).~g" ~/.zen/tmp/cou
echo "G1WALLET (☓‿‿☓) Execution time was "`expr $end - $start` seconds.
) &
########################################
## ARCHIVE TOCTOC ${WHAT}S & KEEPS LOGS CLEAN
########################################
## ARCHIVE TOCTOC ${WHAT}S KEEP LOG (TODO : ERASE)
########################################
mkdir -p ~/.zen/game/players/.toctoc/
ISTHERE=$(ls -t ~/.zen/game/players/.toctoc/*.${G1PUB}.ipns.key 2>/dev/null | tail -n 1)
TTIME=$(echo $ISTHERE | rev | cut -d '.' -f 4 | cut -d '/' -f 1 | rev)
if [[ ! $ISTHERE ]]; then
echo "${WHAT} 1ST TOCTOC : ${MOATS}"
echo "${APPNAME} 1ST TOCTOC : ${MOATS}"
cp ~/.zen/tmp/coucou/${MOATS}.* ~/.zen/game/players/.toctoc/
else ## KEEP 1ST CONTACT ONLY
OLDONE=$(ls -t ~/.zen/tmp/coucou/*.${G1PUB}.ipns.key | tail -n 1)
@ -211,10 +233,14 @@ sed -i "s~.000.~.$(printf '%03d' $(echo ${RANDOM} % 18 | bc)).~g" ~/.zen/tmp/cou
[[ $DTIME != ${MOATS} ]] && rm ~/.zen/tmp/coucou/$DTIME.*
fi
## APPNAME SLECTION ########################
########################################
## APPNAME SELECTION ########################
########################################
# MESSAGING
if [[ $APPNAME == "messaging" || $APPNAME == "email" ]]; 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/coucou/${MOATS}.secret.key read -n 10 -j > ~/.zen/tmp/coucou/messin.${G1PUB}.json
@ -236,16 +262,20 @@ sed -i "s~.000.~.$(printf '%03d' $(echo ${RANDOM} % 18 | bc)).~g" ~/.zen/tmp/cou
sed -i "s~text/html~application/json~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
cat ~/.zen/tmp/coucou/${MOATS}.messaging.json >> ~/.zen/tmp/coucou/${MOATS}.index.redirect
### REPONSE=$(cat ~/.zen/tmp/coucou/${MOATS}.messaging.json | ipfs add -q)
### ipfs name publish --allow-offline --key=${PORT} /ipfs/$REPONSE
### echo "SESSION http://$HOST:8080/ipns/$SESSIONNS "
## SEND REPONSE PROCESS IN BACKGROUD
cat ~/.zen/tmp/coucou/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
#~ ( ## USING IPNS SESSION KEY
#~ REPONSE=$(cat ~/.zen/tmp/coucou/${MOATS}.messaging.json | ipfs add -q)
#~ ipfs name publish --allow-offline --key=${PORT} /ipfs/$REPONSE
#~ echo "SESSION ${myHTTP}$HOSTP/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
) &
) & ## & SUB PROCESS
end=`date +%s`
echo " Messaging launch (☓‿‿☓) Execution time was "`expr $end - $start` seconds.
@ -254,33 +284,41 @@ sed -i "s~.000.~.$(printf '%03d' $(echo ${RANDOM} % 18 | bc)).~g" ~/.zen/tmp/cou
######################## MESSAGING END
########################################
# G1PUB -> Open Gchange Profile & Update TW cache
# G1PUB WITH NO EMAIL -> Open Gchange Profile & Update TW cache
########################################
if [[ "$APPNAME" == "g1pub" && ${arr[7]} == "" ]]; then
## NO EMAIL = REDIRECT TO GCHANGE PROFILE
sed "s~_TWLINK_~https://www.gchange.fr/#/app/user/${G1PUB}/~g" ~/.zen/Astroport.ONE/templates/index.302 > ~/.zen/tmp/coucou/${MOATS}.index.redirect
## https://git.p2p.legal/La_Bureautique/zeg1jeux/src/branch/main/lib/Fred.class.php#L81
echo "url='https://www.gchange.fr/#/app/user/"${G1PUB}"/'" >> ~/.zen/tmp/coucou/${MOATS}.index.redirect
echo "GCHANGE REDIRECTING https://www.gchange.fr/#/app/user/"${G1PUB}"/"
[[ ${WHAT} == "astro" ]] && REPLACE="$LIBRA/ipns/$ASTRONAUTENS" \
|| REPLACE="https://www.gchange.fr/#/app/user/${G1PUB}"
echo ${REPLACE}
## REDIRECT TO TW OR GCHANGE PROFILE
sed "s~_TWLINK_~${REPLACE}/~g" ~/.zen/Astroport.ONE/templates/index.302 > ~/.zen/tmp/coucou/${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/coucou/${MOATS}.index.redirect
### REPONSE=$(echo https://www.gchange.fr/#/app/user/${G1PUB}/ | ipfs add -q)
### ipfs name publish --allow-offline --key=${PORT} /ipfs/$REPONSE
### echo "SESSION http://$myIP:8080/ipns/$SESSIONNS "
### echo "SESSION ${myHTTP}${myHOST}:8080/ipns/$SESSIONNS "
(
cat ~/.zen/tmp/coucou/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1
${MY_PATH}/tools/TW.cache.sh ${ASTRONAUTENS} ${MOATS}
) &
end=`date +%s`
echo $APPNAME" (0‿‿0) Execution time was "`expr $end - $start` seconds.
echo $APPNAME" (0‿‿0) ${WHAT} Execution time was "`expr $end - $start` seconds.
continue
fi
########################################
########################################
########################################
#TESTCRAFT=ON nodeid dataid
########################################
########################################
if [[ "$APPNAME" == "testcraft" ]]; then
( # testcraft SUB PROCESS
( # testcraft & SUB PROCESS
start=`date +%s`
## RECORD DATA MADE IN BROWSER (JSON)
SALT=$(urldecode ${arr[1]} | xargs)
@ -288,23 +326,26 @@ sed -i "s~.000.~.$(printf '%03d' $(echo ${RANDOM} % 18 | bc)).~g" ~/.zen/tmp/cou
NODEID=$(urldecode ${arr[7]} | xargs)
DATAID=$(urldecode ${arr[9]} | xargs)
## export PLAYER
${MY_PATH}/tools/TW.cache.sh ${ASTRONAUTENS} ${MOATS}
## IS IT INDEX JSON
echo "$APPNAME IS ${WHAT}"
mkdir -p ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}
echo "${PLAYER} $APPNAME IS ${WHAT}"
mkdir -p ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}
[[ $WHAT == "on" ]] && WHAT="json" # data mimetype (default "on" = json)
## TODO : modify timeout if isLAN or NOT
[[ $isLAN ]] && WAIT=3 || WAIT=6
echo "1ST TRY : ipfs --timeout ${WAIT}s cat /ipfs/$DATAID > ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT}"
ipfs --timeout ${WAIT}s cat /ipfs/$DATAID > ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT}
[[ $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}/${ASTRONAUTENS}/${APPNAME}/${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=(https://tube.copylaradio.com/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)
array=(https://ipfs.copylaradio.com/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
@ -313,18 +354,18 @@ echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh
[[ $(cat ~/.zen/tmp/.ipfsgw.bad.twt | grep -w $nicegw) ]] && echo "<<< BAD GATEWAY >>> $nicegw" && continue
gum=$(echo "$nicegw" | sed "s~:hash~$DATAID~g")
echo "LOADING $gum"
curl -m 5 -so ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT} "$gum"
curl -m 5 -so ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} "$gum"
[[ $? != 0 ]] && echo "(✜‿‿✜) BYPASSING"
if [[ -s ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT} ]]; then
if [[ -s ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ]]; then
MIME=$(mimetype -b ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT})
GOAL=$(ipfs add -q ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${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}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT}
rm ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT}
# NOT A JSON AVOID BANISHMENT
echo $nicegw >> ~/.zen/tmp/.ipfsgw.bad.twt
continue
@ -351,20 +392,20 @@ echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh
fi ## NO DIRECT IPFS - GATEWAY TRY
## REALLY NO FILE FOUND !!!
[[ ! -s ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT} ]] && \
[[ ! -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}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT} ~/.zen/tmp/${IPFSNODEID}/${APPNAME}.json
[[ ${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}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT} ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${RWHAT}.${TWHAT}
# cp ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${RWHAT}.${TWHAT}
## REPONSE ON PORT
echo "$HTTPCORS" > ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed -i "s~text/html~application/json~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
cat ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${APPNAME}/${MOATS}.data.${WHAT} >> ~/.zen/tmp/coucou/${MOATS}.index.redirect
cat ~/.zen/tmp/${IPFSNODEID}/${APPNAME}/${PLAYER}/${MOATS}.data.${WHAT} >> ~/.zen/tmp/coucou/${MOATS}.index.redirect
cat ~/.zen/tmp/coucou/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
@ -385,7 +426,8 @@ echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh
dur=`expr $end - $start`
echo ${MOATS}:${G1PUB}:${PLAYER}:${APPNAME}:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings
cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1
) & # testcraft SUB PROCESS
) & # testcraft & SUB PROCESS
end=`date +%s`
echo "(☓‿‿☓) Execution time was "`expr $end - $start` seconds.
@ -398,133 +440,15 @@ echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh
if [[ $APPNAME == "getipns" ]]; then
echo "$HTTPCORS /ipns/${ASTRONAUTENS}"| nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
end=`date +%s`
echo $APPNAME" (☓‿‿☓) Execution time was "`expr $end - $start` seconds.
echo $APPNAME "(☉_☉ ) /ipns/${ASTRONAUTENS} Execution time was "`expr $end - $start` seconds.
continue
fi
##############################################
# DEFAULT (NO REDIRECT DONE YET) CHECK OFFICIAL GATEWAY
##############################################
TWIP=$(hostname)
# OFFICIAL Gateway ( increase waiting time ) - MORE SECURE
if [[ $APPNAME == "official" ]]; then
echo "SEARCHING FOR OFFICIAL TW GW... $LIBRA/ipns/${ASTRONAUTENS} ($YOU)"
## GETTING LAST TW via IPFS or HTTP GW
[[ $YOU ]] && echo "ipfs --timeout 12s cat /ipns/${ASTRONAUTENS} ($YOU)" && ipfs --timeout 12s cat /ipns/${ASTRONAUTENS} > ~/.zen/tmp/coucou/${MOATS}.astroindex.html
[[ ! -s ~/.zen/tmp/coucou/${MOATS}.astroindex.html ]] && echo "$HOST/ipns/${ASTRONAUTENS}" && curl -m 12 -so ~/.zen/tmp/coucou/${MOATS}.astroindex.html "$HOST/ipns/${ASTRONAUTENS}"
# DEBUG
# echo "tiddlywiki --load ~/.zen/tmp/coucou/${MOATS}.astroindex.html --output ~/.zen/tmp --render '.' 'MadeInZion.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'MadeInZion'"
# echo "cat ~/.zen/tmp/MadeInZion.json | jq -r .[].secret"
if [[ -s ~/.zen/tmp/coucou/${MOATS}.astroindex.html ]]; then
echo "GOT TW CACHE !!"
tiddlywiki --load ~/.zen/tmp/coucou/${MOATS}.astroindex.html --output ~/.zen/tmp --render '.' 'MadeInZion.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'MadeInZion'
[[ ! -s ~/.zen/tmp/MadeInZion.json ]] && (echo "$HTTPCORS SECRET ERROR - SORRY - CANNOT CONTINUE " | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "BAD SECRET (☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && continue
SECRET=$(cat ~/.zen/tmp/MadeInZion.json | jq -r .[].secret)
#
# CRYPTO DECODING CRYPTIP -> myIP
cat ~/.zen/tmp/MadeInZion.json | jq -r .[].secret | base16 -d > ~/.zen/tmp/myIP.$G1PUB.enc.2
$MY_PATH/tools/natools.py decrypt -f pubsec -k ~/.zen/tmp/coucou/${MOATS}.secret.key -i ~/.zen/tmp/myIP.$G1PUB.enc.2 -o ~/.zen/tmp/myIP.$G1PUB > /dev/null 2>&1
GWIP=$(cat ~/.zen/tmp/myIP.$G1PUB > /dev/null 2>&1)
[[ ! $GWIP ]] && GWIP=$HOST ## CLEAR
#
echo "TW is on $GWIP"
echo "WAS $GWIP ($TUBE) BECOMING TW GATEWAY : $myIP" ## BECOMING OFFICIAL BECOME R/W TW
####################
echo $GWIP > ~/.zen/tmp/GWIP
$MY_PATH/tools/natools.py encrypt -p $G1PUB -i $HOME/.zen/tmp/GWIP -o $HOME/.zen/tmp/myIP.$G1PUB.enc
CRYPTIP=$(cat ~/.zen/tmp/myIP.$G1PUB.enc | base16)
## WRITE CRYPTIP into MadeInZion tiddler
echo "# CRYPTO ENCODING $GWIP -> $CRYPTIP"
sed -i "s~$SECRET~$CRYPTIP~g" ~/.zen/tmp/MadeInZion.json
###########################
# Modification Tiddlers de contrôle de GW & API
echo '[{"title":"$:/ipfs/saver/api/http/localhost/5001","tags":"$:/ipfs/core $:/ipfs/saver/api","text":"http://'$HOST':5001"}]' > ~/.zen/tmp/5001.json
echo '[{"title":"$:/ipfs/saver/gateway/http/localhost","tags":"$:/ipfs/core $:/ipfs/saver/gateway","text":"http://'$HOST':8080"}]' > ~/.zen/tmp/8080.json
tiddlywiki --load ~/.zen/tmp/coucou/${MOATS}.astroindex.html \
--import "$HOME/.zen/tmp/MadeInZion.json" "application/json" \
--import "$HOME/.zen/tmp/5001.json" "application/json" \
--import "$HOME/.zen/tmp/8080.json" "application/json" \
--output ~/.zen/tmp/coucou --render "$:/core/save/all" "${MOATS}.newindex.html" "text/plain"
[[ -s ~/.zen/tmp/coucou/${MOATS}.newindex.html ]] \
&& cp ~/.zen/tmp/coucou/${MOATS}.newindex.html ~/.zen/tmp/coucou/${MOATS}.astroindex.html \
&& rm ~/.zen/tmp/coucou/${MOATS}.newindex.html
###########################
# GET PLAYER FROM Dessin de $PLAYER
tiddlywiki --load ~/.zen/tmp/coucou/${MOATS}.astroindex.html --output ~/.zen/tmp --render '.' 'MOA.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[moa]]'
PLAYER=$(cat ~/.zen/tmp/MOA.json | jq -r .[].president | head -n 1) ## TRY WITH MULTI moa & G1Moa ?
[[ ! $PLAYER ]] \
&& (echo "$HTTPCORS ERROR - BAD [tag[moa]] president field /ipns/${ASTRONAUTENS} - CONTINUE " | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "BAD MOA (☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && continue
if [[ "${PLAYER}" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
echo "VALID PLAYER OK"
else
echo "BAD EMAIL"
(echo "$HTTPCORS KO ${PLAYER} : IPNS key identification failed<br>please correct 'Dessin president field' with your email" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
fi
## CREATE $PLAYER IPNS KEY (for next 20h12)
ipfs key rm ${PLAYER}
ipfs key import ${PLAYER} -f pem-pkcs8-cleartext ~/.zen/tmp/coucou/${MOATS}.${G1PUB}.ipns.key
[[ ! -d ~/.zen/game/players/$PLAYER/ipfs/moa ]] && mkdir -p ~/.zen/game/players/$PLAYER/ipfs/moa/
cp ~/.zen/tmp/coucou/${MOATS}.astroindex.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
echo "## PUBLISHING ${PLAYER} /ipns/$ASTRONAUTENS/ &"
(
startipfs=`date +%s`
IPUSH=$(ipfs add -Hq ~/.zen/tmp/coucou/${MOATS}.astroindex.html | tail -n 1)
[[ $IPUSH ]] && ipfs name publish --key=${PLAYER} /ipfs/$IPUSH 2>/dev/null
echo "## PUBLISHING ${PLAYER} /ipns/$ASTRONAUTENS/ END"
end=`date +%s`
dur=`expr $end - $start`
echo ${MOATS}:${G1PUB}:${PLAYER}:TWUPDATE:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings
cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1
) & # ~~bbbzzzzzz~~&
## MEMORISE PLAYER Ŋ1 ZONE (TODO compare with VISA.new.sh)
echo "$PLAYER" > ~/.zen/game/players/$PLAYER/.player
echo "$G1PUB" > ~/.zen/game/players/$PLAYER/.g1pub
echo "${ASTRONAUTENS}" > ~/.zen/game/players/$PLAYER/.playerns
GWIP=${myIP}
TWIP=${myIP}
echo "*********** OFFICIAL LOGIN GOES TO $TWIP"
else
echo "NO TW FOUND - LAUNCHING CENTRAL"
## 302 REDIRECT CENTRAL GW
TWIP=${TUBE}
fi
## 302 REDIRECT $TWIP
cat ~/.zen/Astroport.ONE/templates/index.302 >> ~/.zen/tmp/coucou/${MOATS}.index.redirect
sed -i "s~_TWLINK_~http://$TWIP:8080/ipns/${ASTRONAUTENS}~g" ~/.zen/tmp/coucou/${MOATS}.index.redirect
cat ~/.zen/tmp/coucou/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > /dev/null 2>&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
continue
fi ## official
###################################################################################################
###################################################################################################
# API ONE : ?salt=PHRASE%20UNE&pepper=PHRASE%20DEUX&g1pub=on&email/elastic=ELASTICID&pseudo=PROFILENAME
if [[ (${arr[6]} == "email" || ${arr[6]} == "elastic") && ${arr[7]} != "" ]]; then
# API ONE : ?salt=PHRASE%20UNE&pepper=PHRASE%20DEUX&g1pub=on&email=EMAIL&pseudo=PROFILENAME
if [[ ${arr[6]} == "email" && ${arr[7]} != "" ]]; then
[[ $APPNAME != "g1pub" ]] && (echo "$HTTPCORS ERROR - BAD COMMAND $APPNAME" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && continue
@ -532,49 +456,50 @@ echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh
SALT=$(urldecode ${arr[1]} | xargs)
PEPPER=$(urldecode ${arr[3]} | xargs)
WHAT=$(urldecode ${arr[7]} | xargs)
# WHAT can contain urlencoded FullURL
EMAIL=$(urldecode ${arr[7]} | xargs)
PSEUDO=$(urldecode ${arr[9]} | xargs)
[[ ! ${WHAT} ]] && (echo "$HTTPCORS ERROR - MISSING ${WHAT} FOR ${WHAT} CONTACT" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && continue
[[ ! ${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. && continue
if [[ "${WHAT}" =~ ^[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 ${WHAT} : bad '" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
fi
## 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 &) && continue
fi
## CREATE PSEUDO FROM
if [[ ! $PSEUDO ]]; then
PSEUDO=$(echo ${WHAT} | cut -d '@' -f 1)
PSEUDO=$(echo ${EMAIL} | cut -d '@' -f 1)
PSEUDO=${PSEUDO,,}; PSEUDO=${PSEUDO%%[0-9]*}${RANDOM:0:3}
fi
# PASS CRYPTING KEY
PASS=$(echo "${RANDOM}${RANDOM}${RANDOM}${RANDOM}" | tail -c-7)
echo "$SALT / $PEPPER ($PASS)"
if [[ ! -d ~/.zen/game/players/${WHAT} ]]; then
echo "# ASTRONAUT NEW VISA Create VISA.new.sh in background (~/.zen/tmp/email.${WHAT}.${MOATS}.txt)"
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`
$MY_PATH/tools/VISA.new.sh "$SALT" "$PEPPER" "${WHAT}" "$PSEUDO" > ~/.zen/tmp/email.${WHAT}.${MOATS}.txt
$MY_PATH/tools/mailjet.sh "${WHAT}" ~/.zen/tmp/email.${WHAT}.${MOATS}.txt
echo "VISA.new : \"$SALT\" \"$PEPPER\" \"${EMAIL}\" \"$PSEUDO\" \"${WHAT}\"" > ~/.zen/tmp/email.${EMAIL}.${MOATS}.txt
$MY_PATH/tools/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 ## Send VISA.new log to EMAIL
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 - <meta http-equiv='refresh' content='3; url=\"http://"$myIP":8080/ipns/"$ASTRONAUTENS"\"'/>
<h1>BOOTING - ASTRONAUT $PSEUDO </h1> IPFS FORMATING - [$SALT + $PEPPER] (${WHAT})
<br>- TW - http://$myIP:8080/ipns/$ASTRONAUTENS <br> - GW - /ipns/$IPFSNODEID" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
echo "(☓‿‿☓) Execution time was "`expr $end - $start` seconds.
echo "$HTTPCORS - <meta http-equiv='refresh' content='3; url=\"http://"${myHOST}":8080/ipns/"$ASTRONAUTENS"\"'/>
<h1>BOOTING - ASTRONAUT $PSEUDO </h1> IPFS FORMATING - [$SALT + $PEPPER] (${EMAIL})
<br>- TW - http://${myHOST}:8080/ipns/$ASTRONAUTENS <br> - GW - /ipns/$IPFSNODEID" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
continue
else
# ASTRONAUT EXISTING ${WHAT}
CHECK=$(cat ~/.zen/game/players/${WHAT}/secret.june | grep -w "$SALT")
[[ $CHECK ]] && CHECK=$(cat ~/.zen/game/players/${WHAT}/secret.june | grep -w "$PEPPER")
[[ ! $CHECK ]] && (echo "$HTTPCORS ERROR - ${WHAT} ${WHAT} ALREADY EXISTS" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && echo "(☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && continue
# 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. && continue
fi
###################################################################################################
@ -584,18 +509,26 @@ echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh
fi
##############################################
# VIDEOURL : ADD URL TO 'CopierYoutube' tagged Tiddler : TODO
##############################################
if [[ $APPNAME == "CopierYoutube" ]]; then
echo "$HTTPCORS /ipns/${ASTRONAUTENS} ADDING ${WHAT}"| nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
end=`date +%s`
echo $APPNAME "(☉_☉ ) ${WHAT} Execution time was "`expr $end - $start` seconds.
continue
fi
## RESPONDING
cat ~/.zen/tmp/coucou/${MOATS}.index.redirect | nc -l -p ${PORT} -q 1 > ~/.zen/tmp/coucou/${MOATS}.official.swallow &
echo "HTTP 1.1 PROTOCOL DOCUMENT READY"
cat ~/.zen/tmp/coucou/${MOATS}.index.redirect
echo "${MOATS} -----> PAGE AVAILABLE -----> http://$myIP:${PORT}"
echo "${MOATS} -----> PAGE AVAILABLE -----> http://${myHOST}:${PORT}"
#echo "${ASTRONAUTENS}" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &
## CHECK IF ALREADY EXISTING ${WHAT}
# IF NOT = BATCH CREATE TW
end=`date +%s`
echo $type" (☓‿‿☓) Execution time was "`expr $end - $start` seconds.
echo $type" (J‿‿J) Execution time was "`expr $end - $start` seconds.
fi ## END IF SALT
@ -630,14 +563,14 @@ echo "" > ~/.zen/tmp/.ipfsgw.bad.twt # TODO move in 20h12.sh
"title": "'${MOATS}'",
"type": "'text/vnd.tiddlywiki'",
"text": "'$(urldecode $wsource)'",
"tags": "'CopierYoutube ${${WHAT}}'"
"tags": "'CopierYoutube ${WHAT}'"
}
]
' > ~/.zen/tmp/${${WHAT}}.${MOATS}.import.json
' > ~/.zen/tmp/${WHAT}.${MOATS}.import.json
## TODO ASTROBOT "G1AstroAPI" READS ~/.zen/tmp/${${WHAT}}.${MOATS}.import.json
## TODO ASTROBOT "G1AstroAPI" READS ~/.zen/tmp/${WHAT}.${MOATS}.import.json
(echo "$HTTPCORS OK - ~/.zen/tmp/${${WHAT}}.${MOATS}.import.json WORKS IF YOU MAKE THE WISH voeu 'AstroAPI'" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
(echo "$HTTPCORS OK - ~/.zen/tmp/${WHAT}.${MOATS}.import.json WORKS IF YOU MAKE THE WISH voeu 'AstroAPI'" | nc -l -p ${PORT} -q 1 > /dev/null 2>&1 &) && continue
fi
fi

View File

@ -7,7 +7,7 @@ MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
start=`date +%s`
echo "20H12 (♥‿‿♥) $(hostname)"
echo "20H12 (♥‿‿♥) $(hostname) $(date)"
espeak "Ding" > /dev/null 2>&1
@ -35,7 +35,9 @@ git pull
## CLOSING 1234 API PORT
killall 12345.sh
killall _12345.sh
killall nc
killall tail
espeak "Ding Ding Ding" > /dev/null 2>&1
@ -45,7 +47,7 @@ espeak "Ding Ding Ding" > /dev/null 2>&1
espeak "Bills Kills Bills" > /dev/null 2>&1
## OPEN ENTRANCE AGAIN
## OPEN API ENGINE
~/.zen/Astroport.ONE/12345.sh > ~/.zen/tmp/12345.log &
if [[ ! $isLAN ]]; then
@ -58,12 +60,15 @@ if [[ ! $isLAN ]]; then
done
fi
## Updating yt-dlp
sudo youtube-dl -U
########################################################################
end=`date +%s`
echo "20H12 (♥‿‿♥) Execution time was "`expr $end - $start` seconds.
## MAIL LOG : support@qo-op.com
$MY_PATH/tools/mailjet.sh "support@qo-op.com" "/tmp/20h12.log.txt"
$MY_PATH/tools/mailjet.sh "support@qo-op.com" "/tmp/20h12.log"
espeak "Byte Storm Over" > /dev/null 2>&1

View File

@ -13,66 +13,95 @@ echo "$ME RUNNING"
# Download video, add to ipfs and import new tiddler
# Publish !!
## TODO USE API 1234 & new_file_in_astroport.sh FOR TW
# ASTROBOT FIRST PROCESS
# "Copier youtube" + (voeu) => CopierYoutube (G1Voeu G1CopierYoutube) = ASTROBOT copy Ŋ1 "(G1CopierYoutube)"
# IPFSNODEID=$(ipfs id -f='<id>\n')
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
INDEX="$1"
[[ ! $INDEX ]] && echo "ERROR - Please provide path to source TW index.html" && exit 1
[[ ! -f $INDEX ]] && echo "ERROR - Fichier TW absent. $INDEX" && exit 1
[[ ! ${INDEX} ]] && echo "ERROR - Please provide path to source TW index.html" && exit 1
[[ ! -f ${INDEX} ]] && echo "ERROR - Fichier TW absent. ${INDEX}" && exit 1
WISHKEY="$2" ## IPNS KEY NAME - G1PUB - PLAYER ...
WISHKEY="$2" ## IPNS KEY NAME - G1PUB - PLAYER - WISHKEY...
[[ ! $WISHKEY ]] && echo "ERROR - Please provide IPFS publish key" && exit 1
TWNS=$(ipfs key list -l | grep -w $WISHKEY | cut -d ' ' -f1)
[[ ! $TWNS ]] && echo "ERROR - Clef IPNS $WISHKEY introuvable!" && exit 1
# Extract tag=tube from TW into ~/.zen/tmp/$WISHKEY/CopierYoutube.json
# Extract tag=tube from TW
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
mkdir -p ~/.zen/tmp/$WISHKEY
mkdir -p ~/.zen/tmp/$IPFSNODEID
###################################################################
## TODO BOUCLER SUR LES INDEX des G1Astronautes G1Ami
## tag[CopierYoutube] EXTRACT ~/.zen/tmp/CopierYoutube.json FROM TW
###################################################################
rm -f ~/.zen/tmp/$WISHKEY/CopierYoutube.json
rm -f ~/.zen/tmp/CopierYoutube.json
tiddlywiki --load ${INDEX} \
--output ~/.zen/tmp/$WISHKEY \
--output ~/.zen/tmp \
--render '.' 'CopierYoutube.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[CopierYoutube]]'
echo "cat ~/.zen/tmp/$WISHKEY/CopierYoutube.json"
echo "DEBUG : cat ~/.zen/tmp/CopierYoutube.json | jq -r"
###################################################################
## TEXT TREATMENT
## URL EXTRACTION & TREATMENT
## For this TAG, specific extract URL from text field and copy all video from links into tid.json
for YURL in $(cat ~/.zen/tmp/$WISHKEY/CopierYoutube.json | jq -r '.[].text' | grep 'http'); do
for YURL in $(cat ~/.zen/tmp/CopierYoutube.json | jq -r '.[].text' | grep 'http'); do
echo "Detected $YURL"
echo "Extracting video playlist"
### GETTING ALL VIDEO IDs (for playlist copy)
yt-dlp --print "%(id)s" "${YURL}" >> ~/.zen/tmp/$WISHKEY/ytids.$MOATS
### yt-dlp.command
[[ ! $(cat ~/.zen/tmp/$IPFSNODEID/yt-dlp.command 2>/dev/null | grep "$YURL") ]] \
&& echo "$WISHKEY&$YURL" >> ~/.zen/tmp/$IPFSNODEID/yt-dlp.command
yt-dlp --print "%(id)s&%(webpage_url)s" "${YURL}" >> ~/.zen/tmp/$IPFSNODEID/yt-dlp.cache.$WISHKEY
done # FINISH YURL loop
echo "cat ~/.zen/tmp/$WISHKEY/ytids.$MOATS"
## SORT UNIQ CACHE
cat ~/.zen/tmp/$IPFSNODEID/yt-dlp.cache.$WISHKEY | sort | uniq > ~/.zen/tmp/yt-dlp.cache
cp ~/.zen/tmp/yt-dlp.cache ~/.zen/tmp/$IPFSNODEID/yt-dlp.cache.$WISHKEY
###################################################################
[[ ! -s ~/.zen/tmp/$WISHKEY/ytids.$MOATS ]] && echo "AUCUN YOUTUBEID pour CopierYoutube" && exit 0
[[ ! -s ~/.zen/tmp/$IPFSNODEID/yt-dlp.cache.$WISHKEY ]] && echo "AUCUN YOUTUBEID pour CopierYoutube" && exit 0
###################################################################
###################################################################
# PROCESS YOUTUBEID VIDEO DOWNLOAD AND CREATE TIDDLER in TW
###################################################################
while read YID;
while read LINE;
do
[[ -f ~/.zen/tmp/$WISHKEY/$YID.TW.json ]] && echo "Tiddler json already existing : ~/.zen/tmp/$WISHKEY/$YID.TW.json" && continue
YID=$(echo "$LINE" | cut -d '&' -f 1)
# SINGLE VIDEO YURL
ZYURL="https://www.youtube.com/watch?v=$YID";
echo "YOUTUBE : $ZYURL"
###################################################################
## Search for $YID.TW.json TIDDLER in local & MySwarm cache
MATCH=$(ls -t ~/.zen/tmp/$IPFSNODEID/G1CopierYoutube/*/$YID.TW.json 2>/dev/null | head -n 1)
[[ $MATCH ]] \
&& TIDDLER="$MATCH" \
|| MATCH=$(ls -t ~/.zen/tmp/swarm/*/G1CopierYoutube/*/$YID.TW.json 2>/dev/null | head -n 1)
[[ $MATCH ]] \
&& TIDDLER="$MATCH"
###################################################################
###################################################################
## CREATE APP PUBLICATION
###################################################################
mkdir -p $HOME/.zen/tmp/$IPFSNODEID/G1CopierYoutube/$PLAYER/
if [[ ! ${TIDDLER} ]]; then
###################################################################
# COPY VIDEO AND MAKE TIDDLER
###################################################################
ZYURL=$(echo "$LINE" | cut -d '&' -f 2-)
echo "COPIE : $ZYURL"
TITLE="$(yt-dlp --print "%(title)s" "${ZYURL}")"
TITLE=${TITLE//[^A-zÀ-ÿ0-9 ]/}
[[ ! $TITLE ]] && continue
[[ ! $TITLE ]] && echo "NO TITLE" && continue
echo ".... Downloading $TITLE.mp4"
@ -80,14 +109,18 @@ while read YID;
# SUBS ? --write-subs --write-auto-subs --sub-langs "fr, en, en-orig" --embed-subs
# (bv*[height<=720][vcodec~='^((he|a)vc|h26[45])']+ba)
# TODO : DELAY COPY OPERATION... Astro can download quicker at 03:00 AM
echo "yt-dlp -f \"(bv*[ext=mp4][height<=720]+ba/b[height<=720])\" --no-mtime --embed-thumbnail --add-metadata -o \"$HOME/.zen/tmp/$WISHKEY/$TITLE.%(ext)s\" ${ZYURL}"
echo "yt-dlp -f \"(bv*[ext=mp4][height<=720]+ba/b[height<=720])\" --no-mtime --embed-thumbnail --add-metadata -o \"$HOME/.zen/tmp/yt-dlp/$TITLE.%(ext)s\" ${ZYURL}"
#############################################################################
## COPY FROM YOUTUBE (TODO DOUBLE COPY & MKV to MP4 OPTIMISATION)
## EXTRA PARAM TO TRY
# --cookies-from-browser browser (xdg-settings get default-web-browser) allow member copies
# --dateafter DATE --download-archive myarchive.txt
yt-dlp -f "(bv*[ext=mp4][height<=720]+ba/b[height<=720])" \
--download-archive $HOME/.zen/.yt-dlp.list \
-S "filesize:700M" --no-mtime --embed-thumbnail --add-metadata \
--write-subs --write-auto-subs --sub-langs "fr, en, en-orig" --embed-subs \
-o "$HOME/.zen/tmp/$WISHKEY/$TITLE.%(ext)s" ${ZYURL}
-o "$HOME/.zen/tmp/yt-dlp/$TITLE.%(ext)s" ${ZYURL}
################################################################################
### ADAPT TO TW RYTHM (DELAY COPY?)
echo
@ -96,21 +129,37 @@ while read YID;
############################################################################
### CHECK RESULT CONVERT MKV TO MP4
[[ ! -f "$HOME/.zen/tmp/$WISHKEY/$ZFILE" ]] && ffmpeg -loglevel quiet -i "$HOME/.zen/tmp/$WISHKEY/$TITLE.mkv" -c:v libx264 -c:a aac "$HOME/.zen/tmp/$WISHKEY/$TITLE.mp4" # TRY TO CONVERT MKV TO MP4
[[ ! -f "$HOME/.zen/tmp/$WISHKEY/$ZFILE" ]] && echo "No FILE -- CONTINUE --" && continue
[[ ! -f "$HOME/.zen/tmp/yt-dlp/$ZFILE" ]] && ffmpeg -loglevel quiet -i "$HOME/.zen/tmp/yt-dlp/$TITLE.mkv" -c:v libx264 -c:a aac "$HOME/.zen/tmp/yt-dlp/$TITLE.mp4" # TRY TO CONVERT MKV TO MP4
[[ ! -f "$HOME/.zen/tmp/yt-dlp/$ZFILE" ]] && echo "No FILE -- CONTINUE --" && continue
echo
####################################################
echo "FOUND : ~/.zen/tmp/$WISHKEY/$ZFILE"
FILE_BSIZE=$(du -b "$HOME/.zen/tmp/$WISHKEY/$ZFILE" | awk '{print $1}')
echo "FOUND : ~/.zen/tmp/yt-dlp/$ZFILE"
FILE_BSIZE=$(du -b "$HOME/.zen/tmp/yt-dlp/$ZFILE" | awk '{print $1}')
FILE_SIZE=$(echo "${FILE_BSIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')
echo "FILE SIZE = $FILE_SIZE ($FILE_BSIZE octets)"
#~ ## PREPARE FOR new_file_in_astroport.sh
#~ mkdir -p "$HOME/Astroport/youtube/$YID"
#~ REVSOURCE="$(echo "$ZYURL" | awk -F/ '{print $3}' | rev)_"
#~ MEDIAID="$REVSOURCE${YID}"
#~ URLENCODE_FILE_NAME=$(echo ${ZFILE} | jq -Rr @uri)
#~ echo "youtube;${MEDIAID};$(date -u +%s%N | cut -b1-13);${TITLE};${SAISON};${GENRES};_IPNSKEY_;${RES};/ipfs/_IPFSREPFILEID_/$URLENCODE_FILE_NAME" > ~/Astroport/youtube/$YID/ajouter_video.txt
#~ mv "$HOME/.zen/tmp/yt-dlp/$ZFILE" "$HOME/Astroport/youtube/$YID/"
###
#~ ${MY_PATH}/../tools/new_file_in_astroport.sh "$HOME/Astroport/youtube/$YID" "${ZFILE}" "$G1PUB"
path="$HOME/.zen/tmp/yt-dlp"
file="$ZFILE"
$(${MY_PATH}/../tools/make_video_gifanim_ipfs.sh "$path" "$file" | tail -n 1) ## export ANIMH
echo "/ipfs/$ANIMH"
## Create gifanime ## TODO Search for similarities BEFORE ADD
echo "Adding to IPFS"
ILINK=$(ipfs add -q "$HOME/.zen/tmp/$WISHKEY/$ZFILE" | tail -n 1)
ILINK=$(ipfs add -q "$HOME/.zen/tmp/yt-dlp/$ZFILE" | tail -n 1)
echo "/ipfs/$ILINK <=> $ZFILE"
MIME=$(file --mime-type -b "$HOME/.zen/tmp/$WISHKEY/$ZFILE")
MIME=$(file --mime-type -b "$HOME/.zen/tmp/yt-dlp/$ZFILE")
## ADD TAGS
SEC=$(yt-dlp --print "%(duration)s" "${ZYURL}")
@ -118,7 +167,7 @@ while read YID;
PLAYLIST=$(yt-dlp --print "%(playlist)s" "${ZYURL}" | sed -r 's/\<./\U&/g' | sed 's/ //g')
EXTRATAG="$CHANNEL $PLAYLIST"
## PREPARE VIDEO HTML5 CODE
TEXT="<video controls width=100%><source src='/ipfs/"${ILINK}"' type='"${MIME}"'></video><h1><a href='"${ZYURL}"'>"${TITLE}"</a></h1>"
TEXT="<video controls width=100% poster='/ipfs/"${ANIMH}"'><source src='/ipfs/"${ILINK}"' type='"${MIME}"'></video><br>{{!!duree}}<br><h1><a href='"${ZYURL}"'>"${TITLE}"</a></h1>"
echo "Creating Youtube ${YID} tiddler : G1CopierYoutube !"
echo $TEXT
@ -126,11 +175,16 @@ while read YID;
echo '[
{
"created": "'${MOATS}'",
"resolution": "'${RES}'",
"duree": "'${DUREE}'",
"duration": "'${DURATION}'",
"giftime": "'${PROBETIME}'",
"gifanime": "'/ipfs/${ANIMH}'",
"modified": "'${MOATS}'",
"title": "'$ZFILE'",
"type": "'text/vnd.tiddlywiki'",
"text": "'$TEXT'",
"mime": "'$MIME'",
"mime": "'${MIME}'",
"size": "'${FILE_BSIZE}'",
"sec": "'${SEC}'",
"ipfs": "'/ipfs/${ILINK}'",
@ -138,7 +192,16 @@ while read YID;
"tags": "'ipfs G1CopierYoutube ${WISHKEY} ${EXTRATAG} ${MIME}'"
}
]
' > "$HOME/.zen/tmp/$WISHKEY/$YID.TW.json"
' > "$HOME/.zen/tmp/$IPFSNODEID/G1CopierYoutube/$PLAYER/$YID.TW.json"
else
###################################################################
# TIDDLER WAS IN CACHE
###################################################################
cp "${TIDDLER}" "$HOME/.zen/tmp/$IPFSNODEID/G1CopierYoutube/$PLAYER/$YID.TW.json"
fi
#################################################################
@ -147,22 +210,23 @@ while read YID;
echo "=========================="
echo "Adding $YID tiddler to TW /ipns/$TWNS "
rm -f ~/.zen/tmp/$WISHKEY/newindex.html
rm -f ~/.zen/tmp/$IPFSNODEID/newindex.html
echo ">>> Importing $HOME/.zen/tmp/$WISHKEY/$YID.TW.json"
echo ">>> Importing $HOME/.zen/tmp/$IPFSNODEID/G1CopierYoutube/$PLAYER/$YID.TW.json"
tiddlywiki --load $INDEX \
--import "$HOME/.zen/tmp/$WISHKEY/$YID.TW.json" "application/json" \
--deletetiddlers '[tag[CopierYoutube]]' \
--output ~/.zen/tmp/$WISHKEY --render "$:/core/save/all" "newindex.html" "text/plain"
tiddlywiki --load ${INDEX} \
--import "$HOME/.zen/tmp/$IPFSNODEID/G1CopierYoutube/$PLAYER/$YID.TW.json" "application/json" \
--output ~/.zen/tmp/$IPFSNODEID --render "$:/core/save/all" "newindex.html" "text/plain"
if [[ -s ~/.zen/tmp/$WISHKEY/newindex.html ]]; then
echo "$$$ Mise à jour $INDEX"
cp ~/.zen/tmp/$WISHKEY/newindex.html $INDEX
# --deletetiddlers '[tag[CopierYoutube]]' ### REFRESH CHANNEL COPY
if [[ -s ~/.zen/tmp/$IPFSNODEID/newindex.html ]]; then
echo "$$$ Mise à jour ${INDEX}"
cp ~/.zen/tmp/$IPFSNODEID/newindex.html ${INDEX}
else
echo "Problem with tiddlywiki command. Missing ~/.zen/tmp/$WISHKEY/newindex.html"
echo "Problem with tiddlywiki command. Missing ~/.zen/tmp/$IPFSNODEID/newindex.html"
echo "XXXXXXXXXXXXXXXXXXXXXXX"
fi
done < ~/.zen/tmp/$WISHKEY/ytids.$MOATS # FINISH YID loop 1
done < ~/.zen/tmp/$IPFSNODEID/yt-dlp.cache.$WISHKEY # FINISH YID loop 1
exit 0

View File

@ -76,14 +76,8 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
## A la fois Titre du tag et Pepper construction de clef
echo $PEPPER > ~/.zen/game/world/$WISHKEY/.pepper
echo "# CREATION TW"
echo "# INIT WISH TW"
##########################################################################################
# ipfs key import _MEDIAKEY_ ~/.zen/Astroport.ONE/templates/_MEDIAKEY_.keystore.key
##############
#
# ipfs cat /ipfs/bafybeibqdoegifzejykmc3qw3e3drgsa5i7az6xwjlfcx7rbtcoj5unpkq > ~/.zen/Astroport.ONE/templates/twdefault.html
# INTRODUCE HIDING CONTROL (read only from https) https $:/tags/Stylesheet
# ipfs cat /ipfs/bafybeidkur2tfbmqwscgmkfh76vmbcqay2m4gznxv5emkenxeffmrgywky > ~/.zen/Astroport.ONE/templates/twdefault.html
##########################################################################################
cp ~/.zen/Astroport.ONE/templates/twdefault.html ~/.zen/game/world/$WISHKEY/index.html
# TODO : CREATE ONE TEMPLATE / REMOVE USELESS TID
@ -96,7 +90,7 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
sed -i "s~_WISHKEY_~${WISHKEY}~g" ~/.zen/game/world/$WISHKEY/index.html
sed -i "s~_NUMBER_~${SALT}~g" ~/.zen/game/world/$WISHKEY/index.html
sed -i "s~_SECRET_~${PEPPER}~g" ~/.zen/game/world/$WISHKEY/index.html
sed -i "s~_ASTROPORT_~${ASTRONAUTENS}~g" ~/.zen/game/world/$WISHKEY/index.html
sed -i "s~_ASTROPORT_~/ipns/${ASTRONAUTENS}~g" ~/.zen/game/world/$WISHKEY/index.html
sed -i "s~_QRSEC_~${myIP}~g" ~/.zen/game/world/$WISHKEY/index.html
# IPNS KEY is WISHKEY / VOEUNS
@ -116,6 +110,9 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
--import ~/.zen/Astroport.ONE/templates/data/local.api.json "application/json" \
--import ~/.zen/Astroport.ONE/templates/data/local.gw.json "application/json" \
--deletetiddlers '"Dessin de _PLAYER_"' \
--deletetiddlers '"BunkerBOX"' \
--deletetiddlers '"CopierYoutube"' \
--deletetiddlers '"Bienvenue"' \
--output ~/.zen/tmp --render "$:/core/save/all" "newindex.html" "text/plain"
[[ -s ~/.zen/tmp/newindex.html ]] && cp ~/.zen/tmp/newindex.html ~/.zen/game/world/$WISHKEY/index.html
@ -124,7 +121,6 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
echo "# CREATION QR CODE"
LIBRA=$(head -n 2 ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 2)
LIBRA="http://qo-op.com:8080"
qrencode -s 12 -o "$HOME/.zen/game/world/$WISHKEY/QR.WISHLINK.png" "$LIBRA/ipns/$VOEUNS"
qrencode -s 12 -o "$HOME/.zen/game/world/$WISHKEY/QR.ASTROLINK.png" "$LIBRA/ipns/$ASTRONAUTENS"
@ -145,7 +141,7 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
composite -compose Over -gravity NorthWest -geometry +350+10 ~/.zen/tmp/ASTROLOGO.png ${MY_PATH}/../images/Brother_600x400.png ~/.zen/tmp/astroport.png
composite -compose Over -gravity NorthWest -geometry +0+0 ~/.zen/tmp/QRWISHLINK.png ~/.zen/tmp/astroport.png ~/.zen/tmp/one.png
convert -gravity northwest -pointsize 35 -fill black -draw "text 320,250 \"$PLAYER\"" ~/.zen/tmp/one.png ~/.zen/tmp/hop.png
convert -gravity northwest -pointsize 20 -fill black -draw "text 320,250 \"$PLAYER\"" ~/.zen/tmp/one.png ~/.zen/tmp/hop.png
convert -gravity northwest -pointsize 30 -fill black -draw "text 20,320 \"$PEPPER\"" ~/.zen/tmp/hop.png ~/.zen/tmp/pseudo.png
convert -gravity northwest -pointsize 30 -fill black -draw "text 320,300 \"$SALT\"" ~/.zen/tmp/pseudo.png ~/.zen/tmp/salt.png
convert -gravity northwest -pointsize 33 -fill black -draw "text 320,350 \"$PEPPER\"" ~/.zen/tmp/salt.png ~/.zen/tmp/player.png

View File

@ -16,14 +16,14 @@ IPFSNODEID=$(ipfs id -f='<id>\n')
## RUNING FOR ALL LOCAL PLAYERS
for PLAYER in $(ls -t ~/.zen/game/players/); do
[[ $PLAYER == '.toctoc' ]] && echo ".toctoc users " && continue
[[ $PLAYER == "user" || $PLAYER == "zen" ]] && continue
echo "##################################################################"
echo ">>>>> PLAYER : $PLAYER >>>>>>>>>>>>> REFRESHING TW STATION"
echo "##################################################################"
# Get PLAYER wallet amount
COINS=$($MY_PATH/../tools/jaklis/jaklis.py -k ~/.zen/game/players/$PLAYER/secret.dunikey balance)
echo "+++ WALLET BALANCE _ $COINS (G1) _"
## DROP IF WALLET IS EMPTY : TODO
#~ ## IF WALLET IS EMPTY : WHAT TODO ?
echo "##################################################################"
echo "##################################################################"
echo "################### REFRESH ASTRONAUTE TW ###########################"
@ -38,10 +38,10 @@ for PLAYER in $(ls -t ~/.zen/game/players/); do
[[ ! $ASTRONAUTENS ]] && echo "WARNING No $PLAYER in keystore --" && ASTRONAUTENS=$ASTRONS
## VISA EMITER STATION MUST ACT ONLY
[[ ! -f ~/.zen/game/players/$PLAYER/enc.secret.dunikey ]] && echo "$PLAYER IPNS KEY NOT MINE CONTINUE -- " \
[[ ! -f ~/.zen/game/players/$PLAYER/secret.dunikey ]] && echo "$PLAYER secret.dunikey NOT HERE CONTINUE -- " \
&& mv ~/.zen/game/players/$PLAYER ~/.zen/game/players/.$PLAYER && continue
## MY PLAYER.
## MY PLAYER
ipfs key export $G1PUB -o ~/.zen/tmp/$PLAYER.key
ipfs key import $PLAYER ~/.zen/tmp/$PLAYER.key
rm -f ~/.zen/tmp/$PLAYER.key
@ -57,8 +57,7 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
echo "Getting latest online TW..."
YOU=$(ipfs swarm peers >/dev/null 2>&1 && echo "$USER" || ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1);
LIBRA=$(head -n 2 ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 2)
echo "$LIBRA/ipns/$ASTRONAUTENS"
echo "http://$myIP:8080/ipns/$ASTRONAUTENS ($YOU)"
echo "($YOU) /ipns/$ASTRONAUTENS $LIBRA"
[[ $YOU ]] && ipfs --timeout 30s cat /ipns/$ASTRONAUTENS > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/index.html \
|| curl -m 30 -so ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/index.html "$LIBRA/ipns/$ASTRONAUTENS"
@ -71,8 +70,8 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
echo "MANUAL PROCEDURE NEEDED"
echo "------------------------------------------------"
echo "http://$myIP:8080/ipfs/"
cat ~/.zen/game/players/$PLAYER/ipfs/moa/.chain.*
echo "ipfs name publish -t 24h --key=$PLAYER /ipfs/"
echo "/ipfs/"$(cat ~/.zen/game/players/$PLAYER/ipfs/moa/.chain.* | tail -n 1)
echo "ipfs name publish -t 24h --key=$PLAYER ..."
echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
continue
@ -120,13 +119,12 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
##############################################################
## SPECIAL TAG "voeu" => Creation G1Voeu (G1Titre) makes AstroBot TW G1Processing
##############################################################
$MY_PATH/VOEUX.create.sh ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/index.html $PLAYER
${MY_PATH}/VOEUX.create.sh ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/index.html "$PLAYER"
# VOEUX.refresh.sh
##############################################################
## RUN ASTROBOT G1Voeux SUBPROCESS (SPECIFIC AND STANDARD Ŋ1 SYNC)
## RUN ASTROBOT G1Voeux SUBPROCESS (SPECIFIC Ŋ1 COPY)
##############################################################
$MY_PATH/VOEUX.refresh.sh ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/index.html $PLAYER
${MY_PATH}/VOEUX.refresh.sh ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/index.html "$PLAYER"
##############################################################
####################
@ -143,8 +141,8 @@ isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(
###########################
# Modification Tiddlers de contrôle de GW & API
echo '[{"title":"$:/ipfs/saver/api/http/localhost/5001","tags":"$:/ipfs/core $:/ipfs/saver/api","text":"http:/ipfs.localhost:5001"}]' > ~/.zen/tmp/5001.json
echo '[{"title":"$:/ipfs/saver/gateway/http/localhost","tags":"$:/ipfs/core $:/ipfs/saver/gateway","text":"http://'$TUBE':8080"}]' > ~/.zen/tmp/8080.json
echo '[{"title":"$:/ipfs/saver/api/http/localhost/5001","tags":"$:/ipfs/core $:/ipfs/saver/api","text":"http://ipfs.localhost:5001"}]' > ~/.zen/tmp/5001.json
echo '[{"title":"$:/ipfs/saver/gateway/http/localhost","tags":"$:/ipfs/core $:/ipfs/saver/gateway","text":"https://ipfs.copylaradio.com"}]' > ~/.zen/tmp/8080.json
tiddlywiki --load ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/index.html \
--import "$HOME/.zen/tmp/MadeInZion.json" "application/json" \
@ -203,7 +201,7 @@ ipfs get -o ~/.zen/tmp/${IPFSNODEID} /ipns/${IPFSNODEID}/
NSIZE=$(du -b ~/.zen/tmp/${IPFSNODEID} | tail -n 1 | cut -f 1)
[[ $BSIZE != $NSIZE ]] \
&& ROUTING=$(ipfs add -rwq ~/.zen/tmp/${IPFSNODEID}/* | tail -n 1 ) \
&& ROUTING=$(ipfs add -rwHq ~/.zen/tmp/${IPFSNODEID}/* | tail -n 1 ) \
&& echo "BALISE STATION /ipns/${IPFSNODEID} INDEXES = $NSIZE octets" \
&& ipfs name publish --allow-offline -t 24h /ipfs/$ROUTING

View File

@ -1,11 +1,11 @@
# CONTAINS Address of 1st Bootstrap Stations (24/24 Public IP) - DO NOT EDIT MANUALY -
# http://tube.copylaradio.com:8080 ipfs.copylaradio.com
# https://ipfs.copylaradio.com ipfs.copylaradio.com
#################################################################
# libra.astroport.com
# astroport.libra.copylaradio.com
/ip4/149.102.158.67/udp/4001/quic/p2p/12D3KooWL2FcDJ41U9SyLuvDmA5qGzyoaj2RoEHiJPpCvY8jvx9u
# cancer.astroport.com
/ip4/185.202.238.69/tcp/4001/p2p/12D3KooWSnxRBuoeCZGdXBbSKiW8qM4HxLp3RLypW9dg82o41ZqM
# aries.copylaradio.com
# astroport.cancer.copylaradio.com
/ip4/185.202.238.69/tcp/4001/p2p/12D3KooWDYpPdfCFf3CbKpcLNmyA2vmJs4JY55k8yje9R1MxSgdB
# astroport.aries.copylaradio.com
/ip4/37.187.127.175/tcp/4001/p2p/12D3KooWSQYTxeoZZ39SNosEKxi7RUdGTtAQAqpKeZJxjzqqrZTx
#################################################################

View File

@ -9,6 +9,28 @@ SHELL_FILES ?= $(wildcard .*/*.sh */*.sh */*/*.sh)
all: install tests
install: upgrade build myos-host up player
upgrade: migrate-ipfs migrate-zen
echo "Welcome to myos docker land - make a user - make a player -"
migrate-%:
[ ! -f /var/lib/docker/volumes/$(HOSTNAME)_$*/_data ] \
&& $(RUN) $(SUDO) mkdir -p /var/lib/docker/volumes/$(HOSTNAME)_$*/_data \
&& $(RUN) $(SUDO) cp -a ~/.$* /var/lib/docker/volumes/$(HOSTNAME)_$*/_data \
&& $(RUN) $(SUDO) chown -R $(USER) /var/lib/docker/volumes/$(HOSTNAME)_$* \
|| :
player: STACK := User
player: docker-network-create-$(USER)
$(call make,stack-User-$(if $(DELETE),down,up),$(MYOS),COMPOSE_PROJECT_NAME MAIL)
player-%: STACK := User
player-%:
$(if $(filter $*,$(filter-out %-%,$(patsubst docker-compose-%,%,$(filter docker-compose-%,$(MAKE_TARGETS))))), \
$(call make,stack-User-$*,$(MYOS),COMPOSE_PROJECT_NAME MAIL) \
)
tests: shellcheck
shellcheck:

View File

@ -38,11 +38,39 @@ Gestion des Astronautes, de leurs VISA et VOEUX en mode CLI
```
Lancement API (1234) et MAP (12345)
## ./adventure/adventure.sh
MODE AVENTURE : Activez votre VISA Astronaute sur une Station !
```
~/.zen/Astroport.ONE/adventure/adventure.sh
```
Trouvez le moyen d'accéder à votre "Station Astroport" en explorant les environs du premier de ce nom.
# USAGE
# INSTALLATION (Docker)
```
sudo apt install git make docker.io
sudo adduser $USER docker
## REBOOT
cd ~/.zen/Astroport.ONE
make
make install
```
Plus de connexion officielle.
L'UTILISATEUR devient un JOUEUR, en semant son propre IPFS, en utilisant un Docker sur un nœud Astroport géré par un autre JOUEUR.
Ainsi, les AMIS peuvent héberger d'autres AMIS.
# RESULTAT
TW du PLAYER support@qo-op.com
https://ipfs.copylaradio.com/ipns/support.qo-op.com.localhost.copylaradio.com
# TW
Selon le modèle de votre TW,
@ -104,7 +132,7 @@ Vos données son stockées [dans des Tiddlers](http://libra.copylaradio.com:8080
### Foret Enchantée - PROJET ASTROPORT.pdf
http://tube.copylaradio.com:8080/ipfs/QmUtGpGeMZvwp47ftqebVmoFWCmvroy5wEtWsKvWvDWJpR
https://ipfs.copylaradio.com/ipfs/QmUtGpGeMZvwp47ftqebVmoFWCmvroy5wEtWsKvWvDWJpR
# API
@ -136,13 +164,12 @@ http://_ASTROIP_:8080/ipns/_APID_/
_APID_ est la clef IPNS qui contient l'arborescence "json" en lecture
Exemple pour l'application "G1Voeu" http://tube.copylaradio.com:8080/ipns/12D3KooWL2FcDJ41U9SyLuvDmA5qGzyoaj2RoEHiJPpCvY8jvx9u
Exemple pour l'application "G1Voeu" https://ipfs.copylaradio.com/ipns/12D3KooWL2FcDJ41U9SyLuvDmA5qGzyoaj2RoEHiJPpCvY8jvx9u
Application "messaging"
http://tube.copylaradio.com:1234/?salt=toto&pepper=toto&messaging=on
Pour écrire une application on utilisera "jsipfs"
Pour écrire une application on pourra utiliser "jsipfs"
https://js.ipfs.tech/
<script src="https://cdn.jsdelivr.net/npm/ipfs-core/dist/index.min.js"></script>
@ -153,8 +180,8 @@ Ajoutez l'appel API "testcraft" pour enregistrer vos json
http://tube.copylaradio.com:1234/?salt=toto&pepper=toto&testcraft=on&nodeid=12D3KooWK1ACupF7RD3MNvkBFU9Z6fX11pKRAR99WDzEUiYp5t8j&dataid=QmZXo87nn34i54HhuMrbuXM5fKXymhV3Zj9exeZDK6s4WD
```
# TYPE = official, g1pub, messaging, testcraft, ....
http://127.0.0.1:1234/?salt=${SALT}&pepper=${PEPPER}&${TYPE}=?&...
# APP = g1pub, messaging, testcraft, ....
http://127.0.0.1:1234/?salt=${SALT}&pepper=${PEPPER}&${APP}=?&...
```
[12345.sh](/qo-op/Astroport.ONE/src/branch/master/12345.sh)
@ -164,7 +191,6 @@ DATA ~/.zen/tmp/${IPFSNODEID}/${ASTRONAUTENS}/${TYPE}/${MOATS}.data.json
INDEX ~/.zen/tmp/${IPFSNODEID}/${TYPE}.json
```
# TIDDLYWIKI
Les données produites par chaque clef sont stockées en tant que tiddlers dans des Tiddlywiki.

View File

@ -77,7 +77,7 @@ while true; do
ls ~/.zen/tmp/swarm
BSIZE=$(du -b ~/.zen/tmp/swarm | tail -n 1 | cut -f 1)
## SIZE MODIFIED
## SIZE MODIFIED => PUBLISH MySwarm_$IPFSNODEID
[[ $BSIZE != $(cat ~/.zen/tmp/swarm/.bsize) ]] \
&& echo $BSIZE > ~/.zen/tmp/swarm/.bsize \
&& SWARMH=$(ipfs add -rwq ~/.zen/tmp/swarm/* | tail -n 1 ) \
@ -85,7 +85,7 @@ while true; do
############# PUBLISH IPFSNODEID BALISE
# Clean Empty
# Clean Empty Directory (inode dependancy BUG ??)
du -b ~/.zen/tmp/${IPFSNODEID} > /tmp/du
while read branch; do [[ $branch =~ "4096" ]] && rmdir $(echo $branch | cut -f 2 -d ' '); done < /tmp/du

View File

@ -21,7 +21,11 @@
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
start=`date +%s`
# REMOVE GtkDialog errors for zenity
shopt -s expand_aliases
alias zenity='zenity 2> >(grep -v GtkDialog >&2)'
alias espeak='espeak 1>&2>/dev/null'
########################################################################
[[ $(which ipfs) == "" ]] && echo "ERREUR! Installez ipfs" && echo "wget https://git.p2p.legal/axiom-team/astrXbian/raw/master/.install/ipfs_alone.sh -O /tmp/ipfs_install.sh && chmod +x /tmp/ipfs_install.sh && /tmp/ipfs_install.sh" && exit 1
[[ $(which zenity) == "" ]] && echo "ERREUR! Installez zenity" && echo "sudo apt install zenity" && exit 1
@ -30,18 +34,30 @@ ME="${0##*/}"
# Check who is .current PLAYER
PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null)
[[ ${PLAYER} == "" ]] && espeak "ERROR CONNECT YOUR PLAYER - EXIT" && exit 1
PSEUDO=$(cat ~/.zen/game/players/.current/.pseudo 2>/dev/null)
G1PUB=$(cat ~/.zen/game/players/.current/.g1pub 2>/dev/null)
[[ $G1PUB == "" ]] && espeak "ERROR NO G1 PUBLIC KEY FOUND - EXIT" && exit 1
PLAYERNS=$(cat ~/.zen/game/players/.current/.playerns 2>/dev/null) || ( echo "noplayerns" && exit 1 )
[[ ${PLAYER} == "" ]] \
&& espeak "YOU MUST CONNECT A PLAYER" \
&& OUTPUT=$(zenity --forms --width 480 --title="CONNEXION" --text="Ecrivez la formule magique" --separator="~" --add-entry="Phrase 1" --add-entry="Phrase 2") \
&& SALT=$(awk -F '~' '{print $1}' <<<$OUTPUT) \
&& PEPPER=$(awk -F '~' '{print $2}' <<<$OUTPUT) \
&& PLAYER=$(zenity --entry --width 300 --title "PLAYER" --text "Indiquez votre email" --entry-text="user@domain.tld") \
&& ${MY_PATH}/tools/VISA.new.sh "$SALT" "$PEPPER" "$PLAYER"
PSEUDO=$(cat ~/.zen/game/players/${PLAYER}/.pseudo 2>/dev/null)
espeak "Hello $PSEUDO"
G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub 2>/dev/null)
[[ $G1PUB == "" ]] && espeak "ERROR NO G 1 PUBLIC KEY FOUND - EXIT" && exit 1
PLAYERNS=$(cat ~/.zen/game/players/${PLAYER}/.playerns 2>/dev/null) || ( echo "noplayerns" && exit 1 )
ASTRONAUTENS=$(ipfs key list -l | grep -w "${PLAYER}" | cut -d ' ' -f 1)
[[ $ASTRONAUTENS == "" ]] && echo "ASTRONAUTE manquant" && espeak "Astronaut Key Missing" && exit 1
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
[[ $IPFSNODEID == "" ]] && echo "IPFSNODEID manquant" && espeak "IPFS NODE ID Missing" && exit 1
myIP=$(hostname -I | awk '{print $1}' | head -n 1)
isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
[[ ! $myIP || $isLAN ]] && myIP="ipfs.localhost"
@ -56,10 +72,6 @@ if [ $URL ]; then
CHOICE="$IMPORT"
fi
# REMOVE GtkDialog errors for zenity
shopt -s expand_aliases
alias zenity='zenity 2> >(grep -v GtkDialog >&2)'
alias espeak='espeak 1>&2>/dev/null'
# GET SCREEN DIMENSIONS
screen=$(xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/')
@ -71,7 +83,7 @@ haut=$((height-200))
########################################################################
## CADRE EXCEPTION COPIE PRIVE
# https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006278917/2008-12-11/
if [[ ! -f ~/.zen/game/players/.current/legal ]]; then
if [[ ! -f ~/.zen/game/players/${PLAYER}/legal ]]; then
zenity --width ${large} --height=${haut} --text-info \
--title="Action conforme avec le Code de la propriété intellectuelle" \
--html \
@ -81,12 +93,12 @@ zenity --width ${large} --height=${haut} --text-info \
case $? in
0)
echo "AUTORISATION COPIE PRIVE ASTROPORT OK !"
echo "$G1PUB" > ~/.zen/game/players/.current/legal
echo "$G1PUB" > ~/.zen/game/players/${PLAYER}/legal
# next step
;;
1)
echo "Refus conditions"
rm -f ~/.zen/game/players/.current/legal
rm -f ~/.zen/game/players/${PLAYER}/legal
exit 1
;;
-1)
@ -96,7 +108,7 @@ case $? in
esac
fi
## DES/ACTIVATION ASTROPORT
## CHANGE ASTROPORT BOOTSTRAP
if [[ $1 == "on" ]]; then
STRAP=$(ipfs bootstrap)
BOOT=$(zenity --entry --width 300 --title="Catégorie" --text="$STRAP Changez de Bootstrap" --entry-text="Aucun" Astroport Public)
@ -106,6 +118,14 @@ if [[ $1 == "on" ]]; then
REP=$(${MY_PATH}/tools/cron_VRFY.sh ON) && zenity --warning --width 600 --text "$REP"
fi
###
# IS THERE ANY RUNNING IPFS ADD
ISADDING=$(ps auxf --sort=+utime | grep -w 'ipfs add' | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1)
ISPUBLISHING=$(ps auxf --sort=+utime | grep -w 'ipfs name publish' | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1)
[[ $ISADDING || $ISPUBLISHING ]] \
&& espeak "I P F S progressing. Please try again later" && exit 1
########################################################################
espeak "restart I P F S daemon"
sudo systemctl restart ipfs
sleep 1
@ -113,11 +133,13 @@ sleep 1
YOU=$(ipfs swarm peers >/dev/null 2>&1 && echo "$USER" || ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1)
[[ ! $YOU ]] && espeak "I P F S not running - EXIT" && exit 1
########################################################################
espeak "Ready !"
########################################################################
########################################################################
# CHOOSE CATEGORY (remove anime, not working!)
[[ $CHOICE == "" ]] && CHOICE=$(zenity --entry --width 300 --title="Catégorie" --text="Choisissez la catégorie de votre media" --entry-text="Vlog" Film Serie Page Youtube Video)
[[ $CHOICE == "" ]] && CHOICE=$(zenity --entry --width 300 --title="Catégorie" --text="Quelle catégorie pour ce media ?" --entry-text="Vlog" Video Film Serie Web Page Youtube Mp3)
[[ $CHOICE == "" ]] && exit 1
# LOWER CARACTERS
@ -132,7 +154,9 @@ PREFIX=$(echo "${CAT}" | head -c 1 | awk '{ print toupper($0) }' ) # ex: F, S, A
########################################################################
case ${CAT} in
########################################################################
# CASE ## ASTRONAUTE
########################################################################
########################################################################
# CASE ## VLOG
#~ __ ___
#~ \ \ / / | ___ __ _
#~ \ \ / /| |/ _ \ / _` |
@ -143,7 +167,7 @@ case ${CAT} in
########################################################################
vlog)
espeak "vlog is video blogging"
espeak "Ready to record your webcam"
zenity --warning --width 300 --text "${PLAYER}. Prêt à enregistrer votre video ?"
@ -193,11 +217,16 @@ JSON_FILE=$(echo ${FILE_NAME} | sed "s/${FILE_EXT}/json/g")
YID=$(echo "${FILE_NAME}" | cut -d "&" -f 1)
YNAME=$(echo "${FILE_NAME}" | cut -d "&" -f 2- | sed "s/[(][^)]*[)]//g" | sed -e 's/[^A-Za-z0-9._-]/_/g' | sed -e 's/__/_/g' ) # Remove YoutubeID_ and (what is in perentheses)
[[ $(which detox) ]] && YNAME=$(echo "${FILE_NAME}" | cut -d "&" -f 2- | detox --inline)
espeak "OK $YNAME copied"
MEDIAID="$REVSOURCE${YID}"
TITLE="${YNAME%.*}"
MEDIAKEY="YOUTUBE_${MEDIAID}"
## CORRECT PARAMETERS to Make Kodi compatible YASTRXBIAN FILE
espeak "Please. Choose your tags"
[ ! $2 ] && GENRES=$(zenity --list --checklist --title="GENRE" --height=${haut} \
--text="Choisissez le(s) genre(s) d'information(s) contenue(s) dans cette vidéo \"${TITLE}\" publiée sur OASIS" \
--column="Use" \
@ -253,25 +282,104 @@ rm -Rf ${YTEMP}
web)
espeak "Clone a web site and make it better"
[[ $URL == "" ]] && URL=$(zenity --entry --width 300 --title "Lien du site web à copier" --text "Indiquez le lien (URL)" --entry-text="")
# URL="https://discuss.ipfs.io/t/limit-ipfs-get-command/3573/6"
espeak "Mirror web site"
cd ~/.zen/tmp/
espeak "NOT READY. Please Help Debug. EXIT" && exit 0
URL=$(echo $URL | grep -Eo '^http[s]?://[^/]+')
[[ $URL == "" ]] && URL=$(zenity --entry --width 300 --title "Lien du site Web à copier" --text "Indiquez le lien (URL)" --entry-text="")
FILE_NAME="index.html"
REVSOURCE="$(echo "$URL" | rev | sha256sum | cut -d ' ' -f 1)_"; echo $REVSOURCE # URL="https://discuss.ipfs.io/t/limit-ipfs-get-command/3573/6"
MEDIAID="$REVSOURCE" # MEDIAID=1252ff59950395070a0cc56bb058cbb1ccfd2f8d8a32476acaf472f62b14d97d_
MEDIAKEY="WWW_${MEDIAID}" # MEDIAKEY=PAGE_1252ff59950395070a0cc56bb058cbb1ccfd2f8d8a32476acaf472f62b14d97d_
FILE_PATH="$HOME/Astroport/web/$MEDIAID";
mkdir -p $FILE_PATH
## Extract http(s)://domain.tld
URL=$(echo $URL | grep -Eo '^http[s]?://[^/]+') # URL="https://discuss.ipfs.io"
DOMAIN=$(echo $URL | rev | cut -d '/' -f1 | rev) # DOMAIN=discuss.ipfs.io
ARR=($(echo $DOMAIN | sed "s~\.~ ~g")) # ARR=discuss ipfs io
NIAMOD=$(printf '%s\n' "${ARR[@]}" | tac | tr '\n' '.' ) # NIAMOD=io.ipfs.discuss.
NIAPATH=$(echo $NIAMOD | sed "s~\.~\/~g") # NIAPATH=io/ipfs/discuss/
wget -mpck --html-extension --recursive --convert-links --user-agent="Astroport.One" -e robots=off --wait 1 -P ${FILE_PATH} "$URL"
# wget --recursive --convert-links -mpck --html-extension --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36." -e robots=off -P ${FILE_PATH} "$URL"
# wget \ --mirror \ --warc-file=$MEDIAID \ --no-verbose \ --warc-cdx \ --page-requisites \ --adjust-extension \ --convert-links \ --no-warc-compression \ --no-warc-keep-log \ --append-output="$MEDIAID" \ --execute robots=off \ -P ${FILE_PATH} "$URL"
TITLE=$DOMAIN
GENRES="Web"
echo "web;${MEDIAID};$(date -u +%s%N | cut -b1-13);${TITLE};${SAISON};${GENRES};_IPNSKEY_;${RES};/ipfs/_IPFSREPFILEID_/$FILE_NAME" > ~/Astroport/${CAT}/${MEDIAID}/ajouter_video.txt
espeak "${ARR[@]}"
zenity --warning --width ${large} --text "Vérifiez que la copie de votre site se trouve bien dans ${FILE_PATH}/"
## CREATE IPNS KEY HOOK JUST FOR FUN
REVSOURCE="$(echo "$NIAMOD" | rev | sha256sum | cut -d ' ' -f 1)"; echo $REVSOURCE
MEDIAKEY="$REVSOURCE" # MEDIAKEY=435582881619ee4df9e2723fb9e20bb173b32818094a3e40c9536068ae3730ac
IPNSKEY=$(ipfs key list -l | grep -w $MEDIAKEY | cut -d ' ' -f 1 )
if [[ ! $IPNSKEY ]]; then
# Funny Crypto Level # TODO MAKE IT MORE SECURE # THIS KEY OWNS THE DOMAIN NOW
${MY_PATH}/tools/keygen -t ipfs -o ~/.zen/tmp/$MEDIAKEY.ipns "$DOMAIN" "$NIAMOD"
IPNSKEY=$(ipfs key import $MEDIAKEY -f pem-pkcs8-cleartext ~/.zen/tmp/$MEDIAKEY.ipns)
fi
MEDIAID="WEB_${NIAMOD}" # MEDIAID=WEB_io.ipfs.discuss.
FILE_PATH="$HOME/Astroport/web/$MEDIAID"; # FILE_PATH=/home/fred/Astroport/web/WEB_io.ipfs.discuss.
start=`date +%s`
mkdir -p $FILE_PATH
cd $FILE_PATH
espeak "Let's go. " ###################### HTTRACK COPYING
httrack -wxY --sockets=99 maxrate=0 --disable-security-limits keepalive --ext-depth=0 --stay-on-same-domain --keep-links=0 -V "echo \$0 >> $FILE_PATH/files" "$URL" -* +*/$DOMAIN/* -*wget* # -%l "fr"
mv $FILE_PATH/external.html $FILE_PATH/$DOMAIN/
## G1PUB ENCODE.16 MEDIAKEY
${MY_PATH}/tools/natools.py encrypt -p $G1PUB -i $HOME/.zen/tmp/$MEDIAKEY.ipns -o $HOME/.zen/tmp/$MEDIAKEY.ipns.enc
cat $HOME/.zen/tmp/$MEDIAKEY.ipns.enc | base16 > $FILE_PATH/$DOMAIN/.ipnskey.$G1PUB.enc.16
## BLOCKCHAIN IT
echo "$MOATS" > $FILE_PATH/$DOMAIN/.moats # TIMESTMAPING
echo "$IPNSKEY" > $FILE_PATH/$DOMAIN/.ipnshook # SELF REFERING
espeak "OK Web is copied. Adding to I P F S now..."
### ADD TO IPFS
IPFSREPFILEID=$(ipfs add -qHwr $FILE_PATH/$DOMAIN/* | tail -n 1) # ADDING $DOMAIN TO IPFS
ipfs name publish -k $MEDIAKEY /ipfs/$IPFSREPFILEID # PUBLISH $MEDIAKEY
## CREATE ajouter_video.txt
echo "web;${MEDIAID};${MOATS};${TITLE};${SAISON};${GENRES};$IPNSKEY;${RES};/ipfs/$IPFSREPFILEID" > ~/Astroport/${CAT}/${MEDIAID}/ajouter_video.txt
## DURATION LOG
end=`date +%s`
dur=`expr $end - $start`
echo ${MOATS}:${G1PUB}:${PLAYER}:${MEDIAID}:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings
cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1
## TIDDLER CREATION
FILE_BSIZE=$(du -b "$FILE_PATH/$DOMAIN/" | awk '{print $1}' | tail -n 1)
FILE_SIZE=$(echo "${FILE_BSIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')
## NB TEXT IS MADE WITH TIDDLERS FIELDS VALUES (LEARN TODO)
TEXT="<iframe src={{{ [{$:/ipfs/saver/gateway/http/localhost!!text}] [{!!ipfs}] +[join[]] }}} height='360' width='100%'></iframe>
Web : $URL ----> <a href={{{ [{$:/ipfs/saver/gateway/http/localhost!!text}] [{!!ipfs}] +[join[]] }}}}><<currentTiddler>></a>
<br>$FILE_SIZE - $dur sec"
echo '[
{
"created": "'${MOATS}'",
"modified": "'${MOATS}'",
"dur": "'$dur'",
"title": "'${NIAMOD}'",
"type": "'text/vnd.tiddlywiki'",
"text": "'$TEXT'",
"size": "'${FILE_BSIZE}'",
"g1pub": "'${G1PUB}'",
"ipfs": "'/ipfs/${IPFSREPFILEID}'",
"mediakey": "'${MEDIAKEY}'",
"ipnskey16": "'$(cat $HOME/.zen/tmp/$MEDIAKEY.ipns.enc | base16)'",
"ipns": "'/ipns/${IPNSKEY}'",
"tags": "'ipfs G1Web $PLAYER webmaster@$DOMAIN'"
}
]
' > ~/Astroport/${CAT}/${MEDIAID}/${MEDIAKEY}.dragdrop.json
# zenity --warning --width ${large} --text "Copie $URL dans ${FILE_PATH}/ et /ipns/$IPNSKEY"
espeak "Done. Tiddler is ready"
;;
@ -287,7 +395,9 @@ rm -Rf ${YTEMP}
page)
espeak "page : import P D F"
espeak "Converting any web page into P D F"
## EVOLVE TO ARTICLE
# httrack --mirror --ext-depth=0 --depth=1 --near --stay-on-same-address --keep-links=0 --path article-x --quiet https://example.com/article-x/
[[ $URL == "" ]] && URL=$(zenity --entry --width 300 --title "Lien de la page à convertir en PDF" --text "Indiquez le lien (URL)" --entry-text="")
@ -298,7 +408,7 @@ rm -Rf ${YTEMP}
cd ~/.zen/tmp/ && rm -f output.pdf
# https://peter.sh/experiments/chromium-command-line-switches
${MY_PATH}/tools/timeout.sh -t 12 \
${MY_PATH}/tools/timeout.sh -t 30 \
chromium --headless --use-mobile-user-agent --no-sandbox --print-to-pdf "$URL"
fi
@ -321,6 +431,8 @@ rm -Rf ${YTEMP}
[[ ! -s ~/.zen/tmp/output.pdf ]] && espeak "No file Sorry. Exit" && exit 1
espeak "OK Page copied. Give it a title please"
CTITLE=$(echo $URL | rev | cut -d '/' -f 1 | rev)
TITLE=$(zenity --entry --width 480 --title "Titre" --text "Quel nom de fichier à donner à cette page ? " --entry-text="${CTITLE}")
@ -351,16 +463,16 @@ rm -Rf ${YTEMP}
########################################################################
mp3)
espeak "mp3 is music copying. Please help..."
espeak " Youtube music copying. Please help us to make the Web your Web"
zenity --warning --width 600 --text 'DEVELOPPER ZONE ONLY - https://git.p2p.legal'
exit 0
zenity --warning --width 600 --text 'DEVELOPPEMENT ZONE - https://git.p2p.legal - P2P INTERNET FACTORY'
# Create TEMP directory
YTEMP="$HOME/.zen/tmp/$(date -u +%s%N | cut -b1-13)"
mkdir -p ${YTEMP}
artist=$(zenity --entry --width 400 --title "Extraction MP3 depuis Youtube" --text "Artiste recherché ou Lien Youtube" --entry-text="")
YTURL="$URL"
[[ $YTURL == "" ]] && artist=$(zenity --entry --width 400 --title "Extraction MP3 depuis Youtube" --text "Artiste recherché ou Lien Youtube" --entry-text="")
[[ $artist == "" ]] && exit 1
## CHECK if artist is LINK or ID
@ -370,17 +482,23 @@ if [[ ! $islink && $length != 11 ]]
then
# Ask for song name
song=$(zenity --entry --width 300 --title "Titre à chercher sur Youtube" --text "Titre recherché" --entry-text="")
[[ $song == "" ]] && exit 1
else
song=$(zenity --entry --width 300 --title "Confirmer ID" --text "Titre recherché (ou confirmer la saisie précédente)" --entry-text="$artist")
[[ "$song" == "$artist" ]] && song=""
fi
[[ $song == "" ]] && espeak "I was expecting a song name. Sorry. I Am out." && exit 1
# Download mp3 from 1st youtube search video result (--write-info-json)
/usr/local/bin/youtube-dl --default-search ytsearch1: \
# Download mp3 from 1st youtube search video result (--write-info-json)
/usr/local/bin/youtube-dl --default-search ytsearch1: \
--ignore-errors --no-mtime \
--embed-thumbnail --metadata-from-title "%(artist)s - %(title)s" --add-metadata \
--extract-audio --audio-format mp3 -o "${YTEMP}/%(id)s&%(title)s.%(ext)s" "$artist $song"
else
# artist is the URL ot the song
/usr/local/bin/youtube-dl \
--ignore-errors --no-mtime \
--embed-thumbnail --metadata-from-title "%(artist)s - %(title)s" --add-metadata \
--extract-audio --audio-format mp3 -o "${YTEMP}/%(id)s&%(title)s.%(ext)s" "$artist $song"
--extract-audio --audio-format mp3 -o "${YTEMP}/%(id)s&%(title)s.%(ext)s" "$artist"
fi
ls ${YTEMP}
# Get filename, extract ID, make destination dir and move copy.
@ -392,8 +510,7 @@ YID=$(echo "${FILE_NAME}" | cut -d "&" -f 1)
YNAME=$(echo "${FILE_NAME}" | cut -d "&" -f 2- | sed "s/[(][^)]*[)]//g" | sed -e 's/[^A-Za-z0-9._-]/_/g' | sed -e 's/__/_/g') # Remove YoutubeID_ and (what is in perentheses)
[[ $(which detox) ]] && YNAME="$(echo "${FILE_NAME}" | cut -d "&" -f 2- | detox --inline)"
[[ ! $islink && "$song" != "" ]] && FILE_PATH="$HOME/Astroport/$CAT/$artist/_o-o_" \
|| FILE_PATH="$HOME/Astroport/$CAT/${YID}"
FILE_PATH="$HOME/Astroport/$CAT/${YID}"
mkdir -p "${FILE_PATH}" && mv -f ${YTEMP}/* "${FILE_PATH}/"
# Remove "&" from FILE_NAME rename to YNAME
@ -407,12 +524,52 @@ MEDIAKEY="MP3_$MEDIAID"
rm -Rf ${YTEMP}
# zenity --warning --width ${large} --text "MP3 copié"
echo "${MY_PATH}/tools/new_mp3_in_astroport.sh \"${FILE_PATH}/\" \"${FILE_NAME}\""
${MY_PATH}/tools/new_mp3_in_astroport.sh "${FILE_PATH}/" "${FILE_NAME}" > /tmp/${CHOICE}_${MEDIAID}.log 2>&1
echo "new_mp3_in_astroport \"${FILE_PATH}/\" \"${FILE_NAME}\""
# ${MY_PATH}/tools/new_mp3_in_astroport.sh "${FILE_PATH}/" "${FILE_NAME}"
cat /tmp/${CHOICE}_${MEDIAID}.log
## BLOCKCHAIN IT
start=`date +%s`
exit 0
echo "$MOATS" > $FILE_PATH/.moats # TIMESTMAPING
### ADD TO IPFS
IPFSREPFILEID=$(ipfs add -q $FILE_PATH/$FILE_NAME | tail -n 1) # ADDIN TO IPFS
## CREATE ajouter_video.txt
echo "mp3;${MEDIAID};${MOATS};${TITLE};${SAISON};${GENRES};$GROUPES;${RES};/ipfs/$IPFSREPFILEID" > ${FILE_PATH}/ajouter_video.txt
## DURATION LOG
end=`date +%s`
dur=`expr $end - $start`
echo ${MOATS}:${G1PUB}:${PLAYER}:${MEDIAID}:$dur >> ~/.zen/tmp/${IPFSNODEID}/_timings
cat ~/.zen/tmp/${IPFSNODEID}/_timings | tail -n 1
## TIDDLER CREATION
FILE_BSIZE=$(du -b "$FILE_PATH/$FILE_NAME" | awk '{print $1}' | tail -n 1)
FILE_SIZE=$(echo "${FILE_BSIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')
TEXT=""
mkdir -p ~/Astroport/${CAT}/${MEDIAID}/
echo '[
{
"created": "'${MOATS}'",
"modified": "'${MOATS}'",
"_canonical_uri": "'/ipfs/${IPFSREPFILEID}'",
"title": "'$TITLE'",
"artist": "'$artist'",
"song": "'$song'",
"dur": "'$dur'",
"type": "'audio/mpeg'",
"text": "'$TEXT'",
"size": "'${FILE_BSIZE}'",
"g1pub": "'${G1PUB}'",
"ipfs": "'/ipfs/${IPFSREPFILEID}'",
"mediakey": "'${MEDIAKEY}'",
"tags": "'$:/isAttachment $:/isIpfs ipfs mp3 G1Mp3 $artist $song $PLAYER'"
}
]
' > ~/Astroport/${CAT}/${MEDIAID}/${MEDIAKEY}.dragdrop.json
;;
@ -470,7 +627,8 @@ TITLE=$(echo "${TITLE}" | sed "s/[(][^)]*[)]//g" | sed -e 's/;/_/g' ) # Clean TI
# VIDEO YEAR
### CHECK IF PREVIOUS ajouter_video (Serie case)
[[ -f ~/Astroport/${CAT}/${MEDIAID}/ajouter_video.txt ]] \
&& PRE=$(cat ~/Astroport/${CAT}/${MEDIAID}/ajouter_video.txt | cut -d ';' -f 3)
&& PRE=$(cat ~/Astroport/${CAT}/${MEDIAID}/ajouter_video.txt | cut -d ';' -f 3) \
|| PRE=""
YEAR=$(zenity --entry --width 300 --title "Année" --text "Indiquez année de la vidéo. Exemple: 1985" --entry-text="${PRE}")
# VIDEO RESOLUTION
@ -535,12 +693,12 @@ FILM_GENRES=$(zenity --list --checklist --title="GENRE" --height=${haut}\
# FORMAT GENRES ["genre1","genre2"] # USE IF YOU ACTIVATE KODI COMPATIBILITY
GENRES="[\"$(echo ${FILM_GENRES} | sed s/\|/\",\"/g)\"]"
mv -f "${FILE_PATH}/${FILE_NAME}" "$HOME/Astroport/${CAT}/${MEDIAID}/${TITLE}${SAISON}.${FILE_EXT}"
mkdir -p ~/Astroport/${CAT}/${MEDIAID}/
if [ $? != 0 ]; then
zenity --warning --width ${large} --text "Impossible de déplacer votre fichier ${FILE_PATH}/${FILE_NAME} vers ~/astroport - EXIT -"
exit 1
fi
[[ ! -s "$HOME/Astroport/${CAT}/${MEDIAID}/${TITLE}${SAISON}.${FILE_EXT}" ]] \
&& cp "${FILE_PATH}/${FILE_NAME}" "$HOME/Astroport/${CAT}/${MEDIAID}/${TITLE}${SAISON}.${FILE_EXT}" \
&& [ $? != 0 ] \
&& zenity --warning --width ${large} --text "(☓‿‿☓) ${FILE_PATH}/${FILE_NAME} vers ~/Astroport - EXIT -" && exit 1
FILE_NAME="${TITLE}${SAISON}.${FILE_EXT}"
@ -548,6 +706,11 @@ FILE_NAME="${TITLE}${SAISON}.${FILE_EXT}"
URLENCODE_FILE_NAME=$(echo ${FILE_NAME} | jq -Rr @uri)
echo "${CAT};${MEDIAID};${YEAR};${TITLE};${SAISON};${GENRES};_IPNSKEY_;${RES};/ipfs/_IPFSREPFILEID_/$URLENCODE_FILE_NAME" > ~/Astroport/${CAT}/${MEDIAID}/ajouter_video.txt
# _IPFSREPFILEID_ is replaced later
#######################################################
######## NOT CREATING TIDDLER JSON... SWALLOW IS POST-PROCESSED
## new_file_in_astroport.sh ACTIVATES CONTRACT MODE !!
#######################################################
#######################################################
;;
# video _ _
@ -557,15 +720,15 @@ echo "${CAT};${MEDIAID};${YEAR};${TITLE};${SAISON};${GENRES};_IPNSKEY_;${RES};/i
# \_/ |_|\__,_|\___|\___/
# TIMESTAMP INDEX
video)
video | obs)
espeak "Simply adds your personnal video in TW"
espeak "Add your personnal video in TW"
zenity --warning --width 600 --text 'DEV ZONE - HELP US - REGISTER - https://git.p2p.legal'
## GENERAL MEDIAKEY for uploaded video. Title + Decription + hashtag + hashipfs
# SELECT FILE TO ADD TO ASTROPORT/KODI
FILE=$(zenity --file-selection --title="Sélectionner le fichier vidéo à ajouter")
FILE=$(zenity --file-selection --title="Sélectionner votre vidéo")
echo "${FILE}"
[[ $FILE == "" ]] && exit 1
@ -574,8 +737,14 @@ echo "${CAT};${MEDIAID};${YEAR};${TITLE};${SAISON};${GENRES};_IPNSKEY_;${RES};/i
FILE_NAME="$(basename "${FILE}")"
FILE_EXT="${FILE_NAME##*.}"
FILE_TITLE="${FILE_NAME%.*}"
# MUST CONVERT MKV TO MP4
[[ $FILE_EXT != "mp4" ]] \
&& ffmpeg -loglevel quiet -i "${FILE_PATH}/${FILE_NAME}" -c:v libx264 -c:a aac "${FILE_PATH}/$FILE_TITLE.mp4" \
&& FILE_EXT="mp4" && FILE_NAME="$FILE_TITLE.mp4"
# VIDEO TITLE
TITLE=$(zenity --entry --width 300 --title "Titre" --text "Indiquez le titre de la vidéo" --entry-text="${FILE_TITLE}")
TITLE=$(zenity --entry --width 300 --title "Titre" --text "Indiquez un titre pour cette vidéo" --entry-text="${FILE_TITLE}")
[[ $TITLE == "" ]] && exit 1
TITLE=$(echo "${TITLE}" | sed "s/[(][^)]*[)]//g" | sed -e 's/;/_/g' ) # Clean TITLE (NO ;)
@ -586,10 +755,20 @@ echo "${CAT};${MEDIAID};${YEAR};${TITLE};${SAISON};${GENRES};_IPNSKEY_;${RES};/i
## CREATE SIMPLE JSON (REMOVE== it ?
jq -n --arg ts "$MEDIAID" --arg title "$TITLE" --arg desc "$DESCRIPTION" --arg htag "$HASHTAG" '{"timestamp":$ts,"ipfs":"_IPFSREPFILEID_","ipns":"_IPNSKEY_","title":$title,"desc":$desc,"tag":$htag}' > ~/Astroport/${CAT}/${MEDIAID}/video.json
## MOVE FILE TO IMPORT ZONE
mv -f "${FILE_PATH}/${FILE_NAME}" "$HOME/Astroport/${CAT}/${MEDIAID}/${TITLE}${SAISON}.${FILE_EXT}"
[[ ! -s "$HOME/Astroport/${CAT}/${MEDIAID}/${TITLE}${SAISON}.${FILE_EXT}" ]] \
&& cp "${FILE_PATH}/${FILE_NAME}" "$HOME/Astroport/${CAT}/${MEDIAID}/${TITLE}${SAISON}.${FILE_EXT}"
FILE_NAME="${TITLE}.${FILE_EXT}"
#######################################################
######## NOT CREATING TIDDLER JSON... SWALLOW IS POST-PROCESSED
## new_file_in_astroport.sh FOR OWN CREATION CONTRACTING MODE !!
#######################################################
#######################################################
;;
########################################################################
@ -616,6 +795,7 @@ esac
if [[ $(echo $DISPLAY | cut -d ':' -f 1) == "" ]]; then
espeak "beware taking screen shot in 3 seconds"
sleep 3
espeak "smile"
import -window root ~/.zen/tmp/screen.png
fi
@ -637,65 +817,48 @@ echo "(♥‿‿♥) new_file_in_astroport.sh \"$HOME/Astroport/${CAT}/${MEDIAID
########################################################################
####################################new_file_in_astroport.sh##################
########################################################################
[[ "$CAT" == "film" || "$CAT" == "serie" ]] && CHOICE="TMDB"
if [[ ! -s ~/Astroport/${CAT}/${MEDIAID}/${MEDIAKEY}.dragdrop.json ]]; then
[[ "$CAT" == "film" || "$CAT" == "serie" ]] && CHOICE="TMDB"
timestamp=$(date -u +%s%N | cut -b1-13)
timestamp=$(date -u +%s%N | cut -b1-13)
## OLD CODE !!! ADD TO ASTROPORT SCRIPT
## NOW CREATE TIDDLER INTO PLAYER TW
## OLD CODE !!! ADD TO ASTROPORT SCRIPT
## NOW CREATE TIDDLER INTO PLAYER TW
echo "MEDIAKEY=${MEDIAKEY}" > ~/Astroport/Add_${MEDIAKEY}_script.sh
echo "MEDIAKEY=${MEDIAKEY}" > ~/Astroport/Add_${MEDIAKEY}_script.sh
## ACTIVATE h265 conversion .?
#[[ $CHOICE == "TMDB" ]] && echo "echo \"Encoder ${FILE_NAME} en h265 avant import ? Tapez sur ENTER.. Sinon saisissez qqch avant...\"
#reponse=\$1
#[[ ! \$reponse ]] && read reponse
#if [[ ! \$reponse ]]; then
# ffmpeg -i \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}\" -vcodec libx265 -crf 28 $HOME/Astroport/${MEDIAID}.mp4
# mv \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}\" \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}.old\"
# mv $HOME/Astroport/${MEDIAID}.mp4 \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}.mp4\"
# ${MY_PATH}/tools/new_file_in_astroport.sh \"$HOME/Astroport/${CAT}/${MEDIAID}/\" \"${FILE_NAME}.mp4\"
#else" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
## ACTIVATE h265 conversion .?
#[[ $CHOICE == "TMDB" ]] && echo "echo \"Encoder ${FILE_NAME} en h265 avant import ? Tapez sur ENTER.. Sinon saisissez qqch avant...\"
#reponse=\$1
#[[ ! \$reponse ]] && read reponse
#if [[ ! \$reponse ]]; then
# ffmpeg -i \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}\" -vcodec libx265 -crf 28 $HOME/Astroport/${MEDIAID}.mp4
# mv \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}\" \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}.old\"
# mv $HOME/Astroport/${MEDIAID}.mp4 \"$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}.mp4\"
# ${MY_PATH}/tools/new_file_in_astroport.sh \"$HOME/Astroport/${CAT}/${MEDIAID}/\" \"${FILE_NAME}.mp4\"
#else" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
# $3 is the G1PUB of the PLAYER
echo "${MY_PATH}/tools/new_file_in_astroport.sh \"$HOME/Astroport/${CAT}/${MEDIAID}/\" \"${FILE_NAME}\" \"$G1PUB\"" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
# $3 is the G1PUB of the PLAYER
echo "${MY_PATH}/tools/new_file_in_astroport.sh \"$HOME/Astroport/${CAT}/${MEDIAID}/\" \"${FILE_NAME}\" \"$G1PUB\"" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
#[[ $CHOICE == "TMDB" ]] && echo "fi" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
#[[ $CHOICE == "TMDB" ]] && echo "fi" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
echo "mv ~/Astroport/Add_${MEDIAKEY}_script.sh \"$HOME/Astroport/Done_${FILE_NAME}.sh\"
" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
echo "mv ~/Astroport/Add_${MEDIAKEY}_script.sh \"$HOME/Astroport/Done_${FILE_NAME}.sh\"
" >> ~/Astroport/Add_${MEDIAKEY}_script.sh
chmod +x ~/Astroport/Add_${MEDIAKEY}_script.sh
chmod +x ~/Astroport/Add_${MEDIAKEY}_script.sh
########################################################################
## USE PLAYER G1PUB AS MEDIA WALLET
MEDIAPUBKEY=$(cat ~/.zen/game/players/.current/.g1pub)
G1BALANCE=$(${MY_PATH}/tools/jaklis/jaklis.py balance -p $G1PUB 2>/dev/null )
########################################################################
echo "(♥‿‿♥) $MEDIAKEY IPFS MIAM (ᵔ◡◡ᵔ)"
# zenity --warning --width 360 --text "(♥‿‿♥) $MEDIAKEY IPFS MIAM (ᵔ◡◡ᵔ)"
########################################################################
echo "# ZENBALANCE for ${MEDIAKEY} , WALLET $MEDIAPUBKEY"
########################################################################
FILE_BSIZE=$(du -b "$HOME/Astroport/${CAT}/${MEDIAID}/${FILE_NAME}" | awk '{print $1}')
FILE_SIZE=$(echo "${FILE_BSIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')
espeak "Adding $CAT to I P F S. Please Wait"
#G1BALANCE=$(${MY_PATH}/tools/jaklis/jaklis.py balance -p $G1PUB) && [[ "$G1BALANCE" == "null" ]] && G1BALANCE=0 || G1BALANCE=$(echo "$G1BALANCE" | cut -d '.' -f 1)
#if [[ $G1BALANCE -gt 0 ]]; then
# [ ! $2 ] && G1AMOUNT=$(zenity --entry --width 400 --title "VIRER DE LA MONNAIE LIBRE AU MEDIAKEY (MAX $G1BALANCE)" --text "Combien de JUNE (G1) souhaitez-vous offrir à ce MEDIA ($FILE_SIZE)" --entry-text="")
# [[ ! "$G1AMOUNT" =~ ^[0-9]+$ ]] && G1AMOUNT=0
# ${MY_PATH}/tools/jaklis/jaklis.py -k ~/.zen/secret.dunikey pay -p ${MEDIAPUBKEY} -a $G1AMOUNT -c "#ASTROPORT:${MEDIAKEY} DON"
# ZENBALANCE=$(echo "100 * $G1AMOUNT" | bc -l | cut -d '.' -f 1)
#else
ZENBALANCE=0
#fi
########################################################################
zenity --warning --width 360 --text "(♥‿‿♥) $MEDIAKEY IPFS MIAM (ᵔ◡◡ᵔ)"
espeak "Adding $CAT to I P F S. Please Wait"
bash ~/Astroport/Add_${MEDIAKEY}_script.sh "noh265"
bash ~/Astroport/Add_${MEDIAKEY}_script.sh "noh265"
zenity --warning --width 320 --text "Ajout à votre TW ${PLAYER}"
espeak "Updating T W Index"
fi
espeak "Updating T W"
########################################################################
## ADD TIDDLER TO TW
@ -703,11 +866,12 @@ espeak "Updating T W Index"
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
## GETTING LAST TW via IPFS or HTTP GW
LIBRA=$(head -n 2 ${MY_PATH}/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 2)
rm ~/.zen/tmp/ajouter_media.html > /dev/null 2>&1
[[ $YOU ]] && echo " ipfs --timeout 12s cat /ipns/${ASTRONAUTENS} ($YOU)" && ipfs --timeout 12s cat /ipns/${ASTRONAUTENS} > ~/.zen/tmp/ajouter_media.html
rm -f ~/.zen/tmp/ajouter_media.html > /dev/null 2>&1
[[ $YOU ]] && echo " ipfs --timeout 30s cat /ipns/${ASTRONAUTENS} ($YOU)" && ipfs --timeout 30s cat /ipns/${ASTRONAUTENS} > ~/.zen/tmp/ajouter_media.html
[[ ! -s ~/.zen/tmp/ajouter_media.html ]] && echo "curl -m 12 $LIBRA/ipns/${ASTRONAUTENS}" && curl -m 12 -so ~/.zen/tmp/ajouter_media.html "$LIBRA/ipns/${ASTRONAUTENS}"
[[ ! -s ~/.zen/tmp/ajouter_media.html ]] && espeak "WARNING. WARNING. impossible to find your TW online"
[[ ! -s ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html ]] && espeak "FATAL ERROR. No player TW copy found ! EXIT" && exit 1
## TODO : CHECK CACHE LAST MODIFIED
echo "%%%%%%%%%%%%%% I GOT YOUR TW %%%%%%%%%%%%%%%%%%%%%%%%%%"
[[ -s ~/.zen/tmp/ajouter_media.html ]] && cp -f ~/.zen/tmp/ajouter_media.html ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html && espeak "TW Found"
@ -720,6 +884,7 @@ echo "%%%%%%%%%%%%%% I GOT YOUR TW %%%%%%%%%%%%%%%%%%%%%%%%%%"
if [[ -s ~/.zen/tmp/newindex.html ]]; then
mv ~/Astroport/${CAT}/${MEDIAID}/${MEDIAKEY}.dragdrop.json ~/Astroport/${CAT}/${MEDIAID}/${MOATS}.dragdrop.json
espeak "I P N S Publishing. Please wait..."
cp ~/.zen/tmp/newindex.html ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html
[[ $DIFF ]] && cp ~/.zen/game/players/${PLAYER}/ipfs/moa/.chain \
@ -736,12 +901,16 @@ echo "%%%%%%%%%%%%%% I GOT YOUR TW %%%%%%%%%%%%%%%%%%%%%%%%%%"
echo "================================================"
echo
[[ $XDG_SESSION_TYPE == 'x11' ]] && xdg-open "http://$myIP:8080/ipns/$ASTRONAUTENS"
else
espeak "Warning. Could not import Tiddler. You must add it by hand."
fi
espeak "OK We did it."
end=`date +%s`
dur=`expr $end - $start`
espeak "OK We did it and It tooks $dur seconds to acomplish"
exit 0

View File

@ -0,0 +1,32 @@
alias Marge='git merge'
alias gif='gif diff'
alias chicken='git checkout'
alias vala='cd'
alias Guy_te_fait_chier='git fetch'
alias poule='git pull'
alias poussez='git push'
alias pousseez='git push'
alias pousseeez='git push'
alias pousseeeez='git push'
alias pousseeeeez='git push'
alias pousseeeeeez='git push'
alias pousseeeeeeez='git push'
alias pousseeeeeeeez='git push'
alias pousseeeeeeeeez='git push'
alias pousseeeeeeeeeez='git push'
alias pousseeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeeeeeeeez='git push'
alias pousseeeeeeeeeeeeeeeeeeeeeeeeez='git push'

View File

@ -8,6 +8,7 @@ ARG DOCKER_SYSTEM=Linux
RUN apt-get update \
&& apt-get -fy upgrade \
&& DEBIAN_FRONTEND=noninteractive apt-get -fy install \
basez \
bash \
bc \
cron \
@ -126,6 +127,7 @@ EXPOSE 1234 12345
COPY install.sh /install.sh
COPY ${DOCKER_BUILD_DIR}/*.sh /app/
COPY ${DOCKER_BUILD_DIR}/.*aliases /etc/skel/
CMD ["/app/astroport.sh", "start"]
FROM dist as master
@ -183,10 +185,14 @@ RUN echo "SHELL=/bin/bash" > "/var/spool/cron/crontabs/$USER" \
&& echo "12 20 * * * /bin/bash /home/zen/.zen/Astroport.ONE/20h12.process.sh > /tmp/20h12.log 2>&1" >> "/var/spool/cron/crontabs/$USER" \
&& chown "$USER" "/var/spool/cron/crontabs/$USER"
HEALTHCHECK CMD [ $(ps aux |grep 'nc -l -p' |wc -l) -lt 199 ] && echo -n OK
VOLUME "/home/$USER/.ipfs"
VOLUME "/home/$USER/.zen"
VOLUME "/home/$USER/.zen/game/players"
VOLUME "/home/$USER/Astroport"
# homedir
RUN mkdir -p "/home/$USER/.ipfs" "/home/$USER/.zen/game/players" "/home/$USER/Astroport" \
&& chown "$USER" "/home/$USER/.ipfs" "/home/$USER/.zen/game/players" "/home/$USER/Astroport"
HEALTHCHECK CMD [ $(ps aux |grep 'nc -l -p' |wc -l) -lt 199 ] && echo -n OK
WORKDIR "/home/$USER"

View File

@ -10,13 +10,10 @@ cron() {
}
log() {
tail -F /var/log/fail2ban.log /var/log/syslog /var/log/auth.log /var/log/pam-script.log >&2
tail -F /var/log/auth.log /var/log/pam-script.log >&2
}
zen() {
rm -rf /home/zen/.zen/tmp \
&& mkdir -p /dev/shm/tmp \
&& ln -s /dev/shm/tmp /home/zen/.zen/tmp
[ -d "$ASTROPORT_DIR" ] && cd "$ASTROPORT_DIR" && git pull -q || git clone -q "$ASTROPORT_REPO" "$ASTROPORT_DIR"
}

View File

@ -5,8 +5,8 @@ services:
build:
args:
- DOCKER_REPOSITORY=${DOCKER_REPOSITORY}
- GID=${NODE_GID}
- UID=${NODE_UID}
- GID=${HOST_GID}
- UID=${HOST_UID}
container_name: ${COMPOSE_PROJECT_NAME}-astroport
environment:
- ENV=${ENV}
@ -15,9 +15,12 @@ services:
labels:
- SERVICE_1234_CHECK_HTTP=/test
- SERVICE_1234_NAME=${COMPOSE_SERVICE_NAME}-astroport-1234
- SERVICE_1234_TAGS=${NODE_ASTROPORT_SERVICE_1234_TAGS}
- SERVICE_1234_TAGS=${HOST_ASTROPORT_SERVICE_1234_TAGS:-}
volumes:
- dns:/dns
volumes:
dns:
ipfs:
external: true
name: ${COMPOSE_SERVICE_NAME}_ipfs

View File

@ -2,9 +2,6 @@ version: '3.8'
services:
astroport:
build:
args:
- SSH_PORT=${NODE_VDI_PORT:-22}
cap_add:
- IPC_LOCK # ecryptfs
- NET_ADMIN # iptables
@ -12,12 +9,20 @@ services:
- SYS_ADMIN # ecryptfs
environment:
- DEBUG=${VDI_DEBUG:-}
- ECRYPTERS=${NODE_VDI_ECRYPTERS:-}
- LANG=${NODE_VDI_LANG:-}
- ECRYPTERS=${HOST_VDI_ECRYPTERS:-zen}
- LANG=${HOST_VDI_LANG:-}
- RC_00_SOURCE=${USER_RC_SOURCE:-/etc/profile.d/rc_functions.sh}
- RC_01_PS1_SET=${USER_RC_PS1_SET:-true}
- RC_02_PROMPT_SET=${USER_RC_PROMPT_SET:-true}
- RC_03_SSH_ADD=${USER_RC_SSH_ADD:-true}
- RC_04_TMUX_ATTACH=${USER_RC_TMUX_ATTACH:-false}
- RC_05_SCREEN_ATTACH=${USER_RC_SCREEN_ATTACH:-true}
- SSH_AUTHORIZED_KEYS=${SSH_AUTHORIZED_KEYS:-}
- SSH_PORT=${NODE_VDI_PORT:-22}
- SSH_PORT=${SSH_PORT:-22}
- SSH_PUBLIC_HOSTS=${SSH_PUBLIC_HOSTS:-}
- SUDOERS=${NODE_VDI_SUDOERS:-}
- SUDOERS=${HOST_VDI_SUDOERS:-zen}
- TZ=${HOST_VDI_TZ:-:-{TZ}}
- USERS=${HOST_VDI_USERS:-zen}
security_opt:
- apparmor=unconfined # ecryptfs
- seccomp=unconfined # ecryptfs
@ -26,6 +31,7 @@ services:
- /etc/localtime:/etc/localtime:ro
- /etc/default/console-setup:/etc/default/console-setup:ro
- /etc/default/keyboard:/etc/default/keyboard:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- home:/home:delegated
- shared:/shared:cached
- shm:/dev/shm:delegated
@ -33,11 +39,6 @@ services:
volumes:
home:
shared:
driver: local
driver_opts:
type: none
device: /mnt/shared
o: bind
shm:
driver: local
driver_opts:

View File

@ -13,11 +13,11 @@ services:
tty: true
volumes:
- data:/home/zen/Astroport:cached
- home:/home/zen/.zen/game/players:delegated
- ipfs:/home/zen/.ipfs:cached,ro
- zen:/home/zen/.zen:delegated
working_dir: /home/zen
volumes:
data:
home:
ipfs:
zen:

View File

@ -1,12 +1,12 @@
COMPOSE_FILE_VDI := true
COMPOSE_PROJECT_NAME := $(HOSTNAME)
MAKE_VARS += NODE_VDI_PORT node
SERVICE := astroport
SSH_PORT := $(NODE_VDI_PORT)
SSH_PUBLIC_HOSTS += git.p2p.legal
STACK := node
UFW_UPDATE := $(SERVICE)
node := node/ipfs
bootstrap-stack: myos-node
COMPOSE_FILE_VDI := true
DOCKER_IMAGES_MYOS := x2go:xfce-debian
ENV_VARS += HOST_ASTROPORT_SERVICE_1234_TAGS
HOST_ASTROPORT_SERVICE_1234_TAGS ?= urlprefix-astroport.$(DOMAIN)/
HOST_ASTROPORT_UFW_UPDATE := 1234/tcp 12245:12445/tcp 45720/tcp
MAKE_VARS += SSH_PORT User host
SERVICE := astroport
SSH_PORT := 45720
SSH_PUBLIC_HOSTS := git.p2p.legal
STACK := host
User := User/ipfs
host := host/ipfs

View File

@ -12,13 +12,20 @@ start=`date +%s`
[ $(id -u) -eq 0 ] && echo "LANCEMENT root INTERDIT. Utilisez un simple utilisateur du groupe \"sudo\" SVP" && exit 1
########################################################################
[[ ! $(which ipfs) ]] && echo "=== Installez IPFS KUBO !!" && echo "https://docs.ipfs.io/install/command-line/#official-distributions" && exit 1
[[ ! $(which ipfs) ]] \
&& echo "=== Installez IPFS KUBO puis relancez Install ===" \
&& echo "bash <(wget -qO- https://git.p2p.legal/qo-op/Astroport.ONE/raw/branch/master/kubo_v0.16.0_linux-amd64.install.sh)" \
&& [[ $(uname -p) == "x86_64" ]] \
&& bash <(wget -qO- https://git.p2p.legal/qo-op/Astroport.ONE/raw/branch/master/kubo_v0.16.0_linux-amd64.install.sh)
#### GIT CLONE ###############################################################
[[ ! $(which git) ]] && sudo apt install -y git
echo "=== CLONAGE '~/.zen/Astroport.ONE' depuis https://git.p2p.legal"
mkdir -p ~/.zen
cd ~/.zen
export GIT_SSL_NO_VERIFY=true
git clone --depth 1 https://git.p2p.legal/qo-op/Astroport.ONE.git
# TODO INSTALL FROM IPFS / IPNS
@ -33,17 +40,19 @@ echo "$USER appuyez sur ENTRER."; read TEST; [[ "$TEST" != "" ]] && echo "SORTI
echo "#############################################"
echo "###### IPFS BIOS INSTALL ##############################"
echo "################ CRYPTO TW Ŋ1 PROTOCOL #############"
echo "tail -f /tmp/install.errors.log"
echo "##################################################"
echo ; echo "Mise à jour des dépots de votre distribution..."
[[ $XDG_SESSION_TYPE == 'x11' ]] && sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update
for i in x11-utils xclip zenity; do
for i in x11-utils xclip zenity obs-studio kodi; do
if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
echo ">>> Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
[[ $XDG_SESSION_TYPE == 'x11' ]] && sudo apt install -y $i;
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> /tmp/install.failed.log && continue
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> /tmp/install.errors.log && continue
fi
done
@ -51,11 +60,11 @@ echo "#############################################"
echo "######### PATIENCE ####"
echo "#############################################"
for i in git fail2ban npm netcat-traditional inotify-tools curl net-tools libsodium* python3-pip python3-setuptools python3-wheel python3-dotenv python3-gpg python3-jwcrypto python3-brotli mpack; do
for i in git make fail2ban npm netcat-traditional inotify-tools curl net-tools libsodium* python3-pip python3-setuptools python3-wheel python3-dotenv python3-gpg python3-jwcrypto python3-brotli mpack; do
if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
echo ">>> Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
sudo apt install -y $i
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> /tmp/install.failed.log && continue
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> /tmp/install.errors.log && continue
fi
done
@ -67,7 +76,7 @@ for i in qrencode basez jq bc file gawk yt-dlp ffmpeg dnsutils ntpdate v4l-utils
if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
echo ">>> Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
sudo apt install -y $i
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> /tmp/install.failed.log && continue
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "INSTALL $i FAILED." >> /tmp/install.errors.log && continue
fi
done
@ -78,7 +87,7 @@ echo "#############################################"
##########################################################
echo "### INSTALL TW node.js"
sudo npm install -g tiddlywiki sjcl-cli
[[ $? != 0 ]] && echo "INSTALL tiddlywikiFAILED." && echo "INSTALL tiddlywiki FAILED." >> /tmp/install.failed.log && continue
[[ $? != 0 ]] && echo "INSTALL tiddlywikiFAILED." && echo "INSTALL tiddlywiki FAILED." >> /tmp/install.errors.log && continue
echo "#############################################"
echo "######### PATIENCE #################"
@ -116,9 +125,11 @@ echo 'export PATH=$PATH:$HOME/.local/bin' >> ~/.bashrc && source ~/.bashrc; echo
for i in pip setuptools wheel cryptography==3.4.8 Ed25519 base58 google duniterpy pynacl pgpy pynentry SecureBytes; do
echo ">>> Installation $i <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
sudo python3 -m pip install -U $i
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "python3 -m pip install -U $i FAILED." >> /tmp/install.failed.log && continue
[[ $? != 0 ]] && echo "INSTALL $i FAILED." && echo "python3 -m pip install -U $i FAILED." >> /tmp/install.errors.log && continue
done
cat /tmp/install.errors.log
echo "#############################################"
echo "######### PATIENCE ######################"
echo "#############################################"
@ -148,7 +159,7 @@ echo "=== SETUP IPFS SYSTEM"
#### SETUP JAKLIS ###############################################################
echo "=== SETUP jaklis"
cd $MY_PATH/tools/jaklis
cd ~/.zen/Astroport.ONE/tools/jaklis
sudo ./setup.sh
## XBIAN fail2ban ERROR correction ##
@ -183,22 +194,30 @@ fi
mkdir -p ~/Astroport/film
mkdir -p ~/Astroport/serie
mkdir -p ~/Astroport/anime
mkdir -p ~/Astroport/page
mkdir -p ~/Astroport/web
mkdir -p ~/Astroport/video
echo '${TYPE};${MEDIAID};${YEAR};${TITLE};${SAISON};${GENRES};_IPNSKEY_;${RES};/ipfs/_IPFSREPFILEID_/$URLENCODE_FILE_NAME' > ~/Astroport/ajouter_video.modele.txt
#######################################################################
echo "#############################################"
## https://darktrojan.github.io/openwith/webextension.html"
[[ $XDG_SESSION_TYPE == 'x11' ]] && ~/.zen/Astroport.ONE/open_with_linux.py install; \
echo "# BLOB MODE avec 'OpenWith' depuis votre navigateur !!"
## https://darktrojan.github.io/openwith/webextension.html"
[[ $XDG_SESSION_TYPE == 'x11' ]] && ~/.zen/Astroport.ONE/open_with_linux.py install; \
echo "#############################################" \
echo "# NOURRIR SON BLOB" \
echo "# avec 'OpenWith' depuis votre navigateur !!" \
echo "# https://addons.mozilla.org/firefox/addon/open-with/
# https://chrome.google.com/webstore/detail/open-with/cogjlncmljjnjpbgppagklanlcbchlno"
# https://chrome.google.com/webstore/detail/open-with/cogjlncmljjnjpbgppagklanlcbchlno" \
echo "#############################################" \
echo \
echo " ## $HOME/.zen/Astroport.ONE/ajouter_media.sh ##" \
echo \
echo "#############################################"
### ADD 20h12.sh CRON ###############
$MY_PATH/tools/cron_VRFY.sh ON
~/.zen/Astroport.ONE/tools/cron_VRFY.sh ON
########################################################################
# SUDO permissions
@ -213,6 +232,8 @@ echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/apt-get" | (sudo su -c 'EDITOR="tee" vis
echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/apt" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/apt')
## USED FOR "systemctl restart ipfs"
echo "$USER ALL=(ALL) NOPASSWD:/bin/systemctl" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/systemctl')
## USED FOR "systemctl restart ipfs"
echo "$USER ALL=(ALL) NOPASSWD:/usr/local/bin/youtube-dl" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/youtube-dl')
## brother_ql_print
echo "$USER ALL=(ALL) NOPASSWD:/usr/local/bin/brother_ql_print" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/brother_ql_print')
@ -223,6 +244,7 @@ echo "# ADDING <<<Astroport>>> DESKTOP SHORTCUT"
[[ -d ~/Desktop ]] && sed "s/_USER_/$USER/g" ~/.zen/Astroport.ONE/astroport.desktop > ~/Desktop/astroport.desktop && chmod +x ~/Desktop/astroport.desktop
mkdir -p ~/.zen/tmp
echo "#############################################"
## SYMLINK youtube-dl TO yt-dlp
@ -231,7 +253,7 @@ which youtube-dl
echo "#############################################"
echo "#############################################"
## Desktop install
echo "Astroport.ONE"
echo "Astroport.ONE INSTALL"
end=`date +%s`
echo Execution time was `expr $end - $start` seconds.
echo "#############################################"
@ -253,7 +275,7 @@ Connectez-vous sur https://gchange.fr avec vos identifiants
$(cat ~/.zen/game/players/.current/secret.june)
http://astroport.com
Powered by https://astroport.com
"
# MAIN #
fi

View File

@ -0,0 +1,16 @@
#!/bin/bash
[ $(id -u) -eq 0 ] && echo "LANCEMENT root INTERDIT. Utilisez un simple utilisateur du groupe \"sudo\" SVP" && exit 1
# Download & decompress
mkdir ~/.zen/tmp
cd ~/.zen/tmp
wget https://dist.ipfs.tech/kubo/v0.16.0/kubo_v0.16.0_linux-amd64.tar.gz
tar -xvzf kubo_v0.16.0_linux-amd64.tar.gz
cd kubo
# Install
sudo bash install.sh
# Test & clean
[[ $(ipfs --version) ]] \
&& rm -Rf ~/.zen/tmp/kubo*

View File

@ -18,3 +18,7 @@ for friendnode in $(cat ~/.zen/game/players/*/FRIENDS/*/.astronautens | uniq);
|| echo "UNCONNECTED $friendnode"
ipfs swarm peers | grep $friendnode
done
ipfs stats dht wan
echo "TODO : search for bootstrap and friends better connectivity"

View File

@ -4,7 +4,7 @@
# Version: 0.1
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
################################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`dirname \"$0\"`"
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
myIP=$(hostname -I | awk '{print $1}' | head -n 1)
isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
@ -14,11 +14,16 @@ ME="${0##*/}"
TS=$(date -u +%s%N | cut -b1-13)
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
echo "(RE)STARTING 12345.sh"
###################################################
killall 12345.sh; killall "_12345.sh"; killall nc; killall tail; mkdir -p ~/.zen/tmp
killall 12345.sh; killall "_12345.sh"; killall nc
mkdir -p ~/.zen/tmp
~/.zen/Astroport.ONE/12345.sh > ~/.zen/tmp/12345.log &
tail -f ~/.zen/tmp/12345.log &
echo "1234 PORT SPIDER http://$myIP:1234"
sleep 1
echo "HTTP API : http://$myIP:1234"
cat ~/.zen/tmp/12345.log
echo "API DEBUG : tail -f ~/.zen/tmp/12345.log"
###################################################
echo '
@ -45,8 +50,8 @@ IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
echo 'PRESS ENTER... '; read
## CREATE AND OR CONNECT USER
PS3='Créez VISA ou connectez-vous à votre compte Astronaute ___ '
players=("NOUVEAU VISA" "IMPORT GCHANGE" $(ls ~/.zen/game/players 2>/dev/null))
PS3='Astronaute connectez votre PLAYER ___ '
players=("NOUVEAU VISA" "IMPORT PLAYER" $(ls ~/.zen/game/players 2>/dev/null))
## MULTIPLAYER
select fav in "${players[@]}"; do
@ -57,12 +62,14 @@ echo 'PRESS ENTER... '; read
echo "Astronaute $fav bienvenue dans le jeu de terraformation forêt jardin MadeInZion"
exit
;;
"IMPORT GCHANGE")
echo "Saisissez votre 'identifiant Gchange'"
"IMPORT PLAYER")
echo "'Identifiant'"
read SALT
echo "Saisissez votre 'mot de passe Gchange'"
echo "'Mot de passe'"
read PEPPER
${MY_PATH}/tools/VISA.new.sh "$SALT" "$PEPPER"
echo "'Adresse Email'"
read EMAIL
${MY_PATH}/tools/VISA.new.sh "$SALT" "$PEPPER" "$EMAIL"
fav=$(cat ~/.zen/tmp/PSEUDO 2>/dev/null) && rm ~/.zen/tmp/PSEUDO
echo "Astronaute $fav heureux de vous acceuillir"
exit
@ -79,25 +86,24 @@ echo 'PRESS ENTER... '; read
PLAYER=$fav
rm -f ~/.zen/game/players/.current
ln -s ~/.zen/game/players/$PLAYER ~/.zen/game/players/.current
pass=$(cat ~/.zen/game/players/.current/.pass 2>/dev/null)
pass=$(cat ~/.zen/game/players/$PLAYER/.pass 2>/dev/null)
########################################## DEVEL
echo "Saisissez votre PASS -- UPGRADE CRYPTO FREELY -- $pass" && read pass
echo "Saisissez votre PASS -- UPGRADE CRYPTO FREELY -- $pass" && read PASS
## DECODE CURRENT PLAYER CRYPTO
echo "********* DECODAGE SecuredSocketLayer *********"
rm -f ~/.zen/tmp/${PLAYER}.dunikey 2>/dev/null
openssl enc -aes-256-cbc -d -in "$HOME/.zen/game/players/.current/enc.secret.dunikey" -out "$HOME/.zen/tmp/${PLAYER}.dunikey" -k $pass 2>&1>/dev/null
[[ ! $? == 0 ]] && echo "ERROR. MAUVAIS PASS. EXIT" && exit 1
# echo "********* DECODAGE SecuredSocketLayer *********"
# rm -f ~/.zen/tmp/${PLAYER}.dunikey 2>/dev/null
# openssl enc -aes-256-cbc -d -in "$HOME/.zen/game/players/${PLAYER}/enc.secret.dunikey" -out "$HOME/.zen/tmp/${PLAYER}.dunikey" -k $pass 2>&1>/dev/null
[[ $PASS != $pass ]] && echo "ERROR. MAUVAIS PASS. EXIT" && exit 1
rm -f ~/.zen/game/players/.current
ln -s ~/.zen/game/players/$PLAYER ~/.zen/game/players/.current
echo "________LOGIN OK____________";
echo
echo "DECHIFFRAGE CLEFS ASTRONAUTE"
echo "Votre Pass Astroport.ONE : $(cat ~/.zen/game/players/.current/.pass 2>/dev/null)"
G1PUB=$(cat ~/.zen/tmp/${PLAYER}.dunikey | grep 'pub:' | cut -d ' ' -f 2)
echo "Votre Pass Astroport.ONE : $(cat ~/.zen/game/players/$PLAYER/.pass 2>/dev/null)"
G1PUB=$(cat ~/.zen/game/players/$PLAYER/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
[ ! ${G1PUB} ] && echo "ERROR. MAUVAIS PASS. EXIT" && exit 1
echo "Clef Publque Astronaute : $G1PUB"
@ -105,7 +111,7 @@ echo "ENTREE ACCORDEE"
echo
ASTRONAUTENS=$(ipfs key list -l | grep -w "$PLAYER" | cut -d ' ' -f 1)
echo "$(cat ~/.zen/game/players/.current/.pseudo 2>/dev/null) TW/Moa"
echo "$(cat ~/.zen/game/players/${PLAYER}/.pseudo 2>/dev/null) TW/Moa"
echo "http://$myIP:8080/ipns/$ASTRONAUTENS"
echo "Activation Réseau P2P Astroport !"
@ -121,7 +127,7 @@ select fav in "${choices[@]}"; do
"EXPORTER VISA")
echo "EXPORT IDENTITE ASTRONAUTE"
du -h ~/.zen/game/players/.current/
du -h ~/.zen/game/players/$PLAYER/
echo "MANUAL BACKUP ZIP ~/.zen/game/players/$PLAYER/"
## EXPORT TW + VOEUX IPNS KEYS
@ -138,11 +144,13 @@ select fav in "${choices[@]}"; do
ipfs key rm $voeu
[[ $voeu != "" ]] && rm -Rf ~/.zen/game/world/$voeu
done
echo "REMOVE GCHANGE PROFILE"
$MY_PATH/tools/jaklis/jaklis.py -k $HOME/.zen/game/players/$PLAYER/secret.dunikey -n https://data.gchange.fr erase
echo "REMOVE CESIUM+"
$MY_PATH/tools/jaklis/jaklis.py -k $HOME/.zen/game/players/$PLAYER/secret.dunikey -n https://g1.data.e-is.pro erase
echo "rm -Rf ~/.zen/game/players/$PLAYER"
$MY_PATH/tools/jaklis/jaklis.py -k $HOME/.zen/tmp/${PLAYER}.dunikey -n https://data.gchange.fr erase
# ~/.zen/astrXbian/zen/jaklis/jaklis.py -k $HOME/.zen/tmp/${PLAYER}.dunikey -n https://g1.data.e-is.pro erase
rm -Rf ~/.zen/game/players/$PLAYER
break
;;
@ -173,7 +181,7 @@ select fav in "${choices[@]}"; do
;;
"IMPRIMER QRVOEU")
${MY_PATH}/tools/VOEUX.print.sh
${MY_PATH}/tools/VOEUX.print.sh $PLAYER
;;
"QUITTER")

View File

@ -1 +1 @@
[{"title":"$:/ipfs/saver/api/http/local/5001","tags":"$:/ipfs/core $:/ipfs/saver/api","text":"http://127.0.0.1:5001"}]
[{"title":"$:/ipfs/saver/api/http/local/5001","tags":"$:/ipfs/core $:/ipfs/saver/api","text":"http://ipfs.localhost:5001"}]

View File

@ -1 +1 @@
[{"title":"$:/ipfs/saver/gateway/local/myip","tags":"$:/ipfs/core $:/ipfs/saver/gateway","text":"http://127.0.0.1:8080"}]
[{"title":"$:/ipfs/saver/gateway/local/myip","tags":"$:/ipfs/core $:/ipfs/saver/gateway","text":"http://ipfs.localhost:8080"}]

View File

@ -42,13 +42,13 @@ html {
<h1>Astroport</h1>
<h2>Internet Reboot !<br>Inscrivez-vous<br>
<form id="formlink" action = "http://127.0.0.1:1234" method = "GET">
<form id="formlink" action = "http://127.0.0.1:1234" method = "GET" enctype="application/x-www-form-urlencoded">
<br>
<b>Associez 2 phrases clefs et votre adresse email</b></br></br>
<b>Activez votre BunkerBOX</b></br></br>
Phrase 1 : <input name=salt value=''></br>
Phrase 2 : <input name=pepper value=''></br></br>
Bitswap Ŋ1 (délégation de clef à 20h12) : <input type="checkbox" id="g1pub" name="g1pub" checked></br>
- Email -</br><input name=email value=''></br></br>
URL : <input name=g1pub value=''></br>
Email : <input name=email value=''></br></br>
<input type='submit' value='(☼‿‿☼)'>
</form>
</h2>
@ -60,7 +60,7 @@ html {
<article>
<div class="row justify-center">
<h1 class="video-title">
<a href="https://git.p2p.legal/qo-op/Astroport.ONE" target="code">'ASTROŊAUTE'. Insérez vos clefs. Activez le niveau Ŋ1. Explorez les toiles confiances.</a>. <br>
<a href="https://git.p2p.legal/qo-op/Astroport.ONE" target="code">'ASTROŊAUTE' : Astroport.ONE - BunkerBOX edition -</a>. <br>
<a target="code" href="http://opencollective.com/monnaie-libre/projects/bunker-box">Copiez, conservez, partagez, diffusez vos chaines multimédia et json dans IPFS, entre amis!<br>
Prenez possession de votre TW. Rendez in-censurable, in-arrêtable la liberté d'expression.</a>
</h1>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -31,61 +31,68 @@ PSEUDO=$(cat ~/.zen/game/players/${PLAYER}/.pseudo 2>/dev/null)
mkdir -p ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/
## Directory is created, So this script already run once.
if [[ ! -d ~/.zen/game/players/${PLAYER}/FRIENDS/ ]]; then
## VERIFY IT HAS ALREADY RUN
if [[ ! -s ~/.zen/game/players/${PLAYER}/ipfs/cesium.json ]]; then
## GET GCHANGE PROFIL
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" get > ~/.zen/game/players/${PLAYER}/ipfs/gchange.json
NAME=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.title')
## KEEPING ALREADY EXISTING PROFILE DATA
NAME=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.title' 2>/dev/null)
[[ ! $NAME || $NAME == "null" ]] && NAME="Astronaute ${PSEUDO}"
DESCR=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.description')
[[ ! $DESCR || $DESCR == "null" ]] && DESCR="Astronaute explorateur Ŋ1"
DESCR=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.description' 2>/dev/null)
[[ ! $DESCR || $DESCR == "null" ]] && DESCR="ASTROPORT Ŋ1 https://g1jeu.ml"
VILLE=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.city')
VILLE=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.city' 2>/dev/null)
[[ ! $VILLE || $VILLE == "null" ]] && VILLE="Paris, 75012"
ADRESSE=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.address')
ADRESSE=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.address' 2>/dev/null)
[[ ! $ADRESSE || $ADRESSE == "null" ]] && ADRESSE="Elysée"
# POSITION=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.geoPoint')
SITE=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.socials')
# SITE=$(cat ~/.zen/game/players/${PLAYER}/ipfs/gchange.json | jq -r '.socials' 2>/dev/null)
########################################################################
echo "${PLAYER} GCHANGE+ PROFILE https://gchange.fr"
echo "set -n "${NAME}" -d "${DESCR}" -v "${VILLE}" -a "${ADRESSE}""
# echo "set -n "${NAME}" -d "${DESCR}" -v "${VILLE}" -a "${ADRESSE}""
########################################################################
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" set -n "${NAME}" -d "${DESCR}" -v "${VILLE}" -a "${ADRESSE}" -s "http://tube.copylaradio.com:8080/ipns/$ASTRONAUTENS" #GCHANGE+
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" set -n "${NAME}" -d "${DESCR}" -v "${VILLE}" -a "${ADRESSE}" -s "https://ipfs.copylaradio.com/ipns/$ASTRONAUTENS" #GCHANGE+
[[ ! $? == 0 ]] && echo "GCHANGE PROFILE CREATION FAILED"
## GET CESIUM
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://g1.data.presles.fr" get > ~/.zen/game/players/${PLAYER}/ipfs/cesium.json
## SET CESIUM WALLET
########################################################################
echo "${PLAYER} CESIUM+ PROFILE https://demo.cesium.app/#/app/wot/lg?q=$G1PUB"
########################################################################
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://g1.data.presles.fr" set -n "${NAME}" -d "${DESCR}" -v "${VILLE}" -a "${ADRESSE}" --s "http://127.0.0.1:8080/ipns/$ASTRONAUTENS" #CESIUM+
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://g1.data.e-is.pro" set -n "${NAME}" -d "${DESCR}" -v "${VILLE}" -a "${ADRESSE}" --s "http://ipfs.localhost:8080/ipns/$ASTRONAUTENS" #CESIUM+
[[ ! $? == 0 ]] && echo "CESIUM PROFILE CREATION FAILED"
fi
## GET PROFILE BACK
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" get > ~/.zen/game/players/${PLAYER}/ipfs/gchange.json
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://g1.data.e-is.pro" get > ~/.zen/game/players/${PLAYER}/ipfs/cesium.json
########################################################################
echo "########################################################################"
echo "SCANNING ${PLAYER} - $G1PUB - Gchange FRIENDS"
echo "### ${PLAYER} ##########################################################"
echo "SCANNING - $G1PUB Gchange FRIENDS"
echo "########################################################################"
################## CHECKING WHO GAVE ME STARS
################## BOOTSTRAP LIKES THEM BACK
################## SEND ipfstryme MESSAGES to FRIENDS
rm -f ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/my_star_level
## Getting Gchange liking_me list
echo "Getting received stars"
echo "Checking received stars"
################################## JAKLIS PLAYER stars
~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \
~/.zen/Astroport.ONE/tools/jaklis/jaklis.py \
-k ~/.zen/game/players/${PLAYER}/secret.dunikey \
-n "https://data.gchange.fr" stars > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/received_stars.json
cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/received_stars.json | jq -r '.likes[].issuer' | uniq > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/liking_me
echo "cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/received_stars.json | jq -r"
[[ ! $(cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/received_stars.json | jq -r '.likes[].issuer') ]] && echo "Niveau Ŋ0 - Activez le niveau de confiance Ŋ1" && exit 0
cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/received_stars.json | jq -r '.likes[].issuer' | sort | uniq > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/liking_me
# echo "cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/received_stars.json | jq -r" # DEBUG
for liking_me in $(cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/liking_me | sort | uniq);
do
@ -97,14 +104,13 @@ do
echo "TW ? http://tube.copylaradio.com:8080/ipns/$ASTRONAUTENS "
##### CHECKING IF WE LIKE EACH OTHER Ŋ1 LEVEL
echo "Receiving Stars : cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/${liking_me}.Gstars.json | jq -r"
################################## JAKLIS LIKING_ME stars
~/.zen/Astroport.ONE/tools/timeout.sh -t 20 \
~/.zen/Astroport.ONE/tools/jaklis/jaklis.py \
-k ~/.zen/game/players/${PLAYER}/secret.dunikey \
-n "https://data.gchange.fr" \
stars -p ${liking_me} > ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/${liking_me}.Gstars.json
echo "Got Stars - DEBUG - cat ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/${liking_me}.Gstars.json | jq -r"
## ZOMBIE PROTECTION
[[ "$?" == "0" && ! -s ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/${liking_me}.Gstars.json ]] && rm -Rf ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me} && echo "${liking_me} is a ZOMBIE..." && continue
@ -127,30 +133,54 @@ do
cp ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/${liking_me}.Gstars.json ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/ && rm -f ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/${liking_me}.Gstars.json
echo "$my_star_level" > ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/stars.level && echo "***** $my_star_level STARS *****"
## GET FRIEND GCHANGE PROFILE
${MY_PATH}/timeout.sh -t 20 \
${MY_PATH}/jaklis/jaklis.py get \
-p ${liking_me} > ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/gchange.json
FRIENDTITLE=$(cat ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/gchange.json | jq -r '.title')
## GET FRIEND TW !!
echo "Getting latest online TW..."
echo "Getting $FRIENDTITLE latest online TW..."
YOU=$(ipfs swarm peers >/dev/null 2>&1 && echo "$USER" || ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1);
LIBRA=$(head -n 2 ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 2)
echo "$LIBRA/ipns/$ASTRONAUTENS"
echo "http://$myIP:8080/ipns/$ASTRONAUTENS ($YOU)"
[[ $YOU ]] && ipfs --timeout 12s cat /ipns/$ASTRONAUTENS > ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html
[[ ! -s ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html ]] && curl -m 12 -so ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html "$LIBRA/ipns/$ASTRONAUTENS"
[[ $YOU ]] && ipfs --timeout 17s cat /ipns/$ASTRONAUTENS > ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html
[[ ! -s ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html ]] && curl -m 17 -so ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html "$LIBRA/ipns/$ASTRONAUTENS"
## PLAYER TW EXISTING ?
if [ ! -s ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html ]; then
# # # # # # # # # # # # # # #
## AUCUN VISA ASTRONAUTE ENVOYER UN MESSAGE PAR GCHANGE
echo "AUCUN TW ACTIF. ENVOYONS LUI UN MESSAGE..."
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" send -d "${liking_me}" -t "SALUT. Je suis sur Astroport. Tu viens." -m "Active ton TW avec moi : http://libra.copylaradio.com:1234 - DEV MODE -"
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" send -d "${liking_me}" -t "HEY BRO !" -m ">>> (◕‿‿◕) <<< https://ipfs.copylaradio.com/ipns/$ASTRONAUTENS >>> (◕‿‿◕) <<< ACTIVE TON TW ICI : https://astroport.copylaradio.com"
else
echo "COOL MON AMI PUBLIE SUR IPFS"
ls -al ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html
# # # # # # # # # # # # # # # TODO
# CHECK Dessin de Moa ?? (DIS)CONNECT PLAYERS
# # # # # # # # # # # # # # #
echo "COOL MON AMI EST SUR IPFS"
FTW="~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/index.html"
tiddlywiki --load ${FTW} --output ~/.zen/tmp --render '.' "${liking_me}.MadeInZion.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'MadeInZion'
[[ ! -s ~/.zen/tmp/${liking_me}.MadeInZion.json ]] && echo "~~~ BROKEN $FTW (☓‿‿☓) ~~~" && continue
FPLAYER=$(cat ~/.zen/tmp/${liking_me}.MadeInZion.json | jq -r .[].player)
[[ ! $FPLAYER ]] && echo "NO PLAYER = BAD MadeInZion Tiddler" && continue
## CREATING 30 DAYS RSS STREAM
tiddlywiki --load ${FTW} \
--output ~/.zen/game/players/${PLAYER}/ipfs --render '.' "${FPLAYER}.rss.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[days:created[-30]]'
[[ ! -s ~/.zen/game/players/${PLAYER}/ipfs/${FPLAYER}.rss.json ]] && echo "NO ${FPLAYER} RSS - CONTINUE -" && continue
## ADD THIS FPLAYER RSS FEED INTO PLAYER TW
## PUSH DATA TO 12345 SWARM KEY
mkdir -p ~/.zen/tmp/${IPFSNODEID}/rss/${PLAYER}
cp -f ~/.zen/game/players/${PLAYER}/ipfs/${FPLAYER}.rss.json ~/.zen/tmp/${IPFSNODEID}/rss/${PLAYER}/${FPLAYER}.rss.json
## TODO INSERT INTO $:/plugins/astroport/lightbeams/state/subscriptions
echo "APP=RSS : PLAYER FPLAYER RSS PUBLICATION READY"
echo "~/.zen/tmp/${IPFSNODEID}/rss/${PLAYER}/${FPLAYER}.rss.json"
fi
@ -158,26 +188,21 @@ do
# SCRAPING DONNE LE BON COIN
# https://www.leboncoin.fr/recherche?text=donne&locations=Toulouse__43.59743304757555_1.4471155185604894_10000_5000&owner_type=private&sort=time&donation=1
## Get Ŋ2 LEVEL
echo "(°▃▃°) (°▃▃°) (°▃▃°) Ŋ2 scraping ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/friend_of_friend.json"
for nid in $(cat ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/${liking_me}.Gstars.json | jq -r '.likes[].issuer');
do
echo "Ami(s) de cet Ami $linking_me : $nid"
friend_of_friend=$(cat ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/${liking_me}.Gstars.json | jq -r '.likes[] | select(.issuer | strings | test("'$nid'"))')
echo "$friend_of_friend" | jq -r > ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/friend_of_friend.json
echo "$friend_of_friend" | jq -r > ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/FoF_$nid.json
done
echo "***** Keep G1/IPNS conversion *****"
echo ${G1PUB} > ~/.zen/game/players/${PLAYER}/FRIENDS/${liking_me}/${ASTRONAUTENS}
else
echo "$my_star_level ETOILES RECUES ($gscore). Relayons sa politesse."
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" send -d "${G1PUB}" -t "$my_star_level ETOILES RECUES ($gscore)" -m "https://www.gchange.fr/#/app/user/${liking_me}/ VOTRE RETOUR ?"
echo "LIKING LATER."
echo "ARE WE BRO?"
$MY_PATH/jaklis/jaklis.py -k ~/.zen/game/players/${PLAYER}/secret.dunikey -n "https://data.gchange.fr" send -d "${G1PUB}" -t "Bro ?" -m "https://www.gchange.fr/#/app/user/${liking_me}/"
fi

View File

@ -1,56 +1,65 @@
#!/bin/bash
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
ASTRONAUTENS="$1"
MOATS="$2"
[[ ! $ASTRONAUTENS || ! $MOATS ]] && echo "ASTRONAUTENS & MOATS needed" && exit 1
[[ ! $ASTRONAUTENS || ! $MOATS ]] && echo "${ME} : ASTRONAUTENS & MOATS needed" && exit 1
start=$(date +%s)
IPFSNODEID=$(ipfs id -f='<id>\n') || ( echo "IPFSNODEID MISSING" && exit 1 )
IPFSNODEID=$(ipfs id -f='<id>\n') || ( echo "${ME} : IPFSNODEID MISSING" && exit 1 )
TUBE=$(head -n 2 ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 3)
## GETTING LAST TW via IPFS
echo "ipfs --timeout 12s cat /ipns/${ASTRONAUTENS}"\
echo "${ME} : IPFS : ipfs --timeout 12s cat /ipns/${ASTRONAUTENS}"\
&& ipfs --timeout 12s cat /ipns/${ASTRONAUTENS} > ~/.zen/tmp/coucou/${MOATS}.astroindex.html
## GETTING LAST TW via HTTP
[[ ! -s ~/.zen/tmp/coucou/${MOATS}.astroindex.html ]] \
&& echo "$TUBE/ipns/${ASTRONAUTENS}" \
&& curl -m 12 -so ~/.zen/tmp/coucou/${MOATS}.astroindex.html "$TUBE/ipns/${ASTRONAUTENS}"
|| curl -m 1 -so ~/.zen/tmp/${MOATS}.html "$TUBE/ipns/${ASTRONAUTENS}"
&& echo "${ME} : WWW : $TUBE/ipns/${ASTRONAUTENS}" \
&& curl -m 12 -so ~/.zen/tmp/coucou/${MOATS}.astroindex.html "$TUBE/ipns/${ASTRONAUTENS}" \
|| curl -m 1 -so ~/.zen/tmp/${MOATS}.html "$TUBE/ipns/${ASTRONAUTENS}" ## Ask caching
### GOT TW !!
if [[ -s ~/.zen/tmp/coucou/${MOATS}.astroindex.html ]]; then
echo "GOT TW !!"
echo "${ME} : GOT TW !!"
tiddlywiki --load ~/.zen/tmp/coucou/${MOATS}.astroindex.html --output ~/.zen/tmp --render '.' ${MOATS}'MadeInZion.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'MadeInZion'
[[ ! -s ~/.zen/tmp/${MOATS}MadeInZion.json ]] && echo "BAD TW (☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 1
[[ ! -s ~/.zen/tmp/${MOATS}MadeInZion.json ]] && echo "${ME} : BAD TW (☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 1
PLAYER=$(cat ~/.zen/tmp/${MOATS}MadeInZion.json | jq -r .[].player)
## EMAIL STYLE
if [[ "${PLAYER}" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]]; then
echo "VALID PLAYER (✜‿‿✜) $PLAYER "
echo "${ME} : VALID PLAYER (✜‿‿✜) $PLAYER "
tiddlywiki --load ~/.zen/tmp/coucou/${MOATS}.astroindex.html --output ~/.zen/tmp --render '.' ${MOATS}'Astroport.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'Astroport'
[[ ! -s ~/.zen/tmp/${MOATS}Astroport.json ]] && echo "BAD TW (☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 1
espeak "Hello. $(cat ~/.zen/tmp/${MOATS}Astroport.json | jq -r .[].pseudo) Happy to Help you."
[[ ! -s ~/.zen/tmp/${MOATS}Astroport.json ]] && echo "${ME} : BAD TW (☓‿‿☓) Execution time was "`expr $(date +%s) - $start` seconds. && exit 1
## EXPORT PLAYER VALUE TO CALLING SCRIPT
export PLAYER=$PLAYER
else
echo "BAD PLAYER"
echo "KO ${PLAYER} : (#__#) '" && exit 1
echo "${ME} : BAD PLAYER"
echo "${ME} : KO ${PLAYER} : (#__#) '" && exit 1
fi
## IN CACHE
echo "CACHING ~/.zen/tmp/$IPFSNODEID/$PLAYER/"
echo "${ME} : CACHING ~/.zen/tmp/$IPFSNODEID/$PLAYER/"
mkdir -p ~/.zen/tmp/$IPFSNODEID/$PLAYER/
cp -f ~/.zen/tmp/coucou/${MOATS}.astroindex.html ~/.zen/tmp/$IPFSNODEID/$PLAYER/index.html
### NO TW !!
else
echo "(-__-) NOTHING (-__-)"
echo "${ME} : (-__-) NOTHING (-__-)"
fi
echo "TW.cache.sh (0‿‿0) Execution time was "`expr $(date +%s) - $start` seconds.
dur=`expr $(date +%s) - $start`
[[ $XDG_SESSION_TYPE == 'x11' ]] && espeak "$dur seconds for $(cat ~/.zen/tmp/${MOATS}Astroport.json | jq -r .[].pseudo) TW caching"
echo "${ME} : (0‿‿0) Execution time was $dur seconds."
exit 0

View File

@ -5,90 +5,102 @@
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
################################################################################
################################################################################
#
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
! ipfs swarm peers >/dev/null 2>&1 && echo "Lancez 'ipfs daemon' SVP" && exit 1
################################################################################
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
mkdir -p ~/.zen/tmp/${MOATS}
SALT="$1"
PEPPER="$2"
PLAYER="$3"
PSEUDO="$4"
## Fill UP TW with VIDEO URL
URL="$5"
################################################################################
YOU=$(ipfs swarm peers >/dev/null 2>&1 && echo "$USER" || ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1);
LIBRA=$(head -n 2 ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 2)
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
################################################################################
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
################################################################################
myIP=$(hostname -I | awk '{print $1}' | head -n 1)
isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
[[ ! $myIP || $isLAN ]] && myIP="ipfs.localhost"
################################################################################
## LOCAL
## CHECK if PLAYER resolve any ASTRONAUTENS
[[ ${PLAYER} ]] && ASTRONAUTENS=$(ipfs key list -l | grep -w "${PLAYER}" | cut -d ' ' -f 1)
[[ ${ASTRONAUTENS} ]] && echo "IPNS $PLAYER EXISTANT http://$myIP:8080/${ASTRONAUTENS} !! DO NOTHING - EXIT -" && exit 0
## Chargement TW !!!
if [[ $SALT != "" && PEPPER != "" ]]; then
ASTRO=""
echo "$SALT"
echo "$PEPPER"
ipfs key rm gchange 2>/dev/null
rm -f ~/.zen/tmp/gchange.key
${MY_PATH}/keygen -t ipfs -o ~/.zen/tmp/gchange.key "$SALT" "$PEPPER"
ASTRONAUTENS=$(ipfs key import gchange -f pem-pkcs8-cleartext ~/.zen/tmp/gchange.key )
echo "/ipns/${ASTRONAUTENS}"
mkdir -p ~/.zen/tmp/TW
rm -f ~/.zen/tmp/TW/index.html
${MY_PATH}/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/player.key "$SALT" "$PEPPER" 2>/dev/null
ASTRONAUTENS=$(ipfs key import ${MOATS} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/player.key 2>/dev/null)
# echo "/ipns/${ASTRONAUTENS}"
## GLOBAL
## GETTING LAST TW via IPFS or HTTP GW
[[ $YOU ]] && echo "http://$myIP:8080/ipns/${ASTRONAUTENS} ($YOU)" && ipfs --timeout 30s cat /ipns/${ASTRONAUTENS} > ~/.zen/tmp/TW/index.html
[[ ! -s ~/.zen/tmp/TW/index.html ]] && echo "$LIBRA/ipns/${ASTRONAUTENS}" && curl -m 30 -so ~/.zen/tmp/TW/index.html "$LIBRA/ipns/${ASTRONAUTENS}"
ipfs key rm ${MOATS} 2>/dev/null ## CLEANING
if [ ! -s ~/.zen/tmp/TW/index.html ]; then
rm -f ~/.zen/tmp/TW/index.html
echo "Aucun ancien TW détecté! CREATION DU TW Astronaute" ## Compte Gchange
mkdir -p ~/.zen/tmp/${MOATS}/TW
## GETTING LAST TW via IPFS or HTTP GW
[[ $YOU ]] \
&& ipfs --timeout 20s cat /ipns/${ASTRONAUTENS} > ~/.zen/tmp/${MOATS}/TW/index.html
[[ ! -s ~/.zen/tmp/${MOATS}/TW/index.html ]] \
&& curl -m 20 -so ~/.zen/tmp/${MOATS}/TW/index.html "$LIBRA/ipns/${ASTRONAUTENS}"
#############################################
## AUCUN RESULTAT
if [ ! -s ~/.zen/tmp/${MOATS}/TW/index.html ]; then
rm -f ~/.zen/tmp/${MOATS}/TW/index.html
echo "CREATION TW Astronaute" ## Nouveau Compte Astronaute
else
#############################################
# TW : DATA TESTING & CACHE
rm -f ~/.zen/tmp/${MOATS}/Astroport.json
tiddlywiki --load ~/.zen/tmp/${MOATS}/TW/index.html --output ~/.zen/tmp/${MOATS} --render '.' 'Astroport.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'Astroport'
ASTROPORT=$(cat ~/.zen/tmp/${MOATS}/Astroport.json | jq -r .[].astroport)
# EXTRACTION & UPDATE myIP
rm -f ~/.zen/tmp/miz.json
tiddlywiki --load ~/.zen/tmp/TW/index.html --output ~/.zen/tmp --render '.' 'miz.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'MadeInZion'
OLDIP=$(cat ~/.zen/tmp/miz.json | jq -r .[].secret)
IPNSTAIL=$(echo $ASTROPORT | rev | cut -f 1 -d '/' | rev)
echo "TW ASTROPORT GATEWAY : ${ASTROPORT}"
[[ $IPNSTAIL == $IPFSNODEID ]] \
&& echo "UPDATING $PLAYER LOCAL CACHE ~/.zen/game/players/$PLAYER/ipfs/moa" \
&& mkdir -p ~/.zen/game/players/$PLAYER/ipfs/moa \
&& cp ~/.zen/tmp/${MOATS}/TW/index.html ~/.zen/game/players/$PLAYER/ipfs/moa/ \
|| echo "PLAYER on $ASTROPORT Station"
echo "TW OFFICIAL GATEWAY : http://$OLDIP:8080//ipns/${ASTRONAUTENS}"
if [[ ! -d ~/.zen/game/players/$PLAYER/ipfs/moa ]]; then
echo "UPDATE $PLAYER LOCAL COPY ~/.zen/game/players/$PLAYER/ipfs/moa"
mkdir -p ~/.zen/game/players/$PLAYER/ipfs/moa
[[ "$myIP" == "$OLDIP" ]] && cp ~/.zen/tmp/TW/index.html ~/.zen/game/players/$PLAYER/ipfs/moa/
fi
# DO NOT CONTINUE
echo "VISA ALREADY EXISTS"
echo "VISA ALREADY EXISTING"
rm -Rf ~/.zen/tmp/${MOATS}
exit 1
fi
fi
################################################################################
TWMODEL="/ipfs/bafybeihk2xserdii7wcnvojbyuyxx6qzlcgtzvraeucpyrhcfwy2ssvbhu"
##################################################### # NEW PLAYER ###############
################################################################################
echo "=============================================
MadeInZion DIPLOMATIC PASSPORT
ASTROPORT DIPLOMATIC PASSPORT - MadeInZion VISA -
=============================================
A cryptographic key pair to control your P2P Digital Life.
Solar Punk garden forest terraforming game.
A Cryptographic Key to control your INTERNET
Adventure & Exploration P2P Terraforming Game.
=============================================
Bienvenue 'Astronaute'"; sleep 1
echo "Création de votre PSEUDO, votre PLAYER, avec PASS (6 chiffres)"
################################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
! ipfs swarm peers >/dev/null 2>&1 && echo "Lancez 'ipfs daemon' SVP" && exit 1
echo "Création de votre PLAYER, votre PSEUDO et PASS (6 chiffres)"
[[ $SALT == "" ]] && SALT=$(${MY_PATH}/diceware.sh 4 | xargs)
echo "-> SALT : $SALT"
@ -105,7 +117,7 @@ PSEUDO=${PSEUDO%%[0-9]*}
# PSEUDO=${PSEUDO,,} #lowercase
[[ ! $PLAYER ]] && PLAYER=${PSEUDO}${RANDOM:0:2}$(${MY_PATH}/diceware.sh 1 | xargs)${RANDOM:0:2} \
&& echo "$PLAYER ! A quelle adresse email vous joindre ?" && read OPLAYER && [[ $OPLAYER ]] && PLAYER=$OPLAYER
&& echo "$PLAYER ! VOTRE EMAIL SVP ?" && read OPLAYER && [[ $OPLAYER ]] && PLAYER=$OPLAYER
[[ -d ~/.zen/game/players/$PLAYER ]] && echo "FATAL ERROR $PLAYER NAME COLLISION. TRY AGAIN." && exit 1
[[ ! $PSEUDO ]] && PSEUDO=$PLAYER
@ -163,25 +175,30 @@ G1PUB=$(cat /tmp/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
PASsec=$(cat /tmp/enc.${PSEUDO}.sec | base58) && rm -f /tmp/${PSEUDO}.sec
qrencode -s 12 -o $HOME/.zen/game/players/$PLAYER/QRsec.png $PASsec
echo "Clef publique G1 est : $G1PUB"; sleep 1
echo "Votre Clef publique G1 est : $G1PUB"; sleep 1
### INITALISATION WIKI dans leurs répertoires de publication IPFS
############ TODO améliorer templates, sed, ajouter index.html, etc...
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
echo
echo "***** Gestion du Canal TW Astronaute $PLAYER *****"
echo "***** Activation du Canal TW Astronaute $PLAYER *****"
mkdir -p ~/.zen/game/players/$PLAYER/ipfs/moa/
[[ -f ~/.zen/tmp/TW.html ]] && cp ~/.zen/tmp/TW.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html && echo "Restoring TW...." \
|| cp ~/.zen/Astroport.ONE/templates/twdefault.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
cp ~/.zen/Astroport.ONE/templates/twdefault.html ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~_BIRTHDATE_~${MOATS}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
# GET OLD VALUE
# INSERT ASTROPORT ADRESS
tiddlywiki --load ~/.zen/game/players/$PLAYER/ipfs/moa/index.html --output ~/.zen/tmp --render '.' 'Astroport.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'Astroport'
ASTROPORT=$(cat ~/.zen/tmp/Astroport.json | jq -r .[].astroport)
sed -i "s~$ASTROPORT~/ipns/${IPFSNODEID}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
# TW CHAIN INIT WITH TWMODEL
sed -i "s~_MOATS_~${MOATS}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~_CHAIN_~${TWMODEL}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~_URL_~${URL}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
# INSERT PLAYER DATA
sed -i "s~_PLAYER_~${PLAYER}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~_PSEUDO_~${PSEUDO}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~_WISHKEY_~${G1PUB}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
@ -195,25 +212,27 @@ G1PUB=$(cat /tmp/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
# La Clef IPNS porte comme nom G1PUB
sed -i "s~_MEDIAKEY_~${PLAYER}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~k2k4r8kxfnknsdf7tpyc46ks2jb3s9uvd3lqtcv9xlq9rsoem7jajd75~${ASTRONAUTENS}~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~ipfs.infura.io~tube.copylaradio.com~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
sed -i "s~ipfs.infura.io~ipfs.copylaradio.com~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html # USELESS ?!
#
sed -i "s~127.0.0.1~$myIP~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html # 8080 & 5001 BEING THE RECORDING GATEWAY (WAN or ipfs.localhost)
#
echo "# CRYPTO ENCODING myIP -> CRYPTIP"
echo "# CRYPTO ENCODING secret.dunikey -> TW _SECRET_ "
echo $myIP > ~/.zen/tmp/myIP
$MY_PATH/natools.py encrypt -p $G1PUB -i $HOME/.zen/tmp/myIP -o $HOME/.zen/tmp/myIP.$G1PUB.enc
CRYPTIP=$(cat ~/.zen/tmp/myIP.$G1PUB.enc | base16)
sed -i "s~_SECRET_~$CRYPTIP~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
$MY_PATH/natools.py encrypt -p $G1PUB -i $HOME/.zen/game/players/$PLAYER/secret.dunikey -o $HOME/.zen/tmp/secret.dunikey.$G1PUB.enc
ENCODING=$(cat ~/.zen/tmp/secret.dunikey.$G1PUB.enc | base16)
sed -i "s~_SECRET_~$ENCODING~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html
#
echo "# CRYPTO DECODING CRYPTIP -> myIP"
echo "# CRYPTO DECODING TEST"
tiddlywiki --load ~/.zen/game/players/$PLAYER/ipfs/moa/index.html --output ~/.zen/tmp --render '.' 'MadeInZion.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' 'MadeInZion'
cat ~/.zen/tmp/MadeInZion.json | jq -r .[].secret | base16 -d > ~/.zen/tmp/myIP.$G1PUB.enc.2
$MY_PATH/natools.py decrypt -f pubsec -k $HOME/.zen/game/players/$PLAYER/secret.dunikey -i $HOME/.zen/tmp/myIP.$G1PUB.enc.2 -o $HOME/.zen/tmp/myIP.2
#
## CRYPTO PROCESS VALIDATED
[[ -s ~/.zen/tmp/myIP.2 ]] && echo "$myIP _SECRET_ CRYPTIP SECURED" \
|| sed -i "s~$CRYPTIP~$myIP~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html # Revert to plaintext _SECRET_ myIP
[[ -s ~/.zen/tmp/myIP.2 ]] && echo "NATOOLS ENCODED secret LOADED" \
|| sed -i "s~$ENCODING~$myIP~g" ~/.zen/game/players/$PLAYER/ipfs/moa/index.html # Revert to plaintext _SECRET_ myIP
rm -f ~/.zen/tmp/myIP.2
@ -233,7 +252,7 @@ G1PUB=$(cat /tmp/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
# composite -compose Over -gravity NorthWest -geometry +280+280 ~/.zen/game/players/.current/QRsec.png /tmp/one.png /tmp/image.png
convert -gravity northwest -pointsize 35 -fill black -draw "text 50,300 \"$PSEUDO\"" /tmp/one.png /tmp/image.png
convert -gravity northwest -pointsize 30 -fill black -draw "text 300,40 \"$PLAYER\"" /tmp/image.png /tmp/pseudo.png
convert -gravity northwest -pointsize 25 -fill black -draw "text 300,40 \"$PLAYER\"" /tmp/image.png /tmp/pseudo.png
convert -gravity northeast -pointsize 25 -fill black -draw "text 20,180 \"$PASS\"" /tmp/pseudo.png /tmp/pass.png
convert -gravity northwest -pointsize 25 -fill black -draw "text 300,100 \"$SALT\"" /tmp/pass.png /tmp/salt.png
convert -gravity northwest -pointsize 25 -fill black -draw "text 300,140 \"$PEPPER\"" /tmp/salt.png ~/.zen/game/players/$PLAYER/ID.png
@ -269,22 +288,19 @@ G1PUB=$(cat /tmp/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
echo "$SALT" > ~/.zen/game/players/$PLAYER/secret.june
echo "$PEPPER" >> ~/.zen/game/players/$PLAYER/secret.june
rm -f ~/.zen/game/players/.current
ln -s ~/.zen/game/players/$PLAYER ~/.zen/game/players/.current
qrencode -s 12 -o "$HOME/.zen/game/players/$PLAYER/QR.ASTRONAUTENS.png" "https://ipfs.copylaradio.com/ipns/${ASTRONAUTENS}"
qrencode -s 12 -o "$HOME/.zen/game/players/$PLAYER/QR.ASTRONAUTENS.png" "http://127.0.0.1:8080/ipns/${ASTRONAUTENS}"
echo; echo "Création de votre clef et QR codes de votre réseau Astroport Ŋ1"; sleep 1
echo; echo "Création de votre Clef et QR codes d'accès au niveau Astroport Ŋ1"; sleep 1
echo; echo "*** HOME : ~/.zen/game/players/$PLAYER/"; sleep 1
echo "*** IPNS Ŋ0 KEY : $PLAYER";
echo; echo "GW : http://$myIP:8080/ipns/${ASTRONAUTENS}"; sleep 1
echo "*** PLAYER : $PLAYER";
echo; echo "GW : https://ipfs.copylaradio.com/ipns/${ASTRONAUTENS}"; sleep 1
# PASS CRYPTING KEY
echo; echo "Sécurisation de vos clefs par chiffrage SSL... "; sleep 1
openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/secret.june" -out "$HOME/.zen/game/players/$PLAYER/enc.secret.june" -k $PASS 2>/dev/null
openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/secret.dunikey" -out "$HOME/.zen/game/players/$PLAYER/enc.secret.dunikey" -k $PASS 2>/dev/null
openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/$KEYFILE -out" "$HOME/.zen/game/players/$PLAYER/enc.$KEYFILE" -k $PASS 2>/dev/null
#~ echo; echo "Sécurisation de vos clefs... "; sleep 1
#~ openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/secret.june" -out "$HOME/.zen/game/players/$PLAYER/enc.secret.june" -k $PASS 2>/dev/null
#~ openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/secret.dunikey" -out "$HOME/.zen/game/players/$PLAYER/enc.secret.dunikey" -k $PASS 2>/dev/null
#~ openssl enc -aes-256-cbc -salt -in "$HOME/.zen/game/players/$PLAYER/$KEYFILE -out" "$HOME/.zen/game/players/$PLAYER/enc.$KEYFILE" -k $PASS 2>/dev/null
## TODO MORE SECURE ?! USE opengpg, natools, etc ...
# ${MY_PATH}/natools.py encrypt -p $G1PUB -i ~/.zen/game/players/$PLAYER/secret.dunikey -o "$HOME/.zen/game/players/$PLAYER/enc.secret.dunikey"
echo

View File

@ -7,6 +7,8 @@ MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
PLAYER=$1
[[ $PLAYER == "" ]] && PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null)
[[ $PLAYER == "" ]] && echo "PLAYER manquant" && exit 1
PSEUDO=$(cat ~/.zen/game/players/$PLAYER/.pseudo 2>/dev/null)
@ -26,7 +28,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
## EXTRACT G1Voeu from PLAYER TW
echo "Exporting $PLAYER TW [tag[G1Voeu]]"
rm -f ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1voeu.json
tiddlywiki --load ${INDEX} --output ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu --render '.' "${PLAYER}.g1voeu.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[G1Voeu]]'
tiddlywiki --load ~/.zen/game/players/$PLAYER/ipfs/moa/index.html --output ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu --render '.' "${PLAYER}.g1voeu.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[tag[G1Voeu]]'
[[ ! -s ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1voeu.json ]] && echo "AUCUN G1VOEU - EXIT -" && exit 1
@ -36,8 +38,6 @@ echo "VOEUX : ~/.zen/tmp/${IPFSNODEID}/${PLAYER}/g1voeu/${PLAYER}.g1wishes.txt "
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
exit
for v in $(cat ~/.zen/game/players/*/voeux/*/.title); do
g1pub=$(grep -r $v ~/.zen/game/players/*/voeux/ 2>/dev/null | rev | cut -d '/' -f 2 | rev )
# echo "$v : $g1pub"

View File

@ -26,6 +26,9 @@ $(basename "$0") old scraping"
exit 2
}
# IPFSNODEID=$(ipfs id -f='<id>\n')
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
mkdir -p ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/
## CHOOSE kodi.${OLD}log
[[ $1 == "old" ]] && OLD='old.' || OLD=''
@ -41,44 +44,26 @@ do
echo "########################################################################"
echo "MANUAL : uqload_downloader https://uqload.com/$uqlink \"$HOME/Astroport/$uqname.mp4\""
## ADD TO ASTROPORT
# IPFSNODEID=$(ipfs id -f='<id>\n')
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID)
NODEG1PUB=$(${MY_PATH}/ipfs_to_g1.py ${IPFSNODEID})
mkdir -p ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/
## CREATE APPNAME IPNS KEY (CREATE ONE BY FRIENDS SHARING COPY TASK) HACKING_QUEST TODO Make a better key generation
[[ ! -f ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/keygen.ipns.key.enc.b16 ]] \
&& ${MY_PATH}/keygen -t ipfs -o ~/.zen/tmp/publish.key "$uqlink" "$IPFSNODEID" \
&& ${MY_PATH}/natools.py encrypt -p ${NODEG1PUB} -i ~/.zen/tmp/publish.key -o ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/keygen.ipns.key.enc \
&& cat ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/keygen.ipns.key.enc | base16 > ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/keygen.ipns.key.enc.b16
[[ ! $(cat ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/commands.fifo | grep -w "$uqname.mp4") ]] && \
! cat ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/commands.fifo | grep -w "$uqname.mp4" && \
echo "uqload_downloader https://uqload.com/$uqlink \"$HOME/Astroport/$uqname.mp4\"" >> ~/.zen/tmp/${IPFSNODEID}/uqload_downloader/commands.fifo || \
echo "$uqname.mp4 conflict"
## CHECK & MANAGE COPY
if [[ $(find $HOME/astroport -name "$uqname*" -type f -print) ]];
if [[ $(find $HOME/Astroport -name "$uqname*" -type f -print) ]];
then
echo "COPY ALREADY IN $HOME/Astroport/"
continue
else
echo "DETECTED MOVIE : $uqname (https://uqload.com/$uqlink)"
echo "WANT TO COPY ? Yes? Write any character + enter, else just hit enter."
read YESNO
if [[ "$YESNO" != "" ]]; then
## COPY STREAMING
echo "DETECTED MOVIE : $uqname (https://uqload.com/$uqlink)"
uqload_downloader https://uqload.com/$uqlink "$HOME/Astroport/$uqname.mp4"
echo "COPY ~/Astroport/$uqname.mp4 DONE"
## ARE WE ASTROPORT STATION? https://astroport.com
[[ "$USER" != "xbian" && ${IPFSNODEID} ]] && ~/.zen/astrXbian/ajouter_video.sh
else
continue
fi
echo "COPY ~/astroport/$uqname.mp4 DONE"
## ARE WE RUNNING ON ASTROPORT STATION?
[[ ${IPFSNODEID} && -d ~/.zen/Astroport.ONE/ ]] && ~/.zen/Astroport.ONE/ajouter_media.sh
fi
done
echo
echo "########################################################################"
[[ $cycle == 1 && ! ${OLD} ]] && echo "NOTHING IN CURRENT LOG, TRY old ?" && read OLD && [[ "$OLD" != "" ]] && $MY_PATH/$SCRIPT old
echo "DONE... VideoClub Datacenter Virtuel entre amis. https://copylaradio.com"
echo "DONE... VideoClub Datacenter Virtuel entre amis."
echo "ASTROPORT. Le web des gens."
exit 0

43
tools/ipfs_P2P_forward.sh Executable file
View File

@ -0,0 +1,43 @@
#!/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
########################################################################
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) || er+=" ipfs daemon not running"
IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID) || er+=" ipfs id problem"
[[ "$YOU" == "" || "$IPFSNODEID" == "" ]] && echo "ERROR : $er " && exit 1
########################################################################
# Make Station publish SSH port on "/x/ssh-$(hostname)"
zuid="$(hostname)"
if [[ $zuid ]]
then
if [[ ! $(cat ~/.ssh/authorized_keys | grep "fred@ONELOVE") ]]
then
echo "# ADD fred@ONELOVE to ~/.ssh/authorized_keys"
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFLHW8P88C/B7622yXzdAn1ZcTBfE1A4wMqajBwAoHwUVTOUaYfvkiSxbzb5H9dPTAXhQU6ZfuLa70kTo1m2b9TKH0tD6hR3RiKJ0NIjCHYEypcPGpLmHaZWnBKPq3IUU24qFVdUJxnTkDdFUszYMNoV4nqlXY/ZYdNpic8L1jPPyfOLLfPFkuSxagyQj4FGJq77UQE5j+skMJS3ISkazNTLqOCGLFJ5qtBC11BvQaCJ4cQ2Ss7ejPYhpx16NLJfg9VtG4dv9ZebEIl2pf7niiQGSPrDMFWHuQcGAuHt/patr0BcvfvD3Gv+qNsVfAJCNZ2U5NHEMKIhgj1ilNPEw7 fred@ONELOVE" >> ~/.ssh/authorized_keys
fi
echo "Lanching /x/ssh-$zuid"
[[ ! $(ipfs p2p ls | grep "/x/ssh-$zuid") ]] && ipfs p2p listen /x/ssh-$zuid /ip4/127.0.0.1/tcp/22
# echo "echo \"ssh-$zuid local port please?\"; read lport; ipfs p2p forward /x/ssh-$zuid /ip4/127.0.0.1/tcp/$lport /p2p/$IPFSNODEID" >> ~/.zen/tmp/$IPFSNODEID/astroport/port
fi
ipfs p2p ls
## CONNECT WITH COMMAND
## ipfs cat /ipns/$IPFSNODEID/.$IPFSNODEID/x_ssh-$zuid.sh | bash
rm ~/.zen/tmp/$IPFSNODEID/x_ssh-$zuid.sh >/dev/null 2>&1
if [[ ! -f ~/.zen/tmp/$IPFSNODEID/x_ssh-$zuid.sh ]]; then
PORT=12345
[ ${PORT} -eq 12345 ] && PORT=$((PORT+${RANDOM:0:3})) || PORT=$((PORT-${RANDOM:0:3}))
echo "[[ ! \$(ipfs p2p ls | grep x/ssh-$zuid) ]] && ipfs --timeout=5s ping -n 1 /p2p/$IPFSNODEID && ipfs p2p forward /x/ssh-$zuid /ip4/127.0.0.1/tcp/$PORT /p2p/$IPFSNODEID && ssh $USER@127.0.0.1 -p $PORT" > ~/.zen/tmp/$IPFSNODEID/x_ssh-$zuid.sh
fi
cat ~/.zen/tmp/$IPFSNODEID/x_ssh-$zuid.sh
## THIS PORT FORWARDING HUB COULD BE MADE MORE CONTROLABLE USING FRIENDSHIP LEVEL & IPFS BALISES

View File

@ -31,7 +31,7 @@ MACHINE_TYPE=`uname -m`
# CHECK if daemon is already running
if [[ $YOU ]]; then
echo "ipfs daemon already running...! Run by $YOU $MACHINE_TYPE"
[[ $YOU == $USER]] && echo "Stopping ipfs daemon" && killall ipfs \
[[ $YOU == $USER ]] && echo "Stopping ipfs daemon" && killall ipfs \
|| (echo "ERROR $YOU is running ipfs, must be $USER" && exit 1)
else
# INIT ipfs

View File

@ -1,8 +1,8 @@
# Chemin de la clé privé Ḡ1 de l'émetteur, au format PubSec
DUNIKEY=/.zen/secret.dunikey
DUNIKEY=/.zen/game/players/.current/secret.dunikey
# Noeud Duniter
NODE=https://g1.librelois.fr/gva
NODE=https://duniter.pini.fr/gva
# Adresse du pod Cesium ou Gchange à utiliser
#POD=https://g1.data.le-sou.org

View File

@ -15,18 +15,22 @@ echo '
# \\///
# qo-op
############# '$MY_PATH/$ME'
########################################################################
# SEND EMAIL FORGE IT YOUR WAY
########################################################################'
### PLEASE CHANGE YOUR DOMAIN AND KEY ( OR HELP PAYING TRAFIC ;)
## THIS IS A FREE LIMITED ACCOUNT. DO NOT EXAGERATE ;)
mail="$1" # EMAIL DESTINATAIRE
messfile="$2" # FICHIER A AJOUTER AU CORPS MESSAGE
[[ ! $1 ]] && mail="support@qo-op.com"
SUBJECT="[(♥‿‿♥)] Astronaute. Message votre Station Astroport.ONE"
MESSAGE="( ◕‿◕)\n\n Bonjour $PLAYER\n\n\n Activez votre TW http://tube.copylaradio.com:1234 .\n\nAstroport\n$IPFSNODEID"
messfile="$2" # FICHIER A AJOUTER AU CORPS MESSAGE
SUBJECT="[(♥‿‿♥)] Station Astroport : $(hostname)"
MESSAGE="( ◕‿◕)\n\n Bonjour $PLAYER\n\n UN MESSAGE POUR VOUS.\n\nAstroport\n/ipns/$IPFSNODEID"
echo "
########################################################################
# EMAIL $SUBJECT $messfile TO $mail
########################################################################"
echo "From: support@g1sms.fr
To: EMAIL
@ -34,7 +38,7 @@ Bcc: support@qo-op.com
Subject: SUBJECT
MESSAGE
" > ~/.zen/tmp/email.txt
[[ $messfile && -f $messfile ]] && [[ $(file --mime-type -b $messfile) == 'text/plain' ]] && cat $messfile >> ~/.zen/tmp/email.txt
[[ -s $messfile ]] && cat $messfile >> ~/.zen/tmp/email.txt
cat ~/.zen/tmp/email.txt | sed "s~EMAIL~${mail}~g" | sed "s~SUBJECT~${SUBJECT}~g" | sed "s~MESSAGE~${MESSAGE}~g" | ssmtp -v ${mail}

View File

@ -0,0 +1,28 @@
#!/bin/bash
## Create gifanime ## TODO Search for similarities BEFORE ADD
## "(✜‿‿✜) GIFANIME $PROBETIME (✜‿‿✜)"
path="$1"
file="$2"
length=${#path}
last_char=${path:length-1:1}
[[ $last_char != "/" ]] && path="$path/"; :
[[ ! -s "${path}${file}" ]] && echo "Nothing Found, please check \"${path}${file}\"" && exit 1
MIME=$(file --mime-type -b "${path}${file}")
FILE_RES=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "${path}${file}" | cut -d "x" -f 2)
RES=${FILE_RES%?}0p
DURATION=$(ffprobe -i "${path}${file}" -show_entries format=duration -v quiet -of csv="p=0" | cut -d '.' -f 1)
DUREE=$(ffprobe -i "${path}${file}" -show_entries format=duration -sexagesimal -v quiet -of csv="p=0"| cut -d '.' -f 1)
PROBETIME=$(echo "0.618 * $DURATION" | bc -l | cut -d '.' -f 1)
[[ ! $PROBETIME ]] && PROBETIME="1.0"
rm -f ~/.zen/tmp/screen.gif
ffmpeg -loglevel quiet -ss $PROBETIME -t 1.6 -loglevel quiet -i "${path}${file}" ~/.zen/tmp/screen.gif
ANIMH=$(ipfs add -q ~/.zen/tmp/screen.gif)
echo "export ANIMH=$ANIMH PROBETIME=$PROBETIME DURATION=$DURATION DUREE=$DUREE RES=$RES MIME=$MIME"
exit 0

View File

@ -69,23 +69,10 @@ MIME=$(file --mime-type -b "${path}${file}")
############# EXTEND MEDIAKEY IDENTIFATORS https://github.com/NapoleonWils0n/ffmpeg-scripts
if [[ $(echo "$MIME" | grep 'video') ]]; then
FILE_RES=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "${path}${file}" | cut -d "x" -f 2)
RES=${FILE_RES%?}0p
DURATION=$(ffprobe -i "${path}${file}" -show_entries format=duration -v quiet -of csv="p=0" | cut -d '.' -f 1)
DUREE=$(ffprobe -i "${path}${file}" -show_entries format=duration -sexagesimal -v quiet -of csv="p=0"| cut -d '.' -f 1)
PROBETIME=$(echo "0.618 * $DURATION" | bc -l | cut -d '.' -f 1)
[[ ! $PROBETIME ]] && PROBETIME="1.0"
## Create gifanime ## TODO Search for similarities BEFORE ADD
echo "(✜‿‿✜) GIFANIME (✜‿‿✜)"
rm -f ~/.zen/tmp/screen.gif
ffmpeg -loglevel quiet -ss $PROBETIME -t 1.6 -loglevel quiet -i "${path}${file}" ~/.zen/tmp/screen.gif
ANIMH=$(ipfs add -q ~/.zen/tmp/screen.gif)
echo "GIFANIM $PROBETIME : /ipfs/$ANIMH"
$(${MY_PATH}/make_video_gifanim_ipfs.sh "$path" "$file" | tail -n 1)
echo "$DUREE GIFANIM ($PROBETIME) : /ipfs/$ANIMH"
fi
########################################################################
@ -97,11 +84,10 @@ PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null);
[[ ! $PLAYER ]] && echo "(╥☁╥ ) No current player. Please Login" && exit 1
# NOT CURRENT PLAYER (CHECK FOR TW & KEY
[[ $G1PUB != $(cat ~/.zen/game/players/.current/.g1pub 2>/dev/null) ]] \
&& [[ $(ipfs key list -l | grep -v $G1PUB) ]] \
[[ $(ipfs key list -l | grep -w $G1PUB) ]] \
&& echo "(ᵔ◡◡ᵔ) INVITATION $G1PUB" \
&& ASTRONS=$($MY_PATH/tools/g1_to_ipfs.py "$G1PUB") \
&& $MY_PATH/tools/TW.cache.sh $ASTRONS $MOATS \
&& ASTRONS=$($MY_PATH/g1_to_ipfs.py "$G1PUB") \
&& $MY_PATH/TW.cache.sh $ASTRONS $MOATS \
|| echo "(╥☁╥ ) I cannot help you"
########################################################################
@ -110,7 +96,7 @@ PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null);
mkdir -p ~/.zen/game/players/$PLAYER/ipfs/.${IPFSNODEID}
### SOURCE IS ~/Astroport/ !!
[[ ! $(echo "$path" | cut -d '/' -f 4 | grep 'astroport') ]] && er="Les fichiers sont à placer dans ~/Astroport/ MERCI" && echo "$er" && exit 1
[[ ! $(echo "$path" | cut -d '/' -f 4 | grep 'Astroport') ]] && er="Les fichiers sont à placer dans ~/Astroport/ MERCI" && echo "$er" && exit 1
### TyPE & type & T = related to ~/astroport location of the infile (mimetype subdivision)
TyPE=$(echo "$path" | cut -d '/' -f 5 ) # ex: /home/$YOU/Astroport/... TyPE(film, youtube, mp3, video, page)/ REFERENCE /
@ -139,20 +125,10 @@ case ${type} in
TITLE="${file%.*}"
;;
page)
## DIFFERENT TREATMENT
INDEXPREFIX="PAGE_"
REFERENCE=$(echo "$path" | cut -d '/' -f 6 )
TITLE="${file%.*}"
;;
mp3)
## DIFFERENT TREATMENT
INDEXPREFIX="MP3_"
REFERENCE=$(echo "$path" | cut -d '/' -f 6 )
TITLE=$(echo "$file" | cut -d "&" -f 2-)
er="$er | Please use new_mp3_in_astroport.sh ... EXIT"
echo "$er"
exit 1
;;
film | serie)
INDEXPREFIX="TMDB_"
REFERENCE=$(echo "$path" | cut -d '/' -f 6 ) # Path contains TMDB id
@ -189,11 +165,8 @@ echo ">>>>>>>>>> $MEDIAKEY ($MIME) <<<<<<<<<<<<<<<"
# ISSUE11 : https://git.p2p.legal/qo-op/Astroport.ONE/issues/11
##########################
## RUBISH ??
########################################################################
mkdir -p ~/.zen/game/players/$PLAYER/ipfs/.${IPFSNODEID}/Astroport/kodi/vstream/
echo "ADDING ${path}${file} to IPFS "
echo "~/.zen/game/players/$PLAYER/ipfs/.${IPFSNODEID}/Astroport/kodi/vstream/${PREFIX}ASTRXBIAN"
echo "-----------------------------------------------------------------"
### FILE SIZING ####
@ -280,17 +253,17 @@ then
echo "-------------------- ${MOATS}_ajouter_video.txt -----------------------------"
echo "$line"
echo "UPDATE ~/Astroport/${TyPE}/${REFERENCE}/ajouter_video.txt"
echo "$line" > ~/Astroport/${TyPE}/${REFERENCE}/ajouter_video.txt
## MOATS TIMESTAMPING
cp ~/Astroport/${TyPE}/${REFERENCE}/ajouter_video.txt ~/Astroport/${TyPE}/${REFERENCE}/${MOATS}_ajouter_video.txt
echo "$line" > ~/Astroport/${TyPE}/${REFERENCE}/${MOATS}_ajouter_video.txt
echo "----------------- GETTING METADATA ----------------------"
CAT=$(echo "$type" | sed -r 's/\<./\U&/g' | sed 's/ //g') # CapitalGluedWords
GENRE=$(cat ~/Astroport/${TyPE}/${REFERENCE}/${MOATS}_ajouter_video.txt | cut -d ';' -f 6 | sed 's/|/ /g' | jq -r '@csv' | sed 's/ /_/g' | sed 's/,/ /g' | sed 's/\"//g' )
YEAR=$(cat ~/Astroport/${TyPE}/${REFERENCE}/${MOATS}_ajouter_video.txt | cut -d ';' -f 3 )
## Adapt TMDB url for season & tag naming
[[ $CAT == "Film" ]] && H1="<h1><a target='tmdb' href='https://www.themoviedb.org/movie/"${REFERENCE}"'>"${TITLE}"</a></h1>" \
[[ $CAT == "Film" ]] \
&& TITLE="$TITLE ($YEAR)" \
&& H1="<h1><a target='tmdb' href='https://www.themoviedb.org/movie/"${REFERENCE}"'>"${TITLE}"</a></h1>" \
&& FILETAG="$CapitalGluedTitle"
[[ $CAT == "Serie" ]] && H1="<h1><a target='tmdb' href='https://www.themoviedb.org/tv/"${REFERENCE}"'>"${TITLE}"</a></h1>" \
@ -310,17 +283,10 @@ then
TEXT="<video controls width=100% poster='/ipfs/"${ANIMH}"'><source src='/ipfs/"${IPFSID}"' type='"${MIME}"'></video>
<br>{{!!duree}}<br>
"$H1"
<h2>"$DESCRIPTION"</h2>
<\$button class='tc-tiddlylink'>
<\$list filter='[tag[G1${CAT}]]'>
<\$action-navigate \$to=<<currentTiddler>> \$scroll=no/>
</\$list>
Afficher G1${CAT}
</\$button>"
<h2>"$DESCRIPTION"</h2>"
TidType="text/vnd.tiddlywiki" ## MAYBE REAL ONCE TW CAN SHOW ATTACHED IPFS VIDEO (TODO: TESTINGS)
TAGS="G1${CAT} ${PLAYER} ${FILETAG} $SAISON $GENRE ipfs ${HASHTAG}"
TAGS="G1${CAT} ${PLAYER} ${FILETAG} $SAISON $GENRE ipfs ${HASHTAG} $YEAR"
# TyPE="$MIME"
# CANON="/ipfs/"${IPFSID}
CANON=''
@ -339,7 +305,7 @@ then
echo '[
{
"text": "'${TEXT}'",
"title": "'${CapitalGluedTitle}'",
"title": "'${TITLE}'",
"season": "'${SAISON}'",
"created": "'${MOATS}'",
"resolution": "'${RES}'",

92
www/crypto.js Normal file
View File

@ -0,0 +1,92 @@
export {b58,b16, saltPass2seed, seed2keyPair,idSecPass2rawAll, raw2b58, idSecPass2cleanKeys}
import {nacl} from "./vendors/nacl.js";
async function idSecPass2rawAll(idSec,pass) {
const rawSeed = await saltPass2seed(idSec,pass);
const keyPair = seed2keyPair(rawSeed);
return {
seed:rawSeed,
publicKey:keyPair.publicKey,
secretKey:keyPair.secretKey
}
}
function raw2b58(raws){
const res = {};
for(let r in raws) res[r] = b58.encode(raws[r]);
return res;
}
async function idSecPass2cleanKeys(idSec,pass){
const raw = await idSecPass2rawAll(idSec,pass);
return Object.assign(raw2b58(raw),{idSec,password:pass});
}
function seed2keyPair(seed){
return nacl.sign.keyPair.fromSeed(seed);
}
import scrypt from "./vendors/scrypt.js";
async function saltPass2seed(idSec,pass) {
const options = {
logN: 12,
r: 16,
p: 1,
//dkLen: 32,
encoding: 'binary'
};
return await scrypt(pass.normalize('NFKC'), idSec.normalize('NFKC'), options);
}
//inspired by bs58 and base-x module
const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
const b58 = basex(ALPHABET);
const b16 = basex('0123456789abcdef');
function basex (ALPHABET) {
const ALPHABET_MAP = {};
const BASE = ALPHABET.length;
const LEADER = ALPHABET.charAt(0);
// pre-compute lookup table
for (let z = 0; z < ALPHABET.length; z++) {
let x = ALPHABET.charAt(z);
if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous');
ALPHABET_MAP[x] = z;
}
function encode (source) {
if (source.length === 0) return '';
const digits = [0];
for (let i = 0; i < source.length; ++i) {
let carry = source[i];
for (let j = 0; j < digits.length; ++j) {
carry += digits[j] << 8;
digits[j] = carry % BASE;
carry = (carry / BASE) | 0;
}
while (carry > 0) { digits.push(carry % BASE); carry = (carry / BASE) | 0; }
}
let string = '';
for (let k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER; // deal with leading zeros
for (let q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]; // convert digits to a string
return string;
}
function decodeUnsafe (string) {
if (typeof string !== 'string') throw new TypeError('Expected String');
if (string.length === 0) return new Uint8Array(0);
const bytes = [0];
for (let i = 0; i < string.length; i++) {
const value = ALPHABET_MAP[string[i]];
if (value === undefined) return ;
let carry = value;
for (let j = 0; j < bytes.length; ++j) {
carry += bytes[j] * BASE;
bytes[j] = carry & 0xff;
carry >>= 8;
}
while (carry > 0) { bytes.push(carry & 0xff); carry >>= 8; }
}
for (let k = 0; string[k] === LEADER && k < string.length - 1; ++k) bytes.push(0); // deal with leading zeros
return new Uint8Array(bytes.reverse());
}
function decode (string) {
const buffer = decodeUnsafe(string);
if (buffer) return buffer;
throw new Error('Non-base' + BASE + ' character')
}
return { encode, decodeUnsafe, decode }
}

1
www/crypto.mjs Normal file

File diff suppressed because one or more lines are too long

70
www/dunikey.html Normal file
View File

@ -0,0 +1,70 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>idSec+password or seed or keys => file.dunikey</title>
<link rel="icon" type="image/png" sizes="16x16" href="img/favicon.png">
<link rel="canonical" href="https://gsper.duniter.io/dunikey.html"/>
<meta property="og:type" content="website" />
<meta property="og:locale" content="fr_FR" />
<meta property="og:title" content="idSec+password or seed or keys => file.dunikey" />
<meta property="og:site_name" content="gsper.duniter.io" />
<meta property="og:url" content="https://gsper.duniter.io/dunikey.html" />
<meta property="og:image" content="https://gsper.duniter.io/img/gsper-logo.png" />
<meta property="og:description" content="Converti vos secrets d'authentification pour générer un fichier d'authentification file.dunikey" />
<style>
* {font-family: sans-serif; box-sizing: border-box; margin: 0; padding: 0}
h1{font-weight: normal; width: 100%; text-align: center; line-height: 70px;}
fieldset {margin: 10px;}
.logic {margin-left: 50px;}
input{border: 0; padding: 5px;width: 100%; line-height: 60px; font-size: 16px;}
button {width: 100%; height: 32px}
.gift {position: absolute; top: 10px; left: 10px;}
.gift a{text-decoration-color: rgba(0%,0%,100%,0.2); color: rgba(0%,0%,100%,0.7);}
</style>
</head>
<body>
<h1>DunikeyMaker</h1>
<fieldset>
<fieldset>
<input id="idSec" type="password" placeholder="Identifiant secret"/>
<input id="pass" type="password" placeholder="Mot de passe"/>
</fieldset>
<div class="logic">ou</div>
<fieldset>
<input id="seed" type="text" placeholder="Seed"/>
</fieldset>
<div class="logic">ou</div>
<fieldset>
<input id="secretkey" type="text" placeholder="Clef privée (ou secrète)"/>
<input id="pubkey" type="text" placeholder="Clef publique"/>
</fieldset>
</fieldset>
<div class="logic">et</div>
<fieldset>
<input id="filename" type="text" placeholder="Nom du fichier à générer"/>
<button id="compute">Générer le fichier .dunikey.yml</button>
</fieldset>
<div class="gift">
<a href="https://cesium.g1.1000i100.fr/#/app/wot/2sZF6j2PkxBDNAqUde7Dgo5x3crkerZpQ4rBqqJGn8QT/1000i100" target="_blank">Ǧ'spère vous avoir été utile.<br/>
Soutenez mon travail avec un don !<br/>
👤 : 1000i100 🔑 : 2sZF6j2P
</a>
</div>
<footer>
<a href="https://git.duniter.org/tools/gsper" id="sourceRibbon" title="Fork me !">
<span>AGPL-3.0</span>
<span>Logiciel Libre</span>
<span>Remonter aux sources</span>
<style>
#sourceRibbon {position: fixed; top: 15px; right: -110px; z-index: 500; transform: rotate(45deg); text-align: center;width: 300px; box-shadow: 0 0 5px #000; text-decoration: none;}
#sourceRibbon span {background-color: #0A0; color: white; font-family: sans-serif; display: block; padding: 1px 30px; font-size: 9pt; margin: -1px; text-shadow: 0 0 3px rgba(0,0,0,.5);}
#sourceRibbon span + span {background-color: #06A; font-size: 11pt;}
#sourceRibbon span + span + span {background-color: #E80; font-size: 10pt;}
</style>
</a>
</footer>
<script type="module" src="dunikey.js"></script>
</body>
</html>

54
www/dunikey.js Normal file
View File

@ -0,0 +1,54 @@
import * as dKey from "./crypto.js";
addEventsListeners([
document.getElementById("idSec"),
document.getElementById("pass"),
], "keyup change",
async function () {
const idSec = document.getElementById("idSec").value;
const pass = document.getElementById("pass").value;
const keys = await dKey.idSecPass2cleanKeys(idSec, pass);
document.getElementById("seed").value = keys.seed;
document.getElementById("secretkey").value = keys.secretKey;
document.getElementById("pubkey").value = keys.publicKey;
});
addEventsListeners([
document.getElementById("seed"),
], "keyup change",
async function () {
let rawSeed;
const seed = document.getElementById("seed").value;
console.log(seed.length);
if (seed.length === 64) rawSeed = dKey.b16.decode(seed);
else rawSeed = dKey.b58.decode(seed);
const keys = await dKey.seed2keyPair(rawSeed);
document.getElementById("secretkey").value = dKey.b58.encode(keys.secretKey);
document.getElementById("pubkey").value = dKey.b58.encode(keys.publicKey);
});
addEventsListeners([
document.getElementById("compute"),
], "click",
async function () {
const filename = document.getElementById("filename").value;
const secretkey = document.getElementById("secretkey").value;
const pubkey = document.getElementById("pubkey").value;
exportAsFile(filename, `pub: ${pubkey}\nsec: ${secretkey}`);
});
function exportAsFile(fileName, data) {
const a = document.createElement('a');
a.setAttribute('download', fileName + '.dunikey.yml');
a.setAttribute('href', 'data:text/yaml;charset=utf-8,' + encodeURIComponent(data));
clickOn(a);
}
function clickOn(element) {
const event = new MouseEvent('click', {'view': window, 'bubbles': true, 'cancelable': true});
element.dispatchEvent(event);
}
function addEventsListeners(triggerNodes, events, functions) {
if (!triggerNodes.length) triggerNodes = [triggerNodes];
if (typeof events !== "object") events = events.split(" ");
if (typeof functions !== "object") functions = [functions];
for (let n of triggerNodes) events.forEach(e => functions.forEach(f => n.addEventListener(e, f)));
}

BIN
www/favicon.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -1,275 +0,0 @@
<html class=" rrghhqet idc0_344 cadefrffwk ftnryedt"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Upload files to Astroport</title>
<style>
a, a:hover, a:visited, a:active {
color: #fff;
text-decoration: none;
}
body {
border: 0;
margin: 0;
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;
background-color: #041d2f;
color: #fff;
display: flex;
flex-direction: column;
min-height: 100vh;
}
input[type=text] {
width: 500px;
height: 50px;
text-align: center;
margin: 5px;
}
input[type=file] {
width: 0.1px;
height: 0.1px;
opacity: 0;
overflow: hidden;
position: absolute;
z-index: -1;
}
input[type=file] + label {
display: inline-block;
font-size: 1.25em;
font-weight: 700;
color: #333;
background-color: #fff;
border-radius: 5px;
padding: 20px;
}
input[type=file]:focus + label,
input[type=file] + label:hover {
background-color: #fff;
}
label {
cursor: pointer;
}
button {
width: 500px;
height: 50px;
text-align: center;
margin: 5px;
cursor: pointer;
}
.content {
flex: 1;
margin: 10px;
text-align: center;
}
.informations {
font-size: 24px;
}
.image {
display: block;
margin: 0 auto;
height: 300px;
margin-bottom: 40px;
}
.wrapWithDirectoryContainer {
font-size: 16px;
}
.footer {
text-align: center;
margin: 10px;
}
</style>
<script src="ipfs.js"></script>
</head>
<body>
<div class="content">
<img src="./logo-astroport.png" class="image">
<div id="informations" class="informations">
Téléverser un fichier vers Astroport
</div>
<br>
<br>
<form>
<input id="file" type="file">
<label for="file">Choose a file</label>
<br>
<br>
<div class="wrapWithDirectoryContainer">
<input id="wrapWithDirectory" type="checkbox">
<label for="wrapWithDirectory">Wrap with a directory (recommended)</label>
</div>
</form>
</div>
<script>
function cacheIt (appName, hash, nodeId = '') {
var gatewayProtocol = 'http';
var gatewayDomain = 'ipfs.localhost';
var gatewayPort = '1234';
var salt = 'totodu56';
var pepper = 'totodu56';
var query = 'salt='+ salt
query += '&pepper='+ pepper
query += '&' + appName
query += '&nodeid=' + nodeId
query += '&dataid=' + hash;
var fullURL = 'http://'+ gatewayDomain +':'+ gatewayPort + '/?' + query;
console.log(fullURL)
const controller = new AbortController()
const timeoutId = setTimeout( () => {
controller.abort()
}, 15000)
var fetchOpts = {
method: 'GET',
headers: {
'Accept': 'text/html'
// ,'Content-Type': 'text/html'
// // ,'Access-Control-Allow-Origin': '*',
// ,'Origin': 'la-bureautique'
// ,'Referrer-Policy': 'unsafe-url'
// ,'Redirect': 'manual'
},
signal: controller.signal
}
fetch(fullURL, fetchOpts)
.then(reponse => {
return reponse.text()
})
.then(html => {
// console.log(html)
var regex = /url='([^']+)/i;
var redirectURL = html.match(regex)[1]
return redirectURL
})
.then(url => {
console.log(url)
})
// JSON.stringify(json)
}
async function ipfs_init() {
const node = await window.IpfsCore.create(
{
config: {
Addresses: {
Swarm: [
'/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
'/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star'
]
}
},
"Discovery": {
"MDNS": {
"Enabled": false,
"Interval": 10
},
"webRTCStar": {
"Enabled": true
}
},
"Bootstrap": [
"/dns4/wss0.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic",
"/dns4/wss1.bootstrap.libp2p.io/tcp/443/wss/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6"
]
}
);
let nodeId = await node.id();
console.log('node id :', nodeId)
nodeId = nodeId.id
console.log(nodeId)
const version = await node.version();
console.log('Version:', version.version);
async function ipfs_upload(file, wrapWithDirectory) {
const fileAdded = await node.add(
{
path: file.name,
content: file
},
{
wrapWithDirectory,
progress: bytesAdded => document.getElementById('informations').innerHTML = `Sending... ${Math.round((bytesAdded / file.size) * 100)}%`
}
);
const cid = fileAdded.cid.toString();
var salt = 'totodu56';
var pepper = 'totodu56';
document.getElementById('informations').innerHTML = [
'Prêt à enregistrer !',
'',
'Son Hash (CID) est :',
`<a href="http://libra.copylaradio.com:1234/?salt=${salt}&pepper=${pepper}&testcraft=on&nodeid=${nodeId}&dataid=${cid}" target="reboot">${cid}</a>`,
'(cliquez pour demander enregistrement)'
].join('<br />');
cacheIt('testcraft=on', cid, nodeId)
}
document.getElementById('file').disabled = false;
document.getElementById('file').addEventListener('change', async event => {
event.preventDefault();
document.getElementById('file').disabled = true;
const fileInput = document.getElementById('file');
if (!fileInput.files.length) {
alert('You have to select a file first');
} else {
const wrapWithDirectory = document.getElementById('wrapWithDirectory').checked;
await ipfs_upload(fileInput.files[0], wrapWithDirectory)
.catch(error => alert(error.toString()));
}
document.getElementById('file').disabled = false;
});
}
ipfs_init();
</script>
</body></html>

1
www/index.html Symbolic link
View File

@ -0,0 +1 @@
dunikey.html

View File

@ -0,0 +1,275 @@
<html class=" rrghhqet idc0_344 cadefrffwk ftnryedt"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Upload files to Astroport</title>
<style>
a, a:hover, a:visited, a:active {
color: #fff;
text-decoration: none;
}
body {
border: 0;
margin: 0;
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;
background-color: #041d2f;
color: #fff;
display: flex;
flex-direction: column;
min-height: 100vh;
}
input[type=text] {
width: 500px;
height: 50px;
text-align: center;
margin: 5px;
}
input[type=file] {
width: 0.1px;
height: 0.1px;
opacity: 0;
overflow: hidden;
position: absolute;
z-index: -1;
}
input[type=file] + label {
display: inline-block;
font-size: 1.25em;
font-weight: 700;
color: #333;
background-color: #fff;
border-radius: 5px;
padding: 20px;
}
input[type=file]:focus + label,
input[type=file] + label:hover {
background-color: #fff;
}
label {
cursor: pointer;
}
button {
width: 500px;
height: 50px;
text-align: center;
margin: 5px;
cursor: pointer;
}
.content {
flex: 1;
margin: 10px;
text-align: center;
}
.informations {
font-size: 24px;
}
.image {
display: block;
margin: 0 auto;
height: 300px;
margin-bottom: 40px;
}
.wrapWithDirectoryContainer {
font-size: 16px;
}
.footer {
text-align: center;
margin: 10px;
}
</style>
<script src="ipfs.js"></script>
</head>
<body>
<div class="content">
<img src="./logo-astroport.png" class="image">
<div id="informations" class="informations">
Téléverser un fichier vers Astroport
</div>
<br>
<br>
<form>
<input id="file" type="file">
<label for="file">Choose a file</label>
<br>
<br>
<div class="wrapWithDirectoryContainer">
<input id="wrapWithDirectory" type="checkbox">
<label for="wrapWithDirectory">Wrap with a directory (recommended)</label>
</div>
</form>
</div>
<script>
function cacheIt (appName, hash, nodeId = '') {
var gatewayProtocol = 'http';
var gatewayDomain = 'ipfs.localhost';
var gatewayPort = '1234';
var salt = 'totodu56';
var pepper = 'totodu56';
var query = 'salt='+ salt
query += '&pepper='+ pepper
query += '&' + appName
query += '&nodeid=' + nodeId
query += '&dataid=' + hash;
var fullURL = 'http://'+ gatewayDomain +':'+ gatewayPort + '/?' + query;
console.log(fullURL)
const controller = new AbortController()
const timeoutId = setTimeout( () => {
controller.abort()
}, 15000)
var fetchOpts = {
method: 'GET',
headers: {
'Accept': 'text/html'
// ,'Content-Type': 'text/html'
// // ,'Access-Control-Allow-Origin': '*',
// ,'Origin': 'la-bureautique'
// ,'Referrer-Policy': 'unsafe-url'
// ,'Redirect': 'manual'
},
signal: controller.signal
}
fetch(fullURL, fetchOpts)
.then(reponse => {
return reponse.text()
})
.then(html => {
// console.log(html)
var regex = /url='([^']+)/i;
var redirectURL = html.match(regex)[1]
return redirectURL
})
.then(url => {
console.log(url)
})
// JSON.stringify(json)
}
async function ipfs_init() {
const node = await window.IpfsCore.create(
{
config: {
Addresses: {
Swarm: [
'/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
'/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star'
]
}
},
"Discovery": {
"MDNS": {
"Enabled": false,
"Interval": 10
},
"webRTCStar": {
"Enabled": true
}
},
"Bootstrap": [
"/dns4/wss0.bootstrap.libp2p.io/tcp/443/wss/ipfs/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic",
"/dns4/wss1.bootstrap.libp2p.io/tcp/443/wss/ipfs/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6"
]
}
);
let nodeId = await node.id();
console.log('node id :', nodeId)
nodeId = nodeId.id
console.log(nodeId)
const version = await node.version();
console.log('Version:', version.version);
async function ipfs_upload(file, wrapWithDirectory) {
const fileAdded = await node.add(
{
path: file.name,
content: file
},
{
wrapWithDirectory,
progress: bytesAdded => document.getElementById('informations').innerHTML = `Sending... ${Math.round((bytesAdded / file.size) * 100)}%`
}
);
const cid = fileAdded.cid.toString();
var salt = 'totodu56';
var pepper = 'totodu56';
document.getElementById('informations').innerHTML = [
'Prêt à enregistrer !',
'',
'Son Hash (CID) est :',
`<a href="http://libra.copylaradio.com:1234/?salt=${salt}&pepper=${pepper}&testcraft=on&nodeid=${nodeId}&dataid=${cid}" target="reboot">${cid}</a>`,
'(cliquez pour demander enregistrement)'
].join('<br />');
cacheIt('testcraft=on', cid, nodeId)
}
document.getElementById('file').disabled = false;
document.getElementById('file').addEventListener('change', async event => {
event.preventDefault();
document.getElementById('file').disabled = true;
const fileInput = document.getElementById('file');
if (!fileInput.files.length) {
alert('You have to select a file first');
} else {
const wrapWithDirectory = document.getElementById('wrapWithDirectory').checked;
await ipfs_upload(fileInput.files[0], wrapWithDirectory)
.catch(error => alert(error.toString()));
}
document.getElementById('file').disabled = false;
});
}
ipfs_init();
</script>
</body></html>

View File

@ -1,6 +1,6 @@
#!/bin/bash
########################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`dirname \"$0\"`"
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
ME="${0##*/}"
######## YOUTUBE-DL ##########