From fccbbfaf4ed028b16fce04d9ca75dca4169f71d0 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Sun, 29 Jan 2017 13:37:13 +0000
Subject: [PATCH] onion addresses for known xmpp servers

---
 src/freedombone-app-xmpp | 151 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 151 insertions(+)

diff --git a/src/freedombone-app-xmpp b/src/freedombone-app-xmpp
index a966c8c72..b3fede201 100755
--- a/src/freedombone-app-xmpp
+++ b/src/freedombone-app-xmpp
@@ -64,6 +64,110 @@ xmpp_variables=(ONION_ONLY
                 DEFAULT_DOMAIN_NAME
                 XMPP_DOMAIN_CODE)
 
+function xmpp_add_onion_address {
+    domain_name="$1"
+    onion_address="$2"
+    if [ ${#domain_name} -eq 0 ]; then
+        return
+    fi
+    if [ ${#onion_address} -eq 0 ]; then
+        return
+    fi
+    if grep -q "[\"${domain_name}\"]" /etc/prosody/prosody.cfg.lua; then
+        sed -i "s|[\"${domain_name}\"].*|[\"${domain_name}\"] = \"${onion_address}\";|g" /etc/prosody/prosody.cfg.lua
+    else
+        sed -i "/onions_map = {/a  [\"${domain_name}\"] = \"${onion_address}\";" /etc/prosody/prosody.cfg.lua
+    fi
+    systemctl restart prosody
+}
+
+function xmpp_add_onion_address_interactive {
+    data=$(tempfile 2>/dev/null)
+    trap "rm -f $data" 0 1 2 5 15
+    dialog --backtitle $"Freedombone Control Panel" \
+           --title $"Add an ICANN to Onion domain mapping" \
+           --form $"Sepecify an ICANN domain name and its equivalent onion address\n" 9 50 2 \
+           $"Domain:" 1 1 "" 1 18 26 25 \
+           $"Onion address:" 2 1 "" 2 18 26 25 \
+           2> $data
+    sel=$?
+    case $sel in
+        1) return;;
+        255) return;;
+    esac
+    domain_name=$(cat $data | sed -n 1p)
+    onion_address=$(cat $data | sed -n 2p)
+    if [[ "$onion_address" != *".onion" ]]; then
+        return
+    fi
+    if [[ "$domain_name" != *"."* ]]; then
+        return
+    fi
+
+    xmpp_add_onion_address "$domain_name" "$onion_address"
+
+    dialog --title $"Add an ICANN to Onion domain mapping" \
+           --msgbox $"${domain_name} -> ${onion_address} added" 6 70
+}
+
+function xmpp_remove_onion_address {
+    domain_name="$1"
+    if [ ${#domain_name} -eq 0 ]; then
+        return
+    fi
+    if grep -q "[\"${domain_name}\"]" /etc/prosody/prosody.cfg.lua; then
+        sed -i "/[\"${domain_name}\"]/d" /etc/prosody/prosody.cfg.lua
+    fi
+
+    if grep -q "= \"${domain_name}\";" /etc/prosody/prosody.cfg.lua; then
+        sed -i "/= \"${domain_name}\";/d" /etc/prosody/prosody.cfg.lua
+    fi
+    systemctl restart prosody
+}
+
+function xmpp_remove_onion_address_interactive {
+    data=$(tempfile 2>/dev/null)
+    trap "rm -f $data" 0 1 2 5 15
+    dialog --title $"Remove ICANN to Onion domain mapping" \
+           --backtitle $"Freedombone Control Panel" \
+           --inputbox $'Enter the domain name or onion address to be removed' 8 60 2>$data
+    sel=$?
+    case $sel in
+        0) domain_name=$(<$data)
+           if [[ "$domain_name" != *"."* ]]; then
+               return
+           fi
+           xmpp_remove_onion_address "$domain_name"
+           dialog --title $"Remove an ICANN to Onion domain mapping" \
+                  --msgbox $"${domain_name} removed" 6 70
+           ;;
+    esac
+}
+
+function configure_interactive_xmpp {
+    while true
+    do
+        data=$(tempfile 2>/dev/null)
+        trap "rm -f $data" 0 1 2 5 15
+        dialog --backtitle $"Freedombone Control Panel" \
+               --title $"XMPP" \
+               --radiolist $"Choose an operation:" 12 70 3 \
+               1 $"Add an ICANN to onion domain mapping" off \
+               2 $"Remove an ICANN to onion domain mapping" off \
+               3 $"Exit" on 2> $data
+        sel=$?
+        case $sel in
+            1) return;;
+            255) return;;
+        esac
+        case $(cat $data) in
+            1) xmpp_add_onion_address_interactive;;
+            2) xmpp_remove_onion_address_interactive;;
+            3) break;;
+        esac
+    done
+}
+
 function remove_user_xmpp {
     remove_username="$1"
     ${PROJECT_NAME}-pass -u $remove_username --rmapp xmpp
@@ -214,6 +318,13 @@ function upgrade_xmpp_server {
         fi
         rm ${INSTALL_DIR}/${prosody_filename}.tar.gz
     fi
+
+    # add onion addresses for known servers
+    if ! grep -q "onions_map =" /etc/prosody/prosody.cfg.lua; then
+        echo '' >> /etc/prosody/prosody.cfg.lua
+        xmpp_onion_addresses /etc/prosody/prosody.cfg.lua
+    fi
+
     systemctl restart prosody
 }
 
@@ -432,12 +543,52 @@ function xmpp_modules {
     echo '};' >> $filename
 }
 
+function xmpp_onion_addresses {
+    filename=$1
+    echo 'onions_map = {' >> $filename
+    echo '  ["anonymitaet-im-inter.net"] = "rwf5skuv5vqzcdit.onion";' >> $filename
+    echo '  ["autistici.org"] = "wi7qkxyrdpu5cmvr.onion";' >> $filename
+    echo '  ["jabber.calyxinstitute.org"] = "ijeeynrc6x2uy5ob.onion";' >> $filename
+    echo '  ["jabber.ccc.de"] = "okj7xc6j2szr2y75.onion";' >> $filename
+    echo '  ["cloak.dk"] = "m2dsl4banuimpm6c.onion";' >> $filename
+    echo '  ["jabber.cryptoparty.is"] = "cryjabkbdljzohnp.onion";' >> $filename
+    echo '  ["daemons.cf"] = "daemon4jidu2oig6.onion";' >> $filename
+    echo '  ["dukgo.com"] = "wlcpmruglhxp6quz.onion";' >> $filename
+    echo '  ["evil.im"] = "evilxro6nvjuvxqo.onion";' >> $filename
+    echo '  ["xmpp.evil.im"] = "evilxro6nvjuvxqo.onion";' >> $filename
+    echo '  ["inventati.org"] = "wi7qkxyrdpu5cmvr.onion";' >> $filename
+    echo '  ["jabber.ipredator.se"] = "3iffdebkzzkpgipa.onion";' >> $filename
+    echo '  ["jabber-germany.de"] = "dbbrphko5tqcpar3.onion";' >> $filename
+    echo '  ["kode.im"] = "ihkw7qy3tok45dun.onion";' >> $filename
+    echo '  ["im.koderoot.net"] = "ihkw7qy3tok45dun.onion";' >> $filename
+    echo '  ["jabber.lqdn.fr"] = "jabber63t4r2qi57.onion";' >> $filename
+    echo '  ["jabber.otr.im"] = "5rgdtlawqkcplz75.onion";' >> $filename
+    echo '  ["otromundo.cf"] = "arauemwe2utqqzye.onion";' >> $filename
+    echo '  ["patchcord.be"] = "xsydhi3dnbjuatpz.onion";' >> $filename
+    echo '  ["riseup.net"] = "4cjw6cwpeaeppfqz.onion";' >> $filename
+    echo '  ["xmpp.riseup.net"] = "4cjw6cwpeaeppfqz.onion";' >> $filename
+    echo '  ["rows.io"] = "yz6yiv2hxyagvwy6.onion";' >> $filename
+    echo '  ["xmpp.rows.io"] = "yz6yiv2hxyagvwy6.onion";' >> $filename
+    echo '  ["securejabber.me"] = "giyvshdnojeivkom.onion";' >> $filename
+    echo '  ["so36.net"] = "s4fgy24e2b5weqdb.onion";' >> $filename
+    echo '  ["jabber.so36.net"] = "s4fgy24e2b5weqdb.onion";' >> $filename
+    echo '  ["jabber.systemli.org"] = "x5tno6mwkncu5m3h.onion";' >> $filename
+    echo '  ["taolo.ga"] = "l3ybpw4vs6ie5rv2.onion";' >> $filename
+    echo '  ["tchncs.de"] = "duvfmyqmdlyvc3mi.onion";' >> $filename
+    echo '  ["wtfismyip.com"] = "ofkztxcohimx34la.onion";' >> $filename
+    echo '  ["prosody.xmpp.is"] = "y2qmqomqpszzryei.onion";' >> $filename
+    echo '  ["xndr.de"] = "trcubpttd6zkc3tf.onion";' >> $filename
+    echo '};' >> $filename
+}
+
 function xmpp_create_config {
     echo "admins = { \"$MY_USERNAME@$DEFAULT_DOMAIN_NAME\" }" > /etc/prosody/prosody.cfg.lua
     echo 'plugin_paths = { "/var/lib/prosody/prosody-modules" }' >> /etc/prosody/prosody.cfg.lua
     echo '' >> /etc/prosody/prosody.cfg.lua
     xmpp_modules /etc/prosody/prosody.cfg.lua
     echo '' >> /etc/prosody/prosody.cfg.lua
+    xmpp_onion_addresses /etc/prosody/prosody.cfg.lua
+    echo '' >> /etc/prosody/prosody.cfg.lua
     echo 'allow_registration = false;' >> /etc/prosody/prosody.cfg.lua
     echo '' >> /etc/prosody/prosody.cfg.lua
     echo 'daemonize = true;' >> /etc/prosody/prosody.cfg.lua
-- 
GitLab