forked from axiom-team/astroport
259 lines
11 KiB
Bash
Executable File
259 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
|
########################################################################
|
|
# Author: Fred (support@qo-op.com)
|
|
# Version: 2020.03.21
|
|
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
|
|
########################################################################
|
|
MY_PATH="`dirname \"$0\"`" # relative
|
|
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
|
|
ME="${0##*/}"
|
|
echo '
|
|
########################################################################
|
|
# \\///
|
|
# qo-op
|
|
############# '$MY_PATH/$ME'
|
|
########################################################################
|
|
# ex: ./'$ME'
|
|
# Initialize G1SSB + SSB About + IPFS Node publish
|
|
########################################################################
|
|
o__ __o __o o__ __o o__ __o o__ __o
|
|
/v v\ __|> /v v\ /v v\ <| v\
|
|
/> <\ | /> <\ /> <\ / \ <\
|
|
o/ <o> _\o____ _\o____ \o/ o/
|
|
<| _\__o__ | \_\__o__ \_\__o__ |__ _<|
|
|
\\ | < > \ \ | \
|
|
\ / | \ / \ / <o> /
|
|
o o o o o o o | o
|
|
<\__ __/> __|>_ <\__ __/> <\__ __/> / \ __/>
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
# [ASTROPORT](https://astroport.com)
|
|
########################################################################
|
|
'
|
|
|
|
########################################################################
|
|
# ENVIRONEMENT DETECTION + IPFS ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_info
|
|
########################################################################
|
|
YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1);
|
|
IPFSNODEID=$(ipfs id -f='<id>\n')
|
|
[[ $IPFSNODEID == "" ]] && echo "ERROR missing IPFS Node id !! IPFS is not installed !?" && exit 1
|
|
########################################################################
|
|
WHOAMI=$(sbotc whoami 2>/dev/null | jq -r .id)
|
|
[[ $WHOAMI == "" ]] && echo "ERROR sbotc NOT running !! Please check it..." && exit 1
|
|
########################################################################
|
|
[[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh
|
|
G1PUB=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
|
|
[[ $G1PUB == "" ]] && echo "ERROR G1PUB empty !! Please check it..." && exit 1
|
|
########################################################################
|
|
|
|
|
|
# GET NODE disk performance. TODO, publish and use as IPFS repartition
|
|
echo "DISK SIZE AVAILABLE & PERFORMANCE TESTING"
|
|
[[ -f ~/.zen/test.disk ]] && rm -f ~/.zen/test.disk
|
|
diskperf=$(dd if=/dev/zero of=~/.zen/test.disk bs=10M count=1 oflag=dsync 2>&1 | tail -n 1 | sed s/\,\ /\ -/g | cut -d '-' -f 4)
|
|
# echo $diskperf
|
|
sizeAvail=$(df -h ~/.ipfs/ | tail -n 1 | awk '{print $4}')
|
|
|
|
|
|
# IPFS LOCAL REPOSITORY for Node Identity G1 + SSB
|
|
mkdir -p ~/.zen/ipfs/.$IPFSNODEID/G1SSB
|
|
|
|
# SSB PUBLISH EXTRA ipfs informations !!
|
|
|
|
# This SSB messages are read by ./zen/ssb_IPFS_swarm.sh to build your IPFS #Swarm0
|
|
sbotc publish '{"type":"ipfsnodeid","text":"'"$(ipfs id -f='<id>\n')"'"}'
|
|
|
|
# PUBLISH default "eth" NOT isLAN IP addresses for ./zen/ssb_IPFS_swarm.sh
|
|
tryme=$(ipfs id | jq -r .Addresses[] | tail -n 1 )
|
|
isLAN=$(echo $tryme | cut -f3 -d '/' | grep -E "/(^127\.)|(^192\.168\.)|(^fd42\:)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
|
|
[[ ! $isLAN ]] && sbotc publish '{"type":"ipfstryme","text":"'"$tryme"'"}'
|
|
|
|
trymev4=$(ipfs id | jq -r .Addresses[] | grep $(hostname -I | cut -f 1 -d ' '))
|
|
isLANv4=$(echo $trymev4 | cut -f3 -d '/' | grep -E "/(^127\.)|(^192\.168\.)|(^fd42\:)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
|
|
[[ $isLAN && ! $isLANv4 ]] && sbotc publish '{"type":"ipfstryme","text":"'"$trymev4"'"}' && tryme="$trymev4"
|
|
|
|
trymev6=$(ipfs id | jq -r .Addresses[] | grep $(hostname -I | cut -f 2 -d ' '))
|
|
isLANv6=$(echo $trymev6 | cut -f3 -d '/' | grep -E "/(^127\.)|(^192\.168\.)|(^fd42\:)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/")
|
|
[[ $isLAN && $isLANv4 && ! $isLANv6 ]] && sbotc publish '{"type":"ipfstryme","text":"'"$trymev6"'"}' && tryme="$trymev6"
|
|
|
|
################################
|
|
# ADD Cesium+ informations
|
|
CESIUM="https://g1.data.le-sou.org"
|
|
|
|
# PREPARE title
|
|
# Made from Cesium+ profile tittle and city OR user@hostname
|
|
title=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq -r '._source.title')
|
|
[[ -f ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_uidna ]] && uidna=$(cat ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_uidna)
|
|
|
|
# Put in .$IPFSNODEID INDEX: _g1.uidna & _g1.cesium_name (used by Minetest flavour and others)
|
|
[[ $uidna ]] && echo "$uidna" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.uidna
|
|
[[ $title ]] && echo "$title" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.cesium_name
|
|
|
|
[[ $uidna ]] && [[ "$title" == "null" ]] && title="Station $uidna"
|
|
[[ "$title" == "null" ]] && title="Station $USER@$(cat /etc/hostname)"
|
|
|
|
city=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq -r '._source.city')
|
|
[[ "$city" != "null" ]] && title="$title in $city"
|
|
|
|
|
|
# ADD "cesium_geoPoint.lat" AND "cesium_geoPoint.lon" messages in SSB feed
|
|
# This way any SSB account is connected to its Cesium+ Geolocalisation.
|
|
geopointlat=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq '._source.geoPoint.lat')
|
|
[[ $geopointlat != null ]] && sbotc publish '{"type":"cesium_geoPoint.lat","text":"'"$geopointlat"'"}'
|
|
geopointlon=$(curl -s ${CESIUM}/user/profile/${G1PUB} | jq '._source.geoPoint.lon')
|
|
[[ $geopointlon != null ]] && sbotc publish '{"type":"cesium_geoPoint.lon","text":"'"$geopointlon"'"}'
|
|
|
|
# REFRESH Cesium+ Avatar image
|
|
curl -s ${CESIUM}/user/profile/${G1PUB} | jq -r '._source.avatar._content' | base64 -d > "/tmp/_g1.avatar.png"
|
|
|
|
## PUBLISH ABOUT MESSAGE
|
|
##############################################
|
|
# PICTURE: IF AVATAR not png take IMAGE of G1 wallet QRCode
|
|
qrencode -s 5 -o ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png "$G1PUB"
|
|
imagefile=~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png
|
|
qrname=${imagefile##*/}
|
|
qrid="$(sbotc blobs.add < $imagefile)"
|
|
qrtype="$(file -b --mime-type $imagefile)"
|
|
qrsize="$(wc -c < $imagefile)"
|
|
|
|
if [[ ! $(file "/tmp/_g1.avatar.png" | grep 'PNG') ]]; then
|
|
echo "NO Cesium AVATAR - Using G1Pub QRCode"
|
|
rm -f /tmp/_g1.avatar.png
|
|
else
|
|
echo "AVATAR FOUND"
|
|
imagefile=/tmp/_g1.avatar.png
|
|
# PUBLISH AVATAR TO IPFS
|
|
cp /tmp/_g1.avatar.png ~/.zen/ipfs/.$IPFSNODEID/G1SSB/
|
|
fi
|
|
|
|
# Prepare QRCode File for SSB (add to blobs)
|
|
name=${imagefile##*/}
|
|
id="$(sbotc blobs.add < $imagefile)"
|
|
type="$(file -b --mime-type $imagefile)"
|
|
size="$(wc -c < $imagefile)"
|
|
|
|
echo "
|
|
|
|
/\ |_ _ _|_
|
|
/--\|_)(_)|_||_ : PUBLISH to SSB feed...
|
|
|
|
$WHOAMI
|
|
$title
|
|
$imagefile
|
|
$id : $type : $size bits
|
|
|
|
"
|
|
# NOT WORKING, sudo inside !!!
|
|
#nodename=$(~/.zen/astroport/zen/tools/nodename)
|
|
nodename=$(cat /home/$YOU/.zen/ipfs/.$IPFSNODEID/G1SSB/_nodename)
|
|
if [[ $nodename == "" ]]; then
|
|
nodename=$(cat /etc/hostname)
|
|
extension=$(echo $nodename | cut -d '.' -f 2)
|
|
if [[ $extension == $nodename ]]; then
|
|
nodename=$nodename.home
|
|
fi
|
|
fi
|
|
########################################################################
|
|
# DUNITER G1 Wallet balance
|
|
export LC_ALL=C.UTF-8 #attipix
|
|
export LANG=C.UTF-8 #attipix
|
|
DUNITERNODE=$($MY_PATH/tools/duniter_getnode.sh)
|
|
[[ $DUNITERNODE ]] && g1balance=$(silkaj -p $DUNITERNODE balance $G1PUB 2>&1) || g1balance=$(silkaj balance $G1PUB 2>&1)
|
|
silkajQuantitativeAmountPattern='Total\sQuantitative\s+=\s+(.*)\s+Ğ1'
|
|
if [[ $g1balance =~ $silkajQuantitativeAmountPattern ]]
|
|
then
|
|
myJune="${BASH_REMATCH[1]}"
|
|
else
|
|
myJune="0"
|
|
fi
|
|
|
|
DUFACTOR=$(bc <<< "scale=2; $(cat /home/$YOU/.zen/_DU) / 100")
|
|
AMOUNTLOVE=$(bc -l <<< "scale=0; $myJune * 100 / $DUFACTOR")
|
|
# OLD ssb-server publish
|
|
# sbot publish --type about --about $WHOAMI --description "[Astroport Node](https://astroport.com) [$IPFSNODEID](http://localhost:8080/ipns/$IPFSNODEID) - Wallet $G1PUB - $diskperf" --name "$title" --image "$id"
|
|
# NEW sbotc publish to oasis
|
|
sbotc publish "{\"type\":\"about\",\"about\":\"$WHOAMI\",\"description\":\"![QRCode]($qrid)\\n[Station Astroport](https://astroport.com)\\n - [Mon Marché](https://gchange.fr/#/app/wot/$G1PUB) \\n - [Mon portefeuille ($AMOUNTLOVE :heart:)](https://cesium.app/) \\n Station ID : [$IPFSNODEID](http://localhost:8080/ipns/$IPFSNODEID) \\n Disque: $sizeAvail = $diskperf \\n - [Portail](http://$nodename:10010/) \\n\",\"name\":\"$title\",\"image\":\"$id\"}"
|
|
|
|
|
|
# SSB PUBLISH G1 wallet silkaj balance
|
|
json_escape () {
|
|
printf '%s' "$1" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))'
|
|
}
|
|
INLINE=$(json_escape "$g1balance")
|
|
# TODO FIND WHY THIS ***** COMA , IS EVERYWHERE NOT PUBLSHING silkaj
|
|
# [[ $INLINE ]] && sbotc publish '{"type":"post","text":'$INLINE'}'
|
|
|
|
#INLINE="${g1balance@Q}"
|
|
#[[ $INLINE ]] && sbotc publish '{"type":"post","text":"'$INLINE'"}'
|
|
|
|
echo "
|
|
_ _
|
|
/ \|_) _ _ _| _
|
|
\_X| \ (_(_)(_|(/_ ! AVATAR
|
|
|
|
$g1balance
|
|
|
|
~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png
|
|
|
|
-- sbotc publish --
|
|
"
|
|
# IF no AVATAR, publish message with QRCode
|
|
if [[ ! $(file "/tmp/_g1.avatar.png" | grep 'PNG') ]]; then
|
|
sleep 1
|
|
# sbotc publish '{"type":"post","text":"![QRCode]('"$qrid"')\n Scan QRCode with [Cesium](https://cesium.app).\n Thank you\n ONE :heart:","mentions":[{"link":"'"$id"'","name":"'"$name"'","size":'"$size"',"type":"'"$type"'"}]}'
|
|
else
|
|
# Publish only if new avatar
|
|
if [[ $(diff /tmp/_g1.avatar.png ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.avatar.png) ]]; then
|
|
sbotc publish '{"type":"post","text":"![Cesium Avatar]('"$id"')\n from my Wallet [Cesium](https://demo.cesium.app/#/app/wot/'"$G1PUB"') '"$G1PUB"'","mentions":[{"link":"'"$id"'","name":"'"$name"'","size":'"$size"',"type":"'"$type"'"}]}'
|
|
fi
|
|
fi
|
|
|
|
echo "
|
|
|
|
|
|
___ _ _ __
|
|
| |_)|_(_ _. _| _|
|
|
_|_| | __) (_|(_|(_|
|
|
~/.zen/ipfs
|
|
|
|
ipfs ls /ipns/$IPFSNODEID
|
|
|
|
"
|
|
# COPY NODE G1SSB ID to IPFS
|
|
echo "$WHOAMI" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_ssb.whoami
|
|
echo "$G1PUB" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.pubkey
|
|
|
|
# IPFS Node PUBLISH Adresses so Pub can become bootstrap for ${g1author}
|
|
ipfs id | jq -r .Addresses[] > ~/.zen/ipfs/.${IPFSNODEID}/Addresses
|
|
# IPFS Node PUBLISH AgentVersion & repo.stat
|
|
ipfs id | jq -r .AgentVersion > ~/.zen/ipfs/.${IPFSNODEID}/AgentVersion
|
|
ipfs repo stat > ~/.zen/ipfs/.${IPFSNODEID}/repo.stat
|
|
|
|
echo "$tryme" > ~/.zen/ipfs/.${IPFSNODEID}/tryme.addr
|
|
echo "$diskperf" > ~/.zen/ipfs/.${IPFSNODEID}/disk.perf
|
|
echo $(df ~/.ipfs/ | tail -n 1 | awk '{print $4}') > ~/.zen/ipfs/.${IPFSNODEID}/disk.bytes
|
|
|
|
|
|
IWALLETS=$(ipfs add -rHq ~/.zen/ipfs | tail -n 1)
|
|
NODEIPNS=$(ipfs name publish --allow-offline --quieter /ipfs/$IWALLETS)
|
|
|
|
echo "
|
|
ipfs ls /ipns/$IPFSNODEID/.$IPFSNODEID/
|
|
_ _ _ _ _
|
|
(_)_ ____ _(_) |_ __ _| |_(_) ___ _ __
|
|
| | _ \ \ / / | __/ _| | __| |/ _ \| _ \
|
|
| | | | \ V /| | || (_| | |_| | (_) | | | |
|
|
|_|_| |_|\_/ |_|\__\__|_|\__|_|\___/|_| |_|
|
|
|
|
# This INVITE is to be sent an to 'Astroport Station' willing to Join our IPFS Swarm.
|
|
# see 'ssb_SURVEY_contact.sh' for commands executed...
|
|
|
|
"
|
|
echo "INVITATION LINK (only works in LAN or WAN depending on your Node)"
|
|
sbotc invite.create 1 2>/dev/null
|
|
|
|
#read ssb_invit_link
|
|
#sbotc invite.accept $ssb_invit_link
|
|
|
|
exit 0
|