Преглед на файлове

Merge branch 'stretch' of https://github.com/bashrc/freedombone

Bob Mottram преди 7 години
родител
ревизия
2784c6bd45
променени са 8 файла, в които са добавени 553 реда и са изтрити 151 реда
  1. 33
    0
      doc/EN/app_bdsmail.org
  2. 4
    0
      doc/EN/apps.org
  3. 31
    9
      src/freedombone-app-bdsmail
  4. 15
    12
      src/freedombone-app-pleroma
  5. 3
    2
      src/freedombone-controlpanel-user
  6. 25
    4
      src/freedombone-utils-i2p
  7. 306
    0
      website/EN/app_bdsmail.html
  8. 136
    124
      website/EN/apps.html

+ 33
- 0
doc/EN/app_bdsmail.org Целия файл

1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombone, dlna
5
+#+DESCRIPTION: How to use BDS Mail
6
+#+OPTIONS: ^:nil toc:nil
7
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="freedombone.css" />
8
+
9
+#+BEGIN_CENTER
10
+[[file:images/logo.png]]
11
+#+END_CENTER
12
+
13
+#+BEGIN_EXPORT html
14
+<center>
15
+<h1>BDS Mail</h1>
16
+</center>
17
+#+END_EXPORT
18
+
19
+BDS Mail (aka "Brain Dead Simple Mail") is an optional addition to the existing email server which comes installed as default. It creates an extra folder within the Mutt client which allows you to send and receive email using [[https://en.wikipedia.org/wiki/I2P][i2p]] as the transport layer. This solves the problem of being blocked by dubious systems and also the problem of user friendly email encryption. If you're behind a hostile firewall which you don't control and which blocks all ports, this system is still likely to work. You can use GPG as an additional encryption layer if you prefer, but it's not strictly necessary because you already have the i2p public key system to ensure end-to-end security.
20
+
21
+It's unlikely that many people will use this. If it's hard to persuade anyone to use GPG or Enigmail then it will be /next to impossible/ to persuade them to switch to BDS Mail unless they're already obsessive about technical security. However, this provides yet another option for reasonably secure communications if other methods fail or are untrustable.
22
+
23
+* Installation
24
+
25
+ssh into the system with:
26
+
27
+#+BEGIN_SRC bash
28
+ssh myusername@mydomain.com -p 2222
29
+#+END_SRC
30
+
31
+Select *Administrator controls* then *App Settings* then *bdsmail*. It may take a while to install, due to the creation of keys.
32
+
33
+After installation if you exit from *Administrator controls* back to the user control panel then select the option to show your email address. You will now have a new bdsmail address which ends with /.b32.i2p/. If you then select *Use Email* to run the Mutt email client you'll notice that you now have a folder called *i2p*. If you select that folder (move up and down with /CTRL+n/ or /CTRL+p/ and open with /CTRL+o/) you can then send email from your new address, or receive mail to it. Just like ordinary email, but with a more random-looking address.

+ 4
- 0
doc/EN/apps.org Целия файл

29
 A web based accounts system for small businesses or freelancers.
29
 A web based accounts system for small businesses or freelancers.
30
 
30
 
31
 [[./app_akaunting.html][How to use it]]
31
 [[./app_akaunting.html][How to use it]]
32
+* BDS Mail
33
+It's like ordinary email, but with [[https://en.wikipedia.org/wiki/I2P][i2p]] as the transport mechanism.
34
+
35
+[[./app_bdsmail.html][How to use it]]
32
 * CryptPad
36
 * CryptPad
33
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
37
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
34
 
38
 

+ 31
- 9
src/freedombone-app-bdsmail Целия файл

34
 SHOW_ON_ABOUT=1
34
 SHOW_ON_ABOUT=1
35
 
35
 
36
 BDSMAIL_REPO="https://github.com/majestrate/bdsmail"
36
 BDSMAIL_REPO="https://github.com/majestrate/bdsmail"
37
-BDSMAIL_COMMIT='8fb00a725edea59b31b8d23eb32e0c21972bb723'
37
+BDSMAIL_COMMIT='6fae61365306ad3c1966a107aa06310ea65fb239'
38
 BDSMAIL_DIR=/etc/bdsmail
38
 BDSMAIL_DIR=/etc/bdsmail
39
 I2P_SAM_PORT=7656
39
 I2P_SAM_PORT=7656
40
 I2P_SMTP_PORT=2525
40
 I2P_SMTP_PORT=2525
41
+I2P_WEB_PORT=8489
42
+I2P_POP3_PORT=1110
41
 
43
 
42
 bdsmail=(MY_USERNAME)
44
 bdsmail=(MY_USERNAME)
43
 
45
 
95
         mkdir /home/$new_username/.mutt
97
         mkdir /home/$new_username/.mutt
96
         cp /etc/skel/.mutt/bdsmail /home/$new_username/.mutt
98
         cp /etc/skel/.mutt/bdsmail /home/$new_username/.mutt
97
     fi
99
     fi
100
+    read_config_param MY_USERNAME
101
+    BDSMAIL_PASSWORD=$(${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail)
98
     sed -i "s|username|$new_username|g" /home/$new_username/.mutt/bdsmail
102
     sed -i "s|username|$new_username|g" /home/$new_username/.mutt/bdsmail
103
+    sed -i "s|password|$BDSMAIL_PASSWORD|g" /home/$new_username/.mutt/bdsmail
99
     bdsmail_configure_users
104
     bdsmail_configure_users
100
-    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $new_username /home/$new_username/Maildir/i2p
105
+    cd $BDSMAIL_DIR
106
+    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $new_username /home/$new_username/Maildir/i2p "$BDSMAIL_PASSWORD"
101
     chown -R $new_username:$new_username /home/$new_username/.mutt
107
     chown -R $new_username:$new_username /home/$new_username/.mutt
102
     echo '0'
108
     echo '0'
103
 }
109
 }
110
 function change_password_bdsmail {
116
 function change_password_bdsmail {
111
     curr_username="$1"
117
     curr_username="$1"
112
     new_user_password="$2"
118
     new_user_password="$2"
119
+
120
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$new_user_password"
121
+
122
+    for d in /home/*/ ; do
123
+        USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
124
+        if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
125
+            sed -i "s|set smtp_url=.*|set smtp_url=smtp://${curr_username}:${new_user_password}@127.0.0.1:$I2P_SMTP_PORT/" /home/${USERNAME}/.mutt/bdsmail
126
+            sed -i "s|set from=.*|set from=${USERNAME}@$(bdsmail_domain)|g" /home/${USERNAME}/.mutt/bdsmail
127
+            chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.mutt/bdsmail
128
+            cd $BDSMAIL_DIR
129
+            $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $curr_username /home/$curr_username/Maildir/i2p "$new_user_password"
130
+        fi
131
+    done
113
 }
132
 }
114
 
133
 
115
 function bdsmail_update_domain {
134
 function bdsmail_update_domain {
333
     echo "i2paddr = 127.0.0.1:$I2P_SAM_PORT" >> $BDSMAIL_DIR/config.ini
352
     echo "i2paddr = 127.0.0.1:$I2P_SAM_PORT" >> $BDSMAIL_DIR/config.ini
334
     echo 'i2pkeyfile = bdsmail-privkey.dat' >> $BDSMAIL_DIR/config.ini
353
     echo 'i2pkeyfile = bdsmail-privkey.dat' >> $BDSMAIL_DIR/config.ini
335
     echo "bindmail = 127.0.0.1:$I2P_SMTP_PORT" >> $BDSMAIL_DIR/config.ini
354
     echo "bindmail = 127.0.0.1:$I2P_SMTP_PORT" >> $BDSMAIL_DIR/config.ini
336
-    echo 'bindweb = 127.0.0.1:8489' >> $BDSMAIL_DIR/config.ini
337
-    echo 'bindpop3 = 127.0.0.1:1110' >> $BDSMAIL_DIR/config.ini
355
+    echo "bindweb = 127.0.0.1:$I2P_WEB_PORT" >> $BDSMAIL_DIR/config.ini
356
+    echo "bindpop3 = 127.0.0.1:$I2P_POP3_PORT" >> $BDSMAIL_DIR/config.ini
338
     echo 'domain = localhost' >> $BDSMAIL_DIR/config.ini
357
     echo 'domain = localhost' >> $BDSMAIL_DIR/config.ini
339
     echo 'maildir = Maildir/i2p' >> $BDSMAIL_DIR/config.ini
358
     echo 'maildir = Maildir/i2p' >> $BDSMAIL_DIR/config.ini
340
     echo 'database = localhost.sqlite' >> $BDSMAIL_DIR/config.ini
359
     echo 'database = localhost.sqlite' >> $BDSMAIL_DIR/config.ini
411
         exit 8934638
430
         exit 8934638
412
     fi
431
     fi
413
 
432
 
414
-    bdsmail_admin_password="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
415
-    ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$bdsmail_admin_password"
416
-    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini admin $BDSMAIL_DIR/Maildir/i2p/admin "$bdsmail_admin_password"
433
+    BDSMAIL_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
434
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$BDSMAIL_PASSWORD"
435
+    cd $BDSMAIL_DIR
436
+    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini admin $BDSMAIL_DIR/Maildir/i2p/admin "$BDSMAIL_PASSWORD"
417
 
437
 
418
     # Create mutt configuration
438
     # Create mutt configuration
419
     if [ ! -d /etc/skel/.mutt ]; then
439
     if [ ! -d /etc/skel/.mutt ]; then
420
         mkdir /etc/skel/.mutt
440
         mkdir /etc/skel/.mutt
421
     fi
441
     fi
422
     echo 'set mbox_type=Maildir' > /etc/skel/.mutt/bdsmail
442
     echo 'set mbox_type=Maildir' > /etc/skel/.mutt/bdsmail
423
-    echo "set smtp_url=smtp://admin:${bdsmail_admin_password}@127.0.0.1:$I2P_SMTP_PORT/" >> /etc/skel/.mutt/bdsmail
443
+    echo "set smtp_url=smtp://username:password@127.0.0.1:$I2P_SMTP_PORT/" >> /etc/skel/.mutt/bdsmail
424
     echo 'set use_from=yes' >> /etc/skel/.mutt/bdsmail
444
     echo 'set use_from=yes' >> /etc/skel/.mutt/bdsmail
425
     echo "set from=username@${bds_domain}" >> /etc/skel/.mutt/bdsmail
445
     echo "set from=username@${bds_domain}" >> /etc/skel/.mutt/bdsmail
426
     echo "set spoolfile=~/Maildir/i2p" >> /etc/skel/.mutt/bdsmail
446
     echo "set spoolfile=~/Maildir/i2p" >> /etc/skel/.mutt/bdsmail
435
     fi
455
     fi
436
     cp /etc/skel/.mutt/bdsmail /home/$MY_USERNAME/.mutt
456
     cp /etc/skel/.mutt/bdsmail /home/$MY_USERNAME/.mutt
437
     sed -i "s|username|$MY_USERNAME|g" /home/$MY_USERNAME/.mutt/bdsmail
457
     sed -i "s|username|$MY_USERNAME|g" /home/$MY_USERNAME/.mutt/bdsmail
458
+    sed -i "s|password|$BDSMAIL_PASSWORD|g" /home/$MY_USERNAME/.mutt/bdsmail
438
     chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt
459
     chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt
439
 
460
 
440
     bdsmail_configure_users
461
     bdsmail_configure_users
441
 
462
 
442
-    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $MY_USERNAME /home/$MY_USERNAME/Maildir/i2p
463
+    cd $BDSMAIL_DIR
464
+    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $MY_USERNAME /home/$MY_USERNAME/Maildir/i2p "$BDSMAIL_PASSWORD"
443
 
465
 
444
     APP_INSTALLED=1
466
     APP_INSTALLED=1
445
 }
467
 }

+ 15
- 12
src/freedombone-app-pleroma Целия файл

93
     echo 'while read blocked; do' >> $blocking_script_file
93
     echo 'while read blocked; do' >> $blocking_script_file
94
     echo '    if [[ "$blocked" == *"."* || "$blocked" == *"@"* ]]; then' >> $blocking_script_file
94
     echo '    if [[ "$blocked" == *"."* || "$blocked" == *"@"* ]]; then' >> $blocking_script_file
95
     echo '        if [ ${#blocked} -gt 4 ]; then' >> $blocking_script_file
95
     echo '        if [ ${#blocked} -gt 4 ]; then' >> $blocking_script_file
96
-    echo '          if [ $objects_updated ]; then' >> $blocking_script_file
97
-    echo '              objects_query="${objects_query} or"' >> $blocking_script_file
98
-    echo '              users_query="${users_query} or"' >> $blocking_script_file
99
-    echo '          fi' >> $blocking_script_file
100
-    echo "          objects_query=\"\${objects_query} data->>'content' ilike '%\${blocked}%' or data->>'actor' ilike '%\${blocked}%' or data->>'to' ilike '%\${blocked}%' or data->>'id' ilike '%\${blocked}%' or data->>'external_url' ilike '%\${blocked}%'\"" >> $blocking_script_file
101
-    echo "          users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"" >> $blocking_script_file
102
-    echo '          objects_updated=1' >> $blocking_script_file
96
+    echo '            if [ $objects_updated ]; then' >> $blocking_script_file
97
+    echo '                objects_query="${objects_query} or"' >> $blocking_script_file
98
+    echo '                users_query="${users_query} or"' >> $blocking_script_file
99
+    echo '            fi' >> $blocking_script_file
100
+    echo "            objects_query=\"\${objects_query} data->>'content' ilike '%\${blocked}%' or data->>'actor' ilike '%\${blocked}%' or data->>'to' ilike '%\${blocked}%' or data->>'id' ilike '%\${blocked}%' or data->>'external_url' ilike '%\${blocked}%'\"" >> $blocking_script_file
101
+    echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"" >> $blocking_script_file
102
+    echo '            objects_updated=1' >> $blocking_script_file
103
     echo '            if [[ "$blocked" != *"@"* ]]; then' >> $blocking_script_file
103
     echo '            if [[ "$blocked" != *"@"* ]]; then' >> $blocking_script_file
104
-    echo '              if [ $websub_server_subscriptions_updated ]; then' >> $blocking_script_file
105
-    echo '                  websub_server_subscriptions_query="${websub_server_subscriptions_query} or"' >> $blocking_script_file
106
-    echo '              fi' >> $blocking_script_file
107
-    echo "              websub_server_subscriptions_query=\"\${websub_server_subscriptions_query} callback like '%\${blocked}%'\"" >> $blocking_script_file
108
-    echo '              websub_server_subscriptions_updated=1' >> $blocking_script_file
104
+    echo '                if ! grep -q "127.0.0.1  $blocked" /etc/hosts; then' >> $blocking_script_file
105
+    echo '                    echo "127.0.0.1  $blocked" >> /etc/hosts' >> $blocking_script_file
106
+    echo '                fi' >> $blocking_script_file
107
+    echo '                if [ $websub_server_subscriptions_updated ]; then' >> $blocking_script_file
108
+    echo '                    websub_server_subscriptions_query="${websub_server_subscriptions_query} or"' >> $blocking_script_file
109
+    echo '                fi' >> $blocking_script_file
110
+    echo "                websub_server_subscriptions_query=\"\${websub_server_subscriptions_query} callback like '%\${blocked}%'\"" >> $blocking_script_file
111
+    echo '                websub_server_subscriptions_updated=1' >> $blocking_script_file
109
     echo '            fi' >> $blocking_script_file
112
     echo '            fi' >> $blocking_script_file
110
     echo '        fi' >> $blocking_script_file
113
     echo '        fi' >> $blocking_script_file
111
     echo '    fi' >> $blocking_script_file
114
     echo '    fi' >> $blocking_script_file

+ 3
- 2
src/freedombone-controlpanel-user Целия файл

885
 function show_your_email_address {
885
 function show_your_email_address {
886
     GPG_FINGERPRINT=$(gpg --fingerprint $GPG_ID | sed -n '2p' | sed 's/^[ \t]*//')
886
     GPG_FINGERPRINT=$(gpg --fingerprint $GPG_ID | sed -n '2p' | sed 's/^[ \t]*//')
887
     GPG_DATE=$(gpg --fingerprint $GPG_ID | grep -i "pub" | head -n 1 | awk -F ' ' '{print $3}')
887
     GPG_DATE=$(gpg --fingerprint $GPG_ID | grep -i "pub" | head -n 1 | awk -F ' ' '{print $3}')
888
-    if [ ! -d /etc/bdsmail ]; then
888
+    if [ ! -f ~/.mutt/bdsmail ]; then
889
         dialog --title $"Show your Email Address" \
889
         dialog --title $"Show your Email Address" \
890
                --backtitle $"Freedombone User Control Panel" \
890
                --backtitle $"Freedombone User Control Panel" \
891
                --msgbox $"Email Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE" 12 70
891
                --msgbox $"Email Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE" 12 70
892
     else
892
     else
893
+        bdsmail_address=$(cat ~/.mutt/bdsmail | grep 'set from=' | awk -F '=' '{print $2}')
893
         dialog --title $"Show your Email Address" \
894
         dialog --title $"Show your Email Address" \
894
                --backtitle $"Freedombone User Control Panel" \
895
                --backtitle $"Freedombone User Control Panel" \
895
-               --msgbox $"\nYou can press SHIFT and then drag the mouse and right click to copy.\n\nEmail Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE\n\nI2P Address: ${USER}@$(bdsmail_domain)" 17 90
896
+               --msgbox $"\nYou can press SHIFT and then drag the mouse and right click to copy.\n\nEmail Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE\n\nI2P Address: ${bdsmail_address}" 17 90
896
     fi
897
     fi
897
 }
898
 }
898
 
899
 

+ 25
- 4
src/freedombone-utils-i2p Целия файл

63
 }
63
 }
64
 
64
 
65
 function remove_i2p {
65
 function remove_i2p {
66
+    service i2p stop
66
     apt-get -yq remove i2p-router --purge
67
     apt-get -yq remove i2p-router --purge
67
     apt-get -yq remove i2p --purge
68
     apt-get -yq remove i2p --purge
68
     apt-get -yq remove i2p-keyring --purge
69
     apt-get -yq remove i2p-keyring --purge
82
     if [ -d /usr/share/i2p ]; then
83
     if [ -d /usr/share/i2p ]; then
83
         rm -rf /usr/share/i2p
84
         rm -rf /usr/share/i2p
84
     fi
85
     fi
86
+    if [ -d /var/log/i2p ]; then
87
+        rm /var/log/i2p
88
+    fi
89
+    rm -rf /tmp/i2p*
85
 }
90
 }
86
 
91
 
87
 function i2p_enable_sam {
92
 function i2p_enable_sam {
88
     if [ ! -f /var/lib/i2p/i2p-config/clients.config ]; then
93
     if [ ! -f /var/lib/i2p/i2p-config/clients.config ]; then
89
-        apt-get -yq remove i2p --purge
94
+        service i2p stop
95
+
96
+        apt-get -yq remove i2p i2p-keyring --purge
90
         apt-get -yq remove i2p-router --purge
97
         apt-get -yq remove i2p-router --purge
91
-        apt-get -yq install i2p
92
-        apt-get -yq install i2p-router
93
-        sleep 2
98
+        if [ -d /var/lib/i2p ]; then
99
+            rm -rf /var/lib/i2p
100
+        fi
101
+        if [ -d /etc/i2p ]; then
102
+            rm -rf /etc/i2p
103
+        fi
104
+        if [ -d /usr/share/i2p ]; then
105
+            rm -rf /usr/share/i2p
106
+        fi
107
+        if [ -d /var/log/i2p ]; then
108
+            rm /var/log/i2p
109
+        fi
110
+        rm -rf /tmp/i2p*
111
+        apt-get -yq install i2p i2p-keyring
112
+        apt-get -yq install i2p-router --reinstall
113
+        systemctl restart i2p
114
+        sleep 10
94
     fi
115
     fi
95
     if [ ! -f /var/lib/i2p/i2p-config/clients.config ]; then
116
     if [ ! -f /var/lib/i2p/i2p-config/clients.config ]; then
96
         echo $'File not found /var/lib/i2p/i2p-config/clients.config'
117
         echo $'File not found /var/lib/i2p/i2p-config/clients.config'

+ 306
- 0
website/EN/app_bdsmail.html Целия файл

1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
+<head>
6
+<!-- 2018-02-16 Fri 10:42 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="How to use BDS Mail"
13
+ />
14
+<meta name="keywords" content="freedombone, dlna" />
15
+<style type="text/css">
16
+ <!--/*--><![CDATA[/*><!--*/
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
23
+  .todo   { font-family: monospace; color: red; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
26
+  .tag    { background-color: #eee; font-family: monospace;
27
+            padding: 2px; font-size: 80%; font-weight: normal; }
28
+  .timestamp { color: #bebebe; }
29
+  .timestamp-kwd { color: #5f9ea0; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
33
+  .underline { text-decoration: underline; }
34
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35
+  p.verse { margin-left: 3%; }
36
+  pre {
37
+    border: 1px solid #ccc;
38
+    box-shadow: 3px 3px 3px #eee;
39
+    padding: 8pt;
40
+    font-family: monospace;
41
+    overflow: auto;
42
+    margin: 1.2em;
43
+  }
44
+  pre.src {
45
+    position: relative;
46
+    overflow: visible;
47
+    padding-top: 1.2em;
48
+  }
49
+  pre.src:before {
50
+    display: none;
51
+    position: absolute;
52
+    background-color: white;
53
+    top: -10px;
54
+    right: 10px;
55
+    padding: 3px;
56
+    border: 1px solid black;
57
+  }
58
+  pre.src:hover:before { display: inline;}
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
70
+  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
151
+
152
+  table { border-collapse:collapse; }
153
+  caption.t-above { caption-side: top; }
154
+  caption.t-bottom { caption-side: bottom; }
155
+  td, th { vertical-align:top;  }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
162
+  dt { font-weight: bold; }
163
+  .footpara { display: inline; }
164
+  .footdef  { margin-bottom: 1em; }
165
+  .figure { padding: 1em; }
166
+  .figure p { text-align: center; }
167
+  .inlinetask {
168
+    padding: 10px;
169
+    border: 2px solid gray;
170
+    margin: 10px;
171
+    background: #ffffcc;
172
+  }
173
+  #org-div-home-and-up
174
+   { text-align: right; font-size: 70%; white-space: nowrap; }
175
+  textarea { overflow-x: auto; }
176
+  .linenr { font-size: smaller }
177
+  .code-highlighted { background-color: #ffff00; }
178
+  .org-info-js_info-navigation { border-style: none; }
179
+  #org-info-js_console-label
180
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
181
+  .org-info-js_search-highlight
182
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
184
+  /*]]>*/-->
185
+</style>
186
+<link rel="stylesheet" type="text/css" href="freedombone.css" />
187
+<script type="text/javascript">
188
+/*
189
+@licstart  The following is the entire license notice for the
190
+JavaScript code in this tag.
191
+
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
193
+
194
+The JavaScript code in this tag is free software: you can
195
+redistribute it and/or modify it under the terms of the GNU
196
+General Public License (GNU GPL) as published by the Free Software
197
+Foundation, either version 3 of the License, or (at your option)
198
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
199
+without even the implied warranty of MERCHANTABILITY or FITNESS
200
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
201
+
202
+As additional permission under GNU GPL version 3 section 7, you
203
+may distribute non-source (e.g., minimized or compacted) forms of
204
+that code without the copy of the GNU GPL normally required by
205
+section 4, provided you include this license notice and a URL
206
+through which recipients can access the Corresponding Source.
207
+
208
+
209
+@licend  The above is the entire license notice
210
+for the JavaScript code in this tag.
211
+*/
212
+<!--/*--><![CDATA[/*><!--*/
213
+ function CodeHighlightOn(elem, id)
214
+ {
215
+   var target = document.getElementById(id);
216
+   if(null != target) {
217
+     elem.cacheClassElem = elem.className;
218
+     elem.cacheClassTarget = target.className;
219
+     target.className = "code-highlighted";
220
+     elem.className   = "code-highlighted";
221
+   }
222
+ }
223
+ function CodeHighlightOff(elem, id)
224
+ {
225
+   var target = document.getElementById(id);
226
+   if(elem.cacheClassElem)
227
+     elem.className = elem.cacheClassElem;
228
+   if(elem.cacheClassTarget)
229
+     target.className = elem.cacheClassTarget;
230
+ }
231
+/*]]>*///-->
232
+</script>
233
+</head>
234
+<body>
235
+<div id="preamble" class="status">
236
+<a name="top" id="top"></a>
237
+</div>
238
+<div id="content">
239
+<div class="org-center">
240
+
241
+<div class="figure">
242
+<p><img src="images/logo.png" alt="logo.png" />
243
+</p>
244
+</div>
245
+</div>
246
+
247
+<center>
248
+<h1>BDS Mail</h1>
249
+</center>
250
+
251
+<p>
252
+BDS Mail (aka "Brain Dead Simple Mail") is an optional addition to the existing email server which comes installed as default. It creates an extra folder within the Mutt client which allows you to send and receive email using <a href="https://en.wikipedia.org/wiki/I2P">i2p</a> as the transport layer. This solves the problem of being blocked by dubious systems and also the problem of user friendly email encryption. If you're behind a hostile firewall which you don't control and which blocks all ports, this system is still likely to work. You can use GPG as an additional encryption layer if you prefer, but it's not strictly necessary because you already have the i2p public key system to ensure end-to-end security.
253
+</p>
254
+
255
+<p>
256
+It's unlikely that many people will use this. If it's hard to persuade anyone to use GPG or Enigmail then it will be <i>next to impossible</i> to persuade them to switch to BDS Mail unless they're already obsessive about technical security. However, this provides yet another option for reasonably secure communications if other methods fail or are untrustable.
257
+</p>
258
+
259
+<div id="outline-container-org4d1584a" class="outline-2">
260
+<h2 id="org4d1584a">Installation</h2>
261
+<div class="outline-text-2" id="text-org4d1584a">
262
+<p>
263
+ssh into the system with:
264
+</p>
265
+
266
+<div class="org-src-container">
267
+<pre class="src src-bash">ssh myusername@mydomain.com -p 2222
268
+</pre>
269
+</div>
270
+
271
+<p>
272
+Select <b>Administrator controls</b> then <b>App Settings</b> then <b>bdsmail</b>. It may take a while to install, due to the creation of keys.
273
+</p>
274
+
275
+<p>
276
+After installation if you exit from <b>Administrator controls</b> back to the user control panel then select the option to show your email address. You will now have a new bdsmail address which ends with <i>.b32.i2p</i>. If you then select <b>Use Email</b> to run the Mutt email client you'll notice that you now have a folder called <b>i2p</b>. If you select that folder (move up and down with <i>CTRL+n</i> or <i>CTRL+p</i> and open with <i>CTRL+o</i>) you can then send email from your new address, or receive mail to it. Just like ordinary email, but with a more random-looking address.
277
+</p>
278
+</div>
279
+</div>
280
+</div>
281
+<div id="postamble" class="status">
282
+
283
+<style type="text/css">
284
+.back-to-top {
285
+    position: fixed;
286
+    bottom: 2em;
287
+    right: 0px;
288
+    text-decoration: none;
289
+    color: #000000;
290
+    background-color: rgba(235, 235, 235, 0.80);
291
+    font-size: 12px;
292
+    padding: 1em;
293
+    display: none;
294
+}
295
+
296
+.back-to-top:hover {
297
+    background-color: rgba(135, 135, 135, 0.50);
298
+}
299
+</style>
300
+
301
+<div class="back-to-top">
302
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
303
+</div>
304
+</div>
305
+</body>
306
+</html>

+ 136
- 124
website/EN/apps.html Целия файл

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2018-02-02 Fri 14:51 -->
6
+<!-- 2018-02-16 Fri 10:42 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
265
 </div>
265
 </div>
266
 
266
 
267
 
267
 
268
-<div id="outline-container-org6873154" class="outline-2">
269
-<h2 id="org6873154">Akaunting</h2>
270
-<div class="outline-text-2" id="text-org6873154">
268
+<div id="outline-container-org1bb8cc9" class="outline-2">
269
+<h2 id="org1bb8cc9">Akaunting</h2>
270
+<div class="outline-text-2" id="text-org1bb8cc9">
271
 <p>
271
 <p>
272
 A web based accounts system for small businesses or freelancers.
272
 A web based accounts system for small businesses or freelancers.
273
 </p>
273
 </p>
277
 </p>
277
 </p>
278
 </div>
278
 </div>
279
 </div>
279
 </div>
280
-<div id="outline-container-org7e6ef98" class="outline-2">
281
-<h2 id="org7e6ef98">CryptPad</h2>
282
-<div class="outline-text-2" id="text-org7e6ef98">
280
+<div id="outline-container-org1b15bc8" class="outline-2">
281
+<h2 id="org1b15bc8">BDS Mail</h2>
282
+<div class="outline-text-2" id="text-org1b15bc8">
283
+<p>
284
+It's like ordinary email, but with <a href="https://en.wikipedia.org/wiki/I2P">i2p</a> as the transport mechanism.
285
+</p>
286
+
287
+<p>
288
+<a href="./app_bdsmail.html">How to use it</a>
289
+</p>
290
+</div>
291
+</div>
292
+<div id="outline-container-org3782541" class="outline-2">
293
+<h2 id="org3782541">CryptPad</h2>
294
+<div class="outline-text-2" id="text-org3782541">
283
 <p>
295
 <p>
284
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
296
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
285
 </p>
297
 </p>
289
 </p>
301
 </p>
290
 </div>
302
 </div>
291
 </div>
303
 </div>
292
-<div id="outline-container-orgb6914dd" class="outline-2">
293
-<h2 id="orgb6914dd">DLNA</h2>
294
-<div class="outline-text-2" id="text-orgb6914dd">
304
+<div id="outline-container-org9361ad2" class="outline-2">
305
+<h2 id="org9361ad2">DLNA</h2>
306
+<div class="outline-text-2" id="text-org9361ad2">
295
 <p>
307
 <p>
296
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
308
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
297
 </p>
309
 </p>
301
 </p>
313
 </p>
302
 </div>
314
 </div>
303
 </div>
315
 </div>
304
-<div id="outline-container-orgc23c65e" class="outline-2">
305
-<h2 id="orgc23c65e">Dokuwiki</h2>
306
-<div class="outline-text-2" id="text-orgc23c65e">
316
+<div id="outline-container-orgc1b9f8d" class="outline-2">
317
+<h2 id="orgc1b9f8d">Dokuwiki</h2>
318
+<div class="outline-text-2" id="text-orgc1b9f8d">
307
 <p>
319
 <p>
308
 A databaseless wiki system.
320
 A databaseless wiki system.
309
 </p>
321
 </p>
313
 </p>
325
 </p>
314
 </div>
326
 </div>
315
 </div>
327
 </div>
316
-<div id="outline-container-orgf803ba9" class="outline-2">
317
-<h2 id="orgf803ba9">Edith</h2>
318
-<div class="outline-text-2" id="text-orgf803ba9">
328
+<div id="outline-container-org809c5af" class="outline-2">
329
+<h2 id="org809c5af">Edith</h2>
330
+<div class="outline-text-2" id="text-org809c5af">
319
 <p>
331
 <p>
320
 Extremely simple and distraction-free notes system.
332
 Extremely simple and distraction-free notes system.
321
 </p>
333
 </p>
325
 </p>
337
 </p>
326
 </div>
338
 </div>
327
 </div>
339
 </div>
328
-<div id="outline-container-orgfd2155a" class="outline-2">
329
-<h2 id="orgfd2155a">Emacs</h2>
330
-<div class="outline-text-2" id="text-orgfd2155a">
340
+<div id="outline-container-org2950e2c" class="outline-2">
341
+<h2 id="org2950e2c">Emacs</h2>
342
+<div class="outline-text-2" id="text-org2950e2c">
331
 <p>
343
 <p>
332
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
344
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
333
 </p>
345
 </p>
337
 </p>
349
 </p>
338
 </div>
350
 </div>
339
 </div>
351
 </div>
340
-<div id="outline-container-org5fcc9ff" class="outline-2">
341
-<h2 id="org5fcc9ff">Etherpad</h2>
342
-<div class="outline-text-2" id="text-org5fcc9ff">
352
+<div id="outline-container-org2349efd" class="outline-2">
353
+<h2 id="org2349efd">Etherpad</h2>
354
+<div class="outline-text-2" id="text-org2349efd">
343
 <p>
355
 <p>
344
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
356
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
345
 </p>
357
 </p>
349
 </p>
361
 </p>
350
 </div>
362
 </div>
351
 </div>
363
 </div>
352
-<div id="outline-container-orgdc50344" class="outline-2">
353
-<h2 id="orgdc50344">Federated wiki</h2>
354
-<div class="outline-text-2" id="text-orgdc50344">
364
+<div id="outline-container-orgbc1e58a" class="outline-2">
365
+<h2 id="orgbc1e58a">Federated wiki</h2>
366
+<div class="outline-text-2" id="text-orgbc1e58a">
355
 <p>
367
 <p>
356
 A new approach to creating wiki content.
368
 A new approach to creating wiki content.
357
 </p>
369
 </p>
361
 </p>
373
 </p>
362
 </div>
374
 </div>
363
 </div>
375
 </div>
364
-<div id="outline-container-org30bda20" class="outline-2">
365
-<h2 id="org30bda20">Friendica</h2>
366
-<div class="outline-text-2" id="text-org30bda20">
376
+<div id="outline-container-org806878a" class="outline-2">
377
+<h2 id="org806878a">Friendica</h2>
378
+<div class="outline-text-2" id="text-org806878a">
367
 <p>
379
 <p>
368
 Federated social network system.
380
 Federated social network system.
369
 </p>
381
 </p>
373
 </p>
385
 </p>
374
 </div>
386
 </div>
375
 </div>
387
 </div>
376
-<div id="outline-container-org98e4708" class="outline-2">
377
-<h2 id="org98e4708">Ghost</h2>
378
-<div class="outline-text-2" id="text-org98e4708">
388
+<div id="outline-container-org13b6601" class="outline-2">
389
+<h2 id="org13b6601">Ghost</h2>
390
+<div class="outline-text-2" id="text-org13b6601">
379
 <p>
391
 <p>
380
 Modern looking blogging system.
392
 Modern looking blogging system.
381
 </p>
393
 </p>
385
 </p>
397
 </p>
386
 </div>
398
 </div>
387
 </div>
399
 </div>
388
-<div id="outline-container-orgcd73257" class="outline-2">
389
-<h2 id="orgcd73257">GNU Social</h2>
390
-<div class="outline-text-2" id="text-orgcd73257">
400
+<div id="outline-container-org18b5451" class="outline-2">
401
+<h2 id="org18b5451">GNU Social</h2>
402
+<div class="outline-text-2" id="text-org18b5451">
391
 <p>
403
 <p>
392
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
404
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
393
 </p>
405
 </p>
397
 </p>
409
 </p>
398
 </div>
410
 </div>
399
 </div>
411
 </div>
400
-<div id="outline-container-org5f6afde" class="outline-2">
401
-<h2 id="org5f6afde">Gogs</h2>
402
-<div class="outline-text-2" id="text-org5f6afde">
412
+<div id="outline-container-org877ac0a" class="outline-2">
413
+<h2 id="org877ac0a">Gogs</h2>
414
+<div class="outline-text-2" id="text-org877ac0a">
403
 <p>
415
 <p>
404
 Lightweight git project hosting system. You can mirror projects from Github, or if Github turns evil then just host your own projects while retaining the familiar <i>fork-and-pull</i> workflow. If you can use Github then you can also use Gogs.
416
 Lightweight git project hosting system. You can mirror projects from Github, or if Github turns evil then just host your own projects while retaining the familiar <i>fork-and-pull</i> workflow. If you can use Github then you can also use Gogs.
405
 </p>
417
 </p>
409
 </p>
421
 </p>
410
 </div>
422
 </div>
411
 </div>
423
 </div>
412
-<div id="outline-container-org4d1d8ba" class="outline-2">
413
-<h2 id="org4d1d8ba">HTMLy</h2>
414
-<div class="outline-text-2" id="text-org4d1d8ba">
424
+<div id="outline-container-orga2ff624" class="outline-2">
425
+<h2 id="orga2ff624">HTMLy</h2>
426
+<div class="outline-text-2" id="text-orga2ff624">
415
 <p>
427
 <p>
416
 Databaseless blogging system. Quite simple and with a markdown-like format.
428
 Databaseless blogging system. Quite simple and with a markdown-like format.
417
 </p>
429
 </p>
421
 </p>
433
 </p>
422
 </div>
434
 </div>
423
 </div>
435
 </div>
424
-<div id="outline-container-org4039820" class="outline-2">
425
-<h2 id="org4039820">Hubzilla</h2>
426
-<div class="outline-text-2" id="text-org4039820">
436
+<div id="outline-container-org807c97c" class="outline-2">
437
+<h2 id="org807c97c">Hubzilla</h2>
438
+<div class="outline-text-2" id="text-org807c97c">
427
 <p>
439
 <p>
428
 Web publishing platform with social network like features and good privacy controls so that it's possible to specify who can see which content. Includes photo albums, calendar, wiki and file storage.
440
 Web publishing platform with social network like features and good privacy controls so that it's possible to specify who can see which content. Includes photo albums, calendar, wiki and file storage.
429
 </p>
441
 </p>
433
 </p>
445
 </p>
434
 </div>
446
 </div>
435
 </div>
447
 </div>
436
-<div id="outline-container-orgd7ea9f5" class="outline-2">
437
-<h2 id="orgd7ea9f5">Icecast media stream</h2>
438
-<div class="outline-text-2" id="text-orgd7ea9f5">
448
+<div id="outline-container-org95e3282" class="outline-2">
449
+<h2 id="org95e3282">Icecast media stream</h2>
450
+<div class="outline-text-2" id="text-org95e3282">
439
 <p>
451
 <p>
440
 Make your own internet radio station.
452
 Make your own internet radio station.
441
 </p>
453
 </p>
445
 </p>
457
 </p>
446
 </div>
458
 </div>
447
 </div>
459
 </div>
448
-<div id="outline-container-org4b18262" class="outline-2">
449
-<h2 id="org4b18262">IRC Server (ngirc)</h2>
450
-<div class="outline-text-2" id="text-org4b18262">
460
+<div id="outline-container-orgd272c05" class="outline-2">
461
+<h2 id="orgd272c05">IRC Server (ngirc)</h2>
462
+<div class="outline-text-2" id="text-orgd272c05">
451
 <p>
463
 <p>
452
 Run your own IRC chat channel which can be secured with a password and accessible via an onion address. A bouncer is included so that you can receive messages sent while you were offline. Works with Hexchat and other popular clients.
464
 Run your own IRC chat channel which can be secured with a password and accessible via an onion address. A bouncer is included so that you can receive messages sent while you were offline. Works with Hexchat and other popular clients.
453
 </p>
465
 </p>
457
 </p>
469
 </p>
458
 </div>
470
 </div>
459
 </div>
471
 </div>
460
-<div id="outline-container-org3244c52" class="outline-2">
461
-<h2 id="org3244c52">Jitsi Meet</h2>
462
-<div class="outline-text-2" id="text-org3244c52">
472
+<div id="outline-container-org6b54bf7" class="outline-2">
473
+<h2 id="org6b54bf7">Jitsi Meet</h2>
474
+<div class="outline-text-2" id="text-org6b54bf7">
463
 <p>
475
 <p>
464
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
476
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
465
 </p>
477
 </p>
466
 </div>
478
 </div>
467
 </div>
479
 </div>
468
 
480
 
469
-<div id="outline-container-org7f54f3b" class="outline-2">
470
-<h2 id="org7f54f3b">KanBoard</h2>
471
-<div class="outline-text-2" id="text-org7f54f3b">
481
+<div id="outline-container-org0604538" class="outline-2">
482
+<h2 id="org0604538">KanBoard</h2>
483
+<div class="outline-text-2" id="text-org0604538">
472
 <p>
484
 <p>
473
 A simple kanban system for managing projects or TODO lists.
485
 A simple kanban system for managing projects or TODO lists.
474
 </p>
486
 </p>
478
 </p>
490
 </p>
479
 </div>
491
 </div>
480
 </div>
492
 </div>
481
-<div id="outline-container-org511a639" class="outline-2">
482
-<h2 id="org511a639">Key Server</h2>
483
-<div class="outline-text-2" id="text-org511a639">
493
+<div id="outline-container-orgcd31aa0" class="outline-2">
494
+<h2 id="orgcd31aa0">Key Server</h2>
495
+<div class="outline-text-2" id="text-orgcd31aa0">
484
 <p>
496
 <p>
485
 An OpenPGP key server for storing and retrieving GPG public keys.
497
 An OpenPGP key server for storing and retrieving GPG public keys.
486
 </p>
498
 </p>
490
 </p>
502
 </p>
491
 </div>
503
 </div>
492
 </div>
504
 </div>
493
-<div id="outline-container-org058add3" class="outline-2">
494
-<h2 id="org058add3">Koel</h2>
495
-<div class="outline-text-2" id="text-org058add3">
505
+<div id="outline-container-org18f0038" class="outline-2">
506
+<h2 id="org18f0038">Koel</h2>
507
+<div class="outline-text-2" id="text-org18f0038">
496
 <p>
508
 <p>
497
 Access your music collection from any internet connected device.
509
 Access your music collection from any internet connected device.
498
 </p>
510
 </p>
502
 </p>
514
 </p>
503
 </div>
515
 </div>
504
 </div>
516
 </div>
505
-<div id="outline-container-org611fc47" class="outline-2">
506
-<h2 id="org611fc47">Lychee</h2>
507
-<div class="outline-text-2" id="text-org611fc47">
517
+<div id="outline-container-orgdac8618" class="outline-2">
518
+<h2 id="orgdac8618">Lychee</h2>
519
+<div class="outline-text-2" id="text-orgdac8618">
508
 <p>
520
 <p>
509
 Make your photo albums available on the web.
521
 Make your photo albums available on the web.
510
 </p>
522
 </p>
514
 </p>
526
 </p>
515
 </div>
527
 </div>
516
 </div>
528
 </div>
517
-<div id="outline-container-org3a59d15" class="outline-2">
518
-<h2 id="org3a59d15">Mailpile</h2>
519
-<div class="outline-text-2" id="text-org3a59d15">
529
+<div id="outline-container-org2f65f95" class="outline-2">
530
+<h2 id="org2f65f95">Mailpile</h2>
531
+<div class="outline-text-2" id="text-org2f65f95">
520
 <p>
532
 <p>
521
 Modern email client which supports GPG encryption.
533
 Modern email client which supports GPG encryption.
522
 </p>
534
 </p>
526
 </p>
538
 </p>
527
 </div>
539
 </div>
528
 </div>
540
 </div>
529
-<div id="outline-container-org36c7c61" class="outline-2">
530
-<h2 id="org36c7c61">Matrix</h2>
531
-<div class="outline-text-2" id="text-org36c7c61">
541
+<div id="outline-container-org35b7261" class="outline-2">
542
+<h2 id="org35b7261">Matrix</h2>
543
+<div class="outline-text-2" id="text-org35b7261">
532
 <p>
544
 <p>
533
 Multi-user chat with some security and moderation controls.
545
 Multi-user chat with some security and moderation controls.
534
 </p>
546
 </p>
538
 </p>
550
 </p>
539
 </div>
551
 </div>
540
 </div>
552
 </div>
541
-<div id="outline-container-org69bd95e" class="outline-2">
542
-<h2 id="org69bd95e">Mediagoblin</h2>
543
-<div class="outline-text-2" id="text-org69bd95e">
553
+<div id="outline-container-orgf522d1b" class="outline-2">
554
+<h2 id="orgf522d1b">Mediagoblin</h2>
555
+<div class="outline-text-2" id="text-orgf522d1b">
544
 <p>
556
 <p>
545
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
557
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
546
 </p>
558
 </p>
550
 </p>
562
 </p>
551
 </div>
563
 </div>
552
 </div>
564
 </div>
553
-<div id="outline-container-org083b086" class="outline-2">
554
-<h2 id="org083b086">Mumble</h2>
555
-<div class="outline-text-2" id="text-org083b086">
565
+<div id="outline-container-orgdd0c788" class="outline-2">
566
+<h2 id="orgdd0c788">Mumble</h2>
567
+<div class="outline-text-2" id="text-orgdd0c788">
556
 <p>
568
 <p>
557
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
569
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
558
 </p>
570
 </p>
562
 </p>
574
 </p>
563
 </div>
575
 </div>
564
 </div>
576
 </div>
565
-<div id="outline-container-orga89941d" class="outline-2">
566
-<h2 id="orga89941d">NextCloud</h2>
567
-<div class="outline-text-2" id="text-orga89941d">
577
+<div id="outline-container-org29456cf" class="outline-2">
578
+<h2 id="org29456cf">NextCloud</h2>
579
+<div class="outline-text-2" id="text-org29456cf">
568
 <p>
580
 <p>
569
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
581
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
570
 </p>
582
 </p>
574
 </p>
586
 </p>
575
 </div>
587
 </div>
576
 </div>
588
 </div>
577
-<div id="outline-container-org1855642" class="outline-2">
578
-<h2 id="org1855642">PeerTube</h2>
579
-<div class="outline-text-2" id="text-org1855642">
589
+<div id="outline-container-orgbcb8568" class="outline-2">
590
+<h2 id="orgbcb8568">PeerTube</h2>
591
+<div class="outline-text-2" id="text-orgbcb8568">
580
 <p>
592
 <p>
581
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
593
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
582
 </p>
594
 </p>
586
 </p>
598
 </p>
587
 </div>
599
 </div>
588
 </div>
600
 </div>
589
-<div id="outline-container-org75f549b" class="outline-2">
590
-<h2 id="org75f549b">PI-Hole</h2>
591
-<div class="outline-text-2" id="text-org75f549b">
601
+<div id="outline-container-org46e7bef" class="outline-2">
602
+<h2 id="org46e7bef">PI-Hole</h2>
603
+<div class="outline-text-2" id="text-org46e7bef">
592
 <p>
604
 <p>
593
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
605
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
594
 </p>
606
 </p>
598
 </p>
610
 </p>
599
 </div>
611
 </div>
600
 </div>
612
 </div>
601
-<div id="outline-container-orga1fbb11" class="outline-2">
602
-<h2 id="orga1fbb11">PostActiv</h2>
603
-<div class="outline-text-2" id="text-orga1fbb11">
613
+<div id="outline-container-orgf349fcf" class="outline-2">
614
+<h2 id="orgf349fcf">PostActiv</h2>
615
+<div class="outline-text-2" id="text-orgf349fcf">
604
 <p>
616
 <p>
605
 An alternative federated social networking system compatible with GNU Social, Pleroma and Mastodon. It includes some optimisations and fixes currently not available within the main GNU Social project.
617
 An alternative federated social networking system compatible with GNU Social, Pleroma and Mastodon. It includes some optimisations and fixes currently not available within the main GNU Social project.
606
 </p>
618
 </p>
610
 </p>
622
 </p>
611
 </div>
623
 </div>
612
 </div>
624
 </div>
613
-<div id="outline-container-org1448160" class="outline-2">
614
-<h2 id="org1448160">PrivateBin</h2>
615
-<div class="outline-text-2" id="text-org1448160">
625
+<div id="outline-container-org842b0ba" class="outline-2">
626
+<h2 id="org842b0ba">PrivateBin</h2>
627
+<div class="outline-text-2" id="text-org842b0ba">
616
 <p>
628
 <p>
617
 A pastebin where the server has zero knowledge of the content being pasted.
629
 A pastebin where the server has zero knowledge of the content being pasted.
618
 </p>
630
 </p>
622
 </p>
634
 </p>
623
 </div>
635
 </div>
624
 </div>
636
 </div>
625
-<div id="outline-container-org9d310cf" class="outline-2">
626
-<h2 id="org9d310cf">Profanity</h2>
627
-<div class="outline-text-2" id="text-org9d310cf">
637
+<div id="outline-container-org75de424" class="outline-2">
638
+<h2 id="org75de424">Profanity</h2>
639
+<div class="outline-text-2" id="text-org75de424">
628
 <p>
640
 <p>
629
 A shell based XMPP client which you can run on the Freedombone server via ssh.
641
 A shell based XMPP client which you can run on the Freedombone server via ssh.
630
 </p>
642
 </p>
634
 </p>
646
 </p>
635
 </div>
647
 </div>
636
 </div>
648
 </div>
637
-<div id="outline-container-orge6aa619" class="outline-2">
638
-<h2 id="orge6aa619">Riot Web</h2>
639
-<div class="outline-text-2" id="text-orge6aa619">
649
+<div id="outline-container-org127dc3f" class="outline-2">
650
+<h2 id="org127dc3f">Riot Web</h2>
651
+<div class="outline-text-2" id="text-org127dc3f">
640
 <p>
652
 <p>
641
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
653
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
642
 </p>
654
 </p>
646
 </p>
658
 </p>
647
 </div>
659
 </div>
648
 </div>
660
 </div>
649
-<div id="outline-container-org50e63cb" class="outline-2">
650
-<h2 id="org50e63cb">SearX</h2>
651
-<div class="outline-text-2" id="text-org50e63cb">
661
+<div id="outline-container-org179bd91" class="outline-2">
662
+<h2 id="org179bd91">SearX</h2>
663
+<div class="outline-text-2" id="text-org179bd91">
652
 <p>
664
 <p>
653
 A metasearch engine for customised and private web searches.
665
 A metasearch engine for customised and private web searches.
654
 </p>
666
 </p>
658
 </p>
670
 </p>
659
 </div>
671
 </div>
660
 </div>
672
 </div>
661
-<div id="outline-container-orgec6ad33" class="outline-2">
662
-<h2 id="orgec6ad33">tt-rss</h2>
663
-<div class="outline-text-2" id="text-orgec6ad33">
673
+<div id="outline-container-orgffb086f" class="outline-2">
674
+<h2 id="orgffb086f">tt-rss</h2>
675
+<div class="outline-text-2" id="text-orgffb086f">
664
 <p>
676
 <p>
665
 Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via an onion address. Have "<i>the right to read</i>" without the Surveillance State knowing what you're reading. Also available with a user interface suitable for viewing on mobile devices via a browser such as OrFox.
677
 Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via an onion address. Have "<i>the right to read</i>" without the Surveillance State knowing what you're reading. Also available with a user interface suitable for viewing on mobile devices via a browser such as OrFox.
666
 </p>
678
 </p>
670
 </p>
682
 </p>
671
 </div>
683
 </div>
672
 </div>
684
 </div>
673
-<div id="outline-container-org4de6eec" class="outline-2">
674
-<h2 id="org4de6eec">Syncthing</h2>
675
-<div class="outline-text-2" id="text-org4de6eec">
685
+<div id="outline-container-org69b4a9f" class="outline-2">
686
+<h2 id="org69b4a9f">Syncthing</h2>
687
+<div class="outline-text-2" id="text-org69b4a9f">
676
 <p>
688
 <p>
677
 Possibly the best way to synchronise files across all of your devices. Once it has been set up it "just works" with no user intervention needed.
689
 Possibly the best way to synchronise files across all of your devices. Once it has been set up it "just works" with no user intervention needed.
678
 </p>
690
 </p>
682
 </p>
694
 </p>
683
 </div>
695
 </div>
684
 </div>
696
 </div>
685
-<div id="outline-container-orgebbf48a" class="outline-2">
686
-<h2 id="orgebbf48a">Tahoe-LAFS</h2>
687
-<div class="outline-text-2" id="text-orgebbf48a">
697
+<div id="outline-container-org289e2f4" class="outline-2">
698
+<h2 id="org289e2f4">Tahoe-LAFS</h2>
699
+<div class="outline-text-2" id="text-org289e2f4">
688
 <p>
700
 <p>
689
 Robust and encrypted storage of files on one or more server.
701
 Robust and encrypted storage of files on one or more server.
690
 </p>
702
 </p>
694
 </p>
706
 </p>
695
 </div>
707
 </div>
696
 </div>
708
 </div>
697
-<div id="outline-container-org3275ee7" class="outline-2">
698
-<h2 id="org3275ee7">Tox</h2>
699
-<div class="outline-text-2" id="text-org3275ee7">
709
+<div id="outline-container-org9660e8b" class="outline-2">
710
+<h2 id="org9660e8b">Tox</h2>
711
+<div class="outline-text-2" id="text-org9660e8b">
700
 <p>
712
 <p>
701
 Client and bootstrap node for the Tox chat/VoIP system.
713
 Client and bootstrap node for the Tox chat/VoIP system.
702
 </p>
714
 </p>
706
 </p>
718
 </p>
707
 </div>
719
 </div>
708
 </div>
720
 </div>
709
-<div id="outline-container-orgceb6c24" class="outline-2">
710
-<h2 id="orgceb6c24">Turtl</h2>
711
-<div class="outline-text-2" id="text-orgceb6c24">
721
+<div id="outline-container-org98827e8" class="outline-2">
722
+<h2 id="org98827e8">Turtl</h2>
723
+<div class="outline-text-2" id="text-org98827e8">
712
 <p>
724
 <p>
713
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
725
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
714
 </p>
726
 </p>
718
 </p>
730
 </p>
719
 </div>
731
 </div>
720
 </div>
732
 </div>
721
-<div id="outline-container-org1216de4" class="outline-2">
722
-<h2 id="org1216de4">Vim</h2>
723
-<div class="outline-text-2" id="text-org1216de4">
733
+<div id="outline-container-orgb94b916" class="outline-2">
734
+<h2 id="orgb94b916">Vim</h2>
735
+<div class="outline-text-2" id="text-orgb94b916">
724
 <p>
736
 <p>
725
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
737
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
726
 </p>
738
 </p>
727
 </div>
739
 </div>
728
 </div>
740
 </div>
729
 
741
 
730
-<div id="outline-container-org057b184" class="outline-2">
731
-<h2 id="org057b184">Virtual Private Network (VPN)</h2>
732
-<div class="outline-text-2" id="text-org057b184">
742
+<div id="outline-container-org78963d2" class="outline-2">
743
+<h2 id="org78963d2">Virtual Private Network (VPN)</h2>
744
+<div class="outline-text-2" id="text-org78963d2">
733
 <p>
745
 <p>
734
 Set up a VPN on your server so that you can bypass local internet censorship.
746
 Set up a VPN on your server so that you can bypass local internet censorship.
735
 </p>
747
 </p>
739
 </p>
751
 </p>
740
 </div>
752
 </div>
741
 </div>
753
 </div>
742
-<div id="outline-container-org93a66a0" class="outline-2">
743
-<h2 id="org93a66a0">XMPP</h2>
744
-<div class="outline-text-2" id="text-org93a66a0">
754
+<div id="outline-container-orgd631bb2" class="outline-2">
755
+<h2 id="orgd631bb2">XMPP</h2>
756
+<div class="outline-text-2" id="text-orgd631bb2">
745
 <p>
757
 <p>
746
 Chat server which can be used together with client such as Gajim or Conversations to provide end-to-end content security and also onion routed metadata security. Includes advanced features such as <i>client state notification</i> to save battery power on your mobile devices, support for seamless roaming between networks and <i>message carbons</i> so that you can receive the same messages while being simultaneously logged in to your account on more than one device.
758
 Chat server which can be used together with client such as Gajim or Conversations to provide end-to-end content security and also onion routed metadata security. Includes advanced features such as <i>client state notification</i> to save battery power on your mobile devices, support for seamless roaming between networks and <i>message carbons</i> so that you can receive the same messages while being simultaneously logged in to your account on more than one device.
747
 </p>
759
 </p>