astroport/zen/zen_MAKE.sh

305 lines
11 KiB
Bash
Raw Normal View History

2020-03-18 01:47:10 +01:00
#!/bin/bash
2020-03-20 04:06:36 +01:00
########################################################################
# Author: Fred (support@qo-op.com)
# Version: 2020.03.18
# 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
2020-03-20 18:37:56 +01:00
ME="${0##*/}"
2020-03-21 05:02:16 +01:00
echo '
2020-03-20 04:06:36 +01:00
########################################################################
# \\///
# qo-op
2020-03-22 01:31:06 +01:00
############# '$ME' ZEN TXHASH FILE READ PARK
2020-03-20 18:37:56 +01:00
########################################################################
2020-03-22 01:31:06 +01:00
# ex: ./'$ME' 1000 TXHASH ./myfile.wav 1 10
2020-03-20 18:37:56 +01:00
# IPFS DATASTRUCTURE ~/.zen/tag/sha256sum(_tag.uid)
########################################################################
# [ASTROPORT](https://astroport.com)
2020-03-22 01:31:06 +01:00
########################################################################'
2020-03-20 18:37:56 +01:00
ZEN="$1" # Zen amount
TXHASH="$2" # G1 TX HASH
PASSENGER="$3" # /path/file.ext to include into ZenTag (add to IPFS datastructure)
READ="$4" # Zen amount asked to allow passenger reading
PARK="$5" # Zen amount payed for IPFS PIN by passenger everyday
[[ $READ == "" ]] && READ=1
[[ $PARK == "" ]] && PARK=10
2020-03-21 05:02:16 +01:00
##############################################
# NODE ENVIRONEMENT DETECTION
##############################################
IPFSNODEID=$(ipfs id -f='<id>\n')
[[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh
NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
2020-03-22 01:31:06 +01:00
echo "G1SSB Wallet: $NODE_G1PUBKEY
IPFS: $IPFSNODEID
__ __ _ _ _______
_______ _ __ | \/ | / \ | |/ / ____|
|_ / _ \ '_ \ | |\/| | / _ \ | ' /| _|
/ / __/ | | | | | | |/ ___ \| . \| |___
/___\___|_| |_| |_| |_/_/ \_\_|\_\_____|
2020-03-20 04:06:36 +01:00
########################################################################
# ZenTag is an IPFS/IPNS datastructure put into IPFS, publish
2020-03-22 01:31:06 +01:00
# ~~~ Draft ~~~~ Draft ~~~~ Draft ~~~~ Draft ~~~~ Draft ~~~~
2020-03-20 04:06:36 +01:00
# _chain # ZenTag IPFS Hash
# _chain.n # Sequence Number
# _chain.nanodate # Current nanodate
# _chain.prev # Previous IPFS Hash
# _g1.node.creator # G1SSB wallet pubkey
# _g1.issuer # G1TX ISSUER pubkey
# _g1.txhash # G1TX HASH
2020-03-21 05:02:16 +01:00
# _ipfs.node.creatorcat # NODE IPFS ID
2020-03-20 17:06:48 +01:00
# _ipfs.publishkey.BB.aes # BB SYMcypher of IPNS publish key
# _ipfs.publishkey.crypt # G1SSB ASYMcypher of IPNS publish key
2020-03-20 18:37:56 +01:00
# _tag.BB.sha # BB sha512sum
2020-03-20 04:06:36 +01:00
# _tag.uid # ZenTag UID
# _tag.zen # ZentTag balance
2020-03-20 17:06:48 +01:00
# _ipns # /ipns/ address
2020-03-21 05:02:16 +01:00
# PASSENGER FILE OPTIONNAL
2020-03-20 17:06:48 +01:00
# _passenger.filename # Passenger filename
# _passenger.ipfs.crypt # G1SSB cyphered IPFS Passenger link
2020-03-20 18:37:56 +01:00
# _passenger.read # Zen value asked for READING
# _passenger.park # Zen value paid for PARKING
2020-03-22 01:31:06 +01:00
# Read code to discover use.
# TODO: Could be converted into yaml or json if you like...
2020-03-20 04:06:36 +01:00
########################################################################
2020-03-22 01:31:06 +01:00
"
[[ $ZEN == "" || $TXHASH == "" ]] && echo "ERROR... Please provide Zen value" && exit 1
2020-03-18 01:47:10 +01:00
2020-03-20 18:37:56 +01:00
# UNCOMMENT TO ACTIVATE (G1 <=> ZEN) STRICT RELATION
2020-03-22 01:31:06 +01:00
# ACTIVATES "GREEN FLAG" LIBRE ASTROPORT
# FULLY BACKED ON IRL G1 LIBRE MONEY (https://cesium.app)
# ____ ____ _____ _____ _ _
# / ___| _ \| ____| ____| \ | | _______ _ __
# | | _| |_) | _| | _| | \| | |_ / _ \ '_ \
# | |_| | _ <| |___| |___| |\ | / / __/ | | |
# \____|_| \_\_____|_____|_| \_| /___\___|_| |_|
#
# CONTROL IF TXHASH is REAL, see ./g1_TX2ZEN.sh for cache
2020-03-20 17:06:48 +01:00
#[[ ! -f ~/.zen/scan/zen.$TXHASH ]] && echo "ERROR# UNKNOWN TX $TXHASH !!" && exit 1
#ISSUER=$(cat ~/.zen/scan/zen.$TXHASH)
#[[ $ISSUER == "" ]] && echo "ERROR# NO ISSUER FOUND FOR TX $TXHASH !!" && exit 1
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
########################################################################
2020-03-22 01:31:06 +01:00
# CREATE ZEN TAG
2020-03-20 17:06:48 +01:00
########################################################################
2020-03-22 01:31:06 +01:00
# Produce unique 6 words diceware to give a name _tag.uid
2020-03-20 17:06:48 +01:00
AA=$(echo $($MY_PATH/tools/diceware.sh 6 | xargs) | sed s/\ /_/g ) # ZenTag Name = Diceware_6_words
2020-03-20 04:06:36 +01:00
AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1) # ZenTag Name SHA256
2020-03-22 02:42:32 +01:00
# TODO ACTIVATE SWARM UNICITY CHECK
2020-03-20 17:06:48 +01:00
# Create Unique Zentag for all IPFS SWARM!
2020-03-22 02:42:32 +01:00
#while [[ $(grep -Rwl "$AA" ~/.zen/ipfs_swarm/.Qm*/TAG/) ]]; do
# AA=$(echo $($MY_PATH/tools/diceware.sh 6 | xargs) | sed s/\ /_/g )
# AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1)
#done
2020-03-22 01:31:06 +01:00
# BB key is a 4 word diceware printed on QRCode for Human use.
# SHA512 PASSWORD CHECK FOR ALLOWING WRITE ACTION
2020-03-20 04:06:36 +01:00
BB=$($MY_PATH/tools/diceware.sh 4 | xargs);
2020-03-20 18:37:56 +01:00
BBH=$(echo -n "$BB" | sha512sum | cut -d ' ' -f 1)
2020-03-20 17:06:48 +01:00
########################################################################
2020-03-22 01:31:06 +01:00
# INITIAL DATA STRUCTURE
2020-03-20 17:06:48 +01:00
########################################################################
2020-03-20 04:06:36 +01:00
mkdir -p ~/.zen/tag/${AAH}
2020-03-22 01:31:06 +01:00
# LOG
2020-03-22 02:42:32 +01:00
echo "
_____ _____ _ ____
|__ /___ _ _|_ _|/ \ / ___| __/\__
/ // _ \ °_ \| | / _ \| | _ \ /
/ /| __/ | | | |/ ___ \ |_| | /_ _\
/____\___|_| |_|_/_/ \_\____| \/
${AAH}
$AA $ZEN Zen
*******************************************************
"
2020-03-22 01:31:06 +01:00
# COPY ZENTAG TO LOCAL ~/.zen/tag
2020-03-20 04:06:36 +01:00
echo "$AA" > ~/.zen/tag/${AAH}/_tag.uid # Nom du ZenTAG
echo "$ZEN" > ~/.zen/tag/${AAH}/_tag.zen # Tag ZEN amount
echo "${IPFSNODEID}" > ~/.zen/tag/${AAH}/_ipfs.node.creator # NODE IPFS ID
echo "$TXHASH" > ~/.zen/tag/${AAH}/_g1.txhash # HASH G1 TX/IN
echo "$NODE_G1PUBKEY" > ~/.zen/tag/${AAH}/_g1.node.creator # CREATOR IPFS NODE G1PUBKEY
echo "$ISSUER" > ~/.zen/tag/${AAH}/_g1.issuer # TX ISSUER G1PUBKEY
2020-03-18 01:47:10 +01:00
2020-03-20 17:06:48 +01:00
########################################################################
2020-03-22 01:31:06 +01:00
# Create IPNS publishing key ${AA}.key
# =====================================
# BB encrypted version for IRL use
# NODE_G1PUBKEY for current G1SSB Node later access...
# Using sha512sum / openssl / natools.py (libsodium)
2020-03-20 17:06:48 +01:00
########################################################################
[[ ! -f ~/.ipfs/keystore/${AA}.key ]] && J=$(ipfs key gen -t rsa -s 2048 ${AA}.key)
2020-03-20 04:06:36 +01:00
# WRITE BBH for QRCode BB verification
2020-03-20 17:06:48 +01:00
echo "$BBH" > ~/.zen/tag/${AAH}/_tag.BB.sha
2020-03-20 04:06:36 +01:00
# BB pgp symetric publishkey
2020-03-20 17:06:48 +01:00
openssl aes-256-cbc -pbkdf2 -k "$BB" -salt -in ~/.ipfs/keystore/${AA}.key -out ~/.zen/tag/${AAH}/_ipfs.publishkey.BB.aes
2020-03-20 04:06:36 +01:00
# GIVE IPFS CREATOR NODE ACCESS TO ZEN TAG
2020-03-20 17:06:48 +01:00
$MY_PATH/tools/natools.py encrypt -p $NODE_G1PUBKEY -i ~/.ipfs/keystore/${AA}.key -o ~/.zen/tag/${AAH}/_ipfs.publishkey.crypt
2020-03-22 02:42:32 +01:00
# LOG
echo "
CYPHERING PUBLISH KEY
2020-03-20 17:06:48 +01:00
2020-03-22 02:42:32 +01:00
_/_/ __/|_ __/|_ | |
/ / | / | / / /
/ / /_ __| /_ __| / /
/ / |/ |/ _/_/
|_| /_/
KEY : $BB
BBH : $BBH
"
2020-03-20 04:06:36 +01:00
#######################################################################
2020-03-22 01:31:06 +01:00
# PASSENGER FILE is added to IPFS then link is cyphered
#
2020-03-20 17:06:48 +01:00
if [[ -f $PASSENGER ]]; then
2020-03-22 01:31:06 +01:00
echo "
_ _ _ _ _ _ _ _ _
/ \ / \ / \ / \ / \ / \ / \ / \ / \
( p | a | s | s | e | n | g | e | r )
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
2020-03-22 02:42:32 +01:00
2020-03-22 01:31:06 +01:00
"
# ADD PASSENGER TO IPFS
2020-03-23 19:07:37 +01:00
IPASSENGER=$(ipfs add -q "$PASSENGER" -w | tail -n 1)
2020-03-22 01:31:06 +01:00
echo "$IPASSENGER" > ~/.zen/tag/${AAH}/_passenger.ipfs
# GET FILE NAME
2020-03-20 17:06:48 +01:00
PASSENGERNAME=$(basename -- "$PASSENGER")
echo "$PASSENGERNAME" > ~/.zen/tag/${AAH}/_passenger.filename
2020-03-22 01:31:06 +01:00
# G1SSB NODE ACCESS
2020-03-20 17:06:48 +01:00
$MY_PATH/tools/natools.py encrypt -p $NODE_G1PUBKEY -i ~/.zen/tag/${AAH}/_passenger.ipfs -o ~/.zen/tag/${AAH}/_passenger.ipfs.crypt
2020-03-22 01:31:06 +01:00
# BB OWNER ACCESS
2020-03-20 17:06:48 +01:00
openssl aes-256-cbc -pbkdf2 -k "$BB" -salt -in ~/.zen/tag/${AAH}/_passenger.ipfs -out ~/.zen/tag/${AAH}/_passenger.ipfs.BB.aes
2020-03-22 01:31:06 +01:00
# CLEAN CLEARTEXT IPFS link
2020-03-20 17:06:48 +01:00
rm -r ~/.zen/tag/${AAH}/_passenger.ipfs
2020-03-22 01:31:06 +01:00
# ZEN ECONOMY: ZEN READ payment + PARK rental
2020-03-20 18:37:56 +01:00
echo "$READ" > ~/.zen/tag/${AAH}/_passenger.read
echo "$PARK" > ~/.zen/tag/${AAH}/_passenger.park
2020-03-22 01:31:06 +01:00
echo "
2020-03-22 02:42:32 +01:00
_passenger.filename : $PASSENGERNAME
_passenger.ipfs : $IPASSENGER
2020-03-22 01:31:06 +01:00
# #### ## ##### ###### #####
# # # # # # # # # #
# # # # # # # ##### # #
# # # ###### # # # # #
# # # # # # # # # #
###### #### # # ##### ###### #####
2020-03-22 02:42:32 +01:00
##################################################################
# Decode _passenger.ipfs with BB Passphrase
##################################################################
openssl aes-256-cbc -pbkdf2 -k \"$BB\" -d -salt -in ~/.zen/tag/${AAH}/_passenger.ipfs.BB.aes -out /tmp/_passenger.ipfs
2020-03-23 19:07:37 +01:00
ipfs get -o /tmp \"/ipfs/$IPASSENGER/$PASSENGERNAME\" && vlc \"/tmp/$PASSENGERNAME\" 2>/dev/null
2020-03-22 02:42:32 +01:00
READ : $READ Zen
PARK : $PARK Zen
2020-03-22 01:31:06 +01:00
"
2020-03-22 04:45:20 +01:00
fi
2020-03-22 01:31:06 +01:00
########################################################################
2020-03-22 04:45:20 +01:00
# if [[ -d $PASSENGER ]]; then
2020-03-22 01:31:06 +01:00
########################################################################
# TODO # tar.gz and encrypt a whole directory #
# tar -zcf - directory | openssl aes-128-cbc -pbkdf2 -k "$BB" -salt -out directory.tar.gz.aes # Encrypt
# openssl aes-128-cbc -pbkdf2 -k "$BB" -d -salt -in directory.tar.gz.aes | tar -xz -f - # Decrypt
########################################################################
2020-03-22 04:45:20 +01:00
2020-03-18 01:47:10 +01:00
2020-03-20 04:06:36 +01:00
###########################################################
2020-03-22 01:31:06 +01:00
# Copy TAG into IPFS + ipfs name publish -k ${AA}.key
2020-03-20 04:06:36 +01:00
###########################################################
2020-03-22 01:31:06 +01:00
# ZenTAG CHAIN
2020-03-20 04:06:36 +01:00
echo "0" > ~/.zen/tag/${AAH}/_chain.n # Tag modification number (0 first)
2020-03-22 01:31:06 +01:00
NANODATE=$(date -u +%s%N)
2020-03-20 04:06:36 +01:00
echo "$NANODATE" > ~/.zen/tag/${AAH}/_chain.nanodate # Nanodate notification
2020-03-18 01:47:10 +01:00
2020-03-22 02:42:32 +01:00
echo "
_|_ _.o._
(_| |(_||| | : $NANODATE : 0
"
2020-03-20 04:06:36 +01:00
I=$(ipfs add -qr ~/.zen/tag/${AAH} | tail -n 1)
echo "${I}" > ~/.zen/tag/${AAH}/_chain
2020-03-20 17:06:48 +01:00
2020-03-22 01:31:06 +01:00
# Double IPFS add for _chain INIT
2020-03-20 17:06:48 +01:00
I=$(ipfs add -qr ~/.zen/tag/${AAH} | tail -n 1)
2020-03-20 04:06:36 +01:00
cp -f ~/.zen/tag/${AAH}/_chain ~/.zen/tag/${AAH}/_chain.prev
2020-03-20 17:06:48 +01:00
echo "${I}" > ~/.zen/tag/${AAH}/_chain
2020-03-22 01:31:06 +01:00
# IPNS name publish
2020-03-20 17:06:48 +01:00
J=$(ipfs name publish -k ${AA}.key --quieter /ipfs/${I})
2020-03-20 04:06:36 +01:00
echo "${J}" > ~/.zen/tag/${AAH}/_ipns
2020-03-22 02:42:32 +01:00
# INDEXING ZenTag to SWARM
2020-03-22 01:31:06 +01:00
mkdir -p ~/.zen/ipfs/.$IPFSNODEID/TAG/${J}
echo "${AA}" > ~/.zen/ipfs/.$IPFSNODEID/TAG/${J}/_tag.uid
2020-03-22 02:42:32 +01:00
IWALLETS=$(ipfs add -rHq ~/.zen/ipfs | tail -n 1)
NODEIPNS=$(ipfs name publish --quieter /ipfs/$IWALLETS)
echo "
_ ____
(_)___ / __/____
/ / __ \/ /_/ ___/
/ / /_/ / __(__ )
/_/ .___/_/ /____/
/_/
$I
ZenTAG : ipfs ls /ipns/$J
NODE index : ipfs ls /ipns/$NODEIPNS/.$IPFSNODEID
"
2020-03-18 01:47:10 +01:00
2020-03-22 01:31:06 +01:00
########################################################################
# CREATE ZenTAG READ/WRITE QRCODES
### PRINTER IS HOOKED TO G1SSB NODE = G1DAB
2020-03-20 17:06:48 +01:00
########################################################################
2020-03-22 02:42:32 +01:00
echo "
_ _ _ _ _ _
/ \|_) / / \| \|_
\_X| \ \_\_/|_/|_ .................................
"
2020-03-20 04:06:36 +01:00
# READ QRCODE
2020-03-22 01:31:06 +01:00
qrencode -s 5 -o ~/.zen/tag/${AAH}/_QRCODE.read.png "RJ:${AA}#${J}"
2020-03-20 04:06:36 +01:00
# WRITE QRCODE
qrencode -s 5 -o ~/.zen/tag/${AAH}/_QRCODE.write.png "BJ:${BB}#${J}"
2020-03-22 02:42:32 +01:00
echo "DONE !!
${AA}"
2020-03-20 17:06:48 +01:00
2020-03-22 04:45:20 +01:00
########################################################################
# SBOT PUBLISH
########################################################################
echo '
__ _ ____
(_ |_)/ \|
__)|_)\_/|
'
sbotc publish '{"type":"post","text":"ZenTAG created"}'
2020-03-22 01:31:06 +01:00
########################################################################
# IPFS CLEANING (MANUAL OPERATION)
2020-03-20 17:06:48 +01:00
########################################################################
2020-03-22 02:42:32 +01:00
echo "
>>> CLEAN IPFS REPO
##################################################################
2020-03-20 17:06:48 +01:00
ipfs pin ls -q --type recursive | xargs ipfs pin rm && ipfs repo gc
rm -f ~/.ipfs/keystore/*.key
rm -Rf ~/.zen/tag/*
2020-03-22 00:03:47 +01:00
rm -Rf ~/.zen/ipfs/.$IPFSNODEID/TAG
2020-03-20 17:06:48 +01:00
##################################################################"
########################################################################
2020-03-20 04:06:36 +01:00
exit 0