Ver código fonte

control panel

Bob Mottram 9 anos atrás
pai
commit
0ef3423afe
3 arquivos alterados com 367 adições e 0 exclusões
  1. 5
    0
      Makefile
  2. BIN
      man/freedombone-controlpanel.1.gz
  3. 362
    0
      src/freedombone-controlpanel

+ 5
- 0
Makefile Ver arquivo

@@ -38,6 +38,8 @@ install:
38 38
 	install -m 755 src/${APP}-mesh ${DESTDIR}${PREFIX}/bin/mesh
39 39
 	install -m 755 src/${APP}-meshweb ${DESTDIR}${PREFIX}/bin
40 40
 	install -m 755 src/${APP}-meshweb ${DESTDIR}${PREFIX}/bin/meshweb
41
+	install -m 755 src/${APP}-controlpanel ${DESTDIR}${PREFIX}/bin
42
+	install -m 755 src/${APP}-controlpanel ${DESTDIR}${PREFIX}/bin/control
41 43
 	mkdir -m 755 -p ${DESTDIR}${PREFIX}/share/man/man1
42 44
 	install -m 644 man/${APP}.1.gz ${DESTDIR}${PREFIX}/share/man/man1
43 45
 	install -m 644 man/${APP}-keydrive.1.gz ${DESTDIR}${PREFIX}/share/man/man1
@@ -63,6 +65,7 @@ install:
63 65
 	install -m 644 man/${APP}-rmxmpp.1.gz ${DESTDIR}${PREFIX}/share/man/man1
64 66
 	install -m 644 man/${APP}-xmpp-pass.1.gz ${DESTDIR}${PREFIX}/share/man/man1
65 67
 	install -m 644 man/${APP}-mesh.1.gz ${DESTDIR}${PREFIX}/share/man/man1
68
+	install -m 644 man/${APP}-controlpanel.1.gz ${DESTDIR}${PREFIX}/share/man/man1
66 69
 uninstall:
67 70
 	rm -f ${PREFIX}/share/man/man1/${APP}.1.gz
68 71
 	rm -f ${PREFIX}/share/man/man1/${APP}-keydrive.1.gz
@@ -88,6 +91,7 @@ uninstall:
88 91
 	rm -f ${PREFIX}/share/man/man1/${APP}-rmxmpp.1.gz
89 92
 	rm -f ${PREFIX}/share/man/man1/${APP}-xmpp-pass.1.gz
90 93
 	rm -f ${PREFIX}/share/man/man1/${APP}-mesh.1.gz
94
+	rm -f ${PREFIX}/share/man/man1/${APP}-controlpanel.1.gz
91 95
 	rm -rf ${PREFIX}/share/${APP}
92 96
 	rm -f ${PREFIX}/bin/${APP}
93 97
 	rm -f ${PREFIX}/bin/zeronetavahi
@@ -116,6 +120,7 @@ uninstall:
116 120
 	rm -f ${PREFIX}/bin/mesh
117 121
 	rm -f ${PREFIX}/bin/${APP}-meshweb
118 122
 	rm -f ${PREFIX}/bin/meshweb
123
+	rm -f ${PREFIX}/bin/${APP}-controlpanel
119 124
 clean:
120 125
 	rm -f \#* \.#* debian/*.substvars debian/*.log
121 126
 	rm -fr deb.* debian/${APP}

BIN
man/freedombone-controlpanel.1.gz Ver arquivo


+ 362
- 0
src/freedombone-controlpanel Ver arquivo

@@ -0,0 +1,362 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Administrator control panel for the Freedombone system
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2015 Bob Mottram <bob@robotics.uk.to>
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU 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 General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU General Public License
29
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
30
+
31
+COMPLETION_FILE=$HOME/freedombone-completed.txt
32
+SELECTED_USERNAME=
33
+
34
+function any_key {
35
+    echo ' '
36
+    read -n1 -r -p "Press any key to continue..." key
37
+}
38
+
39
+function add_user {
40
+    data=$(tempfile 2>/dev/null)
41
+    trap "rm -f $data" 0 1 2 5 15
42
+    dialog --backtitle "Freedombone Control Panel" \
43
+           --title "Add new user" \
44
+           --form "\n" 8 40 3 \
45
+              "Username:" 1 1 "" 1 11 16 15 \
46
+              "ssh public key (optional):" 2 1 "" 3 1 40 10000 \
47
+              2> $data
48
+    sel=$?
49
+    case $sel in
50
+        1) return;;
51
+        255) return;;
52
+    esac
53
+    new_user_username=$(cat $data | sed -n 1p)
54
+    new_user_ssh_public_key=$(cat $data | sed -n 2p)
55
+    if [ ${#new_user_username} -lt 2 ]; then
56
+        dialog --title "New username" --msgbox "No username was given" 6 40
57
+        return
58
+    fi
59
+    if [[ "$new_user_username" == *" "* ]]; then
60
+        dialog --title "Invalid username" --msgbox "The username should not contain any spaces" 6 40
61
+        return
62
+    fi
63
+    if [ ${#new_user_ssh_public_key} -lt 20 ]; then
64
+        clear
65
+        freedombone-adduser "$new_user_username"
66
+        any_key
67
+    else
68
+        if [[ "$new_user_ssh_public_key" == "ssh-"* ]]; then
69
+            clear
70
+            freedombone-adduser "$new_user_username" "$new_user_ssh_public_key"
71
+            any_key
72
+        else
73
+            dialog --title "ssh public key" --msgbox "This does not look like an ssh public key" 6 40
74
+        fi
75
+    fi
76
+}
77
+
78
+function select_user {
79
+    SELECTED_USERNAME=
80
+    data=$(tempfile 2>/dev/null)
81
+    trap "rm -f $data" 0 1 2 5 15
82
+    dialog --title "Select a user" \
83
+           --backtitle "Freedombone Control Panel" \
84
+           --dselect "/home/" 14 40 2> $data
85
+    sel=$?
86
+    case $sel in
87
+        0) SELECTED_USERNAME=$(cat $data | awk -F '/' '{print $3}');;
88
+        1) exit 1;;
89
+        255) exit 1;;
90
+    esac
91
+    if [ ${#SELECTED_USERNAME} -lt 2 ]; then
92
+        SELECTED_USERNAME=
93
+    fi
94
+    if [ ! -d /home/$SELECTED_USERNAME/Maildir ]; then
95
+        dialog --title "User directory check" --msgbox "This does not look like a user directory" 6 40
96
+        SELECTED_USERNAME=
97
+    fi
98
+}
99
+
100
+function delete_user {
101
+    select_user
102
+    if [ ! $SELECTED_USERNAME ]; then
103
+        return
104
+    fi
105
+    if grep -Fxq "Admin user: $SELECTED_USERNAME" $COMPLETION_FILE; then
106
+        dialog --title "Administrator user" --msgbox "You can't delete the administrator user" 6 40
107
+        return
108
+    fi
109
+    clear
110
+    freedombone-rmuser $SELECTED_USERNAME
111
+    any_key
112
+}
113
+
114
+function change_password {
115
+    select_user
116
+    if [ ! $SELECTED_USERNAME ]; then
117
+        return
118
+    fi
119
+    clear
120
+    su -c "passwd" - $SELECTED_USERNAME
121
+    any_key
122
+}
123
+
124
+function add_to_mailing_list {
125
+    select_user
126
+    if [ ! $SELECTED_USERNAME ]; then
127
+        return
128
+    fi
129
+    data=$(tempfile 2>/dev/null)
130
+    trap "rm -f $data" 0 1 2 5 15
131
+    dialog --backtitle "Freedombone Control Panel" \
132
+           --title "Subscribe $SELECTED_USERNAME to a mailing list" \
133
+           --form "\n" 8 68 4 \
134
+              "List folder name:" 1 1 "" 1 35 26 25 \
135
+              "Name between [] on subject line:" 2 1 "" 2 35 26 25 \
136
+              "List email address:" 3 1 "" 3 35 26 25 \
137
+              2> $data
138
+    sel=$?
139
+    case $sel in
140
+        1) return;;
141
+        255) return;;
142
+    esac
143
+    LIST_NAME=$(cat $data | sed -n 1p)
144
+    LIST_SUBJECT=$(cat $data | sed -n 2p)
145
+    LIST_EMAIL=$(cat $data | sed -n 3p)
146
+
147
+    if [ ${#LIST_NAME} -lt 2 ]; then
148
+        dialog --title "Add mailing list" --msgbox "No mailing list name was given" 6 40
149
+        return
150
+    fi
151
+    if [ ${#LIST_SUBJECT} -lt 2 ]; then
152
+        dialog --title "Add mailing list" --msgbox "No mailing list subject was given" 6 40
153
+        return
154
+    fi
155
+    if [ ${#LIST_EMAIL} -lt 2 ]; then
156
+        dialog --title "Add mailing list" --msgbox "No mailing list email address was given" 6 40
157
+        return
158
+    fi
159
+    if [[ "$LIST_EMAIL" != *"@"* || "$LIST_EMAIL" != *"."* ]]; then
160
+        dialog --title "Add mailing list" --msgbox "Unrecognised email address" 6 40
161
+        return
162
+    fi
163
+
164
+    freedombone-addlist -u $SELECTED_USERNAME -l "$LIST_NAME" -s "$LIST_SUBJECT" -e "$LIST_EMAIL"
165
+    dialog --title "Add mailing list" --msgbox "$LIST_NAME list was added" 6 40
166
+}
167
+
168
+function email_rule {
169
+    select_user
170
+    if [ ! $SELECTED_USERNAME ]; then
171
+        return
172
+    fi
173
+    data=$(tempfile 2>/dev/null)
174
+    trap "rm -f $data" 0 1 2 5 15
175
+    dialog --backtitle "Freedombone Control Panel" \
176
+           --title "Email rule for user $SELECTED_USERNAME" \
177
+           --form "\n" 8 65 3 \
178
+              "When email arrives from address:" 1 1 "" 1 35 24 28 \
179
+              "Move to folder:" 2 1 "" 2 35 24 28 \
180
+              2> $data
181
+    sel=$?
182
+    case $sel in
183
+        1) return;;
184
+        255) return;;
185
+    esac
186
+    RULE_EMAIL=$(cat $data | sed -n 1p)
187
+    RULE_FOLDER=$(cat $data | sed -n 2p)
188
+
189
+    if [ ${#RULE_EMAIL} -lt 2 ]; then
190
+        dialog --title "Add email rule" --msgbox "No email address was given" 6 40
191
+        return
192
+    fi
193
+    if [ ${#RULE_FOLDER} -lt 2 ]; then
194
+        dialog --title "Add email rule" --msgbox "No folder name was given" 6 40
195
+        return
196
+    fi
197
+    if [[ "$RULE_EMAIL" != *"@"* || "$RULE_EMAIL" != *"."* ]]; then
198
+        dialog --title "Add email rule" --msgbox "Unrecognised email address" 6 40
199
+        return
200
+    fi
201
+
202
+    freedombone-addemail -u $SELECTED_USERNAME -e "$RULE_EMAIL" -g "$RULE_FOLDER"
203
+    dialog --title "Add email rule" --msgbox "Email rule for $RULE_EMAIL was added" 6 40
204
+}
205
+
206
+function block_unblock_email {
207
+    select_user
208
+    if [ ! $SELECTED_USERNAME ]; then
209
+        return
210
+    fi
211
+    data=$(tempfile 2>/dev/null)
212
+    trap "rm -f $data" 0 1 2 5 15
213
+    dialog --backtitle "Freedombone Control Panel" \
214
+           --title "Block/Unblock email going to $SELECTED_USERNAME" \
215
+           --form "\n" 8 65 3 \
216
+              "When email arrives from address:" 1 1 "" 1 35 24 28 \
217
+              "Block it:" 2 1 "yes" 2 35 4 4 \
218
+              2> $data
219
+    sel=$?
220
+    case $sel in
221
+        1) return;;
222
+        255) return;;
223
+    esac
224
+    BLOCK_EMAIL=$(cat $data | sed -n 1p)
225
+    BLOCK=$(cat $data | sed -n 2p)
226
+    if [ ${#BLOCK_EMAIL} -lt 2 ]; then
227
+        dialog --title "Block/Unblock an email" --msgbox "No email address was given" 6 40
228
+        return
229
+    fi
230
+    if [[ "$BLOCK_EMAIL" != *"@"* || "$BLOCK_EMAIL" != *"."* ]]; then
231
+        dialog --title "Block/Unblock an email" --msgbox "Unrecognised email address" 6 40
232
+        return
233
+    fi
234
+    if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then
235
+        freedombone-ignore -u $SELECTED_USERNAME -e "$BLOCK_EMAIL"
236
+        dialog --title "Block an email" --msgbox "Email from $BLOCK_EMAIL to $SELECTED_USERNAME blocked" 6 40
237
+    else
238
+        freedombone-unignore -u $SELECTED_USERNAME -e "$BLOCK_EMAIL"
239
+        dialog --title "Unblock an email" --msgbox "Email from $BLOCK_EMAIL to $SELECTED_USERNAME unblocked" 6 40
240
+    fi
241
+}
242
+
243
+function block_unblock_subject {
244
+    select_user
245
+    if [ ! $SELECTED_USERNAME ]; then
246
+        return
247
+    fi
248
+    data=$(tempfile 2>/dev/null)
249
+    trap "rm -f $data" 0 1 2 5 15
250
+    dialog --backtitle "Freedombone Control Panel" \
251
+           --title "Block/Unblock email going to $SELECTED_USERNAME" \
252
+           --form "\n" 8 70 3 \
253
+              "When email arrives with subject text:" 1 1 "" 1 40 24 28 \
254
+              "Block it:" 2 1 "yes" 2 40 4 4 \
255
+              2> $data
256
+    sel=$?
257
+    case $sel in
258
+        1) return;;
259
+        255) return;;
260
+    esac
261
+    BLOCK_SUBJECT=$(cat $data | sed -n 1p)
262
+    BLOCK=$(cat $data | sed -n 2p)
263
+    if [ ${#BLOCK_SUBJECT} -lt 2 ]; then
264
+        dialog --title "Block/Unblock an email" --msgbox "No subject was given" 6 40
265
+        return
266
+    fi
267
+    if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then
268
+        freedombone-ignore -u $SELECTED_USERNAME -t "$BLOCK_SUBJECT"
269
+        dialog --title "Block an email" --msgbox "Email with subject $BLOCK_SUBJECT to $SELECTED_USERNAME blocked" 6 40
270
+    else
271
+        freedombone-unignore -u $SELECTED_USERNAME -t "$BLOCK_SUBJECT"
272
+        dialog --title "Unblock an email" --msgbox "Email with subject $BLOCK_SUBJECT to $SELECTED_USERNAME unblocked" 6 40
273
+    fi
274
+}
275
+
276
+function create_keydrive_master {
277
+    select_user
278
+    if [ ! $SELECTED_USERNAME ]; then
279
+        return
280
+    fi
281
+    dialog --title "USB Master Keydrive" --msgbox "Plug in a LUKS encrypted USB drive" 6 40
282
+    clear
283
+    freedombone-keydrive -u $SELECTED_USERNAME --master 'yes'
284
+    any_key
285
+}
286
+
287
+function create_keydrive_fragment {
288
+    select_user
289
+    if [ ! $SELECTED_USERNAME ]; then
290
+        return
291
+    fi
292
+    dialog --title "USB Fragment Keydrive" --msgbox "Plug in a LUKS encrypted USB drive" 6 40
293
+    clear
294
+    freedombone-keydrive -u $SELECTED_USERNAME
295
+    any_key
296
+}
297
+
298
+function backup_data {
299
+    dialog --title "Backup data to USB" --msgbox "Plug in a LUKS encrypted USB drive" 6 40
300
+    clear
301
+    backup
302
+    any_key
303
+}
304
+
305
+function restore_data {
306
+    dialog --title "Restore data from USB" --msgbox "Plug in your backup USB drive" 6 40
307
+    clear
308
+    restore
309
+    any_key
310
+}
311
+
312
+function menu_top_level {
313
+    while true
314
+    do
315
+        data=$(tempfile 2>/dev/null)
316
+        trap "rm -f $data" 0 1 2 5 15
317
+        dialog --backtitle "Freedombone Control Panel" \
318
+               --title "Control Panel" \
319
+               --radiolist "Choose an operation:" 20 70 13 \
320
+               1 "Backup data to USB drive" off \
321
+               2 "Restore data from USB drive" off \
322
+               3 "Add a user" off \
323
+               4 "Delete a user" off \
324
+               5 "Change user password or ssh public key" off \
325
+               6 "Add a user to a mailing list" off \
326
+               7 "Add an email rule" off \
327
+               8 "Block/Unblock an email address" off \
328
+               9 "Block/Unblock email with subject text" off \
329
+               10 "Change security settings" off \
330
+               11 "Backup GPG key to USB drive (master keydrive)" off \
331
+               12 "Backup GPG key to USB drive (fragment keydrive)" off \
332
+               13 "Exit" on 2> $data
333
+        sel=$?
334
+        case $sel in
335
+            1) exit 1;;
336
+            255) exit 1;;
337
+        esac
338
+        case $(cat $data) in
339
+            1) backup_data;;
340
+            2) restore_data;;
341
+            3) add_user;;
342
+            4) delete_user;;
343
+            5) change_password;;
344
+            6) add_to_mailing_list;;
345
+            7) email_rule;;
346
+            8) block_unblock_email;;
347
+            9) block_unblock_subject;;
348
+            10) freedombone-sec;;
349
+            11) create_keydrive_master;;
350
+            12) create_keydrive_fragment;;
351
+            13) break;;
352
+        esac
353
+    done
354
+}
355
+
356
+if [ ! -f $COMPLETION_FILE ]; then
357
+    echo 'This command should only be run on an installed Freedombone system'
358
+    exit 1
359
+fi
360
+
361
+menu_top_level
362
+exit 0