#!/bin/bash

SCRIPT_VER="1.5"

APP="Deluge"
APP_CATEGORY="Torrent Clients and Utilities"
APP_SCOPE="user"
APP_ENABLED="yes"
#SYS_PKG_NAME="deluged"
#><#APP_CHECK_VER_CMD="${PKG_VER} deluged"
STORED_PASSWORD_SERVICE="deluge"
SUPPORTED_ON="Ubuntu20.04,Ubuntu22.04,Ubuntu24.04"
USE_APACHE2="yes"
DAEMON_PORT=58846
WEBUI_PORT=8112
LIBRARY="functions4.sh"

if [ "${SUPPORT-}" = '' ]; then
    SUPPORT="https://installers.rapidseedbox.com/scripts/whmcs_client_installers/support"
fi

LOGFILE="/var/log/whmcs_client_installers/${0}.log"
[ ! -d "/var/log/whmcs_client_installers" ] && mkdir -p "/var/log/whmcs_client_installers"

wget -4 -nc -q --no-check-certificate --timeout=20 --tries=5 ${SUPPORT}/${LIBRARY} >> "${LOGFILE}" 2>&1
if [ ! -f "./${LIBRARY}" ] ; then
    echo "55"
    echo "Error downloading \"${SUPPORT}/${LIBRARY}\"" >> "${LOGFILE}"
    exit 55
fi

# shellcheck source=support/functions4.sh
. "./${LIBRARY}"
SCRIPTENTRY

VALIDATE_USER

APP_DIRECTORY="${USERHOME}/.config/deluge"
DELUGE_HOME="/var/lib/deluge"
DELUGE_LOGDIR="/var/log/deluge"

while : ; do

    main_rc=1

    CHECK_APP ; _rc=$?
    if [ ${_rc} -ne 0 ] ; then
        main_rc=${_rc}
        break
    fi

    [ -d "${USERHOME}" ] || break

    case "${LSB_VENDOR}" in
      "Ubuntu")
          deluged_pkg="deluged"
          DEL_APT_REPO "ppa:deluge-team/develop"
          DEL_APT_REPO "ppa:deluge-team/ppa"
          ADD_APT_PPA "ppa:deluge-team/stable" || break
          APT_UPDATE || break
          ;;
    esac


    ${PKG_INSTALL} \
         "python3" \
         "${deluged_pkg}" \
         "deluge-console" \
         "deluge-web" \
      || break

    INFO "Configuring '${APP}' environment"

    if [ ! -d "${USERHOME}/.config" ] ; then
        MKDIR "${USERHOME}/.config" || break
    fi
    WGET "${SUPPORT}/deluge/config-deluge.tar.gz" || break
    TAR_ZXF "${TMP_DIR}/config-deluge.tar.gz" "${USERHOME}/.config/" || break

    CHOWN_DIR "${USERNAME}":"${USERNAME}" "${APP_DIRECTORY}" || break

    MKDIR "/var/log/deluge/${USERNAME}" \
        && CHOWN_DIR "${USERNAME}":"${USERNAME}" "/var/log/deluge/${USERNAME}"
 
    DELUGE_DAEMON_PORT="$(( USERUID + 58846 - FIRST_UID ))"
    DELUGE_WEBUI_PORT="$(( USERUID + 8112 - FIRST_UID ))"
    DELUGE_DAEMON_UID="$( python3 "${APP_DIRECTORY}/deluge.addHost.py" )"
    RUN_LOG "echo 's|###USERHOME###|${USERHOME}|g' | \
             sed -f - -i '${APP_DIRECTORY}/core.conf' 2>&1"
    RUN_LOG "echo 's|###DELUGE_DAEMON_PORT###|${DELUGE_DAEMON_PORT}|g' | \
             sed -f - -i '${APP_DIRECTORY}/core.conf' 2>&1"
    #
    # -- logrotate configs
    if [ -d "/etc/logrotate.d" ] ; then
         cat <<-EOF > "/etc/logrotate.d/deluge-${USERNAME}" 2>> "${LOGFILE}"
	/var/log/deluge/${USERNAME}/daemon.log {
	    weekly
	    rotate 8
	    compress
	    delaycompress
	    dateext
	    missingok
	    size 10M
	    create 660 ${USERNAME} ${USERNAME}
	    postrotate
	        systemctl restart deluged@${USERNAME} 1>/dev/null
	    endscript
	    maxage 100
	}

	/var/log/deluge/${USERNAME}/web.log {
	    weekly
	    rotate 8
	    compress
	    delaycompress
	    dateext
	    missingok
	    size 10M
	    create 660 ${USERNAME} ${USERNAME}
	    postrotate
	        systemctl restart deluge-web@${USERNAME} 1>/dev/null
	    endscript
	    maxage 100
	}
	EOF
    fi 

    RUN_LOG "echo 's|###DELUGE_DAEMON_PORT###|${DELUGE_DAEMON_PORT}|g' | \
             sed -f - -i '${APP_DIRECTORY}/web.conf' 2>&1"
    RUN_LOG "echo 's|###DELUGE_WEBUI_PORT###|${DELUGE_WEBUI_PORT}|g' | \
             sed -f - -i '${APP_DIRECTORY}/web.conf' 2>&1"
    RUN_LOG "echo 's|###DELUGE_DAEMON_UID###|${DELUGE_DAEMON_UID}|g' | \
             sed -f - -i '${APP_DIRECTORY}/web.conf' 2>&1"
    RUN_LOG "echo 's|###DELUGE_DAEMON_UID###|${DELUGE_DAEMON_UID}|g' | \
             sed -f - -i '${APP_DIRECTORY}/hostlist.conf.1.2' 2>&1"
    RUN_LOG "echo 's|###DELUGE_DAEMON_PORT###|${DELUGE_DAEMON_PORT}|g' | \
             sed -f - -i '${APP_DIRECTORY}/hostlist.conf.1.2' 2>&1"

    # Change user password
    INFO "Changing Deluge password for \"${USERNAME}\"..."
    RUN_LOG "python3 '${APP_DIRECTORY}/changedelugepass.py' \
                 '${APP_DIRECTORY}/' \
                 '${USERPASSWORD}' 2>&1"

    # Configure services
    cat <<-EOF > "/etc/systemd/system/deluged@.service" 2>> "${LOGFILE}"
	[Unit]
	Description=Deluge Bittorrent Client Daemon
	After=network.target

	[Service]
	Type=simple
	User=%i
	Group=%i
	ExecStart=/usr/bin/deluged -d -l /var/log/deluge/%i/daemon.log -L info
	Restart=always
	TimeoutStopSec=300
	# -- Optimize prio -- #
	Nice=19
	IOSchedulingClass=2
	IOSchedulingPriority=7

	[Install]
	WantedBy=multi-user.target
	EOF
    cat <<-EOF > "/etc/systemd/system/deluge-web@.service" 2>> "${LOGFILE}"
	[Unit]
	Description=Deluge Bittorrent Client Web Interface
	After=deluged.target

	[Service]
	Type=simple
	User=%i
	Group=%i
	ExecStart=/usr/bin/deluge-web -l /var/log/deluge/%i/web.log -L info
	ExecStartPost=/bin/sh -c "echo \$MAINPID > /home/%i/.config/deluge/deluge-web.pid"
	Restart=always

	[Install]
	WantedBy=multi-user.target
	EOF
    SYSTEMD_RELOAD
    
    # enable/start services
    for svc in "deluged" "deluge-web" ; do
        SVC_ENABLE "${svc}@${USERNAME}"
        SVC_START  "${svc}@${USERNAME}"
    done

    # Configure Apache
    if [ -d "/etc/apache2/userconf-enabled" ] ; then
        if [ "${USERUID}" = "${FIRST_UID}" ] ; then
            cat <<-EOF > "/etc/apache2/userconf-enabled/deluge-${USERNAME}.conf" 2>> "${LOGFILE}"
		<Location /deluge>
		ProxyPass http://127.0.0.1:${DELUGE_WEBUI_PORT}/
		ProxyPassReverse http://127.0.0.1:${DELUGE_WEBUI_PORT}/
		ProxyPassReverseCookieDomain 127.0.0.1 %{HTTP:Host}
		ProxyPassReverseCookiePath / /deluge/
		RequestHeader append X-Deluge-Base "/deluge/"
		</Location>
		EOF
        fi
        cat <<-EOF >> "/etc/apache2/userconf-enabled/deluge-${USERNAME}.conf" 2>> "${LOGFILE}"
		<Location /deluge-${USERNAME}>
		ProxyPass http://127.0.0.1:${DELUGE_WEBUI_PORT}/
		ProxyPassReverse http://127.0.0.1:${DELUGE_WEBUI_PORT}/
		ProxyPassReverseCookieDomain 127.0.0.1 %{HTTP:Host}
		ProxyPassReverseCookiePath / /deluge-${USERNAME}/
		RequestHeader append X-Deluge-Base "/deluge-${USERNAME}/"
		</Location>
		EOF
        SVC_RESTART "apache2"
    fi

    #
    # -- monit configs
    if [ -d "/etc/monit/conf.d" ] ; then
         cat <<-EOF > "/etc/monit/conf.d/deluged@${USERNAME}" 2>> "${LOGFILE}"
		check process deluged-${USERNAME} with pidfile /home/${USERNAME}/.config/deluge/deluged.pid
		  start program = "/usr/sbin/service deluged@${USERNAME} restart"
		  stop program  = "/usr/sbin/service deluged@${USERNAME} stop"
		  if failed host localhost port ${DELUGE_DAEMON_PORT} type tcp then restart
		  if 5 restarts within 5 cycles then timeout
		EOF
         cat <<-EOF > "/etc/monit/conf.d/deluge-web@${USERNAME}" 2>> "${LOGFILE}"
		check process deluge-web-${USERNAME} with pidfile "${APP_DIRECTORY}/deluge-web.pid"
		  start program = "/usr/sbin/service deluge-web@${USERNAME} restart"
		  stop program  = "/usr/sbin/service deluge-web@${USERNAME} stop"
		  if failed host localhost port ${DELUGE_WEBUI_PORT} type tcp then restart
		  if 5 restarts within 5 cycles then timeout
		EOF
        MONIT_RELOAD
    fi


    main_rc=0
    break

done


SCRIPTEXIT
