Mesh decentralized Unified P2P Fat Protocol Layer. Connectors between Libre Money, ScuttleButt, IPFS, ... Salamalec between Nodes and Human.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
astroport/zen/ipfs_SWARM_refresh.sh

85 lines
3.4 KiB

#!/bin/bash
########################################################################
# Author: Fred (support@qo-op.com)
# Version: 2020.03.24
# 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##*/}"
########################################################################
# \\///
# qo-op
############# '$MY_PATH/$ME'
########################################################################
# ex: ./'$ME'
########################################################################
# This script is controling IPFS swarm
# Sync friends peers ~/.zen/ipfs/ into ~/.zen/ipfs_swarm/.IPFSNODEID's/ directories
# add not friend_of_mine IPs to fail2ban
########################################################################
# TODO remove because now it is in~/.bashrc
export YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1)
export IPFSNODEID=$(ipfs id -f='<id>\n')
########################################################################
mkdir -p ~/.zen/ipfs_swarm
echo '
___ _ _ __ __ _ _ _ _ _ _ __
| |_)|_(_ (_\ //\ |_)|\/| |_)|_|_|_)|_(_ |_|
_|_| | __) __)\/\//--\| \| | | \|_| | \|___)| |
'
echo "I am $IPFSNODEID"
echo "REFRESHING /home/$YOU/.zen/ipfs_swarm/ from my SWARM peers"
rm -Rf /home/$YOU/.zen/ipfs_swarm/.12D3KooW*
rm -Rf /home/$YOU/.zen/ipfs_swarm/.Qm*
rm -Rf /home/$YOU/.zen/ipfs_swarm/*
count=1
for peer in $(ipfs swarm peers);
do
ipfsnodeid=$(echo "$peer" | awk -F '/' '{print $7}')
ip=$(echo "$peer" | awk -F '/' '{print $3}')
nowdate=$(date)
timestamp=$(date -u +%s%N | cut -b1-13)
echo "$nowdate - $id - $ip"
foundIp=$(cat ~/.zen/A_allow_ip.txt | grep "$ip")
isLAN=$(echo $ip | 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])/")
if [[ ! $foundIp && ! $isLAN ]] ; then
echo "${ip} of peer ${id} is not in the authorized ip list."
echo "${peer} will be removed from the swarm"
ipfs swarm disconnect $peer
ipfs bootstrap rm $peer
echo "# FAIL2BAN # $USER must activate no password sudo (Rpi & Xbian OK)"
[[ $USER == "pi" || $USER == "xbian" ]] && echo "BAN $ip" \
&& sudo fail2ban-client add recidive \
&& sudo fail2ban-client set recidive banip $ip
else
echo "${peer}"
echo "REFRESH /ipns/$ipfsnodeid INTO ~/.zen/ipfs_swarm/"
$MY_PATH/tools/timeout.sh -t 20 ipfs get --output=/home/$YOU/.zen/ipfs_swarm/ /ipns/$ipfsnodeid
fi
done
echo "$IPFSNODEID PUBLISHING /home/$YOU/.zen/ipfs/ to SWARM"
[[ ! -d /home/$YOU/.zen/ipfs ]] && echo "ERROR : /home/$YOU/.zen/ipfs/ NOT FOUND" && exit 1
IWALLETS=$(ipfs add -rHq /home/$YOU/.zen/ipfs | tail -n 1)
NODEIPNS=$(ipfs name publish --quieter /ipfs/$IWALLETS)
# Put my own data in /home/$YOU/.zen/ipfs_swarm/
ipfs get --output=/home/$YOU/.zen/ipfs_swarm/ /ipns/$IPFSNODEID
# NB: could start sync IPNS from "swarm peers" and check ~/.zen/ipfs_swarm/.$ipfsnodeid/G1SSB/_g1.pubkey
# if it is a gchange friend of mine... Then decide to bannish or keep.
# But IPNS sync with bad node could lead to a filesystem concistency corruption...
# Should be sync in a temp separate folder... So keeping IP control for now.
exit 0