2021-09-20 20:52:00 +02:00
#!/bin/bash
2020-12-12 01:26:39 +01:00
########################################################################
# Author: Fred (support@qo-op.com)
# Version: 2020.04.28
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
########################################################################
MY_PATH = " `dirname \" $0 \"` " # relative
MY_PATH = " `( cd \" $MY_PATH \" && pwd )` " # absolutized and normalized
ME = " ${ 0 ##*/ } "
2021-09-19 02:01:01 +02:00
countMErunning = $( ps auxf --sort= +utime | grep -w $ME | grep -v -E 'color=auto|grep' | wc -l)
[ [ $countMErunning -gt 2 ] ] && echo " $ME already running $countMErunning time " && exit 0
2020-12-12 01:26:39 +01:00
########################################################################
# \\///
# qo-op
############# '$MY_PATH/$ME'
########################################################################
# ex: ./'$ME'
########################################################################'
########################################################################
########################################################################
2021-12-03 23:59:57 +01:00
IPFSNODEID = $( cat ~/.ipfs/config | jq -r .Identity.PeerID)
2021-07-10 14:04:16 +02:00
[ [ ! $IPFSNODEID ] ] && echo 'ERROR missing IPFS Node id !! IPFS is not installed !?' && exit 1
2020-12-12 01:26:39 +01:00
########################################################################
2021-02-28 23:41:58 +01:00
[ [ ! -f ~/.zen/secret.dunikey ] ] && exit 1
G1PUB = $( cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
2020-12-12 01:26:39 +01:00
########################################################################
2021-09-20 20:53:53 +02:00
YOU = $( ps auxf --sort= +utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) ;
2021-09-20 21:18:30 +02:00
[ [ ! $YOU ] ] && echo "IPFS NOT RUNNING. EXIT" && exit 1
########################################################################
2022-05-14 15:56:55 +02:00
XZUID = $( cat ~/.zen/ipfs/.$IPFSNODEID /.player)
2021-09-19 02:01:01 +02:00
# echo "## FRIENDS IPFS PINGing"
# for g1pub in $(ls -t ~/.zen/ipfs/.$IPFSNODEID/FRIENDS/); do [[ $g1pub ]] && ipfs ping --timeout=3s -n 3 /ipfs/$(~/.zen/astrXbian/zen/tools/g1_to_ipfs.py $g1pub 2>/dev/null) 2>/dev/null; done
2021-06-16 00:37:09 +02:00
2021-09-04 02:17:41 +02:00
2021-06-15 20:23:07 +02:00
echo "
2021-08-06 15:08:26 +02:00
_ _ _ _
/ \ / \ / \ / \
2020-12-12 01:26:39 +01:00
( I | P | N | S )
2021-08-06 15:08:26 +02:00
\_ / \_ / \_ / \_ /
2020-12-12 01:26:39 +01:00
2021-08-06 15:08:26 +02:00
ZENTAG / MEDIAKEY : IPNS REFRESH
2021-03-02 18:56:33 +01:00
"
2021-03-31 01:19:41 +02:00
echo " I am /ipns/ $IPFSNODEID controling and refreshing my MEDIAKEY IPNS "
########################################################################
# REFRESH IPNS SELF PUBLISH
########################################################################
2021-09-19 02:01:01 +02:00
# ~/.zen/astrXbian/zen/ipns_self_publish.sh
2021-03-31 01:19:41 +02:00
########################################################################
2020-12-12 01:26:39 +01:00
count = 0
2021-09-19 13:41:18 +02:00
# [[ ! -d ~/.zen/ipfs/.${IPFSNODEID}/KEY/ ]] && exit 0
2020-12-12 01:26:39 +01:00
2021-06-14 16:35:38 +02:00
## TAKE CARE OF MY KEY
2021-09-19 13:59:24 +02:00
for mediakey in $( ls ~/.zen/ipfs/.${ IPFSNODEID } /KEY/ 2>/dev/null | shuf ) ; # Alternative search
2020-12-12 01:26:39 +01:00
do
2021-08-06 15:08:26 +02:00
[ [ " ${ mediakey } " = = "" ] ] && continue ## prevent empty mediakey
2021-09-19 01:29:33 +02:00
# [[ ! $(echo "${mediakey}" | grep "TMDB_") ]] && continue ## REFRESH ONLY TMDB (level 1), youtube is level 0
2021-08-06 15:08:26 +02:00
IPNSLINK = $( ipfs key list -l | grep ${ mediakey } | cut -d ' ' -f 1)
[ [ " ${ IPNSLINK } " = = "" ] ] && continue ## prevent empty IPNSLINK
2022-04-18 16:09:28 +02:00
echo " We are refreshing http://127.0.0.1:8080/ipns/ ${ IPNSLINK } "
2021-03-31 01:19:41 +02:00
count = $(( count+1)) && echo " $count ) "
2021-08-06 15:08:26 +02:00
FILE_NAME = $( cat ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.ipfs.filename)
TITLE = $( cat ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.title)
2021-06-14 16:35:38 +02:00
2021-09-19 01:29:33 +02:00
## REFRESH MORE THAN 6 HOURS TIMESTAMP KEY
TIMESTAMP = $( cat ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.timestamp) # INITIAL TIMESTAMP
[ [ -f ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /.timestamp ] ] && TIMESTAMP = $( cat ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /.timestamp) # LAST REFRESH
timestamp = $( date -u +%s%N | cut -b1-13)
STAMPDIFF = $(( timestamp - TIMESTAMP))
2021-09-21 21:32:07 +02:00
echo " Last Update : $( date -d @$TIMESTAMP | cut -b1-10) " # remove millisecond part
2021-09-19 01:29:33 +02:00
echo " ${ mediakey } LAST UPDATED $STAMPDIFF milliseconds AGO "
2021-09-20 22:04:51 +02:00
[ $STAMPDIFF -lt 21600000 ] && continue # 6h = 21600000 ms , 10h = 36000000 ms
2021-09-19 01:29:33 +02:00
2021-08-06 15:08:26 +02:00
source = $( echo $mediakey | cut -d '_' -f 1)
2021-09-19 18:57:38 +02:00
ANNONCE = $( cat ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.gchange.ad 2>/dev/null)
2021-08-06 15:08:26 +02:00
## Use natools to decrypt "/tmp/${mediakey}_filelink.txt
[ [ -f ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.ipfs.filelink.natools.encrypt ] ] && $MY_PATH /tools/natools.py decrypt -f pubsec -k " $HOME /.zen/secret.dunikey " -i " $HOME /.zen/ipfs/. ${ IPFSNODEID } /KEY/ ${ mediakey } / ${ G1PUB } /.ipfs.filelink.natools.encrypt " -o " /tmp/ ${ mediakey } _filelink.txt "
2021-09-19 13:59:24 +02:00
URLENCODE_FILE_NAME = $( cat /tmp/${ mediakey } _filelink.txt | rev | cut -d '/' -f 1 | rev | jq -Rr @uri)
2021-09-19 18:57:38 +02:00
IPFSREPFILEID = $( cat /tmp/${ mediakey } _filelink.txt | rev | cut -d '/' -f 2- | rev | cut -d '/' -f 3)
echo " IPFS MEDIA link : /ipfs/ $IPFSREPFILEID / $URLENCODE_FILE_NAME "
2021-08-06 15:08:26 +02:00
## TREAT OLD DATA from new_file_in_astroport.sh (LATER can be removed)
2021-09-19 01:29:33 +02:00
if [ [ ! -f $HOME /.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /content.json && -f ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /video.json ] ] ; then
2021-08-06 15:08:26 +02:00
mediakeyfile = $( $MY_PATH /tools/give_me_keystore_filename.py $mediakey )
2021-07-11 00:02:52 +02:00
$MY_PATH /tools/natools.py privkey -f ipfs-keystore -k $HOME /.ipfs/keystore/$mediakeyfile -F pubsec -o /tmp/${ mediakey } .dunikey
# PubFromDunikey=$(cat /tmp/${mediakey}.dunikey | grep "sec" | cut -d ' ' -f2 | base58 -d | tail -c+33 | base58)
PubFromDunikey = $( cat /tmp/${ mediakey } .dunikey | grep "pub" | cut -d ' ' -f2)
2021-08-06 15:08:26 +02:00
echo " $PubFromDunikey " > $HOME /.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /MEDIAPUBKEY
fi
2021-09-19 18:57:38 +02:00
2021-08-06 15:08:26 +02:00
MEDIAPUBKEY = $( cat $HOME /.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /MEDIAPUBKEY)
2021-07-12 03:46:39 +02:00
echo " MEDIA G1 WALLET = $MEDIAPUBKEY "
BALANCE = $( ~/.zen/astrXbian/zen/jaklis/jaklis.py balance -p ${ MEDIAPUBKEY } ) && [ [ $BALANCE = = null || " $BALANCE " = = "" ] ] && BALANCE = 0
2021-08-06 15:08:26 +02:00
ZENBALANCE = $( echo " 100 * $BALANCE " | bc -l | cut -d '.' -f 1)
TUBELINK = " https://tube.copylaradio.com $( cat /tmp/${ mediakey } _filelink.txt) "
2022-04-18 16:09:28 +02:00
LOCALTUBELINK = " http://127.0.0.1:8080 $( cat /tmp/${ mediakey } _filelink.txt) "
2021-08-06 15:08:26 +02:00
2021-09-19 19:12:57 +02:00
### IPNS LINK CAN EVOLVE (REFRESH EVERY 12 H TO MAINTAIN ALIVE IN THE SWARM)
### This index.html is ipns link root, 1st welcome page for MEDIAKEY -> *** Redirect to CONTRACTS or LOGIN processing HERE ***
2021-09-19 01:29:33 +02:00
2021-09-20 20:49:35 +02:00
echo " =======> Mediakey Welcome index.html
IPNSLINK = $IPNSLINK
IPFSNODEID = $IPFSNODEID
XZUID = $XZUID
G1PUB = $G1PUB
TITLE = $TITLE "
2021-09-17 01:58:09 +02:00
cat /home/$YOU /.zen/astrXbian/www/boris/youtube_watch_step2.html \
| sed " s/\${IPNSLINK}/ $IPNSLINK /g " \
2021-09-19 21:41:32 +02:00
| sed " s/\${IPFSNODEID}/ $IPFSNODEID /g " \
2021-09-17 01:58:09 +02:00
| sed " s/\${XZUID}/ $XZUID /g " \
| sed " s/\${G1PUB}/ $G1PUB /g " \
| sed " s/\${TITLE}/ $TITLE /g " \
2022-02-16 02:12:42 +01:00
> /tmp/${ mediakey } _index.html
mv /tmp/${ mediakey } _index.html ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /index.html
2021-03-01 01:53:42 +01:00
2021-09-20 20:49:35 +02:00
[ ! -s ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /index.html ] && echo " Problem creating ~/.zen/ipfs/. ${ IPFSNODEID } /KEY/ ${ mediakey } /index.html. EXIT " && exit 1
2021-03-18 02:24:41 +01:00
########################################################################
2021-06-16 01:06:01 +02:00
### Scenario are G1PUB subdivized. Thus each friend can establish own contract
2021-03-18 02:24:41 +01:00
# ~/.zen/ipfs/.${IPFSNODEID}/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/index.html
########################################################################
2021-06-16 01:06:01 +02:00
2021-08-06 15:08:26 +02:00
## Write KEY id (provide verification)
[ [ ! -f ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.id ] ] && echo ${ mediakey } > ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.id
2021-05-07 02:31:22 +02:00
2021-06-16 01:06:01 +02:00
## THIS MAKES FRENCH COPY RIGHT LAW RESPECT
## LOCALHOST REDIRECT FOR INTERNAL KODI DEFCON 3 (swarm.key) ASTROPORT STATION MODE
2022-04-18 16:09:28 +02:00
# echo "<meta charset=\"UTF-8\"><meta http-equiv=\"Refresh\" content=\"0;URL=http://127.0.0.1:8080$(cat /tmp/${mediakey}_filelink.txt)\">" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
2021-08-06 15:08:26 +02:00
# echo "<meta charset=\"UTF-8\"><meta http-equiv=\"Refresh\" content=\"0;URL=https://tube.copylaradio.com$(cat /tmp/${mediakey}_filelink.txt)\">" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
2021-06-15 20:16:52 +02:00
2021-06-16 01:06:01 +02:00
## DEMO PERIOD
2021-07-01 00:47:13 +02:00
## NICE FINAL STREAMING PAGE # TODO ACTIVATE DOWNLOAD FOR AVI or MKV
2021-08-06 15:08:26 +02:00
FILETYPE = " ${ LOCALTUBELINK ##*. } "
MIMETYPE = " video/ $FILETYPE " && HTMLTAG = "video"
[ [ " $FILETYPE " = = "avi" ] ] && MIMETYPE = "video/x-msvideo"
[ [ " $FILETYPE " = = "mkv" ] ] && MIMETYPE = "video/x-matroska"
[ [ " $FILETYPE " = = "mp3" ] ] && MIMETYPE = "audio/mpeg" && HTMLTAG = "audio"
2021-09-19 18:57:38 +02:00
echo "=======> Mediakey Contract index.html "
2021-09-17 01:58:09 +02:00
cat /home/$YOU /.zen/astrXbian/www/boris/youtube_watch_step3.html \
2021-09-19 01:29:33 +02:00
| sed " s/\${TITLE}/ $TITLE /g " \
2021-09-19 19:08:49 +02:00
| sed " s/\${IPFSNODEID}/ $IPFSNODEID /g " \
2021-09-19 01:29:33 +02:00
| sed " s/\${XZUID}/ $XZUID /g " \
| sed " s/\${IPFSREPFILEID}/ $IPFSREPFILEID /g " \
| sed " s/\${URLENCODE_FILE_NAME}/ $URLENCODE_FILE_NAME /g " \
2021-09-19 02:01:01 +02:00
> ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /index.html
2021-09-17 01:58:09 +02:00
2021-05-07 02:31:22 +02:00
2021-08-06 15:08:26 +02:00
if [ [ " $source " = = "YOUTUBE" ] ]
then
echo " $source "
# mutiTUBE - activate .views.counter
# echo "<meta http-equiv=\"Refresh\" content=\"0;URL=https://tube.copylaradio.com/ipns/$IPNSLINK/${G1PUB}/go\">" > ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/index.html
# TODO go/index.php from nginx proxy acting act as gateway (= Easy Round robin DNS tube.copylaradio.com is dynamic IP swap swarm nodes from node performance...)
fi
# ln -s /$HOME/.zen/astrXbian/www /var/www/astrxbian
# Testez vos application à même la blockchain en la copiant dans ~/.zen/ipfs/.${IPFSNODEID}/KEY/${mediakey}/${G1PUB}/go/
# Proposez de l'ajouter au dépot des applications web2.0 dans ../www/
2021-03-31 01:19:41 +02:00
2021-06-15 20:23:07 +02:00
########################################################################
2021-08-06 15:08:26 +02:00
# EXAMPLE TO ACTIVATE SECURITY : FORCE SIGNATURE VERIFICATION for each sensible file
2021-06-15 20:23:07 +02:00
########################################################################
2021-08-06 15:08:26 +02:00
echo " ~/.zen/ipfs/. ${ IPFSNODEID } /KEY/ ${ mediakey } / ${ G1PUB } /.views.counter "
if [ [ ! -f ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.views.counter.sign ] ] ; then
echo "0" > ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.views.counter
$MY_PATH /tools/natools.py sign -f pubsec -k " $HOME /.zen/secret.dunikey " -i ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.views.counter -o ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /${ G1PUB } /.views.counter.sign
fi
2021-06-15 20:23:07 +02:00
2021-08-06 15:08:26 +02:00
$MY_PATH /tools/natools.py verify -p " ${ G1PUB } " -i " $HOME /.zen/ipfs/. ${ IPFSNODEID } /KEY/ ${ mediakey } / ${ G1PUB } /.views.counter.sign " -o "/tmp/verified_msg" && echo "c'est bon" || echo "c'est pas bon"
# Each time a station modify .views.counter it signs, log and timestamp then publish new IPNS to swarm.
# If a "faulty" blockchain appears (Mediakey collision)...
# Message are sent to warn friends they have to manualy validate data conflict and merge back their mutual chain.
2021-06-15 20:23:07 +02:00
########################################################################
2021-06-16 01:06:01 +02:00
## CHAIN & IPNS REFRESH
2021-06-15 20:23:07 +02:00
########################################################################
2021-08-06 15:08:26 +02:00
# ipfs nanochain progression
I = $( ipfs add -qrH ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } / | tail -n 1)
2021-06-21 00:41:21 +02:00
echo " CHAIN: $I "
2021-08-06 15:08:26 +02:00
OLDCHAIN = $( cat ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /.chain)
2021-06-21 00:41:21 +02:00
echo " OLDCHAIN: $OLDCHAIN "
2021-08-06 15:08:26 +02:00
if [ [ " $OLDCHAIN " != " $I " ] ] # MODIFY CHAIN only if something was changed
then
echo "UPDATING CHAIN"
echo " $( date -u +%s%N | cut -b1-13) " > ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /.timestamp
echo $I > ~/.zen/ipfs/.${ IPFSNODEID } /KEY/${ mediakey } /.chain
fi
echo " ${ mediakey } NAME PUBLISHING "
2021-02-28 23:41:58 +01:00
# KEY ZenTag IPNS name publish
2021-07-12 04:25:44 +02:00
J = $( ipfs name publish --quieter -k ${ mediakey } /ipfs/${ I } )
2020-12-12 01:26:39 +01:00
2021-09-19 19:02:42 +02:00
echo " $id REFRESHED ${ I }
https://tube.copylaradio.com/ipns/$J
2022-04-18 16:09:28 +02:00
http://127.0.0.1:8080/ipns/$J "
2021-06-15 20:23:07 +02:00
########################################################################
########################################################################
2021-09-19 19:12:57 +02:00
break ## ONE BY ONE (cron_MINUTE.sh task every 7 mn)
2020-12-12 01:26:39 +01:00
done
2021-06-15 20:23:07 +02:00
########################################################################
########################################################################
2021-06-14 16:35:38 +02:00
## TAKE CARE OF PIN CREATED THROUGH autoPINfriends.sh
## Then refresh MEDIAKEY IPNS/IPFS RELATION
## CORRECT ISSUE : https://git.p2p.legal/axiom-team/astrXbian/issues/25
2021-06-15 20:23:07 +02:00
########################################################################
2021-09-19 13:59:24 +02:00
for ipnslink in $( ls ~/.zen/PIN/*/IPNSLINK 2>/dev/null | shuf ) ; do
2021-06-14 16:35:38 +02:00
ipnsid = $( cat $ipnslink )
ipfsid = $( echo $ipnslink | cut -d '/' -f 6)
2021-06-29 02:16:03 +02:00
mediakey = $( cat ~/.zen/PIN/${ ipfsid } /MEDIAKEY)
2021-08-06 15:08:26 +02:00
2021-09-19 01:29:33 +02:00
# [[ ! $(echo "${mediakey}" | grep "TMDB_") ]] && continue ## REFRESH ONLY TMDB (level 1), youtube is level 0
2021-09-09 21:29:10 +02:00
2021-06-29 03:08:47 +02:00
[ [ ! $( ipfs key list | grep ${ mediakey } ) ] ] && echo "ERROR MISSING MEDIAKEY" && continue
2021-06-14 16:35:38 +02:00
## GET ACTUAL IPNS .chain VALUE
2021-07-12 03:46:39 +02:00
mkdir -p /tmp/${ mediakey }
echo " ${ mediakey } GET IPNS "
2021-08-06 15:52:07 +02:00
ipfs get -o /tmp/${ mediakey } /ipns/$ipnsid
[ $? -ne 0 ] && continue
2021-09-19 18:57:38 +02:00
[ ! -s /tmp/${ mediakey } /index.html ] && continue ## DO NOT REPUBLISH empty index.html
2021-09-19 01:29:33 +02:00
## REFRESH MORE THAN 6 HOURS TIMESTAMP KEY
2021-09-19 13:59:24 +02:00
TIMESTAMP = $( cat /tmp/${ mediakey } /.timestamp 2>/dev/null) # LAST REFRESH
[ [ ! $TIMESTAMP ] ] && TIMESTAMP = $( cat /tmp/${ mediakey } /*/.timestamp 2>/dev/null | tail -n 1 ) # INITIAL TIMESTAMP
2021-09-19 01:29:33 +02:00
timestamp = $( date -u +%s%N | cut -b1-13)
STAMPDIFF = $(( timestamp - TIMESTAMP))
2021-09-21 21:32:07 +02:00
echo " Last Update : $( date -d @$TIMESTAMP | cut -b1-10) " # remove millisecond part
2021-09-19 01:29:33 +02:00
echo " PIN WAS LAST UPDATED $STAMPDIFF milliseconds AGO "
2021-09-20 22:04:51 +02:00
[ $STAMPDIFF -lt 39600000 ] && continue # 11h = 39600000 ms / 12h = 43200000 ms
2021-09-19 01:29:33 +02:00
2021-09-20 22:18:33 +02:00
echo "Refresh MEDIAKEY PIN"
2021-07-12 03:46:39 +02:00
NEWIPFS = $( ipfs add -rHq /tmp/${ mediakey } / | tail -n 1)
2021-06-14 16:35:38 +02:00
## PUBLISH IT
2021-08-06 15:52:07 +02:00
ipfs name publish -k ${ mediakey } --quieter /ipfs/$NEWIPFS
2021-09-19 19:02:42 +02:00
echo " $id PIN PUBLISH REFRESHED /ipfs/ $NEWIPFS
https://tube.copylaradio.com/ipns/$ipnsid
2022-04-18 16:09:28 +02:00
http://127.0.0.1:8080/ipns/$ipnsid "
2021-09-19 19:02:42 +02:00
2021-08-11 18:15:35 +02:00
rm -Rf /tmp/${ mediakey }
2021-09-19 02:01:01 +02:00
break ## DO ONE BY ONE
2021-06-14 16:35:38 +02:00
done
2021-03-31 01:19:41 +02:00
2021-06-15 20:23:07 +02:00
########################################################################