123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- #!/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=
- DATSERVER_DAT_VERSION='13.10.0'
- DATSERVER_HYPERCORED_VERSION='1.4.1'
- DATSERVER_DIRECTORY=/etc/datserver
-
- datserver_variables=(MY_USERNAME)
-
- function logging_on_datserver {
- echo -n ''
- }
-
- function logging_off_datserver {
- echo -n ''
- }
-
- function remove_user_datserver {
- remove_username="$1"
-
- "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp datserver
- }
-
- function add_user_datserver {
- new_username="$1"
- new_user_password="$2"
-
- "${PROJECT_NAME}-pass" -u "$new_username" -a datserver -p "$new_user_password"
- echo '0'
- }
-
- function install_interactive_datserver {
- echo -n ''
- APP_INSTALLED=1
- }
-
- function change_password_datserver {
- curr_username="$1"
- new_user_password="$2"
-
- "${PROJECT_NAME}-pass" -u "$curr_username" -a datserver -p "$new_user_password"
- }
-
- function reconfigure_datserver {
- # This is used if you need to switch identity. Dump old keys and generate new ones
- echo -n ''
- }
-
- function datserver_add_url {
- data=$(mktemp 2>/dev/null)
- dialog --title $"Add a file to dat using its URL" \
- --backtitle $"Freedombone Control Panel" \
- --inputbox $"File URL" 8 70 2>"$data"
- sel=$?
- case $sel in
- 0)
- file_url=$(<"$data")
- if [ "$file_url" ]; then
- if [ ${#file_url} -gt 5 ]; then
- clear
- cd $DATSERVER_DIRECTORY || return
- wget "$file_url"
- chown -R datserver:datserver $DATSERVER_DIRECTORY/*
- fi
- fi
- ;;
- esac
- rm -f "$data"
- }
-
- function datserver_add_file {
- read_config_param MY_USERNAME
-
- selected_file=$(dialog --title "Choose a file to store within dat" --fselect "/home/$MY_USERNAME/" 30 60)
- if [ ! "$selected_file" ]; then
- return
- fi
- if [ ! -f "$selected_file" ]; then
- return
- fi
- if [[ "$selected_file" == "$DATSERVER_DIRECTORY"* ]]; then
- return
- fi
-
- clear
- echo ''
- echo $"Copying $selected_file"
- cp "$selected_file" $DATSERVER_DIRECTORY
- chown -R datserver:datserver $DATSERVER_DIRECTORY/*
- }
-
- function datserver_show_address {
- cd $DATSERVER_DIRECTORY || return
- dat_address=$(dat status | grep "dat:")
- clear
- echo ''
- echo "$dat_address"
- echo ''
- echo -n "$dat_address" | qrencode -t UTF8
- echo ''
- echo ' '
- # shellcheck disable=SC2034
- read -n1 -r -p $"Press any key to continue..." key
- }
-
- function configure_interactive_datserver {
- W=(1 $"Add a local file"
- 2 $"Add a file from its URL")
-
- while true
- do
- # shellcheck disable=SC2068
- 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)
-
- if [ ! "$selection" ]; then
- break
- fi
- case $selection in
- 1) datserver_show_address
- ;;
- 2) datserver_add_file
- ;;
- 3) datserver_add_url
- ;;
- esac
- done
- }
-
- function upgrade_datserver {
- CURR_DATSERVER_DAT_VERSION=$(get_completion_param "datserver version")
- if [[ "$CURR_DATSERVER_DAT_VERSION" != "$DATSERVER_DAT_VERSION" ]]; then
-
- if npm update -g dat@$DATSERVER_DAT_VERSION; then
- set_completion_param "datserver version" "$DATSERVER_DAT_VERSION"
- fi
- chown -R datserver:datserver "$DATSERVER_DIRECTORY"
- fi
-
- CURR_DATSERVER_HYPERCORED_VERSION=$(get_completion_param "datserver hypercored version")
- if [[ "$CURR_DATSERVER_HYPERCORED_VERSION" != "$DATSERVER_HYPERCORED_VERSION" ]]; then
-
- if npm update -g hypercored@$DATSERVER_HYPERCORED_VERSION; then
- set_completion_param "datserver hypercored version" "$DATSERVER_HYPERCORED_VERSION"
- fi
- chown -R datserver:datserver "$DATSERVER_DIRECTORY"
- 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
- npm uninstall -g dat
- npm uninstall -g hypercored
-
- remove_nodejs datserver
-
- remove_onion_service datserver "${DATSERVER_ONION_PORT}"
- if grep -q "datserver" /etc/crontab; then
- sed -i "/datserver/d" /etc/crontab
- fi
- if [ -d $DATSERVER_DIRECTORY ]; then
- rm -rf $DATSERVER_DIRECTORY
- fi
- remove_app datserver
- remove_completion_param install_datserver
- sed -i '/datserver/d' "$COMPLETION_FILE"
- }
-
- function install_datserver {
- apt-get -yq install wget
-
- install_nodejs datserver
- if ! npm install -g dat@$DATSERVER_DAT_VERSION; then
- exit 2468736
- fi
- if [ ! -f /root/.npm-global/bin/dat ]; then
- echo $'dat was not installed'
- exit 156835
- fi
-
- if ! npm install -g hypercored@$DATSERVER_HYPERCORED_VERSION; then
- echo $'hypercored was not installed'
- exit 4635439
- fi
-
- set_completion_param "datserver version" "$DATSERVER_DAT_VERSION"
- set_completion_param "datserver hypercored version" "$DATSERVER_HYPERCORED_VERSION"
-
- if [ -d $DATSERVER_DIRECTORY ]; then
- rm -rf $DATSERVER_DIRECTORY
- fi
- mkdir $DATSERVER_DIRECTORY
- useradd -d "$DATSERVER_DIRECTORY" -s /bin/false datserver
- if [ ! -d $DATSERVER_DIRECTORY ]; then
- echo $'dat directory was not created'
- exit 9568356
- fi
-
- cd $DATSERVER_DIRECTORY || exit 3578635
- echo -e "\\n\\n" | dat create
- if [ ! -d $DATSERVER_DIRECTORY/.dat ]; then
- echo $'dat was not created'
- exit 753563
- fi
- dat_address=$(dat status | grep "dat:")
- if [ ! "$dat_address" ]; then
- echo $'dat address could not be found'
- exit 235479763
- fi
- if [ ${#dat_address} -lt 10 ]; then
- echo $'dat address is too short'
- exit 4789264359
- fi
- echo "$dat_address created"
-
- { echo '[Unit]';
- echo 'Description=datserver';
- echo 'After=syslog.target';
- echo 'After=network.target';
- echo '';
- echo '[Service]';
- echo 'Type=simple';
- echo 'User=datserver';
- echo 'Group=datserver';
- echo "WorkingDirectory=$DATSERVER_DIRECTORY";
- echo "ExecStart=/root/.npm-global/bin/dat share $DATSERVER_DIRECTORY";
- echo 'Environment=NODE_ENV=production';
- echo 'Environment=USER=datserver';
- echo 'Restart=always';
- echo 'StandardError=syslog';
- echo '';
- echo '[Install]';
- echo 'WantedBy=multi-user.target'; } >> "/etc/systemd/system/datserver.service"
- systemctl enable datserver
- chown -R datserver:datserver "$DATSERVER_DIRECTORY"
- systemctl start datserver
-
- APP_INSTALLED=1
- }
-
- # NOTE: deliberately there is no "exit 0"
|