#!/bin/bash

SCRIPT_VER="1.5"

APP="Prowlarr"
APP_CATEGORY="Torrent Clients and Utilities"
APP_SCOPE="user"
APP_ENABLED="yes"
STORED_PASSWORD_SERVICE="user"
#><#APP_CHECK_VER_CMD="[ -e "/opt/Prowlarr/version.id" ] && cat "/opt/Prowlarr/version.id" || echo """
SUPPORTED_ON="Ubuntu20.04,Ubuntu22.04,Ubuntu24.04"
USE_APACHE2="yes"
DAEMON_PORT=9696
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}
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/prowlarr"
APP_HOME="/opt/Prowlarr"

while : ; do

    main_rc=1

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

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

    # -- Install reuired packeges
    APT_INSTALL "curl" "jq" "sqlite3" || break

    #
    # https://github.com/Prowlarr/Prowlarr
    #

    if [ ! -e "${APP_HOME}/version.id" ] ; then
        if [ -d "${APP_HOME}" ] ; then
            RM_DIRS "${APP_HOME}"
        fi
        INFO "Installing ${APP} into ${APP_HOME}"
        GITHUB_RELEASE "Prowlarr/Prowlarr" "latest" "x64" "tar.gz" "linux-core" || break
        _ver="${GITHUB_RELEASE_VERSION//v/}"
        APP_URL="${GITHUB_RELEASE_ASSET_URL}"
        APP_ARCHIVE="${GITHUB_RELEASE_ASSET_NAME}"

        if [ -z "${APP_URL}" ] ; then
            ERROR "Failed to resolve ${APP} release !"
            break
        fi
        WGET "${APP_URL}" || break
        TAR_ZXF "${TMP_DIR}/${APP_ARCHIVE}" "/opt/" || break
        echo "${_ver}" > "${APP_HOME}/version.id"
        CHOWN_DIR root:root "${APP_HOME}" || break
        RUN_LOG "find ${APP_HOME} -type d -exec chmod 755 {} \;"
        RUN_LOG "find ${APP_HOME} -type f -exec chmod 755 {} \;"
    fi

    MKDIR "${APP_DIRECTORY}" || break
    CHOWN_DIR "${USERNAME}":"${USERNAME}" "${APP_DIRECTORY}" || break
 
    PROWLARR_DAEMON_PORT="$(( USERUID + 9696 - FIRST_UID ))"

    cat <<-EOF > "/etc/systemd/system/prowlarr@.service"
	[Unit]
	Description=${APP} Daemon
	After=syslog.target network.target

	[Service]
	User=%i
	Group=%i
	Type=simple
	ExecStart=/opt/Prowlarr/Prowlarr -nobrowser -data=/home/%i/.config/prowlarr
	TimeoutStopSec=20
	KillMode=process
	Restart=on-failure

	[Install]
	WantedBy=multi-user.target
	EOF

    cat <<-EOF > "/etc/systemd/system/prowlarr.slice" 2>> "${LOGFILE}"
	[Unit]
	Description=${APP} resource limiting
	Before=slices.target

	[Slice]
	CPUAccounting=yes
	CPUQuota=20%
	IOAccounting=yes
	IOReadBandwidthMax=/ 20M
	IOWriteBandwidthMax=/ 20M
	EOF

    [ ! -d "/etc/systemd/system/prowlarr@.service.d" ] \
        && MKDIR "/etc/systemd/system/prowlarr@.service.d"

    cat <<-EOF > "/etc/systemd/system/prowlarr@.service.d/001-Slice.conf"
	[Service]
	Slice=prowlarr.slice
	EOF

    SYSTEMD_RELOAD

    #
    # -- Disable built-in auth
    # ---- https://wiki.servarr.com/prowlarr/faq#can-i-disable-forced-authentication
    #
    _url_sfx=""
    if [ "${USERUID}" != "${FIRST_UID}" ] ; then
        _url_sfx="-${USERNAME}"
    fi
    cat <<-EOF > "${APP_DIRECTORY}/config.xml"
	<Config>
	  <Port>${PROWLARR_DAEMON_PORT}</Port>
	  <BindAddress>127.0.0.1</BindAddress>
	  <UrlBase>prowlarr${_url_sfx}</UrlBase>
	  <EnableSsl>False</EnableSsl>
	  <LaunchBrowser>False</LaunchBrowser>
	  <UpdateAutomatically>False</UpdateAutomatically>
	  <LogLevel>info</LogLevel>
	  <UpdateMechanism>BuiltIn</UpdateMechanism>
	  <Branch>master</Branch>
	  <AuthenticationMethod>External</AuthenticationMethod>
	  <InstanceName>Prowlarr</InstanceName>
	  <SslPort>${PROWLARR_DAEMON_PORT}</SslPort>
	  <SslCertPath></SslCertPath>
	  <SslCertPassword></SslCertPassword>
	</Config>
	EOF
    CHOWN_FILE "${USERNAME}":"${USERNAME}" "${APP_DIRECTORY}/config.xml" || break

    # We can use ubuntu own libsqlite3 according to prowlarr FAQ
    if [[ "${LSB_VER}" == "Ubuntu20.04" ]]; then
        APT_INSTALL "libsqlite3-0" || break
        RUN_LOG "rm -f ${APP_HOME}/libe_sqlite3.so"
        RUN_LOG "ln -s /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 ${APP_HOME}/libe_sqlite3.so"
    fi

    SVC_ENABLE "prowlarr@${USERNAME}" || break
    SVC_START  "prowlarr@${USERNAME}" || break

    # -- Configure Apache
    if [ -d "/etc/apache2/userconf-enabled" ] ; then
        cat <<-EOF > "/etc/apache2/userconf-enabled/prowlarr-${USERNAME}.conf" 2>> "${LOGFILE}"
	RewriteEngine on
	RewriteRule ^/prowlarr${_url_sfx}$ /prowlarr${_url_sfx}/ [R=permanent]

	ProxyPreserveHost on
	ProxyPass /prowlarr${_url_sfx} http://127.0.0.1:${PROWLARR_DAEMON_PORT}/prowlarr${_url_sfx} connectiontimeout=5 timeout=300
	ProxyPassReverse /prowlarr${_url_sfx} http://127.0.0.1:${PROWLARR_DAEMON_PORT}/prowlarr${_url_sfx}

	RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
	RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}

	<Location /prowlarr${_url_sfx}>
	    Order deny,allow
	    Deny from all
	    Allow from all
	    AuthType Digest
	    AuthName "apache2"
	    AuthDigestProvider file
	    AuthUserFile "/etc/apache2/users.password"
	    Require user ${USERNAME}
	</Location>
	EOF
        SVC_RELOAD "apache2"
    fi


    main_rc=0
    break

done


SCRIPTEXIT
