diff --git a/.install/scuttlebutt.sh b/.install/scuttlebutt.sh index 7ae3c1e..c253608 100755 --- a/.install/scuttlebutt.sh +++ b/.install/scuttlebutt.sh @@ -1,5 +1,5 @@ #!/bin/bash - +# https://pad.p2p.legal/scuttlebot?both#Social-Layer-ScuttleBut-server scuttlebutt() { echo "TODO" } diff --git a/iptubes b/iptubes index 06e1a72..ea94ab0 160000 --- a/iptubes +++ b/iptubes @@ -1 +1 @@ -Subproject commit 06e1a72d039d478a3fcf1341c1f7db1cae75b0e9 +Subproject commit ea94ab06ea044c025bf583153c3f6e02beaac49b diff --git a/zen/functions.sh b/zen/functions.sh index 82e1b1a..9f4974a 100755 --- a/zen/functions.sh +++ b/zen/functions.sh @@ -44,9 +44,9 @@ return 0 ######################################################################## -# PUBLISH ~/.zen/wallets ON /ipns/$NODEIPNS -function wallets_ipfs_publish (){ - IWALLETS=$(ipfs add -rHq '~/.zen/wallets' | tail -n 1) +# PUBLISH ~/.zen/ipfs ON /ipns/$NODEIPNS +function ipfs_ipfs_publish (){ + IWALLETS=$(ipfs add -rHq '~/.zen/ipfs' | tail -n 1) NODEIPNS=$(ipfs name publish --quieter /ipfs/$IWALLETS) echo $IWALLETS } diff --git a/zen/g1_TX2ZEN.sh b/zen/g1_TX2ZEN.sh index 2769db9..a90825c 100755 --- a/zen/g1_TX2ZEN.sh +++ b/zen/g1_TX2ZEN.sh @@ -37,8 +37,8 @@ DUNITERURL="https://$DUNITERNODE" IPFSNODEID=$(ipfs id -f='\n') [[ $IPFSNODEID == "" ]] && echo "$USER Please Install IPFS !!" && exit 1 [[ ! -d ~/.zen/scan ]] && mkdir -p ~/.zen/scan # Directory containing G1 blockchain incoming TX Scan -[[ ! -d ~/.zen/wallets ]] && mkdir -p ~/.zen/wallets # Directory where NODE store SMS & other Channel Wallets -[[ ! -d ~/.zen/wallets_swarm ]] && mkdir -p ~/.zen/wallets_swarm # Local copy of all SSB friends IPFS Nodes published wallets +[[ ! -d ~/.zen/ipfs ]] && mkdir -p ~/.zen/ipfs # Directory where NODE store SMS & other Channel Wallets +[[ ! -d ~/.zen/ipfs_swarm ]] && mkdir -p ~/.zen/ipfs_swarm # Local copy of all SSB friends IPFS Nodes published ipfs ######################################################################################################### # GET G1 PUBKEY FROM SCUTTLEBUTT or $2 (DEBUG) diff --git a/zen/ssb_INIT.sh b/zen/ssb_INIT.sh index 00d5601..c358e9e 100755 --- a/zen/ssb_INIT.sh +++ b/zen/ssb_INIT.sh @@ -37,17 +37,17 @@ IPFSNODEID=$(ipfs id -f='\n') [[ ! -f ~/.ssb/secret.dunikey ]] && $MY_PATH/tools/secret2dunikey.sh NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) -# CREATE ~/.zen/wallets/.$IPFSNODEID/G1SSB +# CREATE ~/.zen/ipfs/.$IPFSNODEID/G1SSB ############################################## [[ $IPFSNODEID == "" ]] && echo "ERROR missing IPFSNODEID NODE_G1PUBKEY" && exit 1 -mkdir -p ~/.zen/wallets/.$IPFSNODEID/G1SSB +mkdir -p ~/.zen/ipfs/.$IPFSNODEID/G1SSB ## PUBLISH ABOUT MESSAGE ############################################## ssbpub=$(sbotc whoami | jq -r .id) [[ $ssbpub == "" ]] && echo "ERROR missing ssb-server ?" && exit 1 # G1 wallet QRCode -qrcodefile=~/.zen/wallets/.$IPFSNODEID/G1SSB/_g1.qrcode.png +qrcodefile=~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.qrcode.png qrencode -s 5 -o $qrcodefile "$NODE_G1PUBKEY" # Publish About message name=${qrcodefile##*/} @@ -55,10 +55,12 @@ id="$(sbotc blobs.add < $qrcodefile)" type="$(file -b --mime-type $qrcodefile)" size="$(wc -c < $qrcodefile)" # Publish About message -sbot publish --type about --about $ssbpub --description "Astroport G1SSB Node\nipfs ls /ipns/$IPFSNODEID" --name "$USER@$(cat /etc/hostname)" --image "$id" -sbotc publish '{"type":"post","text":"['"$name"']('"$id"')","mentions":[{"link":"'"$id"'","name":"'"$name"'","size":'"$size"',"type":"'"$type"'"}]}' +sbot publish --type about --about $ssbpub --description "Welcome to [Astroport](https://astroport.com) G1SSB/IPFS Station [$IPFSNODEID](http://$(cat /etc/hostname).local/ipns/$IPFSNODEID)" --name "$USER@$(cat /etc/hostname)" --image "$id" +#sbotc publish '{"type":"about","about":"'"$ssbpub"'","description":"Welcome to [Astroport](https://astroport.com) G1SSB/IPFS Station\nhttp://'$(cat /etc/hostname)'.local/ipns/$IPFSNODEID","name":'"'$USER'@'$(cat /etc/hostname)'"',"image":'"'$id'"'}' + +sbotc publish '{"type":"post","text":"[G1SSB_Wallet.png]('"$id"')\nUse https://cesium.app to send payment.\nComment your transaction with '"'Zen'"' to order ZenTag...","mentions":[{"link":"'"$id"'","name":"'"$name"'","size":'"$size"',"type":"'"$type"'"}]}' # COPY NODE G1SSB ID to IPFS -echo "$ssbpub" > ~/.zen/wallets/.$IPFSNODEID/G1SSB/_ssb.whoami -echo "$NODE_G1PUBKEY" > ~/.zen/wallets/.$IPFSNODEID/G1SSB/_g1.pubkey +echo "$ssbpub" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_ssb.whoami +echo "$NODE_G1PUBKEY" > ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.pubkey diff --git a/zen/tools/img2html.py b/zen/tools/img2html.py new file mode 100644 index 0000000..032ce3f --- /dev/null +++ b/zen/tools/img2html.py @@ -0,0 +1,166 @@ +#!/usr/bin/python +# Image to HTML converter +# Copyright (C) January 2019 Neil Fraser +# https://neil.fraser.name/ + +# This program is free software; you can redistribute it and/or +# modify it under the terms of version 2 of the GNU General +# Public License as published by the Free Software Foundation. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# http://www.gnu.org/ + +# Loads JPEGs, PNGs and GIFs from websites and converts them to HTML. +# Usage: img2html.py?img=www.example.com/image.jpg + +from PIL import Image +import cgi +import cStringIO +import math +import re +import sys +import urllib + + +# Throw a 500 error and terminate the program. +def die(msg): + print('Status:500') + print('Content-type: text/plain') + print('') + print('Error: ' + msg) + sys.exit() + +def is_valid_url(url): + regex = re.compile( + r'^https?://' # http:// or https:// + r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' # domain... + r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or IP + r'(?::\d+)?' # optional port + r'(?:/?|[/?]\S+)$', re.IGNORECASE) + return url is not None and regex.search(url) + +form = cgi.FieldStorage() +if not form.has_key('img'): + die('"img" paramater not found.') + +#rows = min(512+1, int(form['y'].value, 10)) + +remoteurl = form['img'].value +remoteurl = remoteurl.strip() +if not remoteurl: + die('No image URL specified.') +if not re.match('\\w+:\/\/', remoteurl): + remoteurl = 'http://' + remoteurl +if not is_valid_url(remoteurl): + die('Invalid image URL. Please go back and check the address.') + +# Reduce load on my server, use cached tux.html if the request is tux.jpg +if remoteurl == 'https://neil.fraser.name/software/img2html/tux.jpg': + f = open('/home/neil/html/software/img2html/tux.html') + print("Content-type: text/html\n\n") + print(f.read()) + f.close() + sys.exit() + +try: + f = urllib.urlopen(remoteurl) + data = f.read() +except Exception as err: + die('Invalid image URL: %s' % err) +oldsize = int(round(len(data) / 1024)) + +cStr = cStringIO.StringIO(data) +image = Image.open(cStr) +image = image.convert('RGBA') +background = Image.new('RGBA', image.size, (255, 255, 255)) +background.paste(image, mask=image.split()[3]) # 3 is the alpha channel +image = background +image = image.convert('RGB') + +maxPixels = 100*100 +(oldX, oldY) = image.size +if oldX * oldY > maxPixels: + factor = math.sqrt(maxPixels / float(oldX * oldY)) + newX = int(round(oldX * factor)) + newY = int(round(oldY * factor)) + image.thumbnail((newX, newY), Image.ANTIALIAS) + msg = '[This image is too large to comfortably handle, so it has been scaled down to %s%% of its original size.]

' % int(100.0 * newX / oldX); +else: + newX = oldX + newY = oldY + msg = '' + + +# Scan the image pixel by pixel and build the HTML table. +table = ''; +firstrow = True # Disable RLE for first row of each table segment (dodge Mozilla bug) +for y in range(newY): + row = ''; + for x in range(newX): + try: + (r, g, b) = image.getpixel((x, y)) + except: + # Some images throw a range error on some (transparent?) pixels. + (r, g, b) = (255, 255, 255) + if x == newX: + # Dummy run to clear the colspan buffer. + rgb = '' + else: + rgb = '%02x%02x%02x' % (r, g, b) + if x == 0: # Initialise the RLE (Run Length Encoding) + prev_rgb = rgb + span = 0 + span += 1 + if rgb != prev_rgb or firstrow: + if span == 1: # One pixel. + row += "" % prev_rgb + else: # A run of multiple pixels with the same colour. + row += "" % (prev_rgb, span) + span = 0 + prev_rgb = rgb + table += "%s\n" % row + + # Segment the table so that MSIE renders it in pieces instead of waiting till the end. + if y != 0 and (y == 5 or y % 15 == 0) and y < newY - 10: + table += "\n" + firstrow = True + else: + firstrow = False +newsize = int(round(len(table) / 1024)) + + +# We're done. Now print it all out (this is what takes the time). +print("Content-type: text/html\n") + +print(""" + + +img2html: {remoteurl} + + + +
+
Original Image +
{remoteurl} +
{oldX}x{oldY} +
{oldsize}KB +

+{msg} +

Text Image +
{newX}x{newY} +
{newsize}KB +
+ +
+{table}
+ +

+

Done + + +""".format(remoteurl=remoteurl, table=table, msg=msg, + oldsize=oldsize, newsize=newsize, + oldX=oldX, oldY=oldY, newX=newX, newY=newY)) diff --git a/zen/zen_MAKE.sh b/zen/zen_MAKE.sh index 19d6a83..c47c219 100755 --- a/zen/zen_MAKE.sh +++ b/zen/zen_MAKE.sh @@ -77,7 +77,7 @@ NODE_G1PUBKEY=$(cat ~/.ssb/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) AA=$(echo $($MY_PATH/tools/diceware.sh 6 | xargs) | sed s/\ /_/g ) # ZenTag Name = Diceware_6_words AAH=$(echo -n ${AA} | sha256sum | cut -d ' ' -f 1) # ZenTag Name SHA256 # Create Unique Zentag for all IPFS SWARM! -while [[ $(grep -Rwl "$AA" ~/.zen/wallets_swarm/.Qm*/TAG/) ]]; do +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 @@ -175,8 +175,8 @@ J=$(ipfs name publish -k ${AA}.key --quieter /ipfs/${I}) echo "${J}" > ~/.zen/tag/${AAH}/_ipns # REPORT ZenTag to SWARM -mkdir -p ~/.zen/wallets/.$IPFSNODEID/TAG/ -echo "${AA}" > ~/.zen/wallets/.$IPFSNODEID/TAG/${J} +mkdir -p ~/.zen/ipfs/.$IPFSNODEID/TAG/ +echo "${AA}" > ~/.zen/ipfs/.$IPFSNODEID/TAG/${J} ### G1TAG PRINT TYPE:DATA:IPNS ######################################################################## @@ -194,7 +194,7 @@ echo "################################################################## ipfs pin ls -q --type recursive | xargs ipfs pin rm && ipfs repo gc rm -f ~/.ipfs/keystore/*.key rm -Rf ~/.zen/tag/* -rm -Rf ~/.zen/wallets/.$IPFSNODEID/TAG +rm -Rf ~/.zen/ipfs/.$IPFSNODEID/TAG ##################################################################" ######################################################################## exit 0