astrXbian/zen/gchange_IPFS_swarm.sh

110 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
########################################################################
# Author: Fred (support@qo-op.com)
# Version: 2020.12.03
# 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##*/}"
# Connect to IPFS peers with bidirectionnal "like" (Gchange or Cesium+ friends)
# configured in jaklis/.env
########################################################################
# \\///
# qo-op
############# '$MY_PATH/$ME'
########################################################################
# ex: ./'$ME'
# GET GCHANGE FRIENDS AND FIND THEIR IPFS ID TO "ipfs swarm connect" THEM
########################################################################'
## TODO : Beware of liking_me FLOOD & Invite $liking_me people to my #Swarm0
########################################################################
# ENVIRONEMENT DETECTION + IPFS ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_info
########################################################################
IPFSNODEID=$(ipfs id -f='<id>\n')
[[ $IPFSNODEID == "" ]] && echo "ERROR missing IPFS Node id !! IPFS is not installed !?" && exit 1
isIPFSRunning=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d ' ' -f 1)
[[ ! $isIPFSRunning ]] && echo "ERROR! ipfs daemon is not running. EXIT" && exit 1
########################################################################
# Force Strict #swarm0 !!?
# ipfs bootstrap rm --all
echo "" > ~/.zen/A_allow_ip.txt
echo "" > ~/.zen/A_allow_ipfsid.txt
echo "" > ~/.zen/A_liking_me_NO_ipfstryme.txt # contains "friends" with no "ipfstryme" incoming message
liking_me_count=0
friend_of_mine_count=0
########################################################################
# Let's look for Friends and "IPFS swarm connect" with them
########################################################################
# 1. Get Gchange "liking_me" people list
for liking_me in $(~/.zen/astrXbian/zen/jaklis/jaklis.py like | jq -r '.likes[].issuer');
do
# Check if my like is reverse
friend_of_mine=$(~/.zen/astrXbian/zen/jaklis/jaklis.py like -p $liking_me | jq -r '.yours.pseudo'); # contains my XZUID
[[ $friend_of_mine != null ]] && echo "Connect to my friend $liking_me" && friend_of_mine_count=$((friend_of_mine_count+1)) && ipfsadd=0 \
&& for peerline in $(~/.zen/astrXbian/zen/jaklis/jaklis.py read -n50 -j | jq -r --arg friendKEY "$liking_me" '.[] | select(.pubkey == $friendKEY)' | jq 'select(.title == "ipfstryme")' | jq -r '.content');
# 2. Searching "ipfstryme" message from friend_of_mine
do
ip=$(echo "$peerline" | awk -F '/' '{print $3}') && [[ $ip == "" ]] && continue || echo "Adding $ip to ~/.zen/A_allow_ip.txt"
# Fill a file with friend of mine ip
echo $ip >> ~/.zen/A_allow_ip.txt
# Get its ipfsnodeid
ipfsnodeid=$(echo "$peerline" | awk -F '/' '{print $7}')
echo $ipfsnodeid >> ~/.zen/A_allow_ipfsid.txt
g1id=$(~/.zen/astrXbian/zen/tools/ipfs_to_g1.py "$ipfsnodeid")
if [[ "$g1id" == "$friend_of_mine" ]]; then
# 3. ADD liking_me friend_of_mine to my swarm & bootstrap
ipfs swarm connect $peerline;
ipfs bootstrap add $peerline;
ipfsadd=$((ipfsadd+1))
else
echo "ALERT!!! $friend_of_mine spoofing is happening"
fi
done;
if [[ $friend_of_mine != null ]]; then
if [[ $ipfsadd == 0 ]]; then
# Friend of mine with no ipfstryme message (did not install astroport)
echo "No 'ipfstryme' message... from $liking_me"
echo "$liking_me" >> ~/.zen/A_liking_me_NO_ipfstryme.txt
else
# REMOVING DUPLICATES OLD ipfstryme MESSAGES
nbmessage=0
for messageid in $(~/.zen/astrXbian/zen/jaklis/jaklis.py read -n50 -j | jq -r --arg friendKEY "$liking_me" '.[] | select(.pubkey == $friendKEY)' | jq 'select(.title == "ipfstryme")' | jq -r '.id')
do
nbmessage=$((nbmessage+1))
[ $nbmessage -gt 1 ] && echo "Delete OLD 'ipfstryme' messages from $liking_me" && ~/.zen/astrXbian/zen/jaklis/jaklis.py delete -i $messageid
done
fi
fi
echo "__________________________________________"
liking_me_count=$((liking_me_count+1))
done
echo "####################################################
I have $friend_of_mine_count friends amoung $liking_me_count liking me people
__________________________________________
My actual #SWARM0"
ipfs swarm peers
echo "__________________________________________"
echo
## Could send message to friends with 'ipfstryme' message
for line in $(cat ~/.zen/A_liking_me_NO_ipfstryme.txt | uniq); do
echo "Liking each other, but no ipfstryme received..."
echo "cd ~/.zen/astrXbian/zen/jaklis"
echo "./jaklis.py send -d $line -t 'Astroport' -m 'Rejoins mon #Swarm0 https://copylaradio.com'"
done