freedombone/src/freedombone-app-datserver

274 lines
7.6 KiB
Plaintext
Raw Normal View History

2018-04-09 14:32:43 +02:00
#!/bin/bash
#
# _____ _ _
# | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
# | __| _| -_| -_| . | . | | . | . | | -_|
# |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___|
#
# Freedom in the Cloud
#
# License
# =======
#
# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
VARIANTS='full full-vim'
IN_DEFAULT_INSTALL=0
SHOW_ON_ABOUT=0
DATSERVER_DOMAIN_NAME=
DATSERVER_CODE=
2018-04-09 14:58:30 +02:00
DATSERVER_HYPERCORED_VERSION='1.4.1'
2018-04-09 14:32:43 +02:00
DATSERVER_DIRECTORY=/etc/datserver
2018-04-09 21:13:00 +02:00
DATSERVER_PORT=3282
2018-04-09 14:32:43 +02:00
datserver_variables=(MY_USERNAME)
function logging_on_datserver {
echo -n ''
}
function logging_off_datserver {
echo -n ''
}
function remove_user_datserver {
2018-04-09 18:03:05 +02:00
echo -n ''
2018-04-09 14:32:43 +02:00
}
function add_user_datserver {
2018-04-09 18:03:05 +02:00
echo -n ''
2018-04-09 14:32:43 +02:00
echo '0'
}
2018-04-09 18:03:05 +02:00
function change_password_datserver {
2018-04-09 14:32:43 +02:00
echo -n ''
}
2018-04-09 18:03:05 +02:00
function install_interactive_datserver {
echo -n ''
APP_INSTALLED=1
2018-04-09 14:32:43 +02:00
}
function reconfigure_datserver {
# This is used if you need to switch identity. Dump old keys and generate new ones
echo -n ''
}
2018-04-09 15:30:27 +02:00
function datserver_add_dat {
2018-04-09 14:32:43 +02:00
data=$(mktemp 2>/dev/null)
2018-04-09 15:30:27 +02:00
dialog --title $"Add a dat" \
2018-04-09 14:32:43 +02:00
--backtitle $"Freedombone Control Panel" \
2018-04-09 15:30:27 +02:00
--inputbox $"dat link:" 8 70 2>"$data"
2018-04-09 14:32:43 +02:00
sel=$?
case $sel in
0)
2018-04-09 15:30:27 +02:00
dat_link=$(<"$data")
if [ "$dat_link" ]; then
if [ ${#dat_link} -gt 5 ]; then
if ! grep -q "$dat_link" $DATSERVER_DIRECTORY/feeds; then
echo "$dat_link" >> $DATSERVER_DIRECTORY/feeds
chown -R datserver:datserver $DATSERVER_DIRECTORY/feeds
systemctl restart datserver
fi
2018-04-09 14:32:43 +02:00
fi
fi
;;
esac
rm -f "$data"
}
function configure_interactive_datserver {
2018-04-09 15:30:27 +02:00
W=(1 $"Add a dat"
2 $"Browse or edit feeds")
2018-04-09 14:32:43 +02:00
while true
do
# shellcheck disable=SC2068
2018-04-09 18:28:15 +02:00
selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"dat server" --menu $"Choose an operation, or ESC for main menu:" 10 70 3 "${W[@]}" 3>&2 2>&1 1>&3)
2018-04-09 14:32:43 +02:00
if [ ! "$selection" ]; then
break
fi
case $selection in
2018-04-09 15:30:27 +02:00
1) datserver_add_dat
2018-04-09 14:32:43 +02:00
;;
2018-04-09 18:23:14 +02:00
2) cd $DATSERVER_DIRECTORY || break
editor feeds
2018-04-09 15:30:27 +02:00
chown -R datserver:datserver $DATSERVER_DIRECTORY/feeds
systemctl restart datserver
2018-04-09 14:32:43 +02:00
;;
esac
done
}
function upgrade_datserver {
2018-04-09 14:58:30 +02:00
CURR_DATSERVER_HYPERCORED_VERSION=$(get_completion_param "datserver hypercored version")
if [[ "$CURR_DATSERVER_HYPERCORED_VERSION" != "$DATSERVER_HYPERCORED_VERSION" ]]; then
2018-04-09 17:31:35 +02:00
cd $DATSERVER_DIRECTORY || exit 254274
if npm update hypercored@$DATSERVER_HYPERCORED_VERSION; then
2018-04-09 14:58:30 +02:00
set_completion_param "datserver hypercored version" "$DATSERVER_HYPERCORED_VERSION"
fi
chown -R datserver:datserver "$DATSERVER_DIRECTORY"
2018-04-09 17:31:35 +02:00
systemctl restart datserver
2018-04-09 14:32:43 +02:00
fi
}
function backup_local_datserver {
source_directory=$DATSERVER_DIRECTORY
systemctl stop datserver
dest_directory=datserver
backup_directory_to_usb "$source_directory" $dest_directory
systemctl start datserver
}
function restore_local_datserver {
systemctl stop datserver
temp_restore_dir=/root/tempdatserver
datserver_dir=$DATSERVER_DIRECTORY
restore_directory_from_usb $temp_restore_dir datserver
if [ -d $temp_restore_dir ]; then
if [ -d "$temp_restore_dir$datserver_dir" ]; then
cp -rp "$temp_restore_dir$datserver_dir"/* "$datserver_dir"/
else
if [ ! -d "$datserver_dir" ]; then
mkdir "$datserver_dir"
fi
cp -rp "$temp_restore_dir"/* "$datserver_dir"/
fi
chown -R datserver:datserver "$datserver_dir"
rm -rf $temp_restore_dir
fi
systemctl start datserver
}
function backup_remote_datserver {
source_directory=$DATSERVER_DIRECTORY
systemctl stop datserver
dest_directory=datserver
backup_directory_to_friend "$source_directory" $dest_directory
systemctl start datserver
}
function restore_remote_datserver {
systemctl stop datserver
temp_restore_dir=/root/tempdatserver
datserver_dir=$DATSERVER_DIRECTORY
restore_directory_from_friend $temp_restore_dir datserver
if [ -d $temp_restore_dir ]; then
if [ -d "$temp_restore_dir$datserver_dir" ]; then
cp -rp "$temp_restore_dir$datserver_dir"/* "$datserver_dir"/
else
if [ ! -d "$datserver_dir" ]; then
mkdir "$datserver_dir"
fi
cp -rp $temp_restore_dir/* "$datserver_dir"/
fi
chown -R datserver:datserver "$datserver_dir"
rm -rf $temp_restore_dir
fi
systemctl start datserver
}
function remove_datserver {
if [ -f /etc/systemd/system/datserver.service ]; then
systemctl stop datserver
systemctl disable datserver
rm /etc/systemd/system/datserver.service
fi
userdel -r datserver
remove_nodejs datserver
if [ -d $DATSERVER_DIRECTORY ]; then
rm -rf $DATSERVER_DIRECTORY
fi
2018-04-09 17:31:35 +02:00
2018-04-09 14:32:43 +02:00
remove_app datserver
remove_completion_param install_datserver
sed -i '/datserver/d' "$COMPLETION_FILE"
2018-04-09 21:13:00 +02:00
firewall_remove $DATSERVER_PORT
2018-04-09 14:32:43 +02:00
}
function install_datserver {
apt-get -yq install wget
install_nodejs datserver
2018-04-09 15:30:27 +02:00
2018-04-09 17:31:35 +02:00
if [ -d $DATSERVER_DIRECTORY ]; then
rm -rf $DATSERVER_DIRECTORY
2018-04-09 14:32:43 +02:00
fi
2018-04-09 17:31:35 +02:00
mkdir $DATSERVER_DIRECTORY
cd $DATSERVER_DIRECTORY || exit 3658356
2018-04-09 14:32:43 +02:00
2018-04-09 17:31:35 +02:00
if ! npm install hypercored@$DATSERVER_HYPERCORED_VERSION; then
2018-04-09 14:58:30 +02:00
echo $'hypercored was not installed'
exit 4635439
fi
2018-04-09 19:03:35 +02:00
if ! npm install lil-pids; then
echo $'lil-pids was not installed'
exit 36483463
fi
echo "$DATSERVER_DIRECTORY/node_modules/.bin/hypercored --cwd $DATSERVER_DIRECTORY" > $DATSERVER_DIRECTORY/services
2018-04-09 17:31:35 +02:00
2018-04-09 14:58:30 +02:00
set_completion_param "datserver hypercored version" "$DATSERVER_HYPERCORED_VERSION"
2018-04-09 14:32:43 +02:00
2018-04-09 17:31:35 +02:00
adduser --system --home="$DATSERVER_DIRECTORY" --group datserver
2018-04-09 14:32:43 +02:00
if [ ! -d $DATSERVER_DIRECTORY ]; then
echo $'dat directory was not created'
exit 9568356
fi
2018-04-09 15:30:27 +02:00
chown -R datserver:datserver "$DATSERVER_DIRECTORY"
2018-04-09 14:32:43 +02:00
2018-04-09 21:13:00 +02:00
firewall_add datserver $DATSERVER_PORT
2018-04-09 14:32:43 +02:00
{ echo '[Unit]';
2018-04-09 15:30:27 +02:00
echo 'After=syslog.target network.target remote-fs.target nss-lookup.target';
2018-04-09 14:32:43 +02:00
echo '';
echo '[Service]';
echo 'User=datserver';
echo 'Group=datserver';
2018-04-09 19:03:35 +02:00
echo "ExecStart=$DATSERVER_DIRECTORY/node_modules/.bin/lil-pids $DATSERVER_DIRECTORY/services $DATSERVER_DIRECTORY/pids";
2018-04-09 14:32:43 +02:00
echo 'Restart=always';
2018-04-09 15:30:27 +02:00
echo "WorkingDirectory=$DATSERVER_DIRECTORY";
2018-04-09 14:32:43 +02:00
echo 'StandardError=syslog';
echo '';
echo '[Install]';
2018-04-09 15:30:27 +02:00
echo 'WantedBy=multi-user.target'; } > /etc/systemd/system/datserver.service
2018-04-09 14:32:43 +02:00
systemctl enable datserver
systemctl start datserver
APP_INSTALLED=1
}
# NOTE: deliberately there is no "exit 0"