Просмотр исходного кода

Separate the profanity client from the xmpp install

Bob Mottram 8 лет назад
Родитель
Сommit
0d42aedcdc
2 измененных файлов: 388 добавлений и 282 удалений
  1. 324
    0
      src/freedombone-app-profanity
  2. 64
    282
      src/freedombone-app-xmpp

+ 324
- 0
src/freedombone-app-profanity Просмотреть файл

1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Profanity XMPP client
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2017 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='full full-vim chat'
32
+
33
+IN_DEFAULT_INSTALL=0
34
+SHOW_ON_ABOUT=1
35
+
36
+LIBMESODE_REPO="https://github.com/boothj5/libmesode"
37
+LIBMESODE_COMMIT='e3db0e9bfba61b2d82193874343a94a88f910800'
38
+
39
+PROFANITY_REPO="https://github.com/boothj5/profanity"
40
+PROFANITY_COMMIT='2fafaec8a7dc9bc01ee894d83214590598b32914'
41
+
42
+PROFANITY_OMEMO_PLUGIN_REPO="https://github.com/ReneVolution/profanity-omemo-plugin"
43
+PROFANITY_OMEMO_PLUGIN_COMMIT='3ec8ec173656bed9761b740b086123e07c749548'
44
+
45
+xmpp_variables=(ONION_ONLY
46
+                INSTALLED_WITHIN_DOCKER
47
+                MY_USERNAME
48
+                DEFAULT_DOMAIN_NAME
49
+                XMPP_DOMAIN_CODE)
50
+
51
+function remove_user_profanity {
52
+    remove_username="$1"
53
+}
54
+
55
+function add_user_profanity {
56
+    new_username="$1"
57
+    new_user_password="$2"
58
+
59
+    echo '0'
60
+}
61
+
62
+function run_client_profanity {
63
+    torify profanity
64
+}
65
+
66
+function install_interactive_profanity {
67
+    echo -n ''
68
+    APP_INSTALLED=1
69
+}
70
+
71
+function change_password_profanity {
72
+    curr_username="$1"
73
+    new_user_password="$2"
74
+
75
+    read_config_param DEFAULT_DOMAIN_NAME
76
+
77
+    ${PROJECT_NAME}-pass -u $curr_username -a xmpp -p "$new_user_password"
78
+
79
+    # TODO: this is currently interactive. Really there needs to be a
80
+    # non-interactive password change option for prosodyctl
81
+    clear
82
+    echo ''
83
+    echo $'Currently Prosody requires password changes to be done interactively'
84
+    prosodyctl passwd ${curr_username}@${DEFAULT_DOMAIN_NAME}
85
+
86
+    XMPP_CLIENT_DIR=/home/$curr_username/.local/share/profanity
87
+    XMPP_CLIENT_ACCOUNTS=$XMPP_CLIENT_DIR/accounts
88
+    if [ -f $XMPP_CLIENT_ACCOUNTS ]; then
89
+        sed -i "s|password=.*|password=$new_user_password|g" $XMPP_CLIENT_ACCOUNTS
90
+    fi
91
+}
92
+
93
+function reconfigure_profanity {
94
+    echo -n ''
95
+}
96
+
97
+function upgrade_profanity {
98
+    # update profanity client
99
+    if [ -f /usr/bin/profanity ]; then
100
+        apt-get -y remove --purge profanity
101
+    fi
102
+
103
+    rm -rf /tmp/*
104
+
105
+    CURR_LIBMESODE_COMMIT=$(cat $COMPLETION_FILE | grep "libmesode commit" | awk -F ':' '{print $2}')
106
+    if [[ "$CURR_LIBMESODE_COMMIT" != "$LIBMESODE_COMMIT" ]]; then
107
+        function_check set_repo_commit
108
+        set_repo_commit $INSTALL_DIR/libmesode "libmesode commit" "$LIBMESODE_COMMIT" $LIBMESODE_REPO
109
+        cd $INSTALL_DIR/libmesode
110
+        ./bootstrap.sh
111
+        ./configure
112
+        make
113
+        make install
114
+        cp /usr/local/lib/libmesode* /usr/lib
115
+    fi
116
+
117
+    rm -rf /tmp/*
118
+
119
+    CURR_PROFANITY_COMMIT=$(cat $COMPLETION_FILE | grep "profanity commit" | awk -F ':' '{print $2}')
120
+    if [[ "$CURR_PROFANITY_COMMIT" != "$PROFANITY_COMMIT" ]]; then
121
+        function_check set_repo_commit
122
+        set_repo_commit $INSTALL_DIR/profanity "profanity commit" "$PROFANITY_COMMIT" $PROFANITY_REPO
123
+        cd $INSTALL_DIR/profanity
124
+        ./bootstrap.sh
125
+        ./configure --disable-notifications --disable-icons --enable-otr --enable-pgp --enable-plugins --enable-c-plugins --enable-python-plugins --without-xscreensaver
126
+        make
127
+        make install
128
+    fi
129
+
130
+    CURR_PROFANITY_OMEMO_PLUGIN_COMMIT=$(cat $COMPLETION_FILE | grep "profanity omemo plugin commit" | awk -F ':' '{print $2}')
131
+    if [[ "$CURR_PROFANITY_OMEMO_PLUGIN_COMMIT" != "$PROFANITY_OMEMO_PLUGIN_COMMIT" ]]; then
132
+        # upgrade omemo plugins for all users
133
+        set_repo_commit $INSTALL_DIR/profanity-omemo-plugin "profanity omemo plugin commit" "$PROFANITY_OMEMO_PLUGIN_COMMIT" $PROFANITY_OMEMO_PLUGIN_REPO
134
+        cd $INSTALL_DIR/profanity-omemo-plugin
135
+        sed -i 's|python setup.py|python2.7 setup.py|g' $INSTALL_DIR/profanity-omemo-plugin/install.sh
136
+        pip uninstall -y profanity-omemo-plugin
137
+        ./install.sh
138
+        for d in /home/*/ ; do
139
+            USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
140
+            if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
141
+                if [ ! -d /home/$USERNAME/.local/share/profanity/plugins ]; then
142
+                    mkdir -p /home/$USERNAME/.local/share/profanity/plugins
143
+                fi
144
+                if [ -f $INSTALL_DIR/profanity-omemo-plugin/omemo.py ]; then
145
+                    rm $INSTALL_DIR/profanity-omemo-plugin/omemo.*
146
+                fi
147
+                cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /home/$USERNAME/.local/share/profanity/plugins
148
+                chown -R $USERNAME:$USERNAME /home/$USERNAME/.local
149
+            fi
150
+        done
151
+        if [ -f /etc/skel/.local/share/profanity/plugins/omemo.py ]; then
152
+            rm /etc/skel/.local/share/profanity/plugins/omemo.*
153
+        fi
154
+        cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /etc/skel/.local/share/profanity/plugins
155
+    fi
156
+
157
+    chmod -R 700 /root/.local/lib/python3.4/site-packages/python_axolotl_*
158
+}
159
+
160
+function backup_local_profanity {
161
+    echo -n ''
162
+}
163
+
164
+function restore_local_profanity {
165
+    echo -n ''
166
+}
167
+
168
+function backup_remote_profanity {
169
+    echo -n ''
170
+}
171
+
172
+function restore_remote_profanity {
173
+    echo -n ''
174
+}
175
+
176
+function remove_profanity {
177
+    cd $INSTALL_DIR/profanity
178
+    make uninstall
179
+
180
+    remove_completion_param install_profanity
181
+    sed -i '/profanity/d' $COMPLETION_FILE
182
+}
183
+
184
+function install_profanity {
185
+    # xmpp must already be installed
186
+    if [ ! -d /etc/prosody ]; then
187
+        return
188
+    fi
189
+    # install profanity from source in order to get OMEMO support
190
+    if [ ! -d $INSTALL_DIR ]; then
191
+        mkdir -p $INSTALL_DIR
192
+    fi
193
+
194
+    apt-get -yq install automake autoconf autoconf-archive libtool build-essential
195
+    apt-get -yq install libncursesw5-dev libglib2.0-dev libcurl3-dev sqlite3
196
+    apt-get -yq install libotr5-dev libgpgme11-dev python-dev libreadline-dev
197
+
198
+    # dependency for profanity not available in debian
199
+    git_clone $LIBMESODE_REPO $INSTALL_DIR/libmesode
200
+    cd $INSTALL_DIR/libmesode
201
+    git checkout $LIBMESODE_COMMIT -b $LIBMESODE_COMMIT
202
+    ./bootstrap.sh
203
+    ./configure
204
+    make
205
+    make install
206
+    cp /usr/local/lib/libmesode* /usr/lib
207
+
208
+    # build profanity
209
+    git_clone $PROFANITY_REPO $INSTALL_DIR/profanity
210
+    cd $INSTALL_DIR/profanity
211
+    git checkout $PROFANITY_COMMIT -b $PROFANITY_COMMIT
212
+    ./bootstrap.sh
213
+    ./configure --disable-notifications --disable-icons --enable-otr --enable-pgp --enable-plugins --enable-c-plugins --enable-python-plugins --without-xscreensaver
214
+    make
215
+    make install
216
+
217
+    if [ ! -f /usr/local/bin/profanity ]; then
218
+        echo $'Unable to build profanity'
219
+        exit 7825272
220
+    fi
221
+
222
+    # install the omemo plugin
223
+    apt-get -yq install python-pip python-setuptools clang libffi-dev libssl-dev python-dev
224
+    git_clone $PROFANITY_OMEMO_PLUGIN_REPO $INSTALL_DIR/profanity-omemo-plugin
225
+    cd $INSTALL_DIR/profanity-omemo-plugin
226
+    git checkout $PROFANITY_OMEMO_PLUGIN_COMMIT -b $PROFANITY_OMEMO_PLUGIN_COMMIT
227
+    if [ ! -f $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py ]; then
228
+        echo $'prof_omemo_plugin.py not found'
229
+        exit 389225
230
+    fi
231
+    sed -i 's|python setup.py|python2.7 setup.py|g' $INSTALL_DIR/profanity-omemo-plugin/install.sh
232
+    ./install.sh
233
+
234
+    mkdir -p /etc/skel/.local/share/profanity/plugins
235
+    cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /etc/skel/.local/share/profanity/plugins
236
+    cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /home/$MY_USERNAME/.local/share/profanity/plugins
237
+    chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.local
238
+
239
+    XMPP_CLIENT_DIR=/home/$MY_USERNAME/.local/share/profanity
240
+    XMPP_CLIENT_ACCOUNTS=$XMPP_CLIENT_DIR/accounts
241
+    if [ ! -d $XMPP_CLIENT_DIR ]; then
242
+        mkdir -p $XMPP_CLIENT_DIR
243
+    fi
244
+
245
+    XMPP_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_xmpp/hostname)
246
+    MY_GPG_PUBLIC_KEY_ID=$(gpg_pubkey_from_email "$MY_USERNAME" "$MY_USERNAME@$DEFAULT_DOMAIN_NAME")
247
+
248
+    if [[ $ONION_ONLY == 'no' ]]; then
249
+        echo "[${MY_USERNAME}@${DEFAULT_DOMAIN_NAME}]" > $XMPP_CLIENT_ACCOUNTS
250
+        echo 'enabled=true' >> $XMPP_CLIENT_ACCOUNTS
251
+        echo "jid=${MY_USERNAME}@${DEFAULT_DOMAIN_NAME}" >> $XMPP_CLIENT_ACCOUNTS
252
+        echo "server=$XMPP_ONION_HOSTNAME" >> $XMPP_CLIENT_ACCOUNTS
253
+        echo "pgp.keyid=$MY_GPG_PUBLIC_KEY_ID" >> $XMPP_CLIENT_ACCOUNTS
254
+        echo 'resource=profanity' >> $XMPP_CLIENT_ACCOUNTS
255
+        echo "muc.service=chat.${DEFAULT_DOMAIN_NAME}" >> $XMPP_CLIENT_ACCOUNTS
256
+        echo "muc.nick=${MY_USERNAME}" >> $XMPP_CLIENT_ACCOUNTS
257
+        echo 'presence.last=online' >> $XMPP_CLIENT_ACCOUNTS
258
+        echo 'presence.login=online' >> $XMPP_CLIENT_ACCOUNTS
259
+        echo 'priority.online=0' >> $XMPP_CLIENT_ACCOUNTS
260
+        echo 'priority.chat=0' >> $XMPP_CLIENT_ACCOUNTS
261
+        echo 'priority.away=0' >> $XMPP_CLIENT_ACCOUNTS
262
+        echo 'priority.xa=0' >> $XMPP_CLIENT_ACCOUNTS
263
+        echo 'priority.dnd=0' >> $XMPP_CLIENT_ACCOUNTS
264
+        if [ ${#XMPP_PASSWORD} -gt 2 ]; then
265
+            echo "password=$XMPP_PASSWORD" >> $XMPP_CLIENT_ACCOUNTS
266
+        fi
267
+    fi
268
+
269
+    if [ -f /var/lib/tor/hidden_service_xmpp/hostname ]; then
270
+        echo "[${MY_USERNAME}@${XMPP_ONION_HOSTNAME}]" >> $XMPP_CLIENT_ACCOUNTS
271
+        if [[ $ONION_ONLY == 'no' ]]; then
272
+            echo 'enabled=false' >> $XMPP_CLIENT_ACCOUNTS
273
+        else
274
+            echo 'enabled=true' >> $XMPP_CLIENT_ACCOUNTS
275
+        fi
276
+        echo "jid=${MY_USERNAME}@${XMPP_ONION_HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
277
+        echo "server=$XMPP_ONION_HOSTNAME" >> $XMPP_CLIENT_ACCOUNTS
278
+        echo "pgp.keyid=$MY_GPG_PUBLIC_KEY_ID" >> $XMPP_CLIENT_ACCOUNTS
279
+        echo 'resource=profanity' >> $XMPP_CLIENT_ACCOUNTS
280
+        echo "muc.service=${XMPP_ONION_HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
281
+        echo "muc.nick=${MY_USERNAME}" >> $XMPP_CLIENT_ACCOUNTS
282
+        echo 'presence.last=online' >> $XMPP_CLIENT_ACCOUNTS
283
+        echo 'presence.login=online' >> $XMPP_CLIENT_ACCOUNTS
284
+        echo 'priority.online=0' >> $XMPP_CLIENT_ACCOUNTS
285
+        echo 'priority.chat=0' >> $XMPP_CLIENT_ACCOUNTS
286
+        echo 'priority.away=0' >> $XMPP_CLIENT_ACCOUNTS
287
+        echo 'priority.xa=0' >> $XMPP_CLIENT_ACCOUNTS
288
+        echo 'priority.dnd=0' >> $XMPP_CLIENT_ACCOUNTS
289
+        if [ ${#XMPP_PASSWORD} -gt 2 ]; then
290
+            echo "password=$XMPP_PASSWORD" >> $XMPP_CLIENT_ACCOUNTS
291
+        fi
292
+    fi
293
+
294
+    if [ ! -d /home/$MY_USERNAME/.config/profanity ]; then
295
+        mkdir -p /home/$MY_USERNAME/.config/profanity
296
+    fi
297
+    echo '[connection]' > /home/$MY_USERNAME/.config/profanity/profrc
298
+    if [[ $ONION_ONLY == 'no' ]]; then
299
+        echo "account=${MY_USERNAME}@${DEFAULT_DOMAIN_NAME}" >> /home/$MY_USERNAME/.config/profanity/profrc
300
+    else
301
+        echo "account=${MY_USERNAME}@${XMPP_ONION_HOSTNAME}" >> /home/$MY_USERNAME/.config/profanity/profrc
302
+    fi
303
+    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
304
+    echo '[plugins]' >> /home/$MY_USERNAME/.config/profanity/profrc
305
+    echo 'load=prof_omemo_plugin.py;' >> /home/$MY_USERNAME/.config/profanity/profrc
306
+    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
307
+    echo '[otr]' >> /home/$MY_USERNAME/.config/profanity/profrc
308
+    echo 'policy=opportunistic' >> /home/$MY_USERNAME/.config/profanity/profrc
309
+    echo 'log=off' >> /home/$MY_USERNAME/.config/profanity/profrc
310
+    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
311
+    echo '[pgp]' >> /home/$MY_USERNAME/.config/profanity/profrc
312
+    echo 'log=off' >> /home/$MY_USERNAME/.config/profanity/profrc
313
+    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
314
+    echo '[ui]' >> /home/$MY_USERNAME/.config/profanity/profrc
315
+    echo 'enc.warn=true' >> /home/$MY_USERNAME/.config/profanity/profrc
316
+
317
+    chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.local
318
+    chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
319
+
320
+    chmod -R 700 /root/.local/lib/python3.4/site-packages/python_axolotl_*
321
+    APP_INSTALLED=1
322
+}
323
+
324
+# NOTE: deliberately no exit 0

+ 64
- 282
src/freedombone-app-xmpp Просмотреть файл

183
     fi
183
     fi
184
 }
184
 }
185
 
185
 
186
+function add_user_xmpp_client {
187
+    new_username="$1"
188
+    new_user_password="$2"
189
+
190
+    if [ -f /usr/local/bin/profanity ]; then
191
+        XMPP_CLIENT_DIR=/home/$new_username/.local/share/profanity
192
+        XMPP_CLIENT_ACCOUNTS=$XMPP_CLIENT_DIR/accounts
193
+        if [ ! -d $XMPP_CLIENT_DIR ]; then
194
+            mkdir -p $XMPP_CLIENT_DIR
195
+        fi
196
+        if [ ! -d /home/$new_username/.config/profanity ]; then
197
+            mkdir -p /home/$new_username/.config/profanity
198
+        fi
199
+        MY_GPG_PUBLIC_KEY_ID=$(gpg_pubkey_from_email "$new_username" "$new_username@$HOSTNAME")
200
+        echo "[${new_username}@${HOSTNAME}]" > $XMPP_CLIENT_ACCOUNTS
201
+        echo 'enabled=true' >> $XMPP_CLIENT_ACCOUNTS
202
+        echo "jid=${new_username}@${HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
203
+        echo "server=$XMPP_ONION_HOSTNAME" >> $XMPP_CLIENT_ACCOUNTS
204
+        echo "pgp.keyid=$GPG_PUBLIC_KEY_ID" >> $XMPP_CLIENT_ACCOUNTS
205
+        echo 'resource=profanity' >> $XMPP_CLIENT_ACCOUNTS
206
+        echo "muc.service=conference.${HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
207
+        echo "muc.nick=${new_username}" >> $XMPP_CLIENT_ACCOUNTS
208
+        echo 'presence.last=online' >> $XMPP_CLIENT_ACCOUNTS
209
+        echo 'presence.login=online' >> $XMPP_CLIENT_ACCOUNTS
210
+        echo 'priority.online=0' >> $XMPP_CLIENT_ACCOUNTS
211
+        echo 'priority.chat=0' >> $XMPP_CLIENT_ACCOUNTS
212
+        echo 'priority.away=0' >> $XMPP_CLIENT_ACCOUNTS
213
+        echo 'priority.xa=0' >> $XMPP_CLIENT_ACCOUNTS
214
+        echo 'priority.dnd=0' >> $XMPP_CLIENT_ACCOUNTS
215
+
216
+        echo '[connection]' > /home/$new_username/.config/profanity/profrc
217
+        if [[ $ONION_ONLY != "no" ]]; then
218
+            echo "account=${new_username}@${XMPP_ONION_HOSTNAME}" >> /home/$new_username/.config/profanity/profrc
219
+        else
220
+            echo "account=${new_username}@${HOSTNAME}" >> /home/$new_username/.config/profanity/profrc
221
+        fi
222
+        echo '' >> /home/$new_username/.config/profanity/profrc
223
+        echo '[plugins]' >> /home/$new_username/.config/profanity/profrc
224
+        echo 'load=prof_omemo_plugin.py;' >> /home/$new_username/.config/profanity/profrc
225
+        echo '' >> /home/$new_username/.config/profanity/profrc
226
+        echo '[otr]' >> /home/$new_username/.config/profanity/profrc
227
+        echo 'policy=opportunistic' >> /home/$new_username/.config/profanity/profrc
228
+        echo 'log=off' >> /home/$new_username/.config/profanity/profrc
229
+        echo '' >> /home/$new_username/.config/profanity/profrc
230
+        echo '[pgp]' >> /home/$new_username/.config/profanity/profrc
231
+        echo 'log=off' >> /home/$new_username/.config/profanity/profrc
232
+        echo '' >> /home/$new_username/.config/profanity/profrc
233
+        echo '[ui]' >> /home/$new_username/.config/profanity/profrc
234
+        echo 'enc.warn=true' >> /home/$new_username/.config/profanity/profrc
235
+
236
+        chown -R $new_username:$new_username /home/$new_username/.local
237
+        chown -R $new_username:$new_username /home/$new_username/.config
238
+    fi
239
+}
240
+
186
 function add_user_xmpp {
241
 function add_user_xmpp {
187
     new_username="$1"
242
     new_username="$1"
188
     new_user_password="$2"
243
     new_user_password="$2"
200
         return
255
         return
201
     fi
256
     fi
202
 
257
 
203
-    XMPP_CLIENT_DIR=/home/$new_username/.local/share/profanity
204
-    XMPP_CLIENT_ACCOUNTS=$XMPP_CLIENT_DIR/accounts
205
-    if [ ! -d $XMPP_CLIENT_DIR ]; then
206
-        mkdir -p $XMPP_CLIENT_DIR
207
-    fi
208
-    if [ ! -d /home/$new_username/.config/profanity ]; then
209
-        mkdir -p /home/$new_username/.config/profanity
210
-    fi
211
-    MY_GPG_PUBLIC_KEY_ID=$(gpg_pubkey_from_email "$new_username" "$new_username@$HOSTNAME")
212
-    echo "[${new_username}@${HOSTNAME}]" > $XMPP_CLIENT_ACCOUNTS
213
-    echo 'enabled=true' >> $XMPP_CLIENT_ACCOUNTS
214
-    echo "jid=${new_username}@${HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
215
-    echo "server=$XMPP_ONION_HOSTNAME" >> $XMPP_CLIENT_ACCOUNTS
216
-    echo "pgp.keyid=$GPG_PUBLIC_KEY_ID" >> $XMPP_CLIENT_ACCOUNTS
217
-    echo 'resource=profanity' >> $XMPP_CLIENT_ACCOUNTS
218
-    echo "muc.service=conference.${HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
219
-    echo "muc.nick=${new_username}" >> $XMPP_CLIENT_ACCOUNTS
220
-    echo 'presence.last=online' >> $XMPP_CLIENT_ACCOUNTS
221
-    echo 'presence.login=online' >> $XMPP_CLIENT_ACCOUNTS
222
-    echo 'priority.online=0' >> $XMPP_CLIENT_ACCOUNTS
223
-    echo 'priority.chat=0' >> $XMPP_CLIENT_ACCOUNTS
224
-    echo 'priority.away=0' >> $XMPP_CLIENT_ACCOUNTS
225
-    echo 'priority.xa=0' >> $XMPP_CLIENT_ACCOUNTS
226
-    echo 'priority.dnd=0' >> $XMPP_CLIENT_ACCOUNTS
227
-
228
-    echo '[connection]' > /home/$new_username/.config/profanity/profrc
229
-    if [[ $ONION_ONLY != "no" ]]; then
230
-        echo "account=${new_username}@${XMPP_ONION_HOSTNAME}" >> /home/$new_username/.config/profanity/profrc
231
-    else
232
-        echo "account=${new_username}@${HOSTNAME}" >> /home/$new_username/.config/profanity/profrc
233
-    fi
234
-    echo '' >> /home/$new_username/.config/profanity/profrc
235
-    echo '[plugins]' >> /home/$new_username/.config/profanity/profrc
236
-    echo 'load=prof_omemo_plugin.py;' >> /home/$new_username/.config/profanity/profrc
237
-    echo '' >> /home/$new_username/.config/profanity/profrc
238
-    echo '[otr]' >> /home/$new_username/.config/profanity/profrc
239
-    echo 'policy=opportunistic' >> /home/$new_username/.config/profanity/profrc
240
-    echo 'log=off' >> /home/$new_username/.config/profanity/profrc
241
-    echo '' >> /home/$new_username/.config/profanity/profrc
242
-    echo '[pgp]' >> /home/$new_username/.config/profanity/profrc
243
-    echo 'log=off' >> /home/$new_username/.config/profanity/profrc
244
-    echo '' >> /home/$new_username/.config/profanity/profrc
245
-    echo '[ui]' >> /home/$new_username/.config/profanity/profrc
246
-    echo 'enc.warn=true' >> /home/$new_username/.config/profanity/profrc
247
-
248
-    chown -R $new_username:$new_username /home/$new_username/.local
249
-    chown -R $new_username:$new_username /home/$new_username/.config
258
+    add_user_xmpp_client "$new_username" "$new_user_password"
250
     echo '0'
259
     echo '0'
251
 }
260
 }
252
 
261
 
253
-function run_client_xmpp {
254
-    torify profanity
255
-}
256
-
257
 function install_interactive_xmpp {
262
 function install_interactive_xmpp {
258
     echo -n ''
263
     echo -n ''
259
     APP_INSTALLED=1
264
     APP_INSTALLED=1
274
     echo $'Currently Prosody requires password changes to be done interactively'
279
     echo $'Currently Prosody requires password changes to be done interactively'
275
     prosodyctl passwd ${curr_username}@${DEFAULT_DOMAIN_NAME}
280
     prosodyctl passwd ${curr_username}@${DEFAULT_DOMAIN_NAME}
276
 
281
 
277
-    XMPP_CLIENT_DIR=/home/$curr_username/.local/share/profanity
278
-    XMPP_CLIENT_ACCOUNTS=$XMPP_CLIENT_DIR/accounts
279
-    if [ -f $XMPP_CLIENT_ACCOUNTS ]; then
280
-        sed -i "s|password=.*|password=$new_user_password|g" $XMPP_CLIENT_ACCOUNTS
282
+    if [ -f /usr/local/bin/profanity ]; then
283
+        XMPP_CLIENT_DIR=/home/$curr_username/.local/share/profanity
284
+        XMPP_CLIENT_ACCOUNTS=$XMPP_CLIENT_DIR/accounts
285
+        if [ -f $XMPP_CLIENT_ACCOUNTS ]; then
286
+            sed -i "s|password=.*|password=$new_user_password|g" $XMPP_CLIENT_ACCOUNTS
287
+        fi
281
     fi
288
     fi
282
 }
289
 }
283
 
290
 
344
     fi
351
     fi
345
 }
352
 }
346
 
353
 
347
-function upgrade_xmpp_server {
354
+function upgrade_xmpp {
348
     if [ -d /etc/letsencrypt ]; then
355
     if [ -d /etc/letsencrypt ]; then
349
         usermod -a -G ssl-cert prosody
356
         usermod -a -G ssl-cert prosody
350
     fi
357
     fi
408
     systemctl restart prosody
415
     systemctl restart prosody
409
 }
416
 }
410
 
417
 
411
-function upgrade_xmpp_client {
412
-    # update profanity client
413
-    if [ -f /usr/bin/profanity ]; then
414
-        apt-get -y remove --purge profanity
415
-    fi
416
-
417
-    rm -rf /tmp/*
418
-
419
-    CURR_LIBMESODE_COMMIT=$(cat $COMPLETION_FILE | grep "libmesode commit" | awk -F ':' '{print $2}')
420
-    if [[ "$CURR_LIBMESODE_COMMIT" != "$LIBMESODE_COMMIT" ]]; then
421
-        function_check set_repo_commit
422
-        set_repo_commit $INSTALL_DIR/libmesode "libmesode commit" "$LIBMESODE_COMMIT" $LIBMESODE_REPO
423
-        cd $INSTALL_DIR/libmesode
424
-        ./bootstrap.sh
425
-        ./configure
426
-        make
427
-        make install
428
-        cp /usr/local/lib/libmesode* /usr/lib
429
-    fi
430
-
431
-    rm -rf /tmp/*
432
-
433
-    CURR_PROFANITY_COMMIT=$(cat $COMPLETION_FILE | grep "profanity commit" | awk -F ':' '{print $2}')
434
-    if [[ "$CURR_PROFANITY_COMMIT" != "$PROFANITY_COMMIT" ]]; then
435
-        function_check set_repo_commit
436
-        set_repo_commit $INSTALL_DIR/profanity "profanity commit" "$PROFANITY_COMMIT" $PROFANITY_REPO
437
-        cd $INSTALL_DIR/profanity
438
-        ./bootstrap.sh
439
-        ./configure --disable-notifications --disable-icons --enable-otr --enable-pgp --enable-plugins --enable-c-plugins --enable-python-plugins --without-xscreensaver
440
-        make
441
-        make install
442
-    fi
443
-
444
-    CURR_PROFANITY_OMEMO_PLUGIN_COMMIT=$(cat $COMPLETION_FILE | grep "profanity omemo plugin commit" | awk -F ':' '{print $2}')
445
-    if [[ "$CURR_PROFANITY_OMEMO_PLUGIN_COMMIT" != "$PROFANITY_OMEMO_PLUGIN_COMMIT" ]]; then
446
-        # upgrade omemo plugins for all users
447
-        set_repo_commit $INSTALL_DIR/profanity-omemo-plugin "profanity omemo plugin commit" "$PROFANITY_OMEMO_PLUGIN_COMMIT" $PROFANITY_OMEMO_PLUGIN_REPO
448
-        cd $INSTALL_DIR/profanity-omemo-plugin
449
-        sed -i 's|python setup.py|python2.7 setup.py|g' $INSTALL_DIR/profanity-omemo-plugin/install.sh
450
-        pip uninstall -y profanity-omemo-plugin
451
-        ./install.sh
452
-        for d in /home/*/ ; do
453
-            USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
454
-            if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
455
-                if [ ! -d /home/$USERNAME/.local/share/profanity/plugins ]; then
456
-                    mkdir -p /home/$USERNAME/.local/share/profanity/plugins
457
-                fi
458
-                if [ -f $INSTALL_DIR/profanity-omemo-plugin/omemo.py ]; then
459
-                    rm $INSTALL_DIR/profanity-omemo-plugin/omemo.*
460
-                fi
461
-                cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /home/$USERNAME/.local/share/profanity/plugins
462
-                chown -R $USERNAME:$USERNAME /home/$USERNAME/.local
463
-            fi
464
-        done
465
-        if [ -f /etc/skel/.local/share/profanity/plugins/omemo.py ]; then
466
-            rm /etc/skel/.local/share/profanity/plugins/omemo.*
467
-        fi
468
-        cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /etc/skel/.local/share/profanity/plugins
469
-    fi
470
-
471
-    chmod -R 700 /root/.local/lib/python3.4/site-packages/python_axolotl_*
472
-}
473
-
474
-function upgrade_xmpp {
475
-    upgrade_xmpp_server
476
-    upgrade_xmpp_client
477
-}
478
-
479
 function backup_local_xmpp {
418
 function backup_local_xmpp {
480
     source_directory=/var/lib/prosody
419
     source_directory=/var/lib/prosody
481
     if [ -d $source_directory ]; then
420
     if [ -d $source_directory ]; then
553
     mark_completed $FUNCNAME
492
     mark_completed $FUNCNAME
554
 }
493
 }
555
 
494
 
556
-function remove_xmpp_client {
557
-    apt-get -yq remove --purge profanity
558
-    remove_completion_param install_xmpp_client
559
-    remove_certs xmpp
560
-}
561
-
562
 function remove_xmpp {
495
 function remove_xmpp {
563
-    remove_xmpp_client
564
     firewall_remove 5222 tcp
496
     firewall_remove 5222 tcp
565
     firewall_remove 5223 tcp
497
     firewall_remove 5223 tcp
566
     firewall_remove 5269 tcp
498
     firewall_remove 5269 tcp
834
     set_completion_param "prosody_filename" "${prosody_filename}"
766
     set_completion_param "prosody_filename" "${prosody_filename}"
835
 }
767
 }
836
 
768
 
837
-function install_xmpp_main {
769
+function install_xmpp {
838
     update_prosody_modules
770
     update_prosody_modules
839
 
771
 
840
-    if [[ $(app_is_installed xmpp_main) == "1" ]]; then
841
-        return
842
-    fi
843
-
844
     if [[ $ONION_ONLY == 'no' ]]; then
772
     if [[ $ONION_ONLY == 'no' ]]; then
845
         # obtain a cert for the default domain
773
         # obtain a cert for the default domain
846
         if [[ "$(cert_exists ${DEFAULT_DOMAIN_NAME} pem)" == "0" ]]; then
774
         if [[ "$(cert_exists ${DEFAULT_DOMAIN_NAME} pem)" == "0" ]]; then
1053
 
981
 
1054
     ${PROJECT_NAME}-pass -u $MY_USERNAME -a xmpp -p "$XMPP_PASSWORD"
982
     ${PROJECT_NAME}-pass -u $MY_USERNAME -a xmpp -p "$XMPP_PASSWORD"
1055
 
983
 
1056
-    install_completed xmpp_main
1057
-}
1058
-
1059
-function install_xmpp_client {
1060
-    # install profanity from source in order to get OMEMO support
1061
-    if [[ $(app_is_installed xmpp_client) == "1" ]]; then
1062
-        return
1063
-    fi
1064
-    if [ ! -d $INSTALL_DIR ]; then
1065
-        mkdir -p $INSTALL_DIR
1066
-    fi
1067
-
1068
-    apt-get -yq install automake autoconf autoconf-archive libtool build-essential
1069
-    apt-get -yq install libncursesw5-dev libglib2.0-dev libcurl3-dev sqlite3
1070
-    apt-get -yq install libotr5-dev libgpgme11-dev python-dev libreadline-dev
1071
-
1072
-    # dependency for profanity not available in debian
1073
-    git_clone $LIBMESODE_REPO $INSTALL_DIR/libmesode
1074
-    cd $INSTALL_DIR/libmesode
1075
-    git checkout $LIBMESODE_COMMIT -b $LIBMESODE_COMMIT
1076
-    ./bootstrap.sh
1077
-    ./configure
1078
-    make
1079
-    make install
1080
-    cp /usr/local/lib/libmesode* /usr/lib
1081
-
1082
-    # build profanity
1083
-    git_clone $PROFANITY_REPO $INSTALL_DIR/profanity
1084
-    cd $INSTALL_DIR/profanity
1085
-    git checkout $PROFANITY_COMMIT -b $PROFANITY_COMMIT
1086
-    ./bootstrap.sh
1087
-    ./configure --disable-notifications --disable-icons --enable-otr --enable-pgp --enable-plugins --enable-c-plugins --enable-python-plugins --without-xscreensaver
1088
-    make
1089
-    make install
1090
-
1091
-    if [ ! -f /usr/local/bin/profanity ]; then
1092
-        echo $'Unable to build profanity'
1093
-        exit 7825272
1094
-    fi
1095
-
1096
-    # install the omemo plugin
1097
-    apt-get -yq install python-pip python-setuptools clang libffi-dev libssl-dev python-dev
1098
-    git_clone $PROFANITY_OMEMO_PLUGIN_REPO $INSTALL_DIR/profanity-omemo-plugin
1099
-    cd $INSTALL_DIR/profanity-omemo-plugin
1100
-    git checkout $PROFANITY_OMEMO_PLUGIN_COMMIT -b $PROFANITY_OMEMO_PLUGIN_COMMIT
1101
-    if [ ! -f $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py ]; then
1102
-        echo $'prof_omemo_plugin.py not found'
1103
-        exit 389225
1104
-    fi
1105
-    sed -i 's|python setup.py|python2.7 setup.py|g' $INSTALL_DIR/profanity-omemo-plugin/install.sh
1106
-    ./install.sh
1107
-
1108
-    mkdir -p /etc/skel/.local/share/profanity/plugins
1109
-    cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /etc/skel/.local/share/profanity/plugins
1110
-    cp $INSTALL_DIR/profanity-omemo-plugin/deploy/prof_omemo_plugin.py /home/$MY_USERNAME/.local/share/profanity/plugins
1111
-    chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.local
1112
-
1113
-    XMPP_CLIENT_DIR=/home/$MY_USERNAME/.local/share/profanity
1114
-    XMPP_CLIENT_ACCOUNTS=$XMPP_CLIENT_DIR/accounts
1115
-    if [ ! -d $XMPP_CLIENT_DIR ]; then
1116
-        mkdir -p $XMPP_CLIENT_DIR
1117
-    fi
1118
-
1119
-    XMPP_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_xmpp/hostname)
1120
-    MY_GPG_PUBLIC_KEY_ID=$(gpg_pubkey_from_email "$MY_USERNAME" "$MY_USERNAME@$DEFAULT_DOMAIN_NAME")
1121
-
1122
-    if [[ $ONION_ONLY == 'no' ]]; then
1123
-        echo "[${MY_USERNAME}@${DEFAULT_DOMAIN_NAME}]" > $XMPP_CLIENT_ACCOUNTS
1124
-        echo 'enabled=true' >> $XMPP_CLIENT_ACCOUNTS
1125
-        echo "jid=${MY_USERNAME}@${DEFAULT_DOMAIN_NAME}" >> $XMPP_CLIENT_ACCOUNTS
1126
-        echo "server=$XMPP_ONION_HOSTNAME" >> $XMPP_CLIENT_ACCOUNTS
1127
-        echo "pgp.keyid=$MY_GPG_PUBLIC_KEY_ID" >> $XMPP_CLIENT_ACCOUNTS
1128
-        echo 'resource=profanity' >> $XMPP_CLIENT_ACCOUNTS
1129
-        echo "muc.service=chat.${DEFAULT_DOMAIN_NAME}" >> $XMPP_CLIENT_ACCOUNTS
1130
-        echo "muc.nick=${MY_USERNAME}" >> $XMPP_CLIENT_ACCOUNTS
1131
-        echo 'presence.last=online' >> $XMPP_CLIENT_ACCOUNTS
1132
-        echo 'presence.login=online' >> $XMPP_CLIENT_ACCOUNTS
1133
-        echo 'priority.online=0' >> $XMPP_CLIENT_ACCOUNTS
1134
-        echo 'priority.chat=0' >> $XMPP_CLIENT_ACCOUNTS
1135
-        echo 'priority.away=0' >> $XMPP_CLIENT_ACCOUNTS
1136
-        echo 'priority.xa=0' >> $XMPP_CLIENT_ACCOUNTS
1137
-        echo 'priority.dnd=0' >> $XMPP_CLIENT_ACCOUNTS
1138
-        if [ ${#XMPP_PASSWORD} -gt 2 ]; then
1139
-            echo "password=$XMPP_PASSWORD" >> $XMPP_CLIENT_ACCOUNTS
1140
-        fi
1141
-    fi
1142
-
1143
-    if [ -f /var/lib/tor/hidden_service_xmpp/hostname ]; then
1144
-        echo "[${MY_USERNAME}@${XMPP_ONION_HOSTNAME}]" >> $XMPP_CLIENT_ACCOUNTS
1145
-        if [[ $ONION_ONLY == 'no' ]]; then
1146
-            echo 'enabled=false' >> $XMPP_CLIENT_ACCOUNTS
1147
-        else
1148
-            echo 'enabled=true' >> $XMPP_CLIENT_ACCOUNTS
1149
-        fi
1150
-        echo "jid=${MY_USERNAME}@${XMPP_ONION_HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
1151
-        echo "server=$XMPP_ONION_HOSTNAME" >> $XMPP_CLIENT_ACCOUNTS
1152
-        echo "pgp.keyid=$MY_GPG_PUBLIC_KEY_ID" >> $XMPP_CLIENT_ACCOUNTS
1153
-        echo 'resource=profanity' >> $XMPP_CLIENT_ACCOUNTS
1154
-        echo "muc.service=${XMPP_ONION_HOSTNAME}" >> $XMPP_CLIENT_ACCOUNTS
1155
-        echo "muc.nick=${MY_USERNAME}" >> $XMPP_CLIENT_ACCOUNTS
1156
-        echo 'presence.last=online' >> $XMPP_CLIENT_ACCOUNTS
1157
-        echo 'presence.login=online' >> $XMPP_CLIENT_ACCOUNTS
1158
-        echo 'priority.online=0' >> $XMPP_CLIENT_ACCOUNTS
1159
-        echo 'priority.chat=0' >> $XMPP_CLIENT_ACCOUNTS
1160
-        echo 'priority.away=0' >> $XMPP_CLIENT_ACCOUNTS
1161
-        echo 'priority.xa=0' >> $XMPP_CLIENT_ACCOUNTS
1162
-        echo 'priority.dnd=0' >> $XMPP_CLIENT_ACCOUNTS
1163
-        if [ ${#XMPP_PASSWORD} -gt 2 ]; then
1164
-            echo "password=$XMPP_PASSWORD" >> $XMPP_CLIENT_ACCOUNTS
1165
-        fi
1166
-    fi
1167
-
1168
-    if [ ! -d /home/$MY_USERNAME/.config/profanity ]; then
1169
-        mkdir -p /home/$MY_USERNAME/.config/profanity
1170
-    fi
1171
-    echo '[connection]' > /home/$MY_USERNAME/.config/profanity/profrc
1172
-    if [[ $ONION_ONLY == 'no' ]]; then
1173
-        echo "account=${MY_USERNAME}@${DEFAULT_DOMAIN_NAME}" >> /home/$MY_USERNAME/.config/profanity/profrc
1174
-    else
1175
-        echo "account=${MY_USERNAME}@${XMPP_ONION_HOSTNAME}" >> /home/$MY_USERNAME/.config/profanity/profrc
1176
-    fi
1177
-    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
1178
-    echo '[plugins]' >> /home/$MY_USERNAME/.config/profanity/profrc
1179
-    echo 'load=prof_omemo_plugin.py;' >> /home/$MY_USERNAME/.config/profanity/profrc
1180
-    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
1181
-    echo '[otr]' >> /home/$MY_USERNAME/.config/profanity/profrc
1182
-    echo 'policy=opportunistic' >> /home/$MY_USERNAME/.config/profanity/profrc
1183
-    echo 'log=off' >> /home/$MY_USERNAME/.config/profanity/profrc
1184
-    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
1185
-    echo '[pgp]' >> /home/$MY_USERNAME/.config/profanity/profrc
1186
-    echo 'log=off' >> /home/$MY_USERNAME/.config/profanity/profrc
1187
-    echo '' >> /home/$MY_USERNAME/.config/profanity/profrc
1188
-    echo '[ui]' >> /home/$MY_USERNAME/.config/profanity/profrc
1189
-    echo 'enc.warn=true' >> /home/$MY_USERNAME/.config/profanity/profrc
1190
-
1191
-    chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.local
1192
-    chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
1193
-
1194
-    chmod -R 700 /root/.local/lib/python3.4/site-packages/python_axolotl_*
1195
-
1196
-    install_completed xmpp_client
1197
-}
1198
-
1199
-function install_xmpp {
1200
-    install_xmpp_main
1201
-    install_xmpp_client
1202
     APP_INSTALLED=1
984
     APP_INSTALLED=1
1203
 }
985
 }
1204
 
986