浏览代码

Pleroma backend app

Bob Mottram 7 年前
父节点
当前提交
9bc6c8f4e5

+ 1
- 1
src/freedombone-app-gnusocial 查看文件

@@ -363,7 +363,7 @@ function upgrade_gnusocial {
363 363
 
364 364
     gnusocial_hourly_script gnusocial $GNUSOCIAL_DOMAIN_NAME
365 365
     if [ -d $INSTALL_DIR/pleroma ]; then
366
-        upgrade_pleroma "$GNUSOCIAL_DOMAIN_NAME" "gnusocial" "$GNUSOCIAL_BACKGROUND_IMAGE_URL" "$GNUSOCIAL_TITLE"
366
+        upgrade_pleroma_frontend "$GNUSOCIAL_DOMAIN_NAME" "gnusocial" "$GNUSOCIAL_BACKGROUND_IMAGE_URL" "$GNUSOCIAL_TITLE"
367 367
     fi
368 368
     install_gnusocial_default_background "gnusocial" "$GNUSOCIAL_DOMAIN_NAME"
369 369
     chown -R www-data:www-data /var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs

+ 678
- 0
src/freedombone-app-pleroma 查看文件

@@ -0,0 +1,678 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Pleroma backend application
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 social'
32
+
33
+IN_DEFAULT_INSTALL=0
34
+SHOW_ON_ABOUT=1
35
+
36
+PLEROMA_DOMAIN_NAME=
37
+PLEROMA_CODE=
38
+PLEROMA_PORT=4000
39
+PLEROMA_ONION_PORT=8011
40
+PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
41
+PLEROMA_COMMIT='7252f6b054dfdfac1f9bac77c442c5a1ebd898af'
42
+PLEROMA_ADMIN_PASSWORD=
43
+
44
+PLEROMA_BACKGROUND_IMAGE_URL=
45
+
46
+PLEROMA_TITLE='Pleroma Server'
47
+
48
+# Number of months after which posts expire
49
+PLEROMA_EXPIRE_MONTHS=3
50
+
51
+pleroma_variables=(ONION_ONLY
52
+                   PLEROMA_DOMAIN_NAME
53
+                   PLEROMA_CODE
54
+                   PLEROMA_WELCOME_MESSAGE
55
+                   PLEROMA_BACKGROUND_IMAGE_URL
56
+                   DDNS_PROVIDER
57
+                   PLEROMA_TITLE
58
+                   PLEROMA_EXPIRE_MONTHS
59
+                   MY_EMAIL_ADDRESS
60
+                   MY_USERNAME)
61
+
62
+function logging_on_pleroma {
63
+    echo -n ''
64
+}
65
+
66
+function logging_off_pleroma {
67
+    echo -n ''
68
+}
69
+
70
+function remove_user_pleroma {
71
+    remove_username="$1"
72
+
73
+    ${PROJECT_NAME}-pass -u $remove_username --rmapp pleroma
74
+
75
+    function_check get_completion_param
76
+    PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
77
+    if [ -d /var/www/$PLEROMA_DOMAIN_NAME ]; then
78
+        cd /var/www/$PLEROMA_DOMAIN_NAME/htdocs
79
+        php scripts/deleteprofile.php -n $remove_username -y
80
+    fi
81
+}
82
+
83
+function add_user_pleroma {
84
+    new_username="$1"
85
+    new_user_password="$2"
86
+
87
+    ${PROJECT_NAME}-pass -u $new_username -a pleroma -p "$new_user_password"
88
+
89
+    PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
90
+    if [ -d /var/www/${PLEROMA_DOMAIN_NAME}/htdocs ]; then
91
+        cd /var/www/$PLEROMA_DOMAIN_NAME/htdocs
92
+        php scripts/registeruser.php -n $new_username -w "$new_user_password" -e "$new_username@$HOSTNAME"
93
+        ${PROJECT_NAME}-addemail -u $new_username -e "noreply@$PLEROMA_DOMAIN_NAME" -g pleroma --public no
94
+        echo '0'
95
+    else
96
+        echo '1'
97
+    fi
98
+}
99
+
100
+function install_interactive_pleroma {
101
+    if [ ! $ONION_ONLY ]; then
102
+        ONION_ONLY='no'
103
+    fi
104
+
105
+    if [[ $ONION_ONLY != "no" ]]; then
106
+        PLEROMA_DOMAIN_NAME='pleroma.local'
107
+    else
108
+        PLEROMA_DETAILS_COMPLETE=
109
+        while [ ! $PLEROMA_DETAILS_COMPLETE ]
110
+        do
111
+            data=$(tempfile 2>/dev/null)
112
+            trap "rm -f $data" 0 1 2 5 15
113
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
114
+                dialog --backtitle $"Freedombone Configuration" \
115
+                       --title $"Pleroma Configuration" \
116
+                       --form $"\nPlease enter your Pleroma details. The background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
117
+                       $"Domain:" 1 1 "$(grep 'PLEROMA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
118
+                       $"Title:" 2 1 "$(grep '$PLEROMA_TITLE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
119
+                       $"Background image URL:" 3 1 "$(grep '$PLEROMA_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
120
+                       $"Code:" 4 1 "$(grep 'PLEROMA_CODE' temp.cfg | awk -F '=' '{print $2}')" 4 25 33 255 \
121
+                       2> $data
122
+            else
123
+                dialog --backtitle $"Freedombone Configuration" \
124
+                       --title $"Pleroma Configuration" \
125
+                       --form $"\nPlease enter your Pleroma details. The background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
126
+                       $"Domain:" 1 1 "$(grep 'PLEROMA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
127
+                       $"Title:" 2 1 "$(grep '$PLEROMA_TITLE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
128
+                       $"Background image URL:" 3 1 "$(grep '$PLEROMA_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
129
+                       2> $data
130
+            fi
131
+            sel=$?
132
+            case $sel in
133
+                1) exit 1;;
134
+                255) exit 1;;
135
+            esac
136
+            PLEROMA_DOMAIN_NAME=$(cat $data | sed -n 1p)
137
+            title=$(cat $data | sed -n 2p)
138
+            if [ ${#title} -gt 1 ]; then
139
+                PLEROMA_TITLE=$welcome_msg
140
+            fi
141
+            img_url=$(cat $data | sed -n 3p)
142
+            if [ ${#img_url} -gt 1 ]; then
143
+                PLEROMA_BACKGROUND_IMAGE_URL=$img_url
144
+            fi
145
+            if [ $PLEROMA_DOMAIN_NAME ]; then
146
+                if [[ $PLEROMA_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
147
+                    PLEROMA_DOMAIN_NAME=""
148
+                fi
149
+                TEST_DOMAIN_NAME=$PLEROMA_DOMAIN_NAME
150
+                validate_domain_name
151
+                if [[ $TEST_DOMAIN_NAME != $PLEROMA_DOMAIN_NAME ]]; then
152
+                    PLEROMA_DOMAIN_NAME=
153
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
154
+                else
155
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
156
+                        PLEROMA_CODE=$(cat $data | sed -n 4p)
157
+                        validate_freedns_code "$PLEROMA_CODE"
158
+                        if [ ! $VALID_CODE ]; then
159
+                            PLEROMA_DOMAIN_NAME=
160
+                        fi
161
+                    fi
162
+                fi
163
+            fi
164
+            if [ $PLEROMA_DOMAIN_NAME ]; then
165
+                PLEROMA_DETAILS_COMPLETE="yes"
166
+            fi
167
+        done
168
+
169
+        # remove any invalid characters
170
+        if [ ${#PLEROMA_TITLE} -gt 0 ]; then
171
+            new_title=$(echo "$PLEROMA_TITLE" | sed "s|'||g")
172
+            PLEROMA_TITLE="$new_title"
173
+        fi
174
+
175
+        # save the results in the config file
176
+        write_config_param "PLEROMA_CODE" "$PLEROMA_CODE"
177
+        write_config_param "PLEROMA_TITLE" "$PLEROMA_TITLE"
178
+        write_config_param "PLEROMA_BACKGROUND_IMAGE_URL" "$PLEROMA_BACKGROUND_IMAGE_URL"
179
+    fi
180
+    write_config_param "PLEROMA_DOMAIN_NAME" "$PLEROMA_DOMAIN_NAME"
181
+    APP_INSTALLED=1
182
+}
183
+
184
+function change_password_pleroma {
185
+    curr_username="$1"
186
+    new_user_password="$2"
187
+
188
+    #${PROJECT_NAME}-pass -u "$curr_username" -a pleroma -p "$new_user_password"
189
+}
190
+
191
+function pleroma_create_database {
192
+    if [ -f $IMAGE_PASSWORD_FILE ]; then
193
+        PLEROMA_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
194
+    else
195
+        if [ ! $PLEROMA_ADMIN_PASSWORD ]; then
196
+            PLEROMA_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
197
+        fi
198
+    fi
199
+    if [ ! $PLEROMA_ADMIN_PASSWORD ]; then
200
+        return
201
+    fi
202
+
203
+    add_postgresql_user pleroma "$PLEROMA_ADMIN_PASSWORD" encrypted
204
+    run_system_query_postgresql "GRANT ALL ON ALL tables IN SCHEMA public TO pleroma;"
205
+    run_system_query_postgresql "GRANT ALL ON ALL sequences IN SCHEMA public TO pleroma;"
206
+
207
+    cd /var/www/$PLEROMA_DOMAIN_NAME/htdocs
208
+    mix ecto.create
209
+    mix ecto.migrate
210
+}
211
+
212
+function reconfigure_pleroma {
213
+    echo -n ''
214
+}
215
+
216
+function pleroma_set_background_image {
217
+    PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
218
+
219
+    data=$(tempfile 2>/dev/null)
220
+    trap "rm -f $data" 0 1 2 5 15
221
+    dialog --title $"Pleroma" \
222
+           --backtitle $"Freedombone Control Panel" \
223
+           --inputbox $'Set a background image URL' 10 60 2>$data
224
+    sel=$?
225
+    case $sel in
226
+        0)
227
+            temp_background=$(<$data)
228
+            if [ ${#temp_background} -gt 0 ]; then
229
+                PLEROMA_BACKGROUND_IMAGE_URL="$temp_background"
230
+                write_config_param "PLEROMA_BACKGROUND_IMAGE_URL" "$PLEROMA_BACKGROUND_IMAGE_URL"
231
+                if [[ $(pleroma_set_background_image_from_url "$PLEROMA_DOMAIN_NAME" "$PLEROMA_BACKGROUND_IMAGE_URL" "$PLEROMA_TITLE" | tail -n 1) == "0" ]]; then
232
+                    dialog --title $"Set Pleroma login background" \
233
+                           --msgbox $"The background image has been set" 6 60
234
+                fi
235
+            fi
236
+           ;;
237
+    esac
238
+    rm $data
239
+}
240
+
241
+function pleroma_set_title {
242
+    data=$(tempfile 2>/dev/null)
243
+    trap "rm -f $data" 0 1 2 5 15
244
+    dialog --title $"Pleroma" \
245
+           --backtitle $"Freedombone Control Panel" \
246
+           --inputbox $'Set a title' 10 60 2>$data
247
+    sel=$?
248
+    case $sel in
249
+        0)
250
+            new_title=$(<$data)
251
+            if [ ${#new_title} -gt 0 ]; then
252
+                PLEROMA_TITLE="$new_title"
253
+                PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
254
+                write_config_param "PLEROMA_TITLE" "$PLEROMA_TITLE"
255
+                cd /var/www/$PLEROMA_DOMAIN_NAME/htdocs/static
256
+                sed -i "s|\"name\":.*|\"name\": \"${PLEROMA_TITLE}\",|g" config.json
257
+                dialog --title $"Set Pleroma title" \
258
+                       --msgbox $"The title has been set" 6 60
259
+            fi
260
+           ;;
261
+    esac
262
+    rm $data
263
+}
264
+
265
+function pleroma_set_expire_months {
266
+    PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
267
+    read_config_param "PLEROMA_EXPIRE_MONTHS"
268
+
269
+    data=$(tempfile 2>/dev/null)
270
+    trap "rm -f $data" 0 1 2 5 15
271
+    dialog --title $"Pleroma" \
272
+           --backtitle $"Freedombone Control Panel" \
273
+           --inputbox $'Set an expiry period for posts in months. Anything older will be deleted. Lower values help to keep the database size small and as fast as possible.' 12 60 "$PLEROMA_EXPIRE_MONTHS" 2>$data
274
+    sel=$?
275
+    case $sel in
276
+        0)
277
+            new_expiry_months=$(<$data)
278
+            if [ ${#new_expiry_months} -gt 0 ]; then
279
+                # should contain no spaces
280
+                if [[ "$new_expiry_months" == *" "* ]]; then
281
+                    return
282
+                fi
283
+                # should be a number
284
+                re='^[0-9]+$'
285
+                if ! [[ $new_expiry_months =~ $re ]] ; then
286
+                    return
287
+                fi
288
+                # set the new value
289
+                PLEROMA_EXPIRE_MONTHS=$new_expiry_months
290
+                write_config_param "PLEROMA_EXPIRE_MONTHS" "$PLEROMA_EXPIRE_MONTHS"
291
+
292
+                # TODO
293
+
294
+                dialog --title $"Set Pleroma post expiry period" \
295
+                       --msgbox $"Expiry period set to $PLEROMA_EXPIRE_MONTHS months" 6 60
296
+            fi
297
+           ;;
298
+    esac
299
+    rm $data
300
+}
301
+
302
+function configure_interactive_pleroma {
303
+    read_config_param PLEROMA_EXPIRE_MONTHS
304
+    while true
305
+    do
306
+        data=$(tempfile 2>/dev/null)
307
+        trap "rm -f $data" 0 1 2 5 15
308
+        dialog --backtitle $"Freedombone Control Panel" \
309
+               --title $"Pleroma" \
310
+               --radiolist $"Choose an operation:" 13 70 4 \
311
+               1 $"Set a background image" off \
312
+               2 $"Set the title" off \
313
+               3 $"Set post expiry period (currently $PLEROMA_EXPIRE_MONTHS months)" off \
314
+               4 $"Exit" on 2> $data
315
+        sel=$?
316
+        case $sel in
317
+            1) return;;
318
+            255) return;;
319
+        esac
320
+        case $(cat $data) in
321
+            1) pleroma_set_background_image;;
322
+            2) pleroma_set_title;;
323
+            3) pleroma_set_expire_months;;
324
+            4) break;;
325
+        esac
326
+        rm $data
327
+    done
328
+}
329
+
330
+function upgrade_pleroma {
331
+    echo -n ''
332
+}
333
+
334
+
335
+function backup_local_pleroma {
336
+    PLEROMA_DOMAIN_NAME='pleroma'
337
+    if grep -q "pleroma domain" $COMPLETION_FILE; then
338
+        PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
339
+    fi
340
+
341
+    function_check suspend_site
342
+    suspend_site ${PLEROMA_DOMAIN_NAME}
343
+
344
+    source_directory=/var/www/${PLEROMA_DOMAIN_NAME}/htdocs
345
+    dest_directory=pleroma
346
+    backup_directory_to_usb $source_directory $dest_directory
347
+
348
+    USE_POSTGRESQL=1
349
+    function_check backup_database_to_usb
350
+    backup_database_to_usb pleroma
351
+
352
+    function_check restart_site
353
+    restart_site
354
+}
355
+
356
+function restore_local_pleroma {
357
+    if ! grep -q "pleroma domain" $COMPLETION_FILE; then
358
+        return
359
+    fi
360
+    PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
361
+    if [ $PLEROMA_DOMAIN_NAME ]; then
362
+        echo $"Restoring pleroma"
363
+        temp_restore_dir=/root/temppleroma
364
+        pleroma_dir=/var/www/${PLEROMA_DOMAIN_NAME}/htdocs
365
+
366
+        function_check pleroma_create_database
367
+        pleroma_create_database
368
+
369
+        USE_POSTGRESQL=1
370
+        restore_database pleroma
371
+        if [ -d $temp_restore_dir ]; then
372
+            rm -rf $temp_restore_dir
373
+        fi
374
+
375
+        function_check restore_directory_from_usb
376
+        restore_directory_from_usb $temp_restore_dir pleroma
377
+        if [ -d $temp_restore_dir ]; then
378
+            chown -R www-data:www-data $pleroma_dir/static
379
+            rm -rf $temp_restore_dir
380
+        fi
381
+
382
+        echo $"Restore of pleroma complete"
383
+    fi
384
+}
385
+
386
+function backup_remote_pleroma {
387
+    PLEROMA_DOMAIN_NAME='pleroma'
388
+    if grep -q "pleroma domain" $COMPLETION_FILE; then
389
+        PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
390
+    fi
391
+
392
+    function_check suspend_site
393
+    suspend_site ${PLEROMA_DOMAIN_NAME}
394
+
395
+    source_directory=/var/www/${PLEROMA_DOMAIN_NAME}/htdocs
396
+    dest_directory=pleroma
397
+    backup_directory_to_friend $source_directory $dest_directory
398
+
399
+    USE_POSTGRESQL=1
400
+    function_check backup_database_to_friend
401
+    backup_database_to_friend pleroma
402
+
403
+    function_check restart_site
404
+    restart_site
405
+}
406
+
407
+function restore_remote_pleroma {
408
+    if ! grep -q "pleroma domain" $COMPLETION_FILE; then
409
+        return
410
+    fi
411
+    PLEROMA_DOMAIN_NAME=$(get_completion_param "pleroma domain")
412
+    if [ $PLEROMA_DOMAIN_NAME ]; then
413
+        echo $"Restoring pleroma"
414
+        temp_restore_dir=/root/temppleroma
415
+        pleroma_dir=/var/www/${PLEROMA_DOMAIN_NAME}/htdocs
416
+
417
+        function_check pleroma_create_database
418
+        pleroma_create_database
419
+
420
+        USE_POSTGRESQL=1
421
+        function_check restore_database_from_friend
422
+        restore_database_from_friend pleroma
423
+        if [ -d $temp_restore_dir ]; then
424
+            rm -rf $temp_restore_dir
425
+        fi
426
+
427
+        function_check restore_directory_from_friend
428
+        restore_directory_from_friend $temp_restore_dir pleroma
429
+        if [ -d $temp_restore_dir ]; then
430
+            chown -R www-data:www-data $pleroma_dir/static
431
+            rm -rf $temp_restore_dir
432
+        fi
433
+
434
+        pleroma_update_after_restore pleroma ${PLEROMA_DOMAIN_NAME}
435
+
436
+        echo $"Restore of pleroma complete"
437
+    fi
438
+}
439
+
440
+function remove_pleroma {
441
+    if [ ${#PLEROMA_DOMAIN_NAME} -eq 0 ]; then
442
+        return
443
+    fi
444
+    systemctl stop pleroma
445
+    systemctl disable pleroma
446
+    rm /etc/systemd/system/pleroma.service
447
+
448
+    function_check remove_nodejs
449
+    remove_nodejs pleroma-backend
450
+
451
+    read_config_param "PLEROMA_DOMAIN_NAME"
452
+    read_config_param "MY_USERNAME"
453
+    echo "Removing $PLEROMA_DOMAIN_NAME"
454
+    nginx_dissite $PLEROMA_DOMAIN_NAME
455
+    remove_certs $PLEROMA_DOMAIN_NAME
456
+
457
+    if [ -d /var/www/$PLEROMA_DOMAIN_NAME ]; then
458
+        rm -rf /var/www/$PLEROMA_DOMAIN_NAME
459
+    fi
460
+    if [ -f /etc/nginx/sites-available/$PLEROMA_DOMAIN_NAME ]; then
461
+        rm /etc/nginx/sites-available/$PLEROMA_DOMAIN_NAME
462
+    fi
463
+    function_check drop_database_postgresql
464
+    drop_database_postgresql
465
+    function_check remove_onion_service
466
+    remove_onion_service pleroma ${PLEROMA_ONION_PORT}
467
+    remove_app pleroma
468
+    remove_completion_param install_pleroma
469
+    sed -i '/pleroma/d' $COMPLETION_FILE
470
+
471
+    function_check remove_ddns_domain
472
+    remove_ddns_domain $PLEROMA_DOMAIN_NAME
473
+}
474
+
475
+function install_elixir {
476
+    apt-get -yq install wget build-essential
477
+
478
+    if [ ! -d $INSTALL_DIR ]; then
479
+        mkdir -p $INSTALL_DIR
480
+    fi
481
+
482
+    cd $INSTALL_DIR
483
+    erlang_package=erlang-solutions_1.0_all.deb
484
+    wget https://packages.erlang-solutions.com/$erlang_package
485
+    if [ ! -f $INSTALL_DIR/$erlang_package ]; then
486
+        exit 72853
487
+    fi
488
+    dpkg -i $erlang_package
489
+    apt-get -yq update
490
+    apt-get -yq install esl-erlang
491
+    apt-get -yq install elixir
492
+
493
+    if [ ! -f /usr/bin/mix ]; then
494
+        echo $'/usr/bin/mix not found after elixir installation'
495
+        exit 629352
496
+    fi
497
+}
498
+
499
+function install_pleroma {
500
+    if [ ! $ONION_ONLY ]; then
501
+        ONION_ONLY='no'
502
+    fi
503
+
504
+    # We need elixir 1.4+ here, so the debian repo package won't do
505
+    install_elixir
506
+
507
+    function_check install_nodejs
508
+    install_nodejs pleroma-backend
509
+    install_postgresql
510
+
511
+    # get the repo
512
+    if [ ! -d /var/www/$PLEROMA_DOMAIN_NAME ]; then
513
+        mkdir /var/www/$PLEROMA_DOMAIN_NAME
514
+    fi
515
+    if [ ! -d /var/www/$PLEROMA_DOMAIN_NAME/htdocs ]; then
516
+
517
+        if [ -d /repos/pleroma ]; then
518
+            mkdir /var/www/$PLEROMA_DOMAIN_NAME/htdocs
519
+            cp -r -p /repos/pleroma/. /var/www/$PLEROMA_DOMAIN_NAME/htdocs
520
+            cd /var/www/$PLEROMA_DOMAIN_NAME/htdocs
521
+            git pull
522
+        else
523
+            function_check git_clone
524
+            git_clone $PLEROMA_REPO /var/www/$PLEROMA_DOMAIN_NAME/htdocs
525
+        fi
526
+
527
+        if [ ! -d /var/www/$PLEROMA_DOMAIN_NAME/htdocs ]; then
528
+            echo $'Unable to clone pleroma repo'
529
+            exit 783523
530
+        fi
531
+    fi
532
+
533
+    cd /var/www/$PLEROMA_DOMAIN_NAME/htdocs
534
+    git checkout $PLEROMA_COMMIT -b $PLEROMA_COMMIT
535
+    set_completion_param "pleroma commit" "$PLEROMA_COMMIT"
536
+    chown -R www-data:www-data /var/www/$PLEROMA_DOMAIN_NAME/htdocs
537
+
538
+
539
+    # web config
540
+    function_check add_ddns_domain
541
+    add_ddns_domain $PLEROMA_DOMAIN_NAME
542
+
543
+    PLEROMA_ONION_HOSTNAME=$(add_onion_service pleroma 80 ${PLEROMA_ONION_PORT})
544
+
545
+    pleroma_nginx_site=/etc/nginx/sites-available/$PLEROMA_DOMAIN_NAME
546
+    if [[ $ONION_ONLY == "no" ]]; then
547
+        function_check nginx_http_redirect
548
+        nginx_http_redirect $PLEROMA_DOMAIN_NAME "index index.html"
549
+        echo 'server {' >> $pleroma_nginx_site
550
+        echo '  listen 443 ssl;' >> $pleroma_nginx_site
551
+        echo '  listen [::]:443 ssl;' >> $pleroma_nginx_site
552
+        echo "  server_name $PLEROMA_DOMAIN_NAME;" >> $pleroma_nginx_site
553
+        echo '' >> $pleroma_nginx_site
554
+        function_check nginx_compress
555
+        nginx_compress $PLEROMA_DOMAIN_NAME
556
+        echo '' >> $pleroma_nginx_site
557
+        echo '  # Security' >> $pleroma_nginx_site
558
+        function_check nginx_ssl
559
+        nginx_ssl $PLEROMA_DOMAIN_NAME
560
+
561
+        function_check nginx_disable_sniffing
562
+        nginx_disable_sniffing $PLEROMA_DOMAIN_NAME
563
+
564
+        echo '  add_header Strict-Transport-Security max-age=15768000;' >> $pleroma_nginx_site
565
+        echo '' >> $pleroma_nginx_site
566
+        echo '  # Logs' >> $pleroma_nginx_site
567
+        echo '  access_log /dev/null;' >> $pleroma_nginx_site
568
+        echo '  error_log /dev/null;' >> $pleroma_nginx_site
569
+        echo '' >> $pleroma_nginx_site
570
+        echo "  root /var/www/$PLEROMA_DOMAIN_NAME/htdocs;" >> $pleroma_nginx_site
571
+        echo '' >> $pleroma_nginx_site
572
+        echo '  index index.html;' >> $pleroma_nginx_site
573
+        echo '  location / {' >> $pleroma_nginx_site
574
+        function_check nginx_limits
575
+        nginx_limits $PLEROMA_DOMAIN_NAME '15m'
576
+        echo "    proxy_pass http://localhost:$PLEROMA_PORT;" >> $pleroma_nginx_site
577
+        echo '  }' >> $pleroma_nginx_site
578
+        echo '  include snippets/well-known.conf;' >> $pleroma_nginx_site
579
+        echo '}' >> $pleroma_nginx_site
580
+    else
581
+        echo -n '' > $pleroma_nginx_site
582
+    fi
583
+    echo 'server {' >> $pleroma_nginx_site
584
+    echo "    listen 127.0.0.1:$PLEROMA_ONION_PORT default_server;" >> $pleroma_nginx_site
585
+    echo "    server_name $PLEROMA_ONION_HOSTNAME;" >> $pleroma_nginx_site
586
+    echo '' >> $pleroma_nginx_site
587
+    function_check nginx_compress
588
+    nginx_compress $PLEROMA_DOMAIN_NAME
589
+    echo '' >> $pleroma_nginx_site
590
+    function_check nginx_disable_sniffing
591
+    nginx_disable_sniffing $PLEROMA_DOMAIN_NAME
592
+    echo '' >> $pleroma_nginx_site
593
+    echo '  # Logs' >> $pleroma_nginx_site
594
+    echo '  access_log /dev/null;' >> $pleroma_nginx_site
595
+    echo '  error_log /dev/null;' >> $pleroma_nginx_site
596
+    echo '' >> $pleroma_nginx_site
597
+    echo '  # Root' >> $pleroma_nginx_site
598
+    echo "  root /var/www/$PLEROMA_DOMAIN_NAME/htdocs;" >> $pleroma_nginx_site
599
+    echo '' >> $pleroma_nginx_site
600
+    echo '  index index.html;' >> $pleroma_nginx_site
601
+    echo '  location / {' >> $pleroma_nginx_site
602
+    function_check nginx_limits
603
+    nginx_limits $PLEROMA_DOMAIN_NAME '15m'
604
+    echo "    proxy_pass http://localhost:$PLEROMA_PORT;" >> $pleroma_nginx_site
605
+    echo '  }' >> $pleroma_nginx_site
606
+    echo '  include snippets/well-known.conf;' >> $pleroma_nginx_site
607
+    echo '}' >> $pleroma_nginx_site
608
+
609
+    function_check create_site_certificate
610
+    create_site_certificate $PLEROMA_DOMAIN_NAME 'yes'
611
+
612
+    function_check nginx_ensite
613
+    nginx_ensite $PLEROMA_DOMAIN_NAME
614
+
615
+    systemctl restart postgresql
616
+    systemctl restart nginx
617
+
618
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a pleroma -p "$PLEROMA_ADMIN_PASSWORD"
619
+
620
+    set_completion_param "pleroma domain" "$PLEROMA_DOMAIN_NAME"
621
+
622
+
623
+    # back end
624
+    useradd -d /var/www/$PLEROMA_DOMAIN_NAME/htdocs/ -s /bin/false pleroma
625
+    adduser pleroma www-data
626
+
627
+    cd /var/www/$PLEROMA_DOMAIN_NAME/htdocs
628
+    mix deps.get
629
+
630
+    function_check pleroma_create_database
631
+    pleroma_create_database
632
+
633
+    pleroma_secret=config/dev.secret.exs
634
+    cp config/dev.exs $pleroma_secret
635
+    sed -i "s|username:.*|username: \"pleroma\",|g" $pleroma_secret
636
+    sed -i "s|password:.*|password: \"$PLEROMA_ADMIN_PASSWORD\",|g" $pleroma_secret
637
+    sed -i "s|database:.*|database: \"pleroma\",|g" $pleroma_secret
638
+    sed -i "/config :pleroma, Pleroma.Web.Endpoint/a url: [host: \"$PLEROMA_DOMAIN_NAME\", scheme: \"https\", port: 443]," $pleroma_secret
639
+
640
+    pleroma_config=/var/www/$PLEROMA_DOMAIN_NAME/htdocs/config/config.exs
641
+    sed -i "s|name: .*|name: \"$PLEROMA_TITLE\",|g" $pleroma_config
642
+    sed -i "s|email: .*|email: \"$MY_EMAIL_ADDRESS\",|g" $pleroma_config
643
+
644
+    # front end
645
+    install_pleroma_front_end "pleroma" "$PLEROMA_DOMAIN_NAME" "$PLEROMA_BACKGROUND_IMAGE_URL" "$PLEROMA_TITLE"
646
+    install_gnusocial_default_background "gnusocial" "$PLEROMA_DOMAIN_NAME"
647
+    sed -i 's|"theme":.*|"theme": "base16-apathy.css",|g' /var/www/${PLEROMA_DOMAIN_NAME}/htdocs/static/config.json
648
+
649
+    if [ $PLEROMA_BACKGROUND_IMAGE_URL ]; then
650
+        pleroma_set_background_image_from_url "$PLEROMA_DOMAIN_NAME" "$PLEROMA_BACKGROUND_IMAGE_URL" "$PLEROMA_TITLE"
651
+    fi
652
+
653
+
654
+    # daemon
655
+    echo '[Unit]' > /etc/systemd/system/pleroma.service
656
+    echo 'Description=Pleroma social network' >> /etc/systemd/system/pleroma.service
657
+    echo 'After=network.target postgresql.service' >> /etc/systemd/system/pleroma.service
658
+    echo '' >> /etc/systemd/system/pleroma.service
659
+    echo '[Service]' >> /etc/systemd/system/pleroma.service
660
+    echo 'User=pleroma' >> /etc/systemd/system/pleroma.service
661
+    echo "WorkingDirectory=/var/www/$PLEROMA_DOMAIN_NAME/htdocs/pleroma"
662
+    echo "Environment=\"HOME=/var/www/$PLEROMA_DOMAIN_NAME/htdocs\"" >> /etc/systemd/system/pleroma.service
663
+    echo 'ExecStart=/usr/bin/mix phx.server' >> /etc/systemd/system/pleroma.service
664
+    echo 'ExecReload=/bin/kill $MAINPID' >> /etc/systemd/system/pleroma.service
665
+    echo 'KillMode=process' >> /etc/systemd/system/pleroma.service
666
+    echo 'Restart=on-failure' >> /etc/systemd/system/pleroma.service
667
+    echo '' >> /etc/systemd/system/pleroma.service
668
+    echo '[Install]' >> /etc/systemd/system/pleroma.service
669
+    echo 'WantedBy=multi-user.target' >> /etc/systemd/system/pleroma.service
670
+    echo 'Alias=pleroma.service' >> /etc/systemd/system/pleroma.service
671
+    systemctl daemon-reload
672
+    systemctl enable pleroma
673
+    systemctl start pleroma
674
+
675
+    APP_INSTALLED=1
676
+}
677
+
678
+# NOTE: deliberately there is no "exit 0"

+ 1
- 1
src/freedombone-app-postactiv 查看文件

@@ -378,7 +378,7 @@ function upgrade_postactiv {
378 378
     gnusocial_block_user_script
379 379
     gnusocial_block_domain_script postactiv "$POSTACTIV_DOMAIN_NAME"
380 380
 
381
-    upgrade_pleroma "$POSTACTIV_DOMAIN_NAME" "postactiv" "$POSTACTIV_BACKGROUND_IMAGE_URL" "$POSTACTIV_TITLE"
381
+    upgrade_pleroma_frontend "$POSTACTIV_DOMAIN_NAME" "postactiv" "$POSTACTIV_BACKGROUND_IMAGE_URL" "$POSTACTIV_TITLE"
382 382
     postactiv_customise_logo
383 383
     install_gnusocial_default_background "postactiv" "$POSTACTIV_DOMAIN_NAME"
384 384
     chown -R www-data:www-data /var/www/${POSTACTIV_DOMAIN_NAME}/htdocs

+ 2
- 1
src/freedombone-image-customise 查看文件

@@ -1574,9 +1574,10 @@ function image_preinstall_repos {
1574 1574
     git clone $ETHERPAD_REPO $rootdir/repos/etherpad
1575 1575
     git clone $FRIENDICA_REPO $rootdir/repos/friendica
1576 1576
     git clone $GNUSOCIAL_REPO $rootdir/repos/gnusocial
1577
+    git clone $PLEROMA_REPO $rootdir/repos/pleroma
1577 1578
     git clone $GNUSOCIAL_MARKDOWN_REPO $rootdir/repos/gnusocial-markdown
1578 1579
     #git clone $QVITTER_THEME_REPO $rootdir/repos/qvitter
1579
-    git clone $PLEROMA_REPO $rootdir/repos/pleroma
1580
+    git clone $PLEROMA_FRONTEND_REPO $rootdir/repos/pleroma-fe
1580 1581
     #git clone $POSTACTIV_REPO $rootdir/repos/postactiv
1581 1582
     git clone $SHARINGS_REPO $rootdir/repos/sharings
1582 1583
     git clone $HTMLY_REPO $rootdir/repos/htmly

+ 9
- 9
src/freedombone-utils-gnusocialtools 查看文件

@@ -32,8 +32,8 @@
32 32
 QVITTER_THEME_REPO="https://github.com/bashrc/Qvitter"
33 33
 QVITTER_THEME_COMMIT='c6f09bda4e45be4290cf7409fa5efb4420538032'
34 34
 
35
-PLEROMA_REPO="https://gitgud.io/lambadalambda/pleroma-fe"
36
-PLEROMA_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e'
35
+PLEROMA_FRONTEND_REPO="https://gitgud.io/lambadalambda/pleroma-fe"
36
+PLEROMA_FRONTEND_COMMIT='cbe652f2d94d81fa54a37378b7ff014c4391ca5e'
37 37
 
38 38
 SHARINGS_REPO="http://github.com/bashrc/Sharings"
39 39
 SHARINGS_COMMIT='0d30fe7d153c7ab44e8459970b8f2b5dec06e43c'
@@ -284,14 +284,14 @@ function install_pleroma_front_end {
284 284
 
285 285
     if [ ! -d $INSTALL_DIR/pleroma ]; then
286 286
 
287
-        if [ -d /repos/pleroma ]; then
287
+        if [ -d /repos/pleroma-fe ]; then
288 288
             mkdir -p $INSTALL_DIR/pleroma
289
-            cp -r -p /repos/pleroma/. $INSTALL_DIR/pleroma
289
+            cp -r -p /repos/pleroma-fe/. $INSTALL_DIR/pleroma
290 290
             cd $INSTALL_DIR/pleroma
291 291
             git pull
292 292
         else
293 293
             function_check git_clone
294
-            git_clone $PLEROMA_REPO $INSTALL_DIR/pleroma
294
+            git_clone $PLEROMA_FRONTEND_REPO $INSTALL_DIR/pleroma
295 295
         fi
296 296
 
297 297
         if [ ! -d $INSTALL_DIR/pleroma ]; then
@@ -301,8 +301,8 @@ function install_pleroma_front_end {
301 301
     fi
302 302
 
303 303
     cd $INSTALL_DIR/pleroma
304
-    git checkout $PLEROMA_COMMIT -b $PLEROMA_COMMIT
305
-    set_completion_param "${app_name} pleroma commit" "$PLEROMA_COMMIT"
304
+    git checkout $PLEROMA_FRONTEND_COMMIT -b $PLEROMA_FRONTEND_COMMIT
305
+    set_completion_param "${app_name} pleroma commit" "$PLEROMA_FRONTEND_COMMIT"
306 306
 
307 307
     if [ -d $INSTALL_DIR/pleroma/node_modules ]; then
308 308
         rm -rf $INSTALL_DIR/pleroma/node_modules
@@ -348,14 +348,14 @@ function install_pleroma_front_end {
348 348
     chown -R www-data:www-data /var/www/${pleroma_domain}/htdocs
349 349
 }
350 350
 
351
-function upgrade_pleroma {
351
+function upgrade_pleroma_frontend {
352 352
     domain_name="$1"
353 353
     app_name="$2"
354 354
     background_url="$3"
355 355
     title="$4"
356 356
 
357 357
     if [ -d $INSTALL_DIR/pleroma ]; then
358
-        set_repo_commit $INSTALL_DIR/pleroma "${app_name} pleroma commit" "$PLEROMA_COMMIT" $PLEROMA_REPO
358
+        set_repo_commit $INSTALL_DIR/pleroma "${app_name} pleroma commit" "$PLEROMA_FRONTEND_COMMIT" $PLEROMA_FRONTEND_REPO
359 359
         cd $INSTALL_DIR/pleroma
360 360
         yarn
361 361
         npm run build

+ 12
- 2
src/freedombone-utils-postgresql 查看文件

@@ -87,7 +87,12 @@ function install_postgresql {
87 87
 function add_postgresql_user {
88 88
     postgresql_username=$1
89 89
     postgresql_password=$2
90
-    sudo -u postgres psql -c "create user $postgresql_username password 'postgresql_password'"
90
+    if [[ "$3" != 'encrypt'* ]]; then
91
+        sudo -u postgres psql -c "create user $postgresql_username password '$postgresql_password';"
92
+    else
93
+        sudo -u postgres psql -c "create user $postgresql_username;"
94
+        sudo -u postgres psql -c "ALTER user $postgresql_username with encrypted password '$postgresql_password';"
95
+    fi
91 96
 }
92 97
 
93 98
 function remove_postgresql_user {
@@ -95,11 +100,16 @@ function remove_postgresql_user {
95 100
     sudo -u postgres psql -c "drop user $postgresql_username"
96 101
 }
97 102
 
98
-function remove_database_postgresql {
103
+function drop_database_postgresql {
99 104
     database_name="$1"
100 105
     sudo -u postgres psql -c "drop database $database_name"
101 106
 }
102 107
 
108
+function run_system_query_postgresql {
109
+    query=$1
110
+    sudo -u postgres psql -c "$query"
111
+}
112
+
103 113
 function run_query_postgresql {
104 114
     database_name=$1
105 115
     database_query=$2