freedombone-controlpanel 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683
  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. COMPLETION_FILE=$HOME/freedombone-completed.txt
  31. SELECTED_USERNAME=
  32. SIP_CONFIG_FILE=/etc/sipwitch.conf
  33. ADMIN_USER=
  34. function any_key {
  35. echo ' '
  36. read -n1 -r -p "Press any key to continue..." key
  37. }
  38. function add_user {
  39. data=$(tempfile 2>/dev/null)
  40. trap "rm -f $data" 0 1 2 5 15
  41. dialog --backtitle "Freedombone Control Panel" \
  42. --title "Add new user" \
  43. --form "\n" 8 40 3 \
  44. "Username:" 1 1 "" 1 11 16 15 \
  45. "ssh public key (optional):" 2 1 "" 3 1 40 10000 \
  46. 2> $data
  47. sel=$?
  48. case $sel in
  49. 1) return;;
  50. 255) return;;
  51. esac
  52. new_user_username=$(cat $data | sed -n 1p)
  53. new_user_ssh_public_key=$(cat $data | sed -n 2p)
  54. if [ ${#new_user_username} -lt 2 ]; then
  55. dialog --title "New username" \
  56. --msgbox "No username was given" 6 40
  57. return
  58. fi
  59. if [[ "$new_user_username" == *" "* ]]; then
  60. dialog --title "Invalid username" \
  61. --msgbox "The username should not contain any spaces" 6 40
  62. return
  63. fi
  64. if [ ${#new_user_ssh_public_key} -lt 20 ]; then
  65. clear
  66. freedombone-adduser "$new_user_username"
  67. any_key
  68. else
  69. if [[ "$new_user_ssh_public_key" == "ssh-"* ]]; then
  70. clear
  71. freedombone-adduser "$new_user_username" "$new_user_ssh_public_key"
  72. any_key
  73. else
  74. dialog --title "ssh public key" \
  75. --msgbox "This does not look like an ssh public key" 6 40
  76. fi
  77. fi
  78. }
  79. function show_sip_extensions {
  80. if [ ! -f $SIP_CONFIG_FILE ]; then
  81. return;
  82. fi
  83. clear
  84. echo "SIP phone extensions:"
  85. echo " "
  86. while read ext; do
  87. if [[ $ext == *"user id"* ]]; then
  88. echo -n " "
  89. echo -n $(echo "$ext" | awk -F '"' '{print $2}' | awk -F '"' '{print $1}')
  90. echo -n " "
  91. fi
  92. if [[ $ext == *"extension"* ]]; then
  93. echo $(echo "$ext" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}')
  94. fi
  95. done < $SIP_CONFIG_FILE
  96. any_key
  97. }
  98. function select_user {
  99. SELECTED_USERNAME=
  100. data=$(tempfile 2>/dev/null)
  101. trap "rm -f $data" 0 1 2 5 15
  102. dialog --title "Select a user" \
  103. --backtitle "Freedombone Control Panel" \
  104. --dselect "/home/" 14 40 2> $data
  105. sel=$?
  106. case $sel in
  107. 0) SELECTED_USERNAME=$(cat $data | awk -F '/' '{print $3}');;
  108. 1) return;;
  109. 255) return;;
  110. esac
  111. if [ ${#SELECTED_USERNAME} -lt 2 ]; then
  112. SELECTED_USERNAME=
  113. fi
  114. if [ ! -d /home/$SELECTED_USERNAME/Maildir ]; then
  115. dialog --title "User directory check" \
  116. --msgbox "This does not look like a user directory" 6 40
  117. SELECTED_USERNAME=
  118. fi
  119. }
  120. function delete_user {
  121. select_user
  122. if [ ! $SELECTED_USERNAME ]; then
  123. return
  124. fi
  125. if grep -Fxq "Admin user:$SELECTED_USERNAME" $COMPLETION_FILE; then
  126. dialog --title "Administrator user" \
  127. --msgbox "You can't delete the administrator user" 6 40
  128. return
  129. fi
  130. clear
  131. freedombone-rmuser $SELECTED_USERNAME
  132. any_key
  133. }
  134. function configure_remote_backups {
  135. if ! grep -Fxq "Admin user:$SELECTED_USERNAME" $COMPLETION_FILE; then
  136. dialog --title "Administrator user" \
  137. --msgbox "No Administrator user found. Check $COMPLETION_FILE" 6 40
  138. return
  139. fi
  140. if [ ${#ADMIN} -lt 2 ]; then
  141. dialog --title "Administrator user" \
  142. --msgbox "Username not found" 6 40
  143. return
  144. fi
  145. if [ ! -d /home/$ADMIN_USER ]; then
  146. dialog --title "Administrator user" \
  147. --msgbox "Home directory not found" 6 40
  148. return
  149. fi
  150. freedombone-remote -u $ADMIN_USER
  151. }
  152. function change_password {
  153. select_user
  154. if [ ! $SELECTED_USERNAME ]; then
  155. return
  156. fi
  157. clear
  158. echo "Change password for $SELECTED_USERNAME"
  159. echo ""
  160. su -c "passwd" - $SELECTED_USERNAME
  161. any_key
  162. }
  163. function change_ssh_public_key {
  164. select_user
  165. if [ ! $SELECTED_USERNAME ]; then
  166. return
  167. fi
  168. if grep -Fxq "Admin user:$SELECTED_USERNAME" $COMPLETION_FILE; then
  169. dialog --title "Change ssh public key" \
  170. --backtitle "Freedombone Control Panel" \
  171. --defaultno \
  172. --yesno "\nThis is the administrator user.\n\nAre you sure you want to change the ssh public key for the administrator?" 10 60
  173. sel=$?
  174. case $sel in
  175. 1) return;;
  176. 255) return;;
  177. esac
  178. fi
  179. data=$(tempfile 2>/dev/null)
  180. trap "rm -f $data" 0 1 2 5 15
  181. dialog --title "Change ssh public key for $SELECTED_USERNAME" \
  182. --backtitle "Freedombone Control Panel" \
  183. --inputbox "Paste the ssh public key below" 8 60 2>$data
  184. sel=$?
  185. case $sel in
  186. 0)
  187. SSH_PUBLIC_KEY=$(<$data)
  188. if [ "$SSH_PUBLIC_KEY" ]; then
  189. if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then
  190. if [ -f "$SSH_PUBLIC_KEY" ]; then
  191. if [ ! -d /home/$SELECTED_USERNAME/.ssh ]; then
  192. mkdir /home/$SELECTED_USERNAME/.ssh
  193. fi
  194. cp $SSH_PUBLIC_KEY \
  195. /home/$SELECTED_USERNAME/.ssh/authorized_keys
  196. chown -R $SELECTED_USERNAME:$SELECTED_USERNAME \
  197. /home/$SELECTED_USERNAME/.ssh
  198. dialog --title "Change ssh public key" \
  199. --msgbox "ssh public key was installed" 6 40
  200. else
  201. if [[ "$SSH_PUBLIC_KEY" == "ssh-"* ]]; then
  202. if [ ! -d /home/$SELECTED_USERNAME/.ssh ]; then
  203. mkdir /home/$SELECTED_USERNAME/.ssh
  204. fi
  205. echo "$SSH_PUBLIC_KEY" > \
  206. /home/$SELECTED_USERNAME/.ssh/authorized_keys
  207. chown -R $SELECTED_USERNAME:$SELECTED_USERNAME \
  208. /home/$SELECTED_USERNAME/.ssh
  209. dialog --title "Change ssh public key" \
  210. --msgbox "ssh public key was installed" 6 40
  211. fi
  212. fi
  213. fi
  214. fi
  215. ;;
  216. esac
  217. }
  218. function add_to_mailing_list {
  219. select_user
  220. if [ ! $SELECTED_USERNAME ]; then
  221. return
  222. fi
  223. data=$(tempfile 2>/dev/null)
  224. trap "rm -f $data" 0 1 2 5 15
  225. dialog --backtitle "Freedombone Control Panel" \
  226. --title "Subscribe $SELECTED_USERNAME to a mailing list" \
  227. --form "\n" 8 68 4 \
  228. "List folder name:" 1 1 "" 1 35 26 25 \
  229. "Name between [] on subject line:" 2 1 "" 2 35 26 25 \
  230. "List email address:" 3 1 "" 3 35 26 25 \
  231. 2> $data
  232. sel=$?
  233. case $sel in
  234. 1) return;;
  235. 255) return;;
  236. esac
  237. LIST_NAME=$(cat $data | sed -n 1p)
  238. LIST_SUBJECT=$(cat $data | sed -n 2p)
  239. LIST_EMAIL=$(cat $data | sed -n 3p)
  240. if [ ${#LIST_NAME} -lt 2 ]; then
  241. dialog --title "Add mailing list" \
  242. --msgbox "No mailing list name was given" 6 40
  243. return
  244. fi
  245. if [ ${#LIST_SUBJECT} -lt 2 ]; then
  246. dialog --title "Add mailing list" \
  247. --msgbox "No mailing list subject was given" 6 40
  248. return
  249. fi
  250. if [ ${#LIST_EMAIL} -lt 2 ]; then
  251. dialog --title "Add mailing list" \
  252. --msgbox "No mailing list email address was given" 6 40
  253. return
  254. fi
  255. if [[ "$LIST_EMAIL" != *"@"* || "$LIST_EMAIL" != *"."* ]]; then
  256. dialog --title "Add mailing list" \
  257. --msgbox "Unrecognised email address" 6 40
  258. return
  259. fi
  260. freedombone-addlist -u $SELECTED_USERNAME -l "$LIST_NAME" \
  261. -s "$LIST_SUBJECT" -e "$LIST_EMAIL"
  262. dialog --title "Add mailing list" \
  263. --msgbox "$LIST_NAME list was added" 6 40
  264. }
  265. function email_rule {
  266. select_user
  267. if [ ! $SELECTED_USERNAME ]; then
  268. return
  269. fi
  270. data=$(tempfile 2>/dev/null)
  271. trap "rm -f $data" 0 1 2 5 15
  272. dialog --backtitle "Freedombone Control Panel" \
  273. --title "Email rule for user $SELECTED_USERNAME" \
  274. --form "\n" 8 65 3 \
  275. "When email arrives from address:" 1 1 "" 1 35 24 28 \
  276. "Move to folder:" 2 1 "" 2 35 24 28 \
  277. 2> $data
  278. sel=$?
  279. case $sel in
  280. 1) return;;
  281. 255) return;;
  282. esac
  283. RULE_EMAIL=$(cat $data | sed -n 1p)
  284. RULE_FOLDER=$(cat $data | sed -n 2p)
  285. if [ ${#RULE_EMAIL} -lt 2 ]; then
  286. dialog --title "Add email rule" \
  287. --msgbox "No email address was given" 6 40
  288. return
  289. fi
  290. if [ ${#RULE_FOLDER} -lt 2 ]; then
  291. dialog --title "Add email rule" \
  292. --msgbox "No folder name was given" 6 40
  293. return
  294. fi
  295. if [[ "$RULE_EMAIL" != *"@"* || "$RULE_EMAIL" != *"."* ]]; then
  296. dialog --title "Add email rule" \
  297. --msgbox "Unrecognised email address" 6 40
  298. return
  299. fi
  300. freedombone-addemail -u $SELECTED_USERNAME -e "$RULE_EMAIL" \
  301. -g "$RULE_FOLDER"
  302. dialog --title "Add email rule" \
  303. --msgbox "Email rule for $RULE_EMAIL was added" 6 40
  304. }
  305. function block_unblock_email {
  306. select_user
  307. if [ ! $SELECTED_USERNAME ]; then
  308. return
  309. fi
  310. data=$(tempfile 2>/dev/null)
  311. trap "rm -f $data" 0 1 2 5 15
  312. dialog --backtitle "Freedombone Control Panel" \
  313. --title "Block/Unblock email going to $SELECTED_USERNAME" \
  314. --form "\n" 8 65 3 \
  315. "When email arrives from address:" 1 1 "" 1 35 24 28 \
  316. "Block it:" 2 1 "yes" 2 35 4 4 \
  317. 2> $data
  318. sel=$?
  319. case $sel in
  320. 1) return;;
  321. 255) return;;
  322. esac
  323. BLOCK_EMAIL=$(cat $data | sed -n 1p)
  324. BLOCK=$(cat $data | sed -n 2p)
  325. if [ ${#BLOCK_EMAIL} -lt 2 ]; then
  326. dialog --title "Block/Unblock an email" \
  327. --msgbox "No email address was given" 6 40
  328. return
  329. fi
  330. if [[ "$BLOCK_EMAIL" != *"@"* || "$BLOCK_EMAIL" != *"."* ]]; then
  331. dialog --title "Block/Unblock an email" \
  332. --msgbox "Unrecognised email address" 6 40
  333. return
  334. fi
  335. if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then
  336. freedombone-ignore -u $SELECTED_USERNAME -e "$BLOCK_EMAIL"
  337. dialog --title "Block an email" \
  338. --msgbox "Email from $BLOCK_EMAIL to $SELECTED_USERNAME blocked" 6 40
  339. else
  340. freedombone-unignore -u $SELECTED_USERNAME -e "$BLOCK_EMAIL"
  341. dialog --title "Unblock an email" \
  342. --msgbox "Email from $BLOCK_EMAIL to $SELECTED_USERNAME unblocked" 6 40
  343. fi
  344. }
  345. function block_unblock_subject {
  346. select_user
  347. if [ ! $SELECTED_USERNAME ]; then
  348. return
  349. fi
  350. data=$(tempfile 2>/dev/null)
  351. trap "rm -f $data" 0 1 2 5 15
  352. dialog --backtitle "Freedombone Control Panel" \
  353. --title "Block/Unblock email going to $SELECTED_USERNAME" \
  354. --form "\n" 8 70 3 \
  355. "When email arrives with subject text:" 1 1 "" 1 40 24 28 \
  356. "Block it:" 2 1 "yes" 2 40 4 4 \
  357. 2> $data
  358. sel=$?
  359. case $sel in
  360. 1) return;;
  361. 255) return;;
  362. esac
  363. BLOCK_SUBJECT=$(cat $data | sed -n 1p)
  364. BLOCK=$(cat $data | sed -n 2p)
  365. if [ ${#BLOCK_SUBJECT} -lt 2 ]; then
  366. dialog --title "Block/Unblock an email" \
  367. --msgbox "No subject was given" 6 40
  368. return
  369. fi
  370. if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then
  371. freedombone-ignore -u $SELECTED_USERNAME -t "$BLOCK_SUBJECT"
  372. dialog --title "Block an email" \
  373. --msgbox "Email with subject $BLOCK_SUBJECT to $SELECTED_USERNAME blocked" 6 40
  374. else
  375. freedombone-unignore -u $SELECTED_USERNAME -t "$BLOCK_SUBJECT"
  376. dialog --title "Unblock an email" \
  377. --msgbox "Email with subject $BLOCK_SUBJECT to $SELECTED_USERNAME unblocked" 6 40
  378. fi
  379. }
  380. function create_keydrive_master {
  381. select_user
  382. if [ ! $SELECTED_USERNAME ]; then
  383. return
  384. fi
  385. dialog --title "USB Master Keydrive" \
  386. --msgbox "Plug in a LUKS encrypted USB drive" 6 40
  387. clear
  388. freedombone-keydrive -u $SELECTED_USERNAME --master 'yes'
  389. any_key
  390. }
  391. function create_keydrive_fragment {
  392. select_user
  393. if [ ! $SELECTED_USERNAME ]; then
  394. return
  395. fi
  396. dialog --title "USB Fragment Keydrive" \
  397. --msgbox "Plug in a LUKS encrypted USB drive" 6 40
  398. clear
  399. freedombone-keydrive -u $SELECTED_USERNAME
  400. any_key
  401. }
  402. function backup_data {
  403. dialog --title "Backup data to USB" \
  404. --msgbox "Plug in a LUKS encrypted USB drive" 6 40
  405. clear
  406. backup
  407. any_key
  408. }
  409. function restore_data {
  410. dialog --title "Restore data from USB" \
  411. --msgbox "Plug in your backup USB drive" 6 40
  412. clear
  413. restore
  414. any_key
  415. }
  416. function restore_data_remote {
  417. if [ ! $ADMIN_USER ]; then
  418. dialog --title "Restore data from remote server" \
  419. --msgbox "Unknown admin user" 6 40
  420. return
  421. fi
  422. data=$(tempfile 2>/dev/null)
  423. trap "rm -f $data" 0 1 2 5 15
  424. dialog --title "Restore from remote server" \
  425. --backtitle "Freedombone Control Panel" \
  426. --inputbox "Enter the domain name of the server from which you wish to restore" 8 60 2>$data
  427. sel=$?
  428. case $sel in
  429. 0)
  430. friend_server_domain_name=$(<$data)
  431. if [ ${#friend_server_domain_name} -lt 2 ]; then
  432. return
  433. fi
  434. if [[ $friend_server_domain_name != *"."* ]]; then
  435. dialog --title "Remote server domain name" \
  436. --msgbox "Invalid domain name" 6 40
  437. return
  438. fi
  439. restorefromfriend $friend_server_domain_name
  440. any_key
  441. ;;
  442. esac
  443. }
  444. function logging_on_off {
  445. dialog --title "Logging" \
  446. --backtitle "Freedombone Control Panel" \
  447. --yesno "\nDo you want to turn logging on?" 7 60
  448. sel=$?
  449. case $sel in
  450. 0) freedombone-logging on;;
  451. 1) freedombone-logging off;;
  452. 255) return;;
  453. esac
  454. }
  455. function restore_gpg_key {
  456. select_user
  457. if [ ! $SELECTED_USERNAME ]; then
  458. return
  459. fi
  460. dialog --title "Restore GPG key for user $SELECTED_USERNAME" \
  461. --msgbox "Plug in your USB keydrive" 6 40
  462. clear
  463. freedombone-recoverkey -u $SELECTED_USERNAME
  464. any_key
  465. }
  466. function security_settings {
  467. freedombone-sec
  468. any_key
  469. }
  470. function reset_tripwire {
  471. clear
  472. echo 'Resetting the Tripwire...'
  473. echo ' '
  474. echo '
  475. ' | reset-tripwire
  476. any_key
  477. }
  478. function hubzilla_channel_directory_server {
  479. if ! grep -q "Hubzilla domain" $COMPLETION_FILE; then
  480. dialog --title "Hubzilla channel directory server" \
  481. --msgbox "Hubzilla is not installed on this system" 6 40
  482. return
  483. fi
  484. HUBZILLA_DOMAIN_NAME=$(cat $COMPLETION_FILE | grep "Hubzilla domain" | awk -F ':' '{print $2}')
  485. if [ ! -d /var/www/$HUBZILLA_DOMAIN_NAME ]; then
  486. dialog --title "Hubzilla channel directory server" \
  487. --msgbox "Hubzilla install directory not found" 6 40
  488. return
  489. fi
  490. data=$(tempfile 2>/dev/null)
  491. trap "rm -f $data" 0 1 2 5 15
  492. dialog --title "Hubzilla channel directory server" \
  493. --backtitle "Freedombone Control Panel" \
  494. --inputbox "When you click on 'channel directory' this is where Hubzilla will obtain its list from" 8 60 2>$data
  495. sel=$?
  496. case $sel in
  497. 0)
  498. hubzilla_domain_server=$(<$data)
  499. if [[ $hubzilla_domain_server != *"."* ]]; then
  500. return
  501. fi
  502. if [[ $hubzilla_domain_server != "https"* ]]; then
  503. dialog --title "Hubzilla channel directory server" \
  504. --msgbox "Invalid domain - include the https://" 6 40
  505. return
  506. fi
  507. ./var/www/$HUBZILLA_DOMAIN_NAME/htdocs/util/config system directory_server $hubzilla_domain_server
  508. dialog --title "Hubzilla channel directory server" \
  509. --msgbox "Domain channel directory server changed to $hubzilla_domain_server" 6 40
  510. ;;
  511. esac
  512. }
  513. function menu_backup_restore {
  514. while true
  515. do
  516. data=$(tempfile 2>/dev/null)
  517. trap "rm -f $data" 0 1 2 5 15
  518. dialog --backtitle "Freedombone Control Panel" \
  519. --title "Backup and Restore" \
  520. --radiolist "Choose an operation:" 15 70 8 \
  521. 1 "Backup data to USB drive" off \
  522. 2 "Restore GPG key from USB keydrive" off \
  523. 3 "Restore data from USB drive" off \
  524. 4 "Configure remote backups" off \
  525. 5 "Restore from remote backup" off \
  526. 6 "Backup GPG key to USB (master keydrive)" off \
  527. 7 "Backup GPG key to USB (fragment keydrive)" off \
  528. 8 "Back to main menu" on 2> $data
  529. sel=$?
  530. case $sel in
  531. 1) break;;
  532. 255) break;;
  533. esac
  534. case $(cat $data) in
  535. 1) backup_data;;
  536. 2) restore_gpg_key;;
  537. 3) restore_data;;
  538. 4) configure_remote_backups;;
  539. 5) restore_data_remote;;
  540. 6) create_keydrive_master;;
  541. 7) create_keydrive_fragment;;
  542. 8) break;;
  543. esac
  544. done
  545. }
  546. function menu_email {
  547. while true
  548. do
  549. data=$(tempfile 2>/dev/null)
  550. trap "rm -f $data" 0 1 2 5 15
  551. dialog --backtitle "Freedombone Control Panel" \
  552. --title "Email Filtering Rules" \
  553. --radiolist "Choose an operation:" 12 70 5 \
  554. 1 "Add a user to a mailing list" off \
  555. 2 "Add an email rule" off \
  556. 3 "Block/Unblock an email address" off \
  557. 4 "Block/Unblock email with subject text" off \
  558. 5 "Back to main menu" on 2> $data
  559. sel=$?
  560. case $sel in
  561. 1) break;;
  562. 255) break;;
  563. esac
  564. case $(cat $data) in
  565. 1) add_to_mailing_list;;
  566. 2) email_rule;;
  567. 3) block_unblock_email;;
  568. 4) block_unblock_subject;;
  569. 5) break;;
  570. esac
  571. done
  572. }
  573. function menu_users {
  574. while true
  575. do
  576. data=$(tempfile 2>/dev/null)
  577. trap "rm -f $data" 0 1 2 5 15
  578. dialog --backtitle "Freedombone Control Panel" \
  579. --title "Manage Users" \
  580. --radiolist "Choose an operation:" 12 70 5 \
  581. 1 "Add a user" off \
  582. 2 "Delete a user" off \
  583. 3 "Change user password" off \
  584. 4 "Change user ssh public key" off \
  585. 5 "Back to main menu" on 2> $data
  586. sel=$?
  587. case $sel in
  588. 1) break;;
  589. 255) break;;
  590. esac
  591. case $(cat $data) in
  592. 1) add_user;;
  593. 2) delete_user;;
  594. 3) change_password;;
  595. 4) change_ssh_public_key;;
  596. 5) break;;
  597. esac
  598. done
  599. }
  600. function menu_top_level {
  601. while true
  602. do
  603. data=$(tempfile 2>/dev/null)
  604. trap "rm -f $data" 0 1 2 5 15
  605. dialog --backtitle "Freedombone Control Panel" \
  606. --title "Control Panel" \
  607. --radiolist "Choose an operation:" 16 70 9 \
  608. 1 "Backup and Restore" off \
  609. 2 "Show SIP Phone Extensions" off \
  610. 3 "Reset Tripwire" off \
  611. 4 "Logging on/off" off \
  612. 5 "Manage Users" off \
  613. 6 "Email Filtering Rules" off \
  614. 7 "Security Settings" off \
  615. 8 "Set Hubzilla channel directory server" off \
  616. 9 "Exit" on 2> $data
  617. sel=$?
  618. case $sel in
  619. 1) exit 1;;
  620. 255) exit 1;;
  621. esac
  622. case $(cat $data) in
  623. 1) menu_backup_restore;;
  624. 2) show_sip_extensions;;
  625. 3) reset_tripwire;;
  626. 4) logging_on_off;;
  627. 5) menu_users;;
  628. 6) menu_email;;
  629. 7) security_settings;;
  630. 8) hubzilla_channel_directory_server;;
  631. 9) break;;
  632. esac
  633. done
  634. }
  635. if [ ! -f $COMPLETION_FILE ]; then
  636. echo 'This command should only be run on an installed Freedombone system'
  637. exit 1
  638. fi
  639. ADMIN_USER=$(cat $COMPLETION_FILE | grep "Admin user" | awk -F ':' '{print $2}')
  640. menu_top_level
  641. clear
  642. cat /etc/motd
  643. exit 0