소스 검색

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

Bob Mottram 7 년 전
부모
커밋
3c23979965

+ 1
- 1
code-of-conduct.md 파일 보기

32
 
32
 
33
 Serious or persistent offenders will be kicked from chat rooms and any of their subsequent patches will be unlikely to be upstreamed. In this context "serious" means that someone is causing others to feel unsafe or be unable to contribute, for whatever reason.
33
 Serious or persistent offenders will be kicked from chat rooms and any of their subsequent patches will be unlikely to be upstreamed. In this context "serious" means that someone is causing others to feel unsafe or be unable to contribute, for whatever reason.
34
 
34
 
35
-This is not a big project and so there is no division of labor or special enforcement committee or bureaucratic process. Complaints should be made (in private) to the maintainer or chat room admin. The typical email address can be found in the source code headers. Preferably use GPG/OpenPGP if you can, or XMPP with OTR/OMEMO to bob@freedombone.net. XMPP messages are likely to get a quicker response.
35
+This is not a big project and so there is no division of labor or special enforcement committee or bureaucratic process. Complaints should be made (in private) to the maintainer or chat room admin. The typical email address can be found in the source code headers. Preferably use GPG if you can, or XMPP with OpenPGP/OMEMO to bob@freedombone.net. XMPP messages are likely to get a quicker response.

+ 1
- 1
doc/EN/app_gnusocial.org 파일 보기

20
 
20
 
21
 You can host your own GNU Social instance and then "/remote follow/" other users who may also be doing the same. With a federated structure this type of system is hard to censor or ban. Unlike Twitter, there are no bribed adverts pushed into your stream, and any trends happening are likely to be real rather than being manipulated by some opaque algorithm.
21
 You can host your own GNU Social instance and then "/remote follow/" other users who may also be doing the same. With a federated structure this type of system is hard to censor or ban. Unlike Twitter, there are no bribed adverts pushed into your stream, and any trends happening are likely to be real rather than being manipulated by some opaque algorithm.
22
 
22
 
23
-You should regard anything posted to GNU Social as being /public communication/ visible to anyone on the internet. There is a direct messaging capability between users but it's not particularly secure, so for one-to-one messages stick to better methods, such as XMPP with OTR/OMEMO or Tox.
23
+You should regard anything posted to GNU Social as being /public communication/ visible to anyone on the internet. There is a direct messaging capability between users but it's not particularly secure, so for one-to-one messages stick to better methods, such as XMPP with OpenPGP/OMEMO or Tox.
24
 
24
 
25
 Some general advice about life in the fediverse [[./fediverse.html][can be found here]].
25
 Some general advice about life in the fediverse [[./fediverse.html][can be found here]].
26
 
26
 

+ 1
- 1
doc/EN/backups.org 파일 보기

68
 * Distributed/remote backups
68
 * Distributed/remote backups
69
 Distributed backups are a better way of ensuring the persistence of your data, such that even if your system gets stolen or destroyed then the data will still be recoverable from your friends. Since the backups are encrypted your friends (or anyone else with access to their systems) won't be able to read your backed up content even if their systems are subsequently compromised.
69
 Distributed backups are a better way of ensuring the persistence of your data, such that even if your system gets stolen or destroyed then the data will still be recoverable from your friends. Since the backups are encrypted your friends (or anyone else with access to their systems) won't be able to read your backed up content even if their systems are subsequently compromised.
70
 
70
 
71
-Firstly you will need to have a user account on one or more of your friends servers.  They don't necessarily need to be using Freedombone, just some version of GNU/Linux with ssh access.  They can create a user account for you with the control panel on a Freedombone system or with the *adduser <username>* command on any other system when logged in as root and then give you the username and password via a secure method, such as on paper, via an encrypted email, Tox or via an XMPP chat using OTR. Make sure that the password used is a strong one - preferably a long random string stored in a password manager - so that dictionary attacks will not be easy. Also for maximum resilience put your password manager file onto a USB thumb drive and carry it with you.
71
+Firstly you will need to have a user account on one or more of your friends servers.  They don't necessarily need to be using Freedombone, just some version of GNU/Linux with ssh access.  They can create a user account for you with the control panel on a Freedombone system or with the *adduser <username>* command on any other system when logged in as root and then give you the username and password via a secure method, such as on paper, via an encrypted email, Tox or via an XMPP chat using OpenPGP/OMEMO. Make sure that the password used is a strong one - preferably a long random string stored in a password manager - so that dictionary attacks will not be easy. Also for maximum resilience put your password manager file onto a USB thumb drive and carry it with you.
72
 
72
 
73
 #+BEGIN_SRC bash
73
 #+BEGIN_SRC bash
74
 ssh username@domainname -p 2222
74
 ssh username@domainname -p 2222

+ 1
- 1
doc/EN/codeofconduct.org 파일 보기

46
 
46
 
47
 Serious or persistent offenders will be kicked from chat rooms and any of their subsequent patches will be unlikely to be upstreamed. In this context "serious" means that someone is causing others to feel unsafe or be unable to contribute, for whatever reason.
47
 Serious or persistent offenders will be kicked from chat rooms and any of their subsequent patches will be unlikely to be upstreamed. In this context "serious" means that someone is causing others to feel unsafe or be unable to contribute, for whatever reason.
48
 
48
 
49
-This is not a big project and so there is no division of labor or special enforcement committee or bureaucratic process. Complaints should be made (in private) to the maintainer or chat room admin. The typical email address can be found in the source code headers. Preferably use GPG/OpenPGP if you can, or XMPP with OTR/OMEMO to bob@freedombone.net. XMPP messages are likely to get a quicker response.
49
+This is not a big project and so there is no division of labor or special enforcement committee or bureaucratic process. Complaints should be made (in private) to the maintainer or chat room admin. The typical email address can be found in the source code headers. Preferably use GPG if you can, or XMPP with OpenPGP/OMEMO to bob@freedombone.net. XMPP messages are likely to get a quicker response.

+ 1
- 1
doc/EN/support.org 파일 보기

24
 
24
 
25
 *PGP/GPG Fingerprint:* 9ABB82C00ABF39F82680487DCC2536191FA7C33F
25
 *PGP/GPG Fingerprint:* 9ABB82C00ABF39F82680487DCC2536191FA7C33F
26
 
26
 
27
-*XMPP:* bob@freedombone.net with OMEMO or OTR
27
+*XMPP:* bob@freedombone.net with OMEMO or OpenPGP
28
 
28
 
29
 *Matrix:* #fbone:matrix.freedombone.net
29
 *Matrix:* #fbone:matrix.freedombone.net
30
 
30
 

+ 0
- 169
src/freedombone-addsipuser 파일 보기

1
-#!/bin/bash
2
-#
3
-# .---.                  .              .
4
-# |                      |              |
5
-# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
-# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
-# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
-#
9
-#                    Freedom in the Cloud
10
-#
11
-
12
-# Adds a SIP phone user to the system
13
-
14
-# License
15
-# =======
16
-#
17
-# Copyright (C) 2015-2016 Bob Mottram <bob@freedombone.net>
18
-#
19
-# This program is free software: you can redistribute it and/or modify
20
-# it under the terms of the GNU Affero General Public License as published by
21
-# the Free Software Foundation, either version 3 of the License, or
22
-# (at your option) any later version.
23
-#
24
-# This program is distributed in the hope that it will be useful,
25
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-# GNU Affero General Public License for more details.
28
-#
29
-# You should have received a copy of the GNU Affero General Public License
30
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-
32
-PROJECT_NAME='freedombone'
33
-
34
-export TEXTDOMAIN=${PROJECT_NAME}-addsipuser
35
-export TEXTDOMAINDIR="/usr/share/locale"
36
-
37
-MY_USERNAME=
38
-EXTENSION=
39
-PASSWORD=
40
-CONFIG_FILE=/etc/sipwitch.conf
41
-USER_EXISTS="no"
42
-
43
-function show_help {
44
-    echo ''
45
-    echo $"${PROJECT_NAME}-addsipuser -u [username] -e [extension] -p [password]"
46
-    echo ''
47
-    exit 0
48
-}
49
-
50
-function sip_user_exists {
51
-    IFS=''
52
-    while read line; do
53
-    if [[ "$line" == *"<user id=\"$MY_USERNAME\">" ]]; then
54
-        USER_EXISTS="yes"
55
-        return
56
-    fi
57
-    done < $CONFIG_FILE
58
-}
59
-
60
-function update_sip_user {
61
-    USER_FOUND=
62
-    NEW_CONFIG_FILE="${CONFIG_FILE}.new"
63
-    if [ -f $NEW_CONFIG_FILE ]; then
64
-    rm -f $NEW_CONFIG_FILE
65
-    fi
66
-    touch $NEW_CONFIG_FILE
67
-    IFS=''
68
-    while read line; do
69
-    if [ ! $USER_FOUND ]; then
70
-        if [[ "$line" == *"<user id=\"$MY_USERNAME\">" ]]; then
71
-        USER_FOUND="yes"
72
-        fi
73
-    else
74
-        if [[ "$line" == *"<extension>"* ]]; then
75
-        line="      <extension>$EXTENSION</extension>"
76
-        fi
77
-        if [[ "$line" == *"<secret>"* ]]; then
78
-        line="      <secret>$PASSWORD</secret>"
79
-        fi
80
-        if [[ "$line" == *"<display>"* ]]; then
81
-        line="      <display>$MY_USERNAME $EXTENSION</display>"
82
-        USER_FOUND=
83
-        fi
84
-    fi
85
-    echo $line >> $NEW_CONFIG_FILE
86
-    done < $CONFIG_FILE
87
-    mv $NEW_CONFIG_FILE $CONFIG_FILE
88
-}
89
-
90
-function add_sip_user {
91
-    NEW_CONFIG_FILE="${CONFIG_FILE}.new"
92
-    if [ -f $NEW_CONFIG_FILE ]; then
93
-    rm -f $NEW_CONFIG_FILE
94
-    fi
95
-    touch $NEW_CONFIG_FILE
96
-    IFS=''
97
-    while read line; do
98
-    if [[ "$line" == *'</provision>' ]]; then
99
-        echo "    <user id=\"$MY_USERNAME\">" >> $NEW_CONFIG_FILE
100
-        echo "      <extension>$EXTENSION</extension>" >> $NEW_CONFIG_FILE
101
-        echo "      <secret>$PASSWORD</secret>" >> $NEW_CONFIG_FILE
102
-        echo "      <display>$MY_USERNAME $EXTENSION</display>" >> $NEW_CONFIG_FILE
103
-        echo '    </user>' >> $NEW_CONFIG_FILE
104
-    fi
105
-    echo $line >> $NEW_CONFIG_FILE
106
-    done < $CONFIG_FILE
107
-    mv $NEW_CONFIG_FILE $CONFIG_FILE
108
-    chmod 600 /etc/shadow
109
-    chmod 600 /etc/gshadow
110
-    usermod -aG sipwitch $MY_USERNAME
111
-    chmod 0000 /etc/shadow
112
-    chmod 0000 /etc/gshadow
113
-}
114
-
115
-while [[ $# > 1 ]]
116
-do
117
-    key="$1"
118
-
119
-    case $key in
120
-    -h|--help)
121
-        show_help
122
-        ;;
123
-    -u|--user)
124
-        shift
125
-        MY_USERNAME="$1"
126
-        ;;
127
-    -e|--extension)
128
-        shift
129
-        EXTENSION="$1"
130
-        ;;
131
-    -p|--password)
132
-        shift
133
-        PASSWORD="$1"
134
-        ;;
135
-    *)
136
-        # unknown option
137
-        ;;
138
-    esac
139
-    shift
140
-done
141
-
142
-if ! [[ $MY_USERNAME && $EXTENSION && $PASSWORD ]]; then
143
-    show_help
144
-fi
145
-
146
-if [ ! -f $CONFIG_FILE ]; then
147
-    echo $"SIP configuration file not found"
148
-    exit 1
149
-fi
150
-
151
-# the user must already exist on the system
152
-if [ ! -d /home/$MY_USERNAME ]; then
153
-    echo $"User $MY_USERNAME not found"
154
-    exit 2
155
-fi
156
-
157
-sip_user_exists
158
-
159
-if [[ $USER_EXISTS == "yes" ]]; then
160
-    update_sip_user
161
-    echo $"SIP user $MY_USERNAME amended"
162
-else
163
-    add_sip_user
164
-    echo $"SIP user $MY_USERNAME added"
165
-fi
166
-
167
-systemctl restart sipwitch
168
-
169
-exit 0

+ 0
- 5
src/freedombone-app-mumble 파일 보기

185
             rm -rf $temp_restore_dir
185
             rm -rf $temp_restore_dir
186
             exit 7823
186
             exit 7823
187
         fi
187
         fi
188
-        if [ -d $temp_restore_dir/home/$ADMIN_USERNAME/tempbackup ]; then
189
-            cp -f $temp_restore_dir/home/$ADMIN_USERNAME/tempbackup/sipwitch.conf /etc/sipwitch.conf
190
-        else
191
-            cp -f $temp_restore_dir/sipwitch.conf /etc/sipwitch.conf
192
-        fi
193
         if [ ! "$?" = "0" ]; then
188
         if [ ! "$?" = "0" ]; then
194
             rm -rf $temp_restore_dir
189
             rm -rf $temp_restore_dir
195
             exit 7823
190
             exit 7823

+ 0
- 497
src/freedombone-app-sip 파일 보기

1
-#!/bin/bash
2
-#
3
-# .---.                  .              .
4
-# |                      |              |
5
-# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
-# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
-# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
-#
9
-#                    Freedom in the Cloud
10
-#
11
-# SIP functions
12
-#
13
-# License
14
-# =======
15
-#
16
-# Copyright (C) 2014-2016 Bob Mottram <bob@freedombone.net>
17
-#
18
-# This program is free software: you can redistribute it and/or modify
19
-# it under the terms of the GNU Affero General Public License as published by
20
-# the Free Software Foundation, either version 3 of the License, or
21
-# (at your option) any later version.
22
-#
23
-# This program is distributed in the hope that it will be useful,
24
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
-# GNU Affero General Public License for more details.
27
-#
28
-# You should have received a copy of the GNU Affero General Public License
29
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
-
31
-VARIANTS=''
32
-
33
-IN_DEFAULT_INSTALL=0
34
-SHOW_ON_ABOUT=0
35
-
36
-SIP_SERVER_PASSWORD=
37
-SIP_PORT=5060
38
-SIP_TLS_PORT=5061
39
-
40
-TURN_PORT=3478
41
-TURN_TLS_PORT=5349
42
-TURN_NONCE=
43
-
44
-sip_variables=(ONION_ONLY
45
-               MY_USERNAME
46
-               SIP_PORT
47
-               SIP_TLS_PORT
48
-               SIP_SERVER_PASSWORD
49
-               TURN_PORT
50
-               TURN_TLS_PORT
51
-               TURN_NONCE)
52
-
53
-function logging_on_sip {
54
-    echo -n ''
55
-}
56
-
57
-function logging_off_sip {
58
-    echo -n ''
59
-}
60
-
61
-function remove_user_sip {
62
-    remove_username="$1"
63
-    ${PROJECT_NAME}-rmsipuser ${remove_username}
64
-
65
-    ${PROJECT_NAME}-pass -u $remove_username --rmapp sip
66
-
67
-    # remove user from SIP TURN/STUN
68
-    if [ -f /etc/turnserver/turnusers.txt ]; then
69
-        sed -i "/${remove_username}:/d" /etc/turnserver/turnusers.txt
70
-    fi
71
-}
72
-
73
-function add_user_sip {
74
-    new_username="$1"
75
-    new_user_password="$2"
76
-
77
-    ${PROJECT_NAME}-pass -u $new_username -a sip -p "$new_user_password"
78
-
79
-    SIP_EXTENSION=$(${PROJECT_NAME}-sipfreeext)
80
-    ${PROJECT_NAME}-addsipuser -u $new_username -e $SIP_EXTENSION -p "$new_user_password"
81
-    if [ ! "$?" = "0" ]; then
82
-        echo '1'
83
-        return
84
-    fi
85
-
86
-    # add user to the sipwitch group
87
-    if [ -f /etc/sipwitch.conf ]; then
88
-        chmod 600 /etc/shadow
89
-        chmod 600 /etc/gshadow
90
-        usermod -aG sipwitch $new_username
91
-        chmod 0000 /etc/shadow
92
-        chmod 0000 /etc/gshadow
93
-    fi
94
-
95
-    # add user for SIP STUN/TURN
96
-    if [ -d /etc/turnserver ]; then
97
-        if grep -q "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE; then
98
-            read_config_param "DEFAULT_DOMAIN_NAME"
99
-            echo "${new_username}:${new_user_password}:${DEFAULT_DOMAIN_NAME}:authorized" >> /etc/turnserver/turnusers.txt
100
-        fi
101
-    fi
102
-
103
-    echo '0'
104
-}
105
-
106
-function install_interactive_sip {
107
-    echo -n ''
108
-    APP_INSTALLED=1
109
-}
110
-
111
-function change_password_sip {
112
-    curr_username="$1"
113
-    new_user_password="$2"
114
-
115
-    #${PROJECT_NAME}-pass -u "$curr_username" -a sip -p "$new_user_password"
116
-}
117
-
118
-function reconfigure_sip {
119
-    echo -n ''
120
-}
121
-
122
-function upgrade_sip {
123
-    # remove the original sipwitch daemon if it exists
124
-    if [ -f /etc/init.d/sipwitch ]; then
125
-        rm -f /etc/init.d/sipwitch
126
-    fi
127
-}
128
-
129
-function backup_local_sip {
130
-    if [ -f /etc/sipwitch.conf ]; then
131
-        echo $"Backing up SIP settings"
132
-        temp_backup_dir=/root/tempsipbackup
133
-        if [ ! -d $temp_backup_dir ]; then
134
-            mkdir -p $temp_backup_dir
135
-        fi
136
-        cp -f /etc/sipwitch.conf $temp_backup_dir
137
-        backup_directory_to_usb $temp_backup_dir sip
138
-        echo $"SIP settings backup complete"
139
-    fi
140
-}
141
-
142
-function restore_local_sip {
143
-    if [ -d $USB_MOUNT/backup/sip ]; then
144
-        echo $"Restoring SIP settings"
145
-        temp_restore_dir=/root/tempsip
146
-        function_check restore_directory_from_usb
147
-        restore_directory_from_usb $temp_restore_dir sip
148
-        if [ -d $temp_restore_dir/home/$ADMIN_USERNAME/tempbackup ]; then
149
-            cp -f $temp_restore_dir/home/$ADMIN_USERNAME/tempbackup/sipwitch.conf /etc/sipwitch.conf
150
-        else
151
-            cp -f $temp_restore_dir/sipwitch.conf /etc/sipwitch.conf
152
-        fi
153
-        if [ ! "$?" = "0" ]; then
154
-            rm -rf $temp_restore_dir
155
-            function_check set_user_permissions
156
-            set_user_permissions
157
-            backup_unmount_drive
158
-            exit 3679
159
-        fi
160
-        rm -rf $temp_restore_dir
161
-        systemctl restart sipwitch
162
-        echo $"Restore of SIP settings complete"
163
-    fi
164
-}
165
-
166
-function backup_remote_sip {
167
-    if [ -f /etc/sipwitch.conf ]; then
168
-        echo $"Backing up SIP settings"
169
-        temp_backup_dir=/root/tempsipbackup
170
-        if [ ! -d $temp_backup_dir ]; then
171
-            mkdir -p $temp_backup_dir
172
-        fi
173
-        cp -f /etc/sipwitch.conf $temp_backup_dir
174
-        backup_directory_to_friend $temp_backup_dir sip
175
-        echo $"Backup SIP settings complete"
176
-    fi
177
-}
178
-
179
-function restore_remote_sip {
180
-    temp_restore_dir=/root/tempsip
181
-    function_check restore_directory_from_friend
182
-    restore_directory_from_friend $temp_restore_dir sip
183
-    if [ -d $temp_restore_dir/home/$ADMIN_USERNAME/tempbackup ]; then
184
-        cp -f $temp_restore_dir/home/$ADMIN_USERNAME/tempbackup/sipwitch.conf /etc/sipwitch.conf
185
-    else
186
-        cp -f $temp_restore_dir/sipwitch.conf /etc/sipwitch.conf
187
-    fi
188
-    if [ ! "$?" = "0" ]; then
189
-        rm -rf $temp_restore_dir
190
-        function_check set_user_permissions
191
-        set_user_permissions
192
-        backup_unmount_drive
193
-        exit 3679
194
-    fi
195
-    rm -rf $temp_restore_dir
196
-    systemctl restart sipwitch
197
-}
198
-
199
-function remove_sip {
200
-    firewall_remove ${TURN_PORT}
201
-    firewall_remove ${TURN_TLS_PORT} tcp
202
-    firewall_remove ${SIP_PORT}
203
-    firewall_remove ${SIP_TLS_PORT}
204
-
205
-    function_check remove_onion_service
206
-    remove_onion_service sip ${SIP_PORT}
207
-
208
-    apt-get -yq remove --purge sipwitch
209
-    apt-get -yq remove --purge turnserver
210
-    if [ -f /etc/sipwitch.conf ]; then
211
-        rm /etc/sipwitch.conf
212
-    fi
213
-    if [ -d /etc/turnserver ]; then
214
-        rm -rf /etc/turnserver
215
-    fi
216
-    remove_completion_param install_sip
217
-    remove_completion_param configure_firewall_for_turn
218
-    remove_completion_param configure_firewall_for_sip4
219
-}
220
-
221
-function configure_firewall_for_turn {
222
-    if [[ $ONION_ONLY != "no" ]]; then
223
-        return
224
-    fi
225
-    firewall_add TURN ${TURN_PORT}
226
-    firewall_add "TURN TLS" ${TURN_TLS_PORT} tcp
227
-}
228
-
229
-
230
-function configure_firewall_for_sip4 {
231
-    if [[ $ONION_ONLY != "no" ]]; then
232
-        return
233
-    fi
234
-    firewall_add SIP ${SIP_PORT}
235
-    firewall_add "SIP TLS" ${SIP_TLS_PORT}
236
-}
237
-
238
-function update_sipwitch_daemon {
239
-    if [ ! -f /etc/init.d/sipwitch ]; then
240
-        return
241
-    fi
242
-
243
-    systemctl stop sipwitch
244
-
245
-    # remove the original sipwitch daemon if it exists
246
-    if [ -f /etc/init.d/sipwitch ]; then
247
-        rm -f /etc/init.d/sipwitch
248
-    fi
249
-
250
-    # daemon
251
-    echo '[Unit]' > /etc/systemd/system/sipwitch.service
252
-    echo 'Description=GNU SIP Witch, a SIP telephony service daemon.' >> /etc/systemd/system/sipwitch.service
253
-    echo 'After=network.target' >> /etc/systemd/system/sipwitch.service
254
-    echo '' >> /etc/systemd/system/sipwitch.service
255
-    echo '[Service]' >> /etc/systemd/system/sipwitch.service
256
-    echo 'Type=simple' >> /etc/systemd/system/sipwitch.service
257
-    echo 'Group=sipwitch' >> /etc/systemd/system/sipwitch.service
258
-    echo 'PIDFile=/var/run/sipwitch/pidfile' >> /etc/systemd/system/sipwitch.service
259
-    echo 'EnvironmentFile=-/etc/conf.d/sipwitch' >> /etc/systemd/system/sipwitch.service
260
-    echo 'EnvironmentFile=-/etc/sipwitch.conf' >> /etc/systemd/system/sipwitch.service
261
-    echo 'EnvironmentFile=-/etc/default/sipwitch' >> /etc/systemd/system/sipwitch.service
262
-    echo 'ExecStartPre=-/bin/rm -f /var/run/sipwitch/control' >> /etc/systemd/system/sipwitch.service
263
-    echo "ExecStart=/usr/sbin/sipw -f \$OPTIONS -P$SIP_PORT" >> /etc/systemd/system/sipwitch.service
264
-    echo 'Restart=always' >> /etc/systemd/system/sipwitch.service
265
-    echo 'NotifyAccess=main' >> /etc/systemd/system/sipwitch.service
266
-    echo '' >> /etc/systemd/system/sipwitch.service
267
-    echo '[Install]' >> /etc/systemd/system/sipwitch.service
268
-    echo 'WantedBy=multi-user.target' >> /etc/systemd/system/sipwitch.service
269
-
270
-    systemctl enable sipwitch
271
-    systemctl daemon-reload
272
-    systemctl start sipwitch
273
-}
274
-
275
-function install_sip_main {
276
-    if [[ $(app_is_installed sip_main) == "1" ]]; then
277
-        return
278
-    fi
279
-
280
-    apt-get -yq install sipwitch
281
-
282
-    if [ -f $IMAGE_PASSWORD_FILE ]; then
283
-        SIP_SERVER_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
284
-    else
285
-        if [ ! $SIP_SERVER_PASSWORD ]; then
286
-            SIP_SERVER_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
287
-        fi
288
-    fi
289
-
290
-    echo '<?xml version="1.0"?>' > /etc/sipwitch.conf
291
-    echo '<sipwitch>' >> /etc/sipwitch.conf
292
-    echo '<provision>' >> /etc/sipwitch.conf
293
-
294
-    echo "<user id=\"$MY_USERNAME\">" >> /etc/sipwitch.conf
295
-    echo '<extension>201</extension>' >> /etc/sipwitch.conf
296
-    echo "<secret>$SIP_SERVER_PASSWORD</secret>" >> /etc/sipwitch.conf
297
-    echo "<display>$MY_USERNAME 201</display>" >> /etc/sipwitch.conf
298
-    echo '</user>' >> /etc/sipwitch.conf
299
-
300
-    echo '</provision>' >> /etc/sipwitch.conf
301
-    echo '<access>' >> /etc/sipwitch.conf
302
-    echo '</access>' >> /etc/sipwitch.conf
303
-    echo '<stack>' >> /etc/sipwitch.conf
304
-    echo "  <localnames>$DEFAULT_DOMAIN_NAME</localnames>" >> /etc/sipwitch.conf
305
-    echo '  <mapped>200</mapped>' >> /etc/sipwitch.conf
306
-    echo '  <threading>2</threading>' >> /etc/sipwitch.conf
307
-    echo '  <interface>*</interface>' >> /etc/sipwitch.conf
308
-    echo '  <dumping>false</dumping>' >> /etc/sipwitch.conf
309
-    echo '  <system>system</system>' >> /etc/sipwitch.conf
310
-    echo '  <anon>anonymous</anon>' >> /etc/sipwitch.conf
311
-    echo '</stack>' >> /etc/sipwitch.conf
312
-    echo '<timers>' >> /etc/sipwitch.conf
313
-    echo '  <!-- ring every 4 seconds -->' >> /etc/sipwitch.conf
314
-    echo '  <ring>4</ring>' >> /etc/sipwitch.conf
315
-    echo '  <!-- call forward no answer after x rings -->' >> /etc/sipwitch.conf
316
-    echo '  <cfna>4</cfna>' >> /etc/sipwitch.conf
317
-    echo '  <!-- call reset to clear cid in stack, 6 seconds -->' >> /etc/sipwitch.conf
318
-    echo '  <reset>6</reset>' >> /etc/sipwitch.conf
319
-    echo '</timers>' >> /etc/sipwitch.conf
320
-    echo '<!-- we have 2xx numbers plus space for external users -->' >> /etc/sipwitch.conf
321
-    echo '<registry>' >> /etc/sipwitch.conf
322
-    echo '  <prefix>200</prefix>' >> /etc/sipwitch.conf
323
-    echo '  <range>100</range>' >> /etc/sipwitch.conf
324
-    echo '  <keysize>77</keysize>' >> /etc/sipwitch.conf
325
-    echo '  <mapped>200</mapped>' >> /etc/sipwitch.conf
326
-    echo '  <!-- <realm>GNU Telephony</realm> -->' >> /etc/sipwitch.conf
327
-    echo '</registry>' >> /etc/sipwitch.conf
328
-    echo '<routing>' >> /etc/sipwitch.conf
329
-    echo '</routing>' >> /etc/sipwitch.conf
330
-    echo '</sipwitch>' >> /etc/sipwitch.conf
331
-
332
-    sed -i 's|#PLUGINS=|PLUGINS=|g' /etc/default/sipwitch
333
-    sed -i 's|PLUGINS=.*|PLUGINS="zeroconf subscriber forward"|g' /etc/default/sipwitch
334
-    groupadd sipwitch
335
-    chmod 600 /etc/shadow
336
-    chmod 600 /etc/gshadow
337
-    usermod -aG sipwitch $MY_USERNAME
338
-    chmod 0000 /etc/shadow
339
-    chmod 0000 /etc/gshadow
340
-
341
-    SIP_ONION_HOSTNAME=$(add_onion_service sip ${SIP_PORT} ${SIP_PORT})
342
-
343
-    ${PROJECT_NAME}-pass -u $MY_USERNAME -a sip -p "$SIP_SERVER_PASSWORD"
344
-
345
-    function_check configure_firewall_for_sip4
346
-    configure_firewall_for_sip4
347
-    install_completed sip_main
348
-}
349
-
350
-function install_sip_turn {
351
-    if [[ $(app_is_installed sip_turn) == "1" ]]; then
352
-        return
353
-    fi
354
-
355
-    apt-get -yq install turnserver
356
-
357
-    # create a nonce if needed
358
-    if [ ! $TURN_NONCE ]; then
359
-        TURN_NONCE="$(create_password 30)"
360
-    fi
361
-
362
-    function_check create_site_certificate
363
-    create_site_certificate $DEFAULT_DOMAIN_NAME 'yes'
364
-
365
-    echo '##' > /etc/turnserver/turnserver.conf
366
-    echo '# TurnServer configuration file.' >> /etc/turnserver/turnserver.conf
367
-    echo '#' >> /etc/turnserver/turnserver.conf
368
-    echo '' >> /etc/turnserver/turnserver.conf
369
-    echo '## Public IPv4 address of any relayed address (if not set, no relay for IPv4).' >> /etc/turnserver/turnserver.conf
370
-    echo '## To have multiple address, separate addresses with a comma' >> /etc/turnserver/turnserver.conf
371
-    echo '## (i.e. listen_address = { "172.16.0.1", "172.17.0.1" }).' >> /etc/turnserver/turnserver.conf
372
-    echo "listen_address = { \"192.168.0.1\" }" >> /etc/turnserver/turnserver.conf
373
-    echo '' >> /etc/turnserver/turnserver.conf
374
-    echo '## Public IPv6 address of any relayed address (if not set, no relay for IPv6).' >> /etc/turnserver/turnserver.conf
375
-    echo '## To have multiple address, separate address with a comma' >> /etc/turnserver/turnserver.conf
376
-    echo '## (i.e. listen_addressv6 = { "2001:db8:1::1", "2001:db8:2::1" }).' >> /etc/turnserver/turnserver.conf
377
-    echo "#listen_addressv6 = { \"2001:db8::1\" }" >> /etc/turnserver/turnserver.conf
378
-    echo '' >> /etc/turnserver/turnserver.conf
379
-    echo '## UDP listening port.' >> /etc/turnserver/turnserver.conf
380
-    echo "udp_port = $TURN_PORT" >> /etc/turnserver/turnserver.conf
381
-    echo '' >> /etc/turnserver/turnserver.conf
382
-    echo '## TCP listening port.' >> /etc/turnserver/turnserver.conf
383
-    echo "tcp_port = $TURN_PORT" >> /etc/turnserver/turnserver.conf
384
-    echo '' >> /etc/turnserver/turnserver.conf
385
-    echo '## TLS listening port.' >> /etc/turnserver/turnserver.conf
386
-    echo "tls_port = $TURN_TLS_PORT" >> /etc/turnserver/turnserver.conf
387
-    echo '' >> /etc/turnserver/turnserver.conf
388
-    echo '## TLS support.' >> /etc/turnserver/turnserver.conf
389
-    echo 'tls = true' >> /etc/turnserver/turnserver.conf
390
-    echo '' >> /etc/turnserver/turnserver.conf
391
-    echo '## DTLS support. It is an experimental feature and is not defined in TURN' >> /etc/turnserver/turnserver.conf
392
-    echo '## standard.' >> /etc/turnserver/turnserver.conf
393
-    echo 'dtls = false' >> /etc/turnserver/turnserver.conf
394
-    echo '' >> /etc/turnserver/turnserver.conf
395
-    echo '## Maximum allocation port number.' >> /etc/turnserver/turnserver.conf
396
-    echo 'max_port = 65535' >> /etc/turnserver/turnserver.conf
397
-    echo '' >> /etc/turnserver/turnserver.conf
398
-    echo '## Minimum allocation port number.' >> /etc/turnserver/turnserver.conf
399
-    echo '' >> /etc/turnserver/turnserver.conf
400
-    echo 'min_port = 49152' >> /etc/turnserver/turnserver.conf
401
-    echo '' >> /etc/turnserver/turnserver.conf
402
-    echo '## TURN-TCP support.' >> /etc/turnserver/turnserver.conf
403
-    echo '' >> /etc/turnserver/turnserver.conf
404
-    echo 'turn_tcp = true' >> /etc/turnserver/turnserver.conf
405
-    echo '' >> /etc/turnserver/turnserver.conf
406
-    echo '## TURN-TCP buffering mode:' >> /etc/turnserver/turnserver.conf
407
-    echo '## - true, use userspace buffering;' >> /etc/turnserver/turnserver.conf
408
-    echo '## - false, use kernel buffering.' >> /etc/turnserver/turnserver.conf
409
-    echo 'tcp_buffer_userspace = true' >> /etc/turnserver/turnserver.conf
410
-    echo '' >> /etc/turnserver/turnserver.conf
411
-    echo '## TURN-TCP maximum buffer size.' >> /etc/turnserver/turnserver.conf
412
-    echo 'tcp_buffer_size = 32768' >> /etc/turnserver/turnserver.conf
413
-    echo '' >> /etc/turnserver/turnserver.conf
414
-    echo '## Daemon mode.' >> /etc/turnserver/turnserver.conf
415
-    echo 'daemon = true' >> /etc/turnserver/turnserver.conf
416
-    echo '' >> /etc/turnserver/turnserver.conf
417
-    echo '## Unprivileged user.' >> /etc/turnserver/turnserver.conf
418
-    echo '## If you want to use this feature create a system user.' >> /etc/turnserver/turnserver.conf
419
-    echo '## On Linux: adduser --system --group turnserver' >> /etc/turnserver/turnserver.conf
420
-    echo 'unpriv_user = turnserver' >> /etc/turnserver/turnserver.conf
421
-    echo '' >> /etc/turnserver/turnserver.conf
422
-    echo '## Realm value.' >> /etc/turnserver/turnserver.conf
423
-    echo "realm = \"$DEFAULT_DOMAIN_NAME\"" >> /etc/turnserver/turnserver.conf
424
-    echo '' >> /etc/turnserver/turnserver.conf
425
-    echo '## Nonce key.' >> /etc/turnserver/turnserver.conf
426
-    echo "nonce_key = \"$TURN_NONCE\"" >> /etc/turnserver/turnserver.conf
427
-    echo '' >> /etc/turnserver/turnserver.conf
428
-    echo '## Max relay per username.' >> /etc/turnserver/turnserver.conf
429
-    echo 'max_relay_per_username = 5' >> /etc/turnserver/turnserver.conf
430
-    echo '' >> /etc/turnserver/turnserver.conf
431
-    echo '## Allocation lifetime.' >> /etc/turnserver/turnserver.conf
432
-    echo 'allocation_lifetime = 1800' >> /etc/turnserver/turnserver.conf
433
-    echo '' >> /etc/turnserver/turnserver.conf
434
-    echo '## Allocation bandwidth limitation (in KBytes/s).' >> /etc/turnserver/turnserver.conf
435
-    echo '## 0 value means bandwidth quota disabled.' >> /etc/turnserver/turnserver.conf
436
-    echo 'bandwidth_per_allocation = 150' >> /etc/turnserver/turnserver.conf
437
-    echo '' >> /etc/turnserver/turnserver.conf
438
-    echo '## Restricted user bandwidth (in KBytes/s).' >> /etc/turnserver/turnserver.conf
439
-    echo '## 0 value means bandwidth limitation disabled.' >> /etc/turnserver/turnserver.conf
440
-    echo 'restricted_bandwidth = 10' >> /etc/turnserver/turnserver.conf
441
-    echo '' >> /etc/turnserver/turnserver.conf
442
-    echo '## Denied addresses.' >> /etc/turnserver/turnserver.conf
443
-    echo '' >> /etc/turnserver/turnserver.conf
444
-    echo '# disallow relaying to localhost' >> /etc/turnserver/turnserver.conf
445
-    echo 'denied_address {' >> /etc/turnserver/turnserver.conf
446
-    echo '  address = "127.0.0.1"' >> /etc/turnserver/turnserver.conf
447
-    echo '  mask = "8"' >> /etc/turnserver/turnserver.conf
448
-    echo '  port = 0' >> /etc/turnserver/turnserver.conf
449
-    echo '}' >> /etc/turnserver/turnserver.conf
450
-    echo '' >> /etc/turnserver/turnserver.conf
451
-    echo '# disallow relaying to ip6-localhost' >> /etc/turnserver/turnserver.conf
452
-    echo 'denied_address {' >> /etc/turnserver/turnserver.conf
453
-    echo '  address = "::1"' >> /etc/turnserver/turnserver.conf
454
-    echo '  mask = "128"' >> /etc/turnserver/turnserver.conf
455
-    echo '  port = 0' >> /etc/turnserver/turnserver.conf
456
-    echo '}' >> /etc/turnserver/turnserver.conf
457
-    echo '' >> /etc/turnserver/turnserver.conf
458
-    echo '## Certification Authority file.' >> /etc/turnserver/turnserver.conf
459
-    echo "ca_file = \"/etc/ssl/certs/ca-certificates.crt\"" >> /etc/turnserver/turnserver.conf
460
-    echo '' >> /etc/turnserver/turnserver.conf
461
-    echo '## Server certificate file.' >> /etc/turnserver/turnserver.conf
462
-    if [ -f /etc/ssl/certs/$DEFAULT_DOMAIN_NAME.pem ]; then
463
-        echo "cert_file = \"/etc/ssl/certs/$DEFAULT_DOMAIN_NAME.pem\"" >> /etc/turnserver/turnserver.conf
464
-    else
465
-        if [ -f /etc/ssl/certs/$DEFAULT_DOMAIN_NAME.crt ]; then
466
-            echo "cert_file = \"/etc/ssl/certs/$DEFAULT_DOMAIN_NAME.crt\"" >> /etc/turnserver/turnserver.conf
467
-        fi
468
-    fi
469
-    echo '' >> /etc/turnserver/turnserver.conf
470
-    echo '## Private key file.' >> /etc/turnserver/turnserver.conf
471
-    echo "private_key_file = \"/etc/ssl/certs/$DEFAULT_DOMAIN_NAME.key\"" >> /etc/turnserver/turnserver.conf
472
-    echo '' >> /etc/turnserver/turnserver.conf
473
-    echo '## Account method.' >> /etc/turnserver/turnserver.conf
474
-    echo "account_method = \"file\"" >> /etc/turnserver/turnserver.conf
475
-    echo '' >> /etc/turnserver/turnserver.conf
476
-    echo '## Account file (if account_method = file).' >> /etc/turnserver/turnserver.conf
477
-    echo "account_file = \"/etc/turnserver/turnusers.txt\"" >> /etc/turnserver/turnserver.conf
478
-    echo '' >> /etc/turnserver/turnserver.conf
479
-    echo '## mod_tmpuser.' >> /etc/turnserver/turnserver.conf
480
-    echo 'mod_tmpuser = false' >> /etc/turnserver/turnserver.conf
481
-
482
-    echo "${MY_USERNAME}:password:${DEFAULT_DOMAIN_NAME}:authorized" > /etc/turnserver/turnusers.txt
483
-
484
-    systemctl restart turnserver
485
-
486
-    function_check configure_firewall_for_turn
487
-    configure_firewall_for_turn
488
-    install_completed sip_turn
489
-}
490
-
491
-function install_sip {
492
-    install_sip_main
493
-    update_sipwitch_daemon
494
-    APP_INSTALLED=1
495
-}
496
-
497
-# NOTE: deliberately no exit 0

+ 0
- 23
src/freedombone-controlpanel 파일 보기

76
 
76
 
77
 COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
77
 COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
78
 SELECTED_USERNAME=
78
 SELECTED_USERNAME=
79
-SIP_CONFIGURATION_FILE=/etc/sipwitch.conf
80
 ADMIN_USER=
79
 ADMIN_USER=
81
 UPGRADE_SCRIPT_NAME="${PROJECT_NAME}-upgrade"
80
 UPGRADE_SCRIPT_NAME="${PROJECT_NAME}-upgrade"
82
 UPDATE_DATE_SCRIPT=/usr/bin/updatedate
81
 UPDATE_DATE_SCRIPT=/usr/bin/updatedate
479
     echo '====='
478
     echo '====='
480
     echo ''
479
     echo ''
481
     echo -n -e "$(pad_string 'Name')"
480
     echo -n -e "$(pad_string 'Name')"
482
-    if [[ $(app_is_installed sip) == "1" ]]; then
483
-        echo -n -e "$(pad_string 'SIP ext')"
484
-    fi
485
     echo -n -e "$(pad_string 'Data')"
481
     echo -n -e "$(pad_string 'Data')"
486
     echo ''
482
     echo ''
487
     echo '----------------------------------'
483
     echo '----------------------------------'
489
         USRNAME=$(echo "$d" | awk -F '/' '{print $3}')
485
         USRNAME=$(echo "$d" | awk -F '/' '{print $3}')
490
         if [[ $(is_valid_user "$USRNAME") == "1" ]]; then
486
         if [[ $(is_valid_user "$USRNAME") == "1" ]]; then
491
             echo -n -e "$(pad_string ${USRNAME})"
487
             echo -n -e "$(pad_string ${USRNAME})"
492
-            # get the SIP extension
493
-            SIPEXT=
494
-            if [ -f $SIP_CONFIGURATION_FILE ]; then
495
-                while read ext; do
496
-                    if [[ $ext == *"user id"* ]]; then
497
-                        CURR_UID=$(echo "$ext" | awk -F '"' '{print $2}' | awk -F '"' '{print $1}')
498
-                    fi
499
-                    if [[ $ext == *"extension"* ]]; then
500
-                        if [[ $CURR_UID == $USRNAME ]]; then
501
-                            SIPEXT=$(echo "$ext" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}')
502
-                        fi
503
-                    fi
504
-                done < $SIP_CONFIGURATION_FILE
505
-            fi
506
-            if [ $SIPEXT ]; then
507
-                echo -n -e "$(pad_string SIP:${SIPEXT})"
508
-            else
509
-                echo -n -e "$(pad_string '')"
510
-            fi
511
 
488
 
512
             # size of the home directory
489
             # size of the home directory
513
             echo "$(du -s -h /home/${USRNAME} | awk -F ' ' '{print $1}')"
490
             echo "$(du -s -h /home/${USRNAME} | awk -F ' ' '{print $1}')"

+ 0
- 112
src/freedombone-rmsipuser 파일 보기

1
-#!/bin/bash
2
-#
3
-# .---.                  .              .
4
-# |                      |              |
5
-# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
-# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
-# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
-#
9
-#                    Freedom in the Cloud
10
-#
11
-
12
-# Removes a SIP phone user from the system
13
-
14
-# License
15
-# =======
16
-#
17
-# Copyright (C) 2015-2016 Bob Mottram <bob@freedombone.net>
18
-#
19
-# This program is free software: you can redistribute it and/or modify
20
-# it under the terms of the GNU Affero General Public License as published by
21
-# the Free Software Foundation, either version 3 of the License, or
22
-# (at your option) any later version.
23
-#
24
-# This program is distributed in the hope that it will be useful,
25
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-# GNU Affero General Public License for more details.
28
-#
29
-# You should have received a copy of the GNU Affero General Public License
30
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-
32
-PROJECT_NAME='freedombone'
33
-
34
-export TEXTDOMAIN=${PROJECT_NAME}-rmsipuser
35
-export TEXTDOMAINDIR="/usr/share/locale"
36
-
37
-MY_USERNAME=$1
38
-CONFIG_FILE=/etc/sipwitch.conf
39
-USER_EXISTS="no"
40
-
41
-function show_help {
42
-    echo ''
43
-    echo $"${PROJECT_NAME}-rmsipuser [username]"
44
-    echo ''
45
-    exit 0
46
-}
47
-
48
-function sip_user_exists {
49
-    IFS=''
50
-    while read line; do
51
-        if [[ "$line" == *"<user id=\"$MY_USERNAME\">" ]]; then
52
-            USER_EXISTS="yes"
53
-            return
54
-        fi
55
-    done < $CONFIG_FILE
56
-}
57
-
58
-function remove_sip_user {
59
-    USER_FOUND=
60
-    NEW_CONFIG_FILE="${CONFIG_FILE}.new"
61
-    if [ -f $NEW_CONFIG_FILE ]; then
62
-        rm -f $NEW_CONFIG_FILE
63
-    fi
64
-    touch $NEW_CONFIG_FILE
65
-    IFS=''
66
-    while read line; do
67
-        if [ ! $USER_FOUND ]; then
68
-            if [[ "$line" == *"<user id=\"$MY_USERNAME\">" ]]; then
69
-                USER_FOUND="yes"
70
-            fi
71
-        fi
72
-        if [ ! $USER_FOUND ]; then
73
-            echo "$line" >> $NEW_CONFIG_FILE
74
-        else
75
-            if [[ "$line" == *'</user>' ]]; then
76
-                USER_FOUND=
77
-            fi
78
-        fi
79
-    done < $CONFIG_FILE
80
-    mv $NEW_CONFIG_FILE $CONFIG_FILE
81
-}
82
-
83
-if [ ! $MY_USERNAME ]; then
84
-    show_help
85
-fi
86
-
87
-if [ ! -f $CONFIG_FILE ]; then
88
-    echo $"SIP configuration file not found"
89
-    exit 1
90
-fi
91
-
92
-# the user must already exist on the system
93
-if [ ! -d /home/$MY_USERNAME ]; then
94
-    echo $"User $MY_USERNAME not found"
95
-    exit 2
96
-fi
97
-
98
-sip_user_exists
99
-
100
-if [[ $USER_EXISTS != "yes" ]]; then
101
-    echo $'User not found within SIP configuration file'
102
-    exit 3
103
-fi
104
-
105
-systemctl stop sipwitch
106
-
107
-remove_sip_user
108
-
109
-systemctl start sipwitch
110
-
111
-echo $"SIP user $MY_USERNAME removed"
112
-exit 0

+ 0
- 47
src/freedombone-sipfreeext 파일 보기

1
-#!/bin/bash
2
-#
3
-# .---.                  .              .
4
-# |                      |              |
5
-# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
-# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
-# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
-#
9
-#                    Freedom in the Cloud
10
-#
11
-
12
-# Returns the next free SIP extension number
13
-
14
-# License
15
-# =======
16
-#
17
-# Copyright (C) 2015-2016 Bob Mottram <bob@freedombone.net>
18
-#
19
-# This program is free software: you can redistribute it and/or modify
20
-# it under the terms of the GNU Affero General Public License as published by
21
-# the Free Software Foundation, either version 3 of the License, or
22
-# (at your option) any later version.
23
-#
24
-# This program is distributed in the hope that it will be useful,
25
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
26
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
-# GNU Affero General Public License for more details.
28
-#
29
-# You should have received a copy of the GNU Affero General Public License
30
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
-
32
-PROJECT_NAME='freedombone'
33
-
34
-export TEXTDOMAIN=${PROJECT_NAME}-sipfreeext
35
-export TEXTDOMAINDIR="/usr/share/locale"
36
-
37
-CONFIG_FILE=/etc/sipwitch.conf
38
-
39
-maxnum=201
40
-while (( maxnum < 299 )); do
41
-    if ! grep -q "extension>$maxnum<" $CONFIG_FILE; then
42
-        break;
43
-    fi
44
-    maxnum=$((maxnum + 1))
45
-done
46
-echo $maxnum
47
-exit 0

+ 0
- 1
src/freedombone-utils-upgrade 파일 보기

76
     sed -i 's|XMPP|xmpp|g' $COMPLETION_FILE
76
     sed -i 's|XMPP|xmpp|g' $COMPLETION_FILE
77
     sed -i 's|voip|mumble|g' $COMPLETION_FILE
77
     sed -i 's|voip|mumble|g' $COMPLETION_FILE
78
     sed -i 's|VoIP|mumble|g' $COMPLETION_FILE
78
     sed -i 's|VoIP|mumble|g' $COMPLETION_FILE
79
-    sed -i 's|SIP |sip |g' $COMPLETION_FILE
80
     sed -i 's|Blog|htmly|g' $COMPLETION_FILE
79
     sed -i 's|Blog|htmly|g' $COMPLETION_FILE
81
     sed -i 's|Hubzilla|hubzilla|g' $COMPLETION_FILE
80
     sed -i 's|Hubzilla|hubzilla|g' $COMPLETION_FILE
82
     sed -i 's|Gogs|gogs|g' $COMPLETION_FILE
81
     sed -i 's|Gogs|gogs|g' $COMPLETION_FILE

+ 24
- 24
website/EN/app_gnusocial.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
-<!-- 2017-05-09 Tue 15:00 -->
6
+<!-- 2018-02-20 Tue 10:55 -->
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></title>
9
+<title>&lrm;</title>
10
 <meta name="generator" content="Org mode" />
10
 <meta name="generator" content="Org mode" />
11
 <meta name="author" content="Bob Mottram" />
11
 <meta name="author" content="Bob Mottram" />
12
 <meta name="description" content="How to use GNU Social"
12
 <meta name="description" content="How to use GNU Social"
257
 </p>
257
 </p>
258
 
258
 
259
 <p>
259
 <p>
260
-You should regard anything posted to GNU Social as being <i>public communication</i> visible to anyone on the internet. There is a direct messaging capability between users but it's not particularly secure, so for one-to-one messages stick to better methods, such as XMPP with OTR/OMEMO or Tox.
260
+You should regard anything posted to GNU Social as being <i>public communication</i> visible to anyone on the internet. There is a direct messaging capability between users but it's not particularly secure, so for one-to-one messages stick to better methods, such as XMPP with OpenPGP/OMEMO or Tox.
261
 </p>
261
 </p>
262
 
262
 
263
 <p>
263
 <p>
274
 </div>
274
 </div>
275
 
275
 
276
 
276
 
277
-<div id="outline-container-org5123b46" class="outline-2">
278
-<h2 id="org5123b46">Installation</h2>
279
-<div class="outline-text-2" id="text-org5123b46">
277
+<div id="outline-container-orgd505b7e" class="outline-2">
278
+<h2 id="orgd505b7e">Installation</h2>
279
+<div class="outline-text-2" id="text-orgd505b7e">
280
 <p>
280
 <p>
281
 Log into your system with:
281
 Log into your system with:
282
 </p>
282
 </p>
283
 
283
 
284
 <div class="org-src-container">
284
 <div class="org-src-container">
285
-<pre><code class="src src-bash">ssh myusername@mydomain -p 2222
286
-</code></pre>
285
+<pre class="src src-bash">ssh myusername@mydomain -p 2222
286
+</pre>
287
 </div>
287
 </div>
288
 
288
 
289
 <p>
289
 <p>
300
 </div>
300
 </div>
301
 </div>
301
 </div>
302
 
302
 
303
-<div id="outline-container-org9477256" class="outline-2">
304
-<h2 id="org9477256">Initial setup</h2>
305
-<div class="outline-text-2" id="text-org9477256">
303
+<div id="outline-container-org23e7827" class="outline-2">
304
+<h2 id="org23e7827">Initial setup</h2>
305
+<div class="outline-text-2" id="text-org23e7827">
306
 <p>
306
 <p>
307
 If you have just obtained a Lets Encrypt certificate as above then go to <b>About</b> on the administrator control panel and you should see your GNU Social domain listed there along with an onion address. You can then navigate to your site in a browser.
307
 If you have just obtained a Lets Encrypt certificate as above then go to <b>About</b> on the administrator control panel and you should see your GNU Social domain listed there along with an onion address. You can then navigate to your site in a browser.
308
 </p>
308
 </p>
329
 </div>
329
 </div>
330
 </div>
330
 </div>
331
 
331
 
332
-<div id="outline-container-org3314c00" class="outline-2">
333
-<h2 id="org3314c00">Switching user interfaces</h2>
334
-<div class="outline-text-2" id="text-org3314c00">
332
+<div id="outline-container-orge65b439" class="outline-2">
333
+<h2 id="orge65b439">Switching user interfaces</h2>
334
+<div class="outline-text-2" id="text-orge65b439">
335
 <p>
335
 <p>
336
 A few web based user interfaces are available for GNU SOcial. They are selectable by going to the <b>Administrator control panel</b> and choosing <b>App settings</b> then <b>gnusocial</b>.
336
 A few web based user interfaces are available for GNU SOcial. They are selectable by going to the <b>Administrator control panel</b> and choosing <b>App settings</b> then <b>gnusocial</b>.
337
 </p>
337
 </p>
352
 </div>
352
 </div>
353
 </div>
353
 </div>
354
 
354
 
355
-<div id="outline-container-org52974f0" class="outline-2">
356
-<h2 id="org52974f0">Using with Emacs</h2>
357
-<div class="outline-text-2" id="text-org52974f0">
355
+<div id="outline-container-org6444239" class="outline-2">
356
+<h2 id="org6444239">Using with Emacs</h2>
357
+<div class="outline-text-2" id="text-org6444239">
358
 <div class="org-center">
358
 <div class="org-center">
359
 
359
 
360
 <div class="figure">
360
 <div class="figure">
368
 </p>
368
 </p>
369
 
369
 
370
 <div class="org-src-container">
370
 <div class="org-src-container">
371
-<pre><code class="src src-bash">mkdir ~/elisp
371
+<pre class="src src-bash">mkdir ~/elisp
372
 git clone https://github.com/bashrc/gnu-social-mode ~/elisp/gnu-social-mode
372
 git clone https://github.com/bashrc/gnu-social-mode ~/elisp/gnu-social-mode
373
 <span class="org-builtin">echo</span> <span class="org-string">"(add-to-list 'load-path \"~/elisp/gnu-social-mode\")"</span> &gt;&gt; ~/.emacs
373
 <span class="org-builtin">echo</span> <span class="org-string">"(add-to-list 'load-path \"~/elisp/gnu-social-mode\")"</span> &gt;&gt; ~/.emacs
374
 <span class="org-builtin">echo</span> <span class="org-string">"(require 'gnu-social-mode)"</span> &gt;&gt; ~/.emacs
374
 <span class="org-builtin">echo</span> <span class="org-string">"(require 'gnu-social-mode)"</span> &gt;&gt; ~/.emacs
376
 <span class="org-builtin">echo</span> <span class="org-string">"      gnu-social-server \"yourgnusocialdomain\""</span> &gt;&gt; ~/.emacs
376
 <span class="org-builtin">echo</span> <span class="org-string">"      gnu-social-server \"yourgnusocialdomain\""</span> &gt;&gt; ~/.emacs
377
 <span class="org-builtin">echo</span> <span class="org-string">"    gnu-social-username \"yourusername\""</span> &gt;&gt; ~/.emacs
377
 <span class="org-builtin">echo</span> <span class="org-string">"    gnu-social-username \"yourusername\""</span> &gt;&gt; ~/.emacs
378
 <span class="org-builtin">echo</span> <span class="org-string">"    gnu-social-password \"gnusocialpassword\")"</span> &gt;&gt; ~/.emacs
378
 <span class="org-builtin">echo</span> <span class="org-string">"    gnu-social-password \"gnusocialpassword\")"</span> &gt;&gt; ~/.emacs
379
-</code></pre>
379
+</pre>
380
 </div>
380
 </div>
381
 
381
 
382
 <p>
382
 <p>
384
 </p>
384
 </p>
385
 
385
 
386
 <div class="org-src-container">
386
 <div class="org-src-container">
387
-<pre><code class="src src-bash">M-x gnu-social
388
-</code></pre>
387
+<pre class="src src-bash">M-x gnu-social
388
+</pre>
389
 </div>
389
 </div>
390
 
390
 
391
 <p>
391
 <p>
535
 </div>
535
 </div>
536
 </div>
536
 </div>
537
 
537
 
538
-<div id="outline-container-orgd6dab31" class="outline-2">
539
-<h2 id="orgd6dab31">Blocking controls</h2>
540
-<div class="outline-text-2" id="text-orgd6dab31">
538
+<div id="outline-container-org231ba8e" class="outline-2">
539
+<h2 id="org231ba8e">Blocking controls</h2>
540
+<div class="outline-text-2" id="text-org231ba8e">
541
 <div class="org-center">
541
 <div class="org-center">
542
 
542
 
543
 <div class="figure">
543
 <div class="figure">

+ 32
- 30
website/EN/backups.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
-<!-- 2016-10-31 Mon 16:23 -->
6
+<!-- 2018-02-20 Tue 11:20 -->
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></title>
9
+<title>&lrm;</title>
10
 <meta name="generator" content="Org mode" />
10
 <meta name="generator" content="Org mode" />
11
 <meta name="author" content="Bob Mottram" />
11
 <meta name="author" content="Bob Mottram" />
12
 <meta name="description" content="Turn the Beaglebone Black into a personal communications server"
12
 <meta name="description" content="Turn the Beaglebone Black into a personal communications server"
71
   pre.src-fortran:before { content: 'Fortran'; }
71
   pre.src-fortran:before { content: 'Fortran'; }
72
   pre.src-gnuplot:before { content: 'gnuplot'; }
72
   pre.src-gnuplot:before { content: 'gnuplot'; }
73
   pre.src-haskell:before { content: 'Haskell'; }
73
   pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
74
   pre.src-java:before { content: 'Java'; }
75
   pre.src-java:before { content: 'Java'; }
75
   pre.src-js:before { content: 'Javascript'; }
76
   pre.src-js:before { content: 'Javascript'; }
76
   pre.src-latex:before { content: 'LaTeX'; }
77
   pre.src-latex:before { content: 'LaTeX'; }
188
 @licstart  The following is the entire license notice for the
189
 @licstart  The following is the entire license notice for the
189
 JavaScript code in this tag.
190
 JavaScript code in this tag.
190
 
191
 
191
-Copyright (C) 2012-2013 Free Software Foundation, Inc.
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
192
 
193
 
193
 The JavaScript code in this tag is free software: you can
194
 The JavaScript code in this tag is free software: you can
194
 redistribute it and/or modify it under the terms of the GNU
195
 redistribute it and/or modify it under the terms of the GNU
256
 </colgroup>
257
 </colgroup>
257
 <tbody>
258
 <tbody>
258
 <tr>
259
 <tr>
259
-<td class="org-left"><a href="#org5101793">Backup keys</a></td>
260
+<td class="org-left"><a href="#org9e30c71">Backup keys</a></td>
260
 </tr>
261
 </tr>
261
 
262
 
262
 <tr>
263
 <tr>
263
-<td class="org-left"><a href="#orgbd04f75">Backup to USB</a></td>
264
+<td class="org-left"><a href="#org51128a3">Backup to USB</a></td>
264
 </tr>
265
 </tr>
265
 
266
 
266
 <tr>
267
 <tr>
267
-<td class="org-left"><a href="#org3944959">Restore from USB</a></td>
268
+<td class="org-left"><a href="#org471bcb9">Restore from USB</a></td>
268
 </tr>
269
 </tr>
269
 
270
 
270
 <tr>
271
 <tr>
271
-<td class="org-left"><a href="#org4ffab21">Distributed/remote backups</a></td>
272
+<td class="org-left"><a href="#orgbd325f2">Distributed/remote backups</a></td>
272
 </tr>
273
 </tr>
273
 
274
 
274
 <tr>
275
 <tr>
275
-<td class="org-left"><a href="#org52a7ed8">Restore from a friend</a></td>
276
+<td class="org-left"><a href="#orged9af55">Restore from a friend</a></td>
276
 </tr>
277
 </tr>
277
 </tbody>
278
 </tbody>
278
 </table>
279
 </table>
279
 </div>
280
 </div>
280
 
281
 
281
-<div id="outline-container-org5101793" class="outline-2">
282
-<h2 id="org5101793">Backup keys</h2>
283
-<div class="outline-text-2" id="text-org5101793">
282
+<div id="outline-container-org9e30c71" class="outline-2">
283
+<h2 id="org9e30c71">Backup keys</h2>
284
+<div class="outline-text-2" id="text-org9e30c71">
284
 <p>
285
 <p>
285
 As part of the Freedombone installation the GPG key used to encrypt backups will have been added to the <i>.gnupg</i> keyring in your home directory. Ensure that you have a copy of all your keys by plugging in a LUKS encrypted USB drive and then running the commands:
286
 As part of the Freedombone installation the GPG key used to encrypt backups will have been added to the <i>.gnupg</i> keyring in your home directory. Ensure that you have a copy of all your keys by plugging in a LUKS encrypted USB drive and then running the commands:
286
 </p>
287
 </p>
303
 </p>
304
 </p>
304
 </div>
305
 </div>
305
 </div>
306
 </div>
306
-<div id="outline-container-orgbd04f75" class="outline-2">
307
-<h2 id="orgbd04f75">Backup to USB</h2>
308
-<div class="outline-text-2" id="text-orgbd04f75">
307
+<div id="outline-container-org51128a3" class="outline-2">
308
+<h2 id="org51128a3">Backup to USB</h2>
309
+<div class="outline-text-2" id="text-org51128a3">
309
 <p>
310
 <p>
310
 First and foremost - <b>encrypt your USB drives</b>! Even if you think you have "<i>nothing to hide</i>" if you accidentally lose a USB thumb drive (it's easy to lose small objects) and it's not encrypted then potentially someone might be able to obtain enough information about you to commit identity fraud, take out loans, open bank accounts, etc. Use LUKS encryption. In Ubuntu you can do this using the <i>Disk Utility</i> application. Some instructions <a href="https://help.ubuntu.com/community/EncryptedFilesystemsOnRemovableStorage">can be found here</a>.
311
 First and foremost - <b>encrypt your USB drives</b>! Even if you think you have "<i>nothing to hide</i>" if you accidentally lose a USB thumb drive (it's easy to lose small objects) and it's not encrypted then potentially someone might be able to obtain enough information about you to commit identity fraud, take out loans, open bank accounts, etc. Use LUKS encryption. In Ubuntu you can do this using the <i>Disk Utility</i> application. Some instructions <a href="https://help.ubuntu.com/community/EncryptedFilesystemsOnRemovableStorage">can be found here</a>.
311
 </p>
312
 </p>
336
 </p>
337
 </p>
337
 </div>
338
 </div>
338
 </div>
339
 </div>
339
-<div id="outline-container-org3944959" class="outline-2">
340
-<h2 id="org3944959">Restore from USB</h2>
341
-<div class="outline-text-2" id="text-org3944959">
340
+<div id="outline-container-org471bcb9" class="outline-2">
341
+<h2 id="org471bcb9">Restore from USB</h2>
342
+<div class="outline-text-2" id="text-org471bcb9">
342
 <p>
343
 <p>
343
 Log into the system and become the root user:
344
 Log into the system and become the root user:
344
 </p>
345
 </p>
361
 </p>
362
 </p>
362
 </div>
363
 </div>
363
 </div>
364
 </div>
364
-<div id="outline-container-org4ffab21" class="outline-2">
365
-<h2 id="org4ffab21">Distributed/remote backups</h2>
366
-<div class="outline-text-2" id="text-org4ffab21">
365
+<div id="outline-container-orgbd325f2" class="outline-2">
366
+<h2 id="orgbd325f2">Distributed/remote backups</h2>
367
+<div class="outline-text-2" id="text-orgbd325f2">
367
 <p>
368
 <p>
368
 Distributed backups are a better way of ensuring the persistence of your data, such that even if your system gets stolen or destroyed then the data will still be recoverable from your friends. Since the backups are encrypted your friends (or anyone else with access to their systems) won't be able to read your backed up content even if their systems are subsequently compromised.
369
 Distributed backups are a better way of ensuring the persistence of your data, such that even if your system gets stolen or destroyed then the data will still be recoverable from your friends. Since the backups are encrypted your friends (or anyone else with access to their systems) won't be able to read your backed up content even if their systems are subsequently compromised.
369
 </p>
370
 </p>
370
 
371
 
371
 <p>
372
 <p>
372
-Firstly you will need to have a user account on one or more of your friends servers.  They don't necessarily need to be using Freedombone, just some version of GNU/Linux with ssh access.  They can create a user account for you with the control panel on a Freedombone system or with the <b>adduser &lt;username&gt;</b> command on any other system when logged in as root and then give you the username and password via a secure method, such as on paper, via an encrypted email, Tox or via an XMPP chat using OTR. Make sure that the password used is a strong one - preferably a long random string stored in a password manager - so that dictionary attacks will not be easy. Also for maximum resilience put your password manager file onto a USB thumb drive and carry it with you.
373
+Firstly you will need to have a user account on one or more of your friends servers.  They don't necessarily need to be using Freedombone, just some version of GNU/Linux with ssh access.  They can create a user account for you with the control panel on a Freedombone system or with the <b>adduser &lt;username&gt;</b> command on any other system when logged in as root and then give you the username and password via a secure method, such as on paper, via an encrypted email, Tox or via an XMPP chat using OpenPGP/OMEMO. Make sure that the password used is a strong one - preferably a long random string stored in a password manager - so that dictionary attacks will not be easy. Also for maximum resilience put your password manager file onto a USB thumb drive and carry it with you.
373
 </p>
374
 </p>
374
 
375
 
375
 <div class="org-src-container">
376
 <div class="org-src-container">
386
 </p>
387
 </p>
387
 </div>
388
 </div>
388
 </div>
389
 </div>
389
-<div id="outline-container-org52a7ed8" class="outline-2">
390
-<h2 id="org52a7ed8">Restore from a friend</h2>
391
-<div class="outline-text-2" id="text-org52a7ed8">
392
-</div><div id="outline-container-org9783b56" class="outline-3">
393
-<h3 id="org9783b56">With a completely new Freedombone installation</h3>
394
-<div class="outline-text-3" id="text-org9783b56">
390
+<div id="outline-container-orged9af55" class="outline-2">
391
+<h2 id="orged9af55">Restore from a friend</h2>
392
+<div class="outline-text-2" id="text-orged9af55">
393
+</div>
394
+<div id="outline-container-orgf5b5789" class="outline-3">
395
+<h3 id="orgf5b5789">With a completely new Freedombone installation</h3>
396
+<div class="outline-text-3" id="text-orgf5b5789">
395
 <p>
397
 <p>
396
 This is the ultimate disaster recovery scenario in which you are beginning completely from scratch with new hardware and a new Freedombone installation (configured with the same username and domain names). It is assumed that the old hardware was destroyed, but that you have the backup key stored on a USB thumb drive.
398
 This is the ultimate disaster recovery scenario in which you are beginning completely from scratch with new hardware and a new Freedombone installation (configured with the same username and domain names). It is assumed that the old hardware was destroyed, but that you have the backup key stored on a USB thumb drive.
397
 </p>
399
 </p>
418
 </p>
420
 </p>
419
 </div>
421
 </div>
420
 </div>
422
 </div>
421
-<div id="outline-container-orgf7adedb" class="outline-3">
422
-<h3 id="orgf7adedb">On an existing Freedombone installation</h3>
423
-<div class="outline-text-3" id="text-orgf7adedb">
423
+<div id="outline-container-orgda018d1" class="outline-3">
424
+<h3 id="orgda018d1">On an existing Freedombone installation</h3>
425
+<div class="outline-text-3" id="text-orgda018d1">
424
 <p>
426
 <p>
425
 This is for more common situations in which maybe some data became corrupted and you want to restore it.
427
 This is for more common situations in which maybe some data became corrupted and you want to restore it.
426
 </p>
428
 </p>

+ 20
- 20
website/EN/codeofconduct.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
-<!-- 2017-12-29 Fri 10:25 -->
6
+<!-- 2018-02-20 Tue 11:21 -->
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>
246
 
246
 
247
 <center><h1>Code of Conduct</h1></center>
247
 <center><h1>Code of Conduct</h1></center>
248
 
248
 
249
-<div id="outline-container-org7389049" class="outline-2">
250
-<h2 id="org7389049">Be respectful</h2>
251
-<div class="outline-text-2" id="text-org7389049">
249
+<div id="outline-container-org52494ee" class="outline-2">
250
+<h2 id="org52494ee">Be respectful</h2>
251
+<div class="outline-text-2" id="text-org52494ee">
252
 <p>
252
 <p>
253
 In any Free Software project with more than one participant inevitably there may be people with whom you may disagree, or find it difficult to cooperate. Accept that, but even so, remain respectful. Disagreement is no excuse for poor behaviour or personal attacks, and a community in which people feel threatened is not a healthy community.
253
 In any Free Software project with more than one participant inevitably there may be people with whom you may disagree, or find it difficult to cooperate. Accept that, but even so, remain respectful. Disagreement is no excuse for poor behaviour or personal attacks, and a community in which people feel threatened is not a healthy community.
254
 </p>
254
 </p>
255
 </div>
255
 </div>
256
 </div>
256
 </div>
257
 
257
 
258
-<div id="outline-container-orgb4a8701" class="outline-2">
259
-<h2 id="orgb4a8701">Assume good faith</h2>
260
-<div class="outline-text-2" id="text-orgb4a8701">
258
+<div id="outline-container-orgf45c2d3" class="outline-2">
259
+<h2 id="orgf45c2d3">Assume good faith</h2>
260
+<div class="outline-text-2" id="text-orgf45c2d3">
261
 <p>
261
 <p>
262
 Freedombone Contributors have many ways of reaching our common goal of providing freedom respecting internet or mesh systems which may differ from your ways. Assume that other people are working towards this goal.
262
 Freedombone Contributors have many ways of reaching our common goal of providing freedom respecting internet or mesh systems which may differ from your ways. Assume that other people are working towards this goal.
263
 </p>
263
 </p>
264
 </div>
264
 </div>
265
 </div>
265
 </div>
266
 
266
 
267
-<div id="outline-container-org323e1d5" class="outline-2">
268
-<h2 id="org323e1d5">Be collaborative</h2>
269
-<div class="outline-text-2" id="text-org323e1d5">
267
+<div id="outline-container-org2cd0532" class="outline-2">
268
+<h2 id="org2cd0532">Be collaborative</h2>
269
+<div class="outline-text-2" id="text-org2cd0532">
270
 <p>
270
 <p>
271
 Freedombone is a moderately complex project, though nothing big and professional like GNU. It's good to ask for help when you need it. Similarly, offers for help should be seen in the context of our shared goal of improving the system.
271
 Freedombone is a moderately complex project, though nothing big and professional like GNU. It's good to ask for help when you need it. Similarly, offers for help should be seen in the context of our shared goal of improving the system.
272
 </p>
272
 </p>
277
 </div>
277
 </div>
278
 </div>
278
 </div>
279
 
279
 
280
-<div id="outline-container-org2247eb7" class="outline-2">
281
-<h2 id="org2247eb7">Try to be concise</h2>
282
-<div class="outline-text-2" id="text-org2247eb7">
280
+<div id="outline-container-orgbc9ebe6" class="outline-2">
281
+<h2 id="orgbc9ebe6">Try to be concise</h2>
282
+<div class="outline-text-2" id="text-orgbc9ebe6">
283
 <p>
283
 <p>
284
 If you're submitting documentation then keep in mind that what you write once could be read by many other people. To avoid TL;DR keep it as short and concise as possible. This will also reduce the amount of translations effort needed.
284
 If you're submitting documentation then keep in mind that what you write once could be read by many other people. To avoid TL;DR keep it as short and concise as possible. This will also reduce the amount of translations effort needed.
285
 </p>
285
 </p>
290
 </div>
290
 </div>
291
 </div>
291
 </div>
292
 
292
 
293
-<div id="outline-container-org9d2afa5" class="outline-2">
294
-<h2 id="org9d2afa5">Be open</h2>
295
-<div class="outline-text-2" id="text-org9d2afa5">
293
+<div id="outline-container-org9cc58e7" class="outline-2">
294
+<h2 id="org9cc58e7">Be open</h2>
295
+<div class="outline-text-2" id="text-org9cc58e7">
296
 <p>
296
 <p>
297
 Most ways of communication used within Freedombone (eg Matrix/XMPP) allow for public and private communication. Prefer public methods of communication for Freedombone-related messages, unless posting something sensitive.
297
 Most ways of communication used within Freedombone (eg Matrix/XMPP) allow for public and private communication. Prefer public methods of communication for Freedombone-related messages, unless posting something sensitive.
298
 </p>
298
 </p>
303
 </div>
303
 </div>
304
 </div>
304
 </div>
305
 
305
 
306
-<div id="outline-container-orgeac99f0" class="outline-2">
307
-<h2 id="orgeac99f0">In case of problems</h2>
308
-<div class="outline-text-2" id="text-orgeac99f0">
306
+<div id="outline-container-orgcc0a62b" class="outline-2">
307
+<h2 id="orgcc0a62b">In case of problems</h2>
308
+<div class="outline-text-2" id="text-orgcc0a62b">
309
 <p>
309
 <p>
310
 While this code of conduct should be adhered to by participants, we recognize that sometimes people may have a bad day, or be unaware of some of the guidelines in this code of conduct. When that happens, you may reply to them and point out this code of conduct. Such messages may be in public or in private, whatever is most appropriate. However, regardless of whether the message is public or not, it should still adhere to the relevant parts of this code of conduct; in particular, it should not be abusive or disrespectful. Assume good faith; it is more likely that participants are unaware of their bad behaviour than that they intentionally try to degrade the quality of the discussion.
310
 While this code of conduct should be adhered to by participants, we recognize that sometimes people may have a bad day, or be unaware of some of the guidelines in this code of conduct. When that happens, you may reply to them and point out this code of conduct. Such messages may be in public or in private, whatever is most appropriate. However, regardless of whether the message is public or not, it should still adhere to the relevant parts of this code of conduct; in particular, it should not be abusive or disrespectful. Assume good faith; it is more likely that participants are unaware of their bad behaviour than that they intentionally try to degrade the quality of the discussion.
311
 </p>
311
 </p>
315
 </p>
315
 </p>
316
 
316
 
317
 <p>
317
 <p>
318
-This is not a big project and so there is no division of labor or special enforcement committee or bureaucratic process. Complaints should be made (in private) to the maintainer or chat room admin. The typical email address can be found in the source code headers. Preferably use GPG/OpenPGP if you can, or XMPP with OTR/OMEMO to bob@freedombone.net. XMPP messages are likely to get a quicker response.
318
+This is not a big project and so there is no division of labor or special enforcement committee or bureaucratic process. Complaints should be made (in private) to the maintainer or chat room admin. The typical email address can be found in the source code headers. Preferably use GPG if you can, or XMPP with OpenPGP/OMEMO to bob@freedombone.net. XMPP messages are likely to get a quicker response.
319
 </p>
319
 </p>
320
 </div>
320
 </div>
321
 </div>
321
 </div>

+ 32
- 32
website/EN/support.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-04 Sun 21:22 -->
6
+<!-- 2018-02-20 Tue 11:19 -->
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>
248
 <h1>Support</h1>
248
 <h1>Support</h1>
249
 </center>
249
 </center>
250
 
250
 
251
-<div id="outline-container-orgbc8f3ea" class="outline-2">
252
-<h2 id="orgbc8f3ea">Contact details</h2>
253
-<div class="outline-text-2" id="text-orgbc8f3ea">
251
+<div id="outline-container-org96625f0" class="outline-2">
252
+<h2 id="org96625f0">Contact details</h2>
253
+<div class="outline-text-2" id="text-org96625f0">
254
 <p>
254
 <p>
255
 This site can also be accessed via a Tor browser at <b><a href="http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion">http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion</a></b>
255
 This site can also be accessed via a Tor browser at <b><a href="http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion">http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion</a></b>
256
 </p>
256
 </p>
264
 </p>
264
 </p>
265
 
265
 
266
 <p>
266
 <p>
267
-<b>XMPP:</b> bob@freedombone.net with OMEMO or OTR
267
+<b>XMPP:</b> bob@freedombone.net with OMEMO or OpenPGP
268
 </p>
268
 </p>
269
 
269
 
270
 <p>
270
 <p>
277
 </div>
277
 </div>
278
 </div>
278
 </div>
279
 
279
 
280
-<div id="outline-container-org742c05a" class="outline-2">
281
-<h2 id="org742c05a">Things which would be nice to have</h2>
282
-<div class="outline-text-2" id="text-org742c05a">
280
+<div id="outline-container-orgf7837ec" class="outline-2">
281
+<h2 id="orgf7837ec">Things which would be nice to have</h2>
282
+<div class="outline-text-2" id="text-orgf7837ec">
283
 </div>
283
 </div>
284
-<div id="outline-container-org317c742" class="outline-3">
285
-<h3 id="org317c742">Ideas</h3>
286
-<div class="outline-text-3" id="text-org317c742">
284
+<div id="outline-container-orgff56304" class="outline-3">
285
+<h3 id="orgff56304">Ideas</h3>
286
+<div class="outline-text-3" id="text-orgff56304">
287
 <p>
287
 <p>
288
 Know of some fabulous web system which could run on Freedombone, but currently doesn't? Contact the above, and be prepared to make a compelling argument for why it should be included.
288
 Know of some fabulous web system which could run on Freedombone, but currently doesn't? Contact the above, and be prepared to make a compelling argument for why it should be included.
289
 </p>
289
 </p>
290
 </div>
290
 </div>
291
 </div>
291
 </div>
292
 
292
 
293
-<div id="outline-container-orgafbb438" class="outline-3">
294
-<h3 id="orgafbb438">Money</h3>
295
-<div class="outline-text-3" id="text-orgafbb438">
293
+<div id="outline-container-org2a3b4c0" class="outline-3">
294
+<h3 id="org2a3b4c0">Money</h3>
295
+<div class="outline-text-3" id="text-org2a3b4c0">
296
 <p>
296
 <p>
297
 At the present time this project is not seeking any funding. There is no crowdfunding campaign and no slick marketing video. Those aren't ruled out as future possibilities, but for now they're just not needed.
297
 At the present time this project is not seeking any funding. There is no crowdfunding campaign and no slick marketing video. Those aren't ruled out as future possibilities, but for now they're just not needed.
298
 </p>
298
 </p>
303
 </div>
303
 </div>
304
 </div>
304
 </div>
305
 
305
 
306
-<div id="outline-container-org2edf966" class="outline-3">
307
-<h3 id="org2edf966">Testing and reporting bugs</h3>
308
-<div class="outline-text-3" id="text-org2edf966">
306
+<div id="outline-container-org0aab630" class="outline-3">
307
+<h3 id="org0aab630">Testing and reporting bugs</h3>
308
+<div class="outline-text-3" id="text-org0aab630">
309
 <p>
309
 <p>
310
 Testing of the install on different hardware. Also pentesting on test installations to find vulnerabilities.
310
 Testing of the install on different hardware. Also pentesting on test installations to find vulnerabilities.
311
 </p>
311
 </p>
312
 </div>
312
 </div>
313
 </div>
313
 </div>
314
 
314
 
315
-<div id="outline-container-org10bcaa2" class="outline-3">
316
-<h3 id="org10bcaa2">Web design and artwork</h3>
317
-<div class="outline-text-3" id="text-org10bcaa2">
315
+<div id="outline-container-org9f29739" class="outline-3">
316
+<h3 id="org9f29739">Web design and artwork</h3>
317
+<div class="outline-text-3" id="text-org9f29739">
318
 <p>
318
 <p>
319
 A better design for this website would be nice to have. Photos, icons or other artwork are all welcome. I've always liked the cartoon artwork of the <a href="https://www.mediagoblin.org/">Mediagoblin</a> project, and attractive graphics can help to get people initially interested.
319
 A better design for this website would be nice to have. Photos, icons or other artwork are all welcome. I've always liked the cartoon artwork of the <a href="https://www.mediagoblin.org/">Mediagoblin</a> project, and attractive graphics can help to get people initially interested.
320
 </p>
320
 </p>
321
 </div>
321
 </div>
322
 </div>
322
 </div>
323
 
323
 
324
-<div id="outline-container-org881c8f8" class="outline-3">
325
-<h3 id="org881c8f8">Howto videos</h3>
326
-<div class="outline-text-3" id="text-org881c8f8">
324
+<div id="outline-container-org73db84c" class="outline-3">
325
+<h3 id="org73db84c">Howto videos</h3>
326
+<div class="outline-text-3" id="text-org73db84c">
327
 <p>
327
 <p>
328
 If you're good at making videos then a howto for installing Freedombone onto various types of hardware, or testing the mesh system in realistic/exotic scenarios would be good. You could even host videos on PeerTube or Mediagoblin.
328
 If you're good at making videos then a howto for installing Freedombone onto various types of hardware, or testing the mesh system in realistic/exotic scenarios would be good. You could even host videos on PeerTube or Mediagoblin.
329
 </p>
329
 </p>
330
 </div>
330
 </div>
331
 </div>
331
 </div>
332
-<div id="outline-container-org237516c" class="outline-3">
333
-<h3 id="org237516c">More education and promotion</h3>
334
-<div class="outline-text-3" id="text-org237516c">
332
+<div id="outline-container-org34d84b9" class="outline-3">
333
+<h3 id="org34d84b9">More education and promotion</h3>
334
+<div class="outline-text-3" id="text-org34d84b9">
335
 <div class="org-center">
335
 <div class="org-center">
336
 
336
 
337
 <div class="figure">
337
 <div class="figure">
349
 </div>
349
 </div>
350
 </div>
350
 </div>
351
 
351
 
352
-<div id="outline-container-org92766d9" class="outline-3">
353
-<h3 id="org92766d9">Translations</h3>
354
-<div class="outline-text-3" id="text-org92766d9">
352
+<div id="outline-container-orgb28d5fb" class="outline-3">
353
+<h3 id="orgb28d5fb">Translations</h3>
354
+<div class="outline-text-3" id="text-orgb28d5fb">
355
 <p>
355
 <p>
356
 To add translations modify the json files within the <b>locale</b> subdirectory. Then make a pull request on the <a href="https://github.com/bashrc/freedombone">Github site</a>.
356
 To add translations modify the json files within the <b>locale</b> subdirectory. Then make a pull request on the <a href="https://github.com/bashrc/freedombone">Github site</a>.
357
 </p>
357
 </p>
358
 </div>
358
 </div>
359
 </div>
359
 </div>
360
 
360
 
361
-<div id="outline-container-orgaf00625" class="outline-3">
362
-<h3 id="orgaf00625">Packaging</h3>
363
-<div class="outline-text-3" id="text-orgaf00625">
361
+<div id="outline-container-org6dfbb85" class="outline-3">
362
+<h3 id="org6dfbb85">Packaging</h3>
363
+<div class="outline-text-3" id="text-org6dfbb85">
364
 <p>
364
 <p>
365
 Helping to package GNU Social and Hubzilla for Debian would be beneficial.
365
 Helping to package GNU Social and Hubzilla for Debian would be beneficial.
366
 </p>
366
 </p>