freedombone/src/freedombone-controlpanel

850 lines
26 KiB
Plaintext
Raw Normal View History

2015-10-31 21:14:23 +01:00
#!/bin/bash
#
# .---. . .
# | | |
# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
# ' ' --' --' -' - -' ' ' -' -' -' ' - --'
#
# Freedom in the Cloud
#
# Administrator control panel for the Freedombone system
#
# License
# =======
#
# Copyright (C) 2015 Bob Mottram <bob@robotics.uk.to>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
COMPLETION_FILE=$HOME/freedombone-completed.txt
SELECTED_USERNAME=
2015-11-02 17:28:18 +01:00
SIP_CONFIG_FILE=/etc/sipwitch.conf
2015-11-03 17:06:19 +01:00
ADMIN_USER=
2015-11-26 11:53:54 +01:00
UPGRADE_SCRIPT_NAME="freedombone-upgrade"
2015-10-31 21:14:23 +01:00
function any_key {
echo ' '
read -n1 -r -p "Press any key to continue..." key
}
2015-11-26 11:53:54 +01:00
function check_for_updates {
if [ ! -f /etc/cron.weekly/$UPGRADE_SCRIPT_NAME ]; then
dialog --title "Check for updates" \
--msgbox "Upgrade script was not found" 6 40
return
fi
clear
2015-11-26 11:55:16 +01:00
. /etc/cron.weekly/$UPGRADE_SCRIPT_NAME
2015-11-26 11:53:54 +01:00
any_key
}
2015-10-31 21:14:23 +01:00
function add_user {
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Add new user" \
--form "\n" 8 40 3 \
"Username:" 1 1 "" 1 11 16 15 \
"ssh public key (optional):" 2 1 "" 3 1 40 10000 \
2> $data
sel=$?
case $sel in
1) return;;
255) return;;
esac
new_user_username=$(cat $data | sed -n 1p)
new_user_ssh_public_key=$(cat $data | sed -n 2p)
if [ ${#new_user_username} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "New username" \
--msgbox "No username was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [[ "$new_user_username" == *" "* ]]; then
2015-11-01 11:08:36 +01:00
dialog --title "Invalid username" \
--msgbox "The username should not contain any spaces" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [ ${#new_user_ssh_public_key} -lt 20 ]; then
clear
freedombone-adduser "$new_user_username"
any_key
else
if [[ "$new_user_ssh_public_key" == "ssh-"* ]]; then
clear
freedombone-adduser "$new_user_username" "$new_user_ssh_public_key"
any_key
else
2015-11-01 11:08:36 +01:00
dialog --title "ssh public key" \
--msgbox "This does not look like an ssh public key" 6 40
2015-10-31 21:14:23 +01:00
fi
fi
}
2015-11-02 17:28:18 +01:00
function show_sip_extensions {
if [ ! -f $SIP_CONFIG_FILE ]; then
return;
fi
clear
echo "SIP phone extensions:"
echo " "
while read ext; do
if [[ $ext == *"user id"* ]]; then
echo -n " "
echo -n $(echo "$ext" | awk -F '"' '{print $2}' | awk -F '"' '{print $1}')
echo -n " "
fi
if [[ $ext == *"extension"* ]]; then
echo $(echo "$ext" | awk -F '>' '{print $2}' | awk -F '<' '{print $1}')
fi
done < $SIP_CONFIG_FILE
any_key
2015-11-02 17:28:18 +01:00
}
2015-10-31 21:14:23 +01:00
function select_user {
SELECTED_USERNAME=
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title "Select a user" \
--backtitle "Freedombone Control Panel" \
--dselect "/home/" 14 40 2> $data
sel=$?
case $sel in
0) SELECTED_USERNAME=$(cat $data | awk -F '/' '{print $3}');;
2015-11-01 11:56:33 +01:00
1) return;;
255) return;;
2015-10-31 21:14:23 +01:00
esac
if [ ${#SELECTED_USERNAME} -lt 2 ]; then
SELECTED_USERNAME=
fi
if [ ! -d /home/$SELECTED_USERNAME/Maildir ]; then
2015-11-01 11:08:36 +01:00
dialog --title "User directory check" \
--msgbox "This does not look like a user directory" 6 40
2015-10-31 21:14:23 +01:00
SELECTED_USERNAME=
fi
}
function delete_user {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
if grep -Fxq "Admin user:$SELECTED_USERNAME" $COMPLETION_FILE; then
2015-11-01 11:08:36 +01:00
dialog --title "Administrator user" \
--msgbox "You can't delete the administrator user" 6 40
2015-10-31 21:14:23 +01:00
return
fi
clear
freedombone-rmuser $SELECTED_USERNAME
any_key
}
function configure_remote_backups {
if ! grep -Fxq "Admin user:$SELECTED_USERNAME" $COMPLETION_FILE; then
dialog --title "Administrator user" \
--msgbox "No Administrator user found. Check $COMPLETION_FILE" 6 40
return
fi
if [ ${#ADMIN} -lt 2 ]; then
dialog --title "Administrator user" \
--msgbox "Username not found" 6 40
return
fi
if [ ! -d /home/$ADMIN_USER ]; then
dialog --title "Administrator user" \
--msgbox "Home directory not found" 6 40
return
fi
freedombone-remote -u $ADMIN_USER
}
2015-10-31 21:14:23 +01:00
function change_password {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
clear
2015-11-01 10:51:10 +01:00
echo "Change password for $SELECTED_USERNAME"
echo ""
2015-10-31 21:14:23 +01:00
su -c "passwd" - $SELECTED_USERNAME
any_key
}
2015-11-01 11:51:54 +01:00
function change_ssh_public_key {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
if grep -Fxq "Admin user:$SELECTED_USERNAME" $COMPLETION_FILE; then
2015-11-01 11:51:54 +01:00
dialog --title "Change ssh public key" \
--backtitle "Freedombone Control Panel" \
--defaultno \
--yesno "\nThis is the administrator user.\n\nAre you sure you want to change the ssh public key for the administrator?" 10 60
sel=$?
case $sel in
1) return;;
255) return;;
esac
fi
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title "Change ssh public key for $SELECTED_USERNAME" \
--backtitle "Freedombone Control Panel" \
--inputbox "Paste the ssh public key below" 8 60 2>$data
sel=$?
case $sel in
0)
SSH_PUBLIC_KEY=$(<$data)
if [ "$SSH_PUBLIC_KEY" ]; then
if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then
if [ -f "$SSH_PUBLIC_KEY" ]; then
if [ ! -d /home/$SELECTED_USERNAME/.ssh ]; then
mkdir /home/$SELECTED_USERNAME/.ssh
fi
cp $SSH_PUBLIC_KEY \
/home/$SELECTED_USERNAME/.ssh/authorized_keys
chown -R $SELECTED_USERNAME:$SELECTED_USERNAME \
/home/$SELECTED_USERNAME/.ssh
dialog --title "Change ssh public key" \
--msgbox "ssh public key was installed" 6 40
else
if [[ "$SSH_PUBLIC_KEY" == "ssh-"* ]]; then
if [ ! -d /home/$SELECTED_USERNAME/.ssh ]; then
mkdir /home/$SELECTED_USERNAME/.ssh
fi
echo "$SSH_PUBLIC_KEY" > \
/home/$SELECTED_USERNAME/.ssh/authorized_keys
chown -R $SELECTED_USERNAME:$SELECTED_USERNAME \
/home/$SELECTED_USERNAME/.ssh
dialog --title "Change ssh public key" \
--msgbox "ssh public key was installed" 6 40
fi
fi
fi
fi
;;
esac
}
2015-10-31 21:14:23 +01:00
function add_to_mailing_list {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Subscribe $SELECTED_USERNAME to a mailing list" \
--form "\n" 8 68 4 \
"List folder name:" 1 1 "" 1 35 26 25 \
"Name between [] on subject line:" 2 1 "" 2 35 26 25 \
"List email address:" 3 1 "" 3 35 26 25 \
2> $data
sel=$?
case $sel in
1) return;;
255) return;;
esac
LIST_NAME=$(cat $data | sed -n 1p)
LIST_SUBJECT=$(cat $data | sed -n 2p)
LIST_EMAIL=$(cat $data | sed -n 3p)
if [ ${#LIST_NAME} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "Add mailing list" \
--msgbox "No mailing list name was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [ ${#LIST_SUBJECT} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "Add mailing list" \
--msgbox "No mailing list subject was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [ ${#LIST_EMAIL} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "Add mailing list" \
--msgbox "No mailing list email address was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [[ "$LIST_EMAIL" != *"@"* || "$LIST_EMAIL" != *"."* ]]; then
2015-11-01 11:08:36 +01:00
dialog --title "Add mailing list" \
--msgbox "Unrecognised email address" 6 40
2015-10-31 21:14:23 +01:00
return
fi
2015-11-01 11:08:36 +01:00
freedombone-addlist -u $SELECTED_USERNAME -l "$LIST_NAME" \
-s "$LIST_SUBJECT" -e "$LIST_EMAIL"
dialog --title "Add mailing list" \
--msgbox "$LIST_NAME list was added" 6 40
2015-10-31 21:14:23 +01:00
}
function email_rule {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Email rule for user $SELECTED_USERNAME" \
--form "\n" 8 65 3 \
"When email arrives from address:" 1 1 "" 1 35 24 28 \
"Move to folder:" 2 1 "" 2 35 24 28 \
2> $data
sel=$?
case $sel in
1) return;;
255) return;;
esac
RULE_EMAIL=$(cat $data | sed -n 1p)
RULE_FOLDER=$(cat $data | sed -n 2p)
if [ ${#RULE_EMAIL} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "Add email rule" \
--msgbox "No email address was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [ ${#RULE_FOLDER} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "Add email rule" \
--msgbox "No folder name was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [[ "$RULE_EMAIL" != *"@"* || "$RULE_EMAIL" != *"."* ]]; then
2015-11-01 11:08:36 +01:00
dialog --title "Add email rule" \
--msgbox "Unrecognised email address" 6 40
2015-10-31 21:14:23 +01:00
return
fi
2015-11-01 11:08:36 +01:00
freedombone-addemail -u $SELECTED_USERNAME -e "$RULE_EMAIL" \
-g "$RULE_FOLDER"
dialog --title "Add email rule" \
--msgbox "Email rule for $RULE_EMAIL was added" 6 40
2015-10-31 21:14:23 +01:00
}
function block_unblock_email {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Block/Unblock email going to $SELECTED_USERNAME" \
--form "\n" 8 65 3 \
"When email arrives from address:" 1 1 "" 1 35 24 28 \
"Block it:" 2 1 "yes" 2 35 4 4 \
2> $data
sel=$?
case $sel in
1) return;;
255) return;;
esac
BLOCK_EMAIL=$(cat $data | sed -n 1p)
BLOCK=$(cat $data | sed -n 2p)
if [ ${#BLOCK_EMAIL} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "Block/Unblock an email" \
--msgbox "No email address was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [[ "$BLOCK_EMAIL" != *"@"* || "$BLOCK_EMAIL" != *"."* ]]; then
2015-11-01 11:08:36 +01:00
dialog --title "Block/Unblock an email" \
--msgbox "Unrecognised email address" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then
freedombone-ignore -u $SELECTED_USERNAME -e "$BLOCK_EMAIL"
2015-11-01 11:08:36 +01:00
dialog --title "Block an email" \
--msgbox "Email from $BLOCK_EMAIL to $SELECTED_USERNAME blocked" 6 40
2015-10-31 21:14:23 +01:00
else
freedombone-unignore -u $SELECTED_USERNAME -e "$BLOCK_EMAIL"
2015-11-01 11:08:36 +01:00
dialog --title "Unblock an email" \
--msgbox "Email from $BLOCK_EMAIL to $SELECTED_USERNAME unblocked" 6 40
2015-10-31 21:14:23 +01:00
fi
}
function block_unblock_subject {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Block/Unblock email going to $SELECTED_USERNAME" \
--form "\n" 8 70 3 \
"When email arrives with subject text:" 1 1 "" 1 40 24 28 \
"Block it:" 2 1 "yes" 2 40 4 4 \
2> $data
sel=$?
case $sel in
1) return;;
255) return;;
esac
BLOCK_SUBJECT=$(cat $data | sed -n 1p)
BLOCK=$(cat $data | sed -n 2p)
if [ ${#BLOCK_SUBJECT} -lt 2 ]; then
2015-11-01 11:08:36 +01:00
dialog --title "Block/Unblock an email" \
--msgbox "No subject was given" 6 40
2015-10-31 21:14:23 +01:00
return
fi
if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then
freedombone-ignore -u $SELECTED_USERNAME -t "$BLOCK_SUBJECT"
2015-11-01 11:08:36 +01:00
dialog --title "Block an email" \
--msgbox "Email with subject $BLOCK_SUBJECT to $SELECTED_USERNAME blocked" 6 40
2015-10-31 21:14:23 +01:00
else
freedombone-unignore -u $SELECTED_USERNAME -t "$BLOCK_SUBJECT"
2015-11-01 11:08:36 +01:00
dialog --title "Unblock an email" \
--msgbox "Email with subject $BLOCK_SUBJECT to $SELECTED_USERNAME unblocked" 6 40
2015-10-31 21:14:23 +01:00
fi
}
function create_keydrive_master {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
2015-11-01 11:08:36 +01:00
dialog --title "USB Master Keydrive" \
--msgbox "Plug in a LUKS encrypted USB drive" 6 40
2015-10-31 21:14:23 +01:00
clear
freedombone-keydrive -u $SELECTED_USERNAME --master 'yes'
any_key
}
function create_keydrive_fragment {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
2015-11-01 11:08:36 +01:00
dialog --title "USB Fragment Keydrive" \
--msgbox "Plug in a LUKS encrypted USB drive" 6 40
2015-10-31 21:14:23 +01:00
clear
freedombone-keydrive -u $SELECTED_USERNAME
any_key
}
function backup_data {
2015-11-01 11:08:36 +01:00
dialog --title "Backup data to USB" \
--msgbox "Plug in a LUKS encrypted USB drive" 6 40
2015-10-31 21:14:23 +01:00
clear
2015-11-05 10:06:19 +01:00
echo ' '
2015-11-05 10:58:27 +01:00
echo 'Enter the passphrase for your LUKS encrypted backup drive:'
2015-10-31 21:14:23 +01:00
backup
any_key
}
function restore_data {
2015-11-01 11:08:36 +01:00
dialog --title "Restore data from USB" \
--msgbox "Plug in your backup USB drive" 6 40
2015-10-31 21:14:23 +01:00
clear
2015-11-05 10:06:19 +01:00
echo ' '
2015-11-05 10:58:27 +01:00
echo 'Enter the passphrase for your LUKS encrypted backup drive:'
2015-10-31 21:14:23 +01:00
restore
any_key
}
2015-10-31 22:01:24 +01:00
function restore_data_remote {
2015-11-03 17:06:19 +01:00
if [ ! $ADMIN_USER ]; then
dialog --title "Restore data from remote server" \
--msgbox "Unknown admin user" 6 40
return
fi
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title "Restore from remote server" \
--backtitle "Freedombone Control Panel" \
--inputbox "Enter the domain name of the server from which you wish to restore" 8 60 2>$data
sel=$?
case $sel in
0)
friend_server_domain_name=$(<$data)
if [ ${#friend_server_domain_name} -lt 2 ]; then
return
fi
if [[ $friend_server_domain_name != *"."* ]]; then
dialog --title "Remote server domain name" \
--msgbox "Invalid domain name" 6 40
return
fi
restorefromfriend $friend_server_domain_name
any_key
;;
esac
2015-10-31 22:01:24 +01:00
}
2015-10-31 23:55:09 +01:00
function logging_on_off {
logging="no"
2015-11-01 00:09:32 +01:00
dialog --title "Logging" \
--backtitle "Freedombone Control Panel" \
--yesno "\nDo you want to turn logging on?" 7 60
sel=$?
case $sel in
0) logging="yes";;
2015-11-01 00:09:32 +01:00
255) return;;
esac
clear
echo ''
echo 'This may take a few seconds. Please wait...'
if [[ $logging == "no" ]]; then
freedombone-logging off
else
freedombone-logging on
fi
2015-10-31 23:55:09 +01:00
}
2015-10-31 22:01:24 +01:00
function restore_gpg_key {
select_user
if [ ! $SELECTED_USERNAME ]; then
return
fi
2015-11-01 11:08:36 +01:00
dialog --title "Restore GPG key for user $SELECTED_USERNAME" \
--msgbox "Plug in your USB keydrive" 6 40
2015-10-31 22:01:24 +01:00
clear
freedombone-recoverkey -u $SELECTED_USERNAME
any_key
}
2015-11-03 10:24:55 +01:00
function security_settings {
freedombone-sec
any_key
}
function reset_tripwire {
clear
2015-11-03 10:37:16 +01:00
echo 'Resetting the Tripwire...'
echo ' '
echo '
' | reset-tripwire
any_key
}
2015-11-17 23:21:40 +01:00
function hubzilla_renew_cert {
dialog --title "Renew SSL certificate" \
--backtitle "Freedombone Control Panel" \
--yesno "\nThis will renew a letsencrypt certificate. Select 'yes' to continue" 16 60
sel=$?
case $sel in
1) return;;
255) return;;
esac
HUBZILLA_DOMAIN_NAME=$(cat $COMPLETION_FILE | grep "Hubzilla domain" | awk -F ':' '{print $2}')
if [ ! -d /var/www/$HUBZILLA_DOMAIN_NAME/htdocs ]; then
dialog --title "Renew SSL certificate" \
--msgbox "Hubzilla install directory not found" 6 40
return
fi
freedombone-renew-cert -h $HUBZILLA_DOMAIN_NAME -p 'letsencrypt'
if [ ! "$?" = "0" ]; then
any_key
else
dialog --title "Renew SSL certificate" \
--msgbox "Hubzilla certificate has been renewed" 6 40
fi
}
2015-11-15 13:05:58 +01:00
function hubzilla_restore {
dialog --title "Restore hubzilla from USB backup" \
--backtitle "Freedombone Control Panel" \
--yesno "\nInsert your USB backup drive and select 'yes' to continue" 16 60
sel=$?
case $sel in
1) return;;
255) return;;
esac
clear
echo 'Enter your backup drive password:'
restorehubzilla
}
function hubzilla_channel_directory_server {
if ! grep -q "Hubzilla domain" $COMPLETION_FILE; then
dialog --title "Hubzilla channel directory server" \
--msgbox "Hubzilla is not installed on this system" 6 40
return
fi
HUBZILLA_DOMAIN_NAME=$(cat $COMPLETION_FILE | grep "Hubzilla domain" | awk -F ':' '{print $2}')
2015-11-17 23:21:40 +01:00
if [ ! -d /var/www/$HUBZILLA_DOMAIN_NAME/htdocs ]; then
dialog --title "Hubzilla channel directory server" \
--msgbox "Hubzilla install directory not found" 6 40
return
fi
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title "Hubzilla channel directory server" \
--backtitle "Freedombone Control Panel" \
--inputbox "When you click on 'channel directory' this is where Hubzilla will obtain its list from" 8 60 2>$data
sel=$?
case $sel in
0)
hubzilla_domain_server=$(<$data)
2015-11-03 13:30:28 +01:00
if [[ $hubzilla_domain_server != *"."* ]]; then
return
fi
if [[ $hubzilla_domain_server != "https"* ]]; then
dialog --title "Hubzilla channel directory server" \
--msgbox "Invalid domain - include the https://" 6 40
return
fi
./var/www/$HUBZILLA_DOMAIN_NAME/htdocs/util/config system directory_server $hubzilla_domain_server
dialog --title "Hubzilla channel directory server" \
--msgbox "Domain channel directory server changed to $hubzilla_domain_server" 6 40
;;
esac
}
function format_drive {
drive=
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
2015-11-05 10:25:43 +01:00
--title "Format a USB drive (LUKS encrypted)" \
2015-11-05 10:27:25 +01:00
--radiolist "Choose a drive:" 12 70 5 \
1 "sda (Beaglebone Black)" off \
2 "sdb" off \
3 "sdc" off \
4 "sdd" off \
5 "Back to Backup and Restore menu" on 2> $data
sel=$?
case $sel in
1) return;;
255) return;;
esac
case $(cat $data) in
1) drive='sda';;
2) drive='sdb';;
3) drive='sdc';;
4) drive='sdd';;
5) return;;
esac
dialog --title "Format USB drive" \
--backtitle "Freedombone Control Panel" \
--defaultno \
2015-11-05 10:31:53 +01:00
--yesno "\nPlease confirm that you wish to format drive\n\n ${drive}\n\nAll current data on the drive will be lost, and you will be prompted to give a password used to encrypt the drive.\n\nDANGER: If you screw up here and format the wrong drive it's your own fault!" 16 60
sel=$?
case $sel in
1) return;;
255) return;;
esac
clear
freedombone-format $drive
any_key
}
2015-11-21 21:01:53 +01:00
function shut_down_system {
dialog --title "Power off the system" \
--backtitle "Freedombone Control Panel" \
--defaultno \
--yesno "\nPlease confirm that you wish to power off the system.\n\nWARNING: to power on again you will need to have physical access to the hardware." 10 60
sel=$?
case $sel in
1) return;;
255) return;;
esac
shutdown now
}
function restart_system {
dialog --title "Restart the system" \
--backtitle "Freedombone Control Panel" \
--defaultno \
--yesno "\nPlease confirm that you wish to restart the system.\n\nWARNING: If you are using full disk encryption then you will need physical access to the hardware to type in the password" 10 60
sel=$?
case $sel in
1) return;;
255) return;;
esac
reboot
}
2015-11-01 11:29:42 +01:00
function menu_backup_restore {
2015-10-31 21:14:23 +01:00
while true
do
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
2015-11-01 11:29:42 +01:00
--title "Backup and Restore" \
--radiolist "Choose an operation:" 17 70 10 \
2015-10-31 21:14:23 +01:00
1 "Backup data to USB drive" off \
2015-11-01 11:29:42 +01:00
2 "Restore GPG key from USB keydrive" off \
3 "Restore data from USB drive" off \
4 "Restore Hubzilla data from USB drive" off \
5 "Configure remote backups" off \
6 "Restore from remote backup" off \
7 "Backup GPG key to USB (master keydrive)" off \
8 "Backup GPG key to USB (fragment keydrive)" off \
9 "Format a USB drive (LUKS encrypted)" off \
10 "Back to main menu" on 2> $data
2015-10-31 21:14:23 +01:00
sel=$?
case $sel in
2015-11-01 11:56:33 +01:00
1) break;;
255) break;;
2015-10-31 21:14:23 +01:00
esac
case $(cat $data) in
1) backup_data;;
2015-11-01 11:29:42 +01:00
2) restore_gpg_key;;
3) restore_data;;
4) hubzilla_restore;;
5) configure_remote_backups;;
6) restore_data_remote;;
7) create_keydrive_master;;
8) create_keydrive_fragment;;
9) format_drive;;
10) break;;
2015-11-01 11:29:42 +01:00
esac
done
}
function menu_email {
while true
do
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Email Filtering Rules" \
--radiolist "Choose an operation:" 12 70 5 \
1 "Add a user to a mailing list" off \
2 "Add an email rule" off \
3 "Block/Unblock an email address" off \
4 "Block/Unblock email with subject text" off \
5 "Back to main menu" on 2> $data
sel=$?
case $sel in
2015-11-01 11:56:33 +01:00
1) break;;
255) break;;
2015-11-01 11:29:42 +01:00
esac
case $(cat $data) in
1) add_to_mailing_list;;
2) email_rule;;
3) block_unblock_email;;
4) block_unblock_subject;;
5) break;;
esac
done
}
function menu_users {
while true
do
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
2015-11-01 11:59:10 +01:00
--title "Manage Users" \
2015-11-01 11:29:42 +01:00
--radiolist "Choose an operation:" 12 70 5 \
1 "Add a user" off \
2 "Delete a user" off \
3 "Change user password" off \
4 "Change user ssh public key" off \
5 "Back to main menu" on 2> $data
sel=$?
case $sel in
2015-11-01 11:56:33 +01:00
1) break;;
255) break;;
2015-11-01 11:29:42 +01:00
esac
case $(cat $data) in
1) add_user;;
2) delete_user;;
3) change_password;;
4) change_ssh_public_key;;
5) break;;
esac
done
}
2015-11-15 13:05:58 +01:00
function menu_hubzilla {
while true
do
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Hubzilla" \
2015-11-17 23:21:40 +01:00
--radiolist "Choose an operation:" 13 70 4 \
2015-11-15 13:05:58 +01:00
1 "Restore from usb backup" off \
2 "Set channel directory server" off \
2015-11-17 23:21:40 +01:00
3 "Renew SSL certificate" off \
4 "Back to main menu" on 2> $data
2015-11-15 13:05:58 +01:00
sel=$?
case $sel in
1) break;;
255) break;;
esac
case $(cat $data) in
1) hubzilla_restore;;
2) hubzilla_channel_directory_server;;
2015-11-17 23:21:40 +01:00
3) hubzilla_renew_cert;;
4) break;;
2015-11-15 13:05:58 +01:00
esac
done
}
2015-11-01 11:29:42 +01:00
function menu_top_level {
while true
do
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle "Freedombone Control Panel" \
--title "Control Panel" \
2015-11-26 11:53:54 +01:00
--radiolist "Choose an operation:" 19 70 12 \
2015-11-01 11:30:15 +01:00
1 "Backup and Restore" off \
2015-11-02 17:28:18 +01:00
2 "Show SIP Phone Extensions" off \
3 "Reset Tripwire" off \
4 "Logging on/off" off \
5 "Manage Users" off \
6 "Email Filtering Rules" off \
7 "Security Settings" off \
2015-11-15 13:05:58 +01:00
8 "Hubzilla" off \
2015-11-26 11:53:54 +01:00
9 "Check for updates" off \
10 "Power off the system" off \
11 "Restart the system" off \
12 "Exit" on 2> $data
2015-11-01 11:29:42 +01:00
sel=$?
case $sel in
1) exit 1;;
255) exit 1;;
esac
case $(cat $data) in
1) menu_backup_restore;;
2015-11-02 17:28:18 +01:00
2) show_sip_extensions;;
3) reset_tripwire;;
4) logging_on_off;;
5) menu_users;;
6) menu_email;;
7) security_settings;;
2015-11-15 13:05:58 +01:00
8) menu_hubzilla;;
2015-11-26 11:53:54 +01:00
9) check_for_updates;;
10) shut_down_system;;
11) restart_system;;
12) break;;
2015-10-31 21:14:23 +01:00
esac
done
}
if [ ! -f $COMPLETION_FILE ]; then
echo 'This command should only be run on an installed Freedombone system'
exit 1
fi
2015-11-03 17:06:19 +01:00
ADMIN_USER=$(cat $COMPLETION_FILE | grep "Admin user" | awk -F ':' '{print $2}')
2015-10-31 21:14:23 +01:00
menu_top_level
2015-10-31 21:18:34 +01:00
clear
cat /etc/motd
2015-10-31 21:14:23 +01:00
exit 0