#!/bin/bash # # .---. . . # | | | # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-' # ' ' --' --' -' - -' ' ' -' -' -' ' - --' # # Freedom in the Cloud # # A script for using avahi to discover peers and update zeronet trackers # Blogs and fora are discovered on the network and then published # to an index file which can be opened in a browser # License # ======= # # Copyright (C) 2015 Bob Mottram # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # 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. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . WEB_PAGE_TITLE="Freedombone Mesh" TRACKER_PORT=6969 ZERONET_INSTALL=/opt/zeronet MY_USERNAME=$USER if [ ! -d $ZERONET_INSTALL ]; then if [ -d /home/$MY_USERNAME/zeronet ]; then ZERONET_INSTALL=/home/$MY_USERNAME/zeronet else exit 0 fi fi BOOTSTRAP_FILE=$ZERONET_INSTALL/bootstrap BLOGS_FILE=$ZERONET_INSTALL/freedombone-blogs FORUM_FILE=$ZERONET_INSTALL/freedombone-fora ZERONET_INDEX=/home/$MY_USERNAME/mesh.html function create_index { if [ -f $ZERONET_INDEX ]; then return fi echo '' > $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo "$WEB_PAGE_TITLE" >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo "

$WEB_PAGE_TITLE

" >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo "

Your Sites

" >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo '
    ' >> $ZERONET_INDEX echo "
  1. My Blog
  2. " >> $ZERONET_INDEX echo "
  3. My Forum
  4. " >> $ZERONET_INDEX echo '
' >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo "

On the Mesh

" >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo '
    ' >> $ZERONET_INDEX echo "
  1. Blogs
  2. " >> $ZERONET_INDEX echo "
  3. Fora
  4. " >> $ZERONET_INDEX echo '
' >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX echo '' >> $ZERONET_INDEX } function create_header { header_file=${1}-header.html if [ -f $header_file ]; then return fi echo '' > $header_file echo '' >> $header_file echo '' >> $header_file echo "$WEB_PAGE_TITLE - $2" >> $header_file echo '' >> $header_file echo '' >> $header_file echo '' >> $header_file echo "

$2

" >> $header_file } function create_footer { footer_file=${1}-footer.html if [ -f $footer_file ]; then return fi echo '' >> $footer_file echo '' >> $footer_file } if [ ! -d /etc/avahi ]; then exit 0 fi # Create a list of bootstrap nodes TEMPFILE_BASE=/tmp/tmpzeronetavahibase.txt TEMPFILE=/tmp/tmpzeronetavahi.txt avahi-browse -atr > $TEMPFILE_BASE cat $TEMPFILE_BASE | grep "Workstation\|hostname =\|address =\|port =" > $TEMPFILE if [ ! -f $TEMPFILE ]; then exit 1 fi if [ -f $BOOTSTRAP_FILE.new ]; then rm -f $BOOTSTRAP_FILE.new fi state=0 address="" peer="" while IFS='' read -r line || [[ -n "$line" ]]; do if [ ${state} -eq "2" ]; then if [[ $line == *"address ="* ]]; then address=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') echo "http $peer:$TRACKER_PORT/announce None" >> $BOOTSTRAP_FILE.new state=0 fi fi if [ ${state} -eq "1" ]; then if [[ $line == *"hostname ="* ]]; then peer=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') state=2 fi fi if [[ $line == *"Workstation"* && $line == "= "* ]]; then state=1 fi done < "$TEMPFILE" # detect blogs in the mesh if [ -f $BLOGS_FILE.new ]; then rm -f $BLOGS_FILE.new fi cat $TEMPFILE_BASE | grep "ZeroNet Blog\|hostname =\|address =\|port =\|txt-record =" > $TEMPFILE state=0 address="" peer="" echo '
    ' >> $BLOGS_FILE.new while IFS='' read -r line || [[ -n "$line" ]]; do if [ ${state} -eq "3" ]; then if [[ $line == *"txt-record ="* ]]; then blog_url=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') echo "
  1. ${peer}
  2. " >> $BLOGS_FILE.new state=0 fi fi if [ ${state} -eq "2" ]; then if [[ $line == *"address ="* ]]; then address=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') state=3 fi fi if [ ${state} -eq "1" ]; then if [[ $line == *"hostname ="* ]]; then peer=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') state=2 fi fi if [[ $line == *"ZeroNet Blog"* && $line == "= "* ]]; then state=1 fi done < "$TEMPFILE" echo '
' >> $BLOGS_FILE.new # detect fora in the mesh if [ -f $FORUM_FILE.new ]; then rm -f $FORUM_FILE.new fi cat $TEMPFILE_BASE | grep "ZeroNet Forum\|hostname =\|address =\|port =\|txt-record =" > $TEMPFILE state=0 address="" peer="" echo '
    ' >> $FORUM_FILE.new while IFS='' read -r line || [[ -n "$line" ]]; do if [ ${state} -eq "3" ]; then if [[ $line == *"txt-record ="* ]]; then forum_url=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') echo "
  1. ${peer}
  2. " >> $FORUM_FILE.new state=0 fi fi if [ ${state} -eq "2" ]; then if [[ $line == *"address ="* ]]; then address=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') state=3 fi fi if [ ${state} -eq "1" ]; then if [[ $line == *"hostname ="* ]]; then peer=$(echo $line | awk -F '[' '{print $2}' | awk -F ']' '{print $1}') state=2 fi fi if [[ $line == *"ZeroNet Forum"* && $line == "= "* ]]; then state=1 fi done < "$TEMPFILE" echo '
      ' >> $FORUM_FILE.new rm -f $TEMPFILE_BASE rm -f $TEMPFILE cp -f $BOOTSTRAP_FILE.new $BOOTSTRAP_FILE rm -f $BOOTSTRAP_FILE.new if [ -d /home/zeronet ]; then sudo chown zeronet:zeronet $BOOTSTRAP_FILE fi # make some html headers and footers create_header $BLOGS_FILE "Blogs" create_header $FORUM_FILE "Fora" create_footer $BLOGS_FILE create_footer $FORUM_FILE # make the index page create_index # create a web page showing the available blogs cat ${BLOGS_FILE}-header.html ${BLOGS_FILE}.new ${BLOGS_FILE}-footer.html > ${BLOGS_FILE}.html rm -f ${BLOGS_FILE}.new if [ -d /home/zeronet ]; then sudo chown zeronet:zeronet $BLOGS_FILE fi # create a web page showing the available fora cat ${FORUM_FILE}-header.html ${FORUM_FILE}.new ${FORUM_FILE}-footer.html > ${FORUM_FILE}.html rm -f ${FORUM_FILE}.new if [ -d /home/zeronet ]; then sudo chown zeronet:zeronet $FORUM_FILE fi exit 0