Browse Source

dat server app

Bob Mottram 7 years ago
parent
commit
b200d55769
2 changed files with 324 additions and 4 deletions
  1. 323
    0
      src/freedombone-app-datserver
  2. 1
    4
      src/freedombone-app-peertube

+ 323
- 0
src/freedombone-app-datserver View File

@@ -0,0 +1,323 @@
1
+#!/bin/bash
2
+#
3
+#  _____               _           _
4
+# |   __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
5
+# |   __|  _| -_| -_| . | . |     | . | . |   | -_|
6
+# |__|  |_| |___|___|___|___|_|_|_|___|___|_|_|___|
7
+#
8
+#                              Freedom in the Cloud
9
+#
10
+# License
11
+# =======
12
+#
13
+# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
14
+#
15
+# This program is free software: you can redistribute it and/or modify
16
+# it under the terms of the GNU Affero General Public License as published by
17
+# the Free Software Foundation, either version 3 of the License, or
18
+# (at your option) any later version.
19
+#
20
+# This program is distributed in the hope that it will be useful,
21
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
+# GNU Affero General Public License for more details.
24
+#
25
+# You should have received a copy of the GNU Affero General Public License
26
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
27
+
28
+VARIANTS='full full-vim'
29
+
30
+IN_DEFAULT_INSTALL=0
31
+SHOW_ON_ABOUT=0
32
+
33
+DATSERVER_DOMAIN_NAME=
34
+DATSERVER_CODE=
35
+DATSERVER_DAT_VERSION='13.10.0'
36
+DATSERVER_DIRECTORY=/etc/datserver
37
+
38
+datserver_variables=(MY_USERNAME)
39
+
40
+function logging_on_datserver {
41
+    echo -n ''
42
+}
43
+
44
+function logging_off_datserver {
45
+    echo -n ''
46
+}
47
+
48
+function remove_user_datserver {
49
+    remove_username="$1"
50
+
51
+    "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp datserver
52
+}
53
+
54
+function add_user_datserver {
55
+    new_username="$1"
56
+    new_user_password="$2"
57
+
58
+    "${PROJECT_NAME}-pass" -u "$new_username" -a datserver -p "$new_user_password"
59
+    echo '0'
60
+}
61
+
62
+function install_interactive_datserver {
63
+    echo -n ''
64
+    APP_INSTALLED=1
65
+}
66
+
67
+function change_password_datserver {
68
+    curr_username="$1"
69
+    new_user_password="$2"
70
+
71
+    "${PROJECT_NAME}-pass" -u "$curr_username" -a datserver -p "$new_user_password"
72
+}
73
+
74
+function reconfigure_datserver {
75
+    # This is used if you need to switch identity. Dump old keys and generate new ones
76
+    echo -n ''
77
+}
78
+
79
+function datserver_add_url {
80
+    data=$(mktemp 2>/dev/null)
81
+    dialog --title $"Add a file to dat using its URL" \
82
+           --backtitle $"Freedombone Control Panel" \
83
+           --inputbox $"File URL" 8 70 2>"$data"
84
+    sel=$?
85
+    case $sel in
86
+        0)
87
+            file_url=$(<"$data")
88
+            if [ "$file_url" ]; then
89
+                if [ ${#file_url} -gt 5 ]; then
90
+                    clear
91
+                    cd $DATSERVER_DIRECTORY || return
92
+                    wget "$file_url"
93
+                    chown -R datserver:datserver $DATSERVER_DIRECTORY/*
94
+                fi
95
+            fi
96
+            ;;
97
+    esac
98
+    rm -f "$data"
99
+}
100
+
101
+function datserver_add_file {
102
+    read_config_param MY_USERNAME
103
+
104
+    selected_file=$(dialog --title "Choose a file to store within dat" --fselect "/home/$MY_USERNAME/" 30 60)
105
+    if [ ! "$selected_file" ]; then
106
+        return
107
+    fi
108
+    if [ ! -f "$selected_file" ]; then
109
+        return
110
+    fi
111
+    if [[ "$selected_file" == "$DATSERVER_DIRECTORY"* ]]; then
112
+        return
113
+    fi
114
+
115
+    clear
116
+    echo ''
117
+    echo $"Copying $selected_file"
118
+    cp "$selected_file" $DATSERVER_DIRECTORY
119
+    chown -R datserver:datserver $DATSERVER_DIRECTORY/*
120
+}
121
+
122
+function datserver_show_address {
123
+    cd $DATSERVER_DIRECTORY || return
124
+    dat_address=$(dat status | grep "dat:")
125
+    clear
126
+    echo ''
127
+    echo "$dat_address"
128
+    echo ''
129
+    echo -n "$dat_address" | qrencode -t UTF8
130
+    echo ''
131
+    echo ' '
132
+    # shellcheck disable=SC2034
133
+    read -n1 -r -p $"Press any key to continue..." key
134
+}
135
+
136
+function configure_interactive_datserver {
137
+    W=(1 $"Add a local file"
138
+       2 $"Add a file from its URL")
139
+
140
+    while true
141
+    do
142
+        # shellcheck disable=SC2068
143
+        selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"dat server" --menu $"Choose an operation, or ESC for main menu:" 14 70 3 "${W[@]}" 3>&2 2>&1 1>&3)
144
+
145
+        if [ ! "$selection" ]; then
146
+           break
147
+        fi
148
+        case $selection in
149
+            1) datserver_show_address
150
+               ;;
151
+            2) datserver_add_file
152
+               ;;
153
+            3) datserver_add_url
154
+               ;;
155
+        esac
156
+    done
157
+}
158
+
159
+function upgrade_datserver {
160
+    CURR_DATSERVER_DAT_VERSION=$(get_completion_param "datserver version")
161
+    if [[ "$CURR_DATSERVER_DAT_VERSION" == "$DATSERVER_DAT_VERSION" ]]; then
162
+        return
163
+    fi
164
+
165
+    if npm update -g dat@$DATSERVER_DAT_VERSION; then
166
+        set_completion_param "datserver version" "$DATSERVER_DAT_VERSION"
167
+    fi
168
+    chown -R datserver:datserver "$DATSERVER_DIRECTORY"
169
+}
170
+
171
+function backup_local_datserver {
172
+    source_directory=$DATSERVER_DIRECTORY
173
+
174
+    systemctl stop datserver
175
+
176
+    dest_directory=datserver
177
+    backup_directory_to_usb "$source_directory" $dest_directory
178
+
179
+    systemctl start datserver
180
+}
181
+
182
+function restore_local_datserver {
183
+    systemctl stop datserver
184
+
185
+    temp_restore_dir=/root/tempdatserver
186
+    datserver_dir=$DATSERVER_DIRECTORY
187
+
188
+    restore_directory_from_usb $temp_restore_dir datserver
189
+    if [ -d $temp_restore_dir ]; then
190
+        if [ -d "$temp_restore_dir$datserver_dir" ]; then
191
+            cp -rp "$temp_restore_dir$datserver_dir"/* "$datserver_dir"/
192
+        else
193
+            if [ ! -d "$datserver_dir" ]; then
194
+                mkdir "$datserver_dir"
195
+            fi
196
+            cp -rp "$temp_restore_dir"/* "$datserver_dir"/
197
+        fi
198
+        chown -R datserver:datserver "$datserver_dir"
199
+        rm -rf $temp_restore_dir
200
+    fi
201
+    systemctl start datserver
202
+
203
+}
204
+
205
+function backup_remote_datserver {
206
+    source_directory=$DATSERVER_DIRECTORY
207
+    systemctl stop datserver
208
+
209
+    dest_directory=datserver
210
+    backup_directory_to_friend "$source_directory" $dest_directory
211
+
212
+    systemctl start datserver
213
+}
214
+
215
+function restore_remote_datserver {
216
+    systemctl stop datserver
217
+
218
+    temp_restore_dir=/root/tempdatserver
219
+    datserver_dir=$DATSERVER_DIRECTORY
220
+
221
+    restore_directory_from_friend $temp_restore_dir datserver
222
+    if [ -d $temp_restore_dir ]; then
223
+        if [ -d "$temp_restore_dir$datserver_dir" ]; then
224
+            cp -rp "$temp_restore_dir$datserver_dir"/* "$datserver_dir"/
225
+        else
226
+            if [ ! -d "$datserver_dir" ]; then
227
+                mkdir "$datserver_dir"
228
+            fi
229
+            cp -rp $temp_restore_dir/* "$datserver_dir"/
230
+        fi
231
+        chown -R datserver:datserver "$datserver_dir"
232
+        rm -rf $temp_restore_dir
233
+    fi
234
+    systemctl start datserver
235
+
236
+}
237
+
238
+function remove_datserver {
239
+    if [ -f /etc/systemd/system/datserver.service ]; then
240
+        systemctl stop datserver
241
+        systemctl disable datserver
242
+        rm /etc/systemd/system/datserver.service
243
+    fi
244
+    userdel -r datserver
245
+    npm uninstall -g dat
246
+
247
+    remove_nodejs datserver
248
+
249
+    remove_onion_service datserver "${DATSERVER_ONION_PORT}"
250
+    if grep -q "datserver" /etc/crontab; then
251
+        sed -i "/datserver/d" /etc/crontab
252
+    fi
253
+    if [ -d $DATSERVER_DIRECTORY ]; then
254
+        rm -rf $DATSERVER_DIRECTORY
255
+    fi
256
+    remove_app datserver
257
+    remove_completion_param install_datserver
258
+    sed -i '/datserver/d' "$COMPLETION_FILE"
259
+}
260
+
261
+function install_datserver {
262
+    apt-get -yq install wget
263
+
264
+    install_nodejs datserver
265
+    if ! npm install -g dat@$DATSERVER_DAT_VERSION; then
266
+        exit 2468736
267
+    fi
268
+    if [ ! -f /root/.npm-global/bin/dat ]; then
269
+        echo $'dat was not installed'
270
+        exit 156835
271
+    fi
272
+
273
+    set_completion_param "datserver version" "$DATSERVER_DAT_VERSION"
274
+
275
+    useradd -d "$DATSERVER_DIRECTORY" -s /bin/false datserver
276
+    if [ ! -d $DATSERVER_DIRECTORY ]; then
277
+        echo $'dat directory was not created'
278
+        exit 9568356
279
+    fi
280
+
281
+    cd $DATSERVER_DIRECTORY || exit 3578635
282
+    echo -e "\\n\\n" | dat create
283
+    if [ ! -d $DATSERVER_DIRECTORY/.dat ]; then
284
+        echo $'dat was not created'
285
+        exit 753563
286
+    fi
287
+    dat_address=$(dat status | grep "dat:")
288
+    if [ ! "$dat_address" ]; then
289
+        echo $'dat address could not be found'
290
+        exit 235479763
291
+    fi
292
+    if [ ${#dat_address} -lt 10 ]; then
293
+        echo $'dat address is too short'
294
+        exit 4789264359
295
+    fi
296
+    echo "$dat_address created"
297
+
298
+    { echo '[Unit]';
299
+      echo 'Description=datserver';
300
+      echo 'After=syslog.target';
301
+      echo 'After=network.target';
302
+      echo '';
303
+      echo '[Service]';
304
+      echo 'Type=simple';
305
+      echo 'User=datserver';
306
+      echo 'Group=datserver';
307
+      echo "WorkingDirectory=$DATSERVER_DIRECTORY";
308
+      echo "ExecStart=/root/.npm-global/bin/dat share $DATSERVER_DIRECTORY";
309
+      echo 'Environment=NODE_ENV=production';
310
+      echo 'Environment=USER=datserver';
311
+      echo 'Restart=always';
312
+      echo 'StandardError=syslog';
313
+      echo '';
314
+      echo '[Install]';
315
+      echo 'WantedBy=multi-user.target'; } >> "/etc/systemd/system/datserver.service"
316
+    systemctl enable datserver
317
+    chown -R datserver:datserver "$DATSERVER_DIRECTORY"
318
+    systemctl start datserver
319
+
320
+    APP_INSTALLED=1
321
+}
322
+
323
+# NOTE: deliberately there is no "exit 0"

+ 1
- 4
src/freedombone-app-peertube View File

@@ -269,10 +269,7 @@ function peertube_import_from_file {
269 269
         nodecmd='torsocks node'
270 270
     fi
271 271
 
272
-    data2=$(mktemp 2>/dev/null)
273
-    dialog --title "Choose the video file (select with spacebar)" --fselect "/home/$MY_USERNAME/" 30 60 2> "$data2"
274
-    selected_file=$(cat "$data2")
275
-    rm -f "$data2"
272
+    selected_file=$(dialog --title "Choose the video file (select with spacebar)" --fselect "/home/$MY_USERNAME/" 30 60)
276 273
     if [ ! "$selected_file" ]; then
277 274
         return
278 275
     fi