#!/bin/bash

SCRIPT_VER="1.7"

APP="CloudCmd"
APP_CATEGORY="File Managers"
APP_SCOPE="system"
APP_ENABLED="yes"
STORED_PASSWORD_SERVICE="userdir"
SUPPORTED_ON="Ubuntu20.04,Ubuntu22.04,Ubuntu24.04"
USE_APACHE2="yes"
DAEMON_PORT=48080
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

while : ; do

    main_rc=1

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


    NODEJS_INSTALL || break

    CC_PORT="$(( USERUID - FIRST_UID + 48080 ))"
    if [ "${USERUID}" = "${FIRST_UID}" ] ; then
        _prefix="/cloudcmd"
    else
        _prefix="/cloudcmd-${USERNAME}"
    fi
    RUN_LOG "npm i cloudcmd -g --force" || break
#    RUN_LOG "su ${USERNAME} -c 'cloudcmd --root ${USERHOME} --port ${CC_PORT} --prefix ${_prefix} --prefix-socket ${_prefix} --save --no-server'" || break
    RUN_LOG "su ${USERNAME} -c 'cloudcmd --root /media --port ${CC_PORT} --prefix ${_prefix} --prefix-socket ${_prefix} --save --no-server'" || break
    RUN_LOG "sed -i -e 's/^\(\s*\"ip\":\).*$/\1 \"127.0.0.1\",/' '${USERHOME}/.cloudcmd.json'" || break

    _svc_file="/etc/systemd/system/cloudcmd@.service"
    if [ ! -e "${_svc_file}" ] ; then
        cat <<-EOF > "${_svc_file}"
	[Unit]
	Description=CloudCmd
	After=network.target

	[Service]
	Type=simple
	User=%I
	Group=%I
	ExecStart=/usr/bin/cloudcmd --log
	Restart=always

	[Install]
	WantedBy=multi-user.target
	EOF
        SYSTEMD_RELOAD
    fi

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

    _apache_conf="/etc/apache2/userconf-enabled/cloudcmd-${USERNAME}.conf"
    _password_file="/etc/apache2/users.password"
    if [ ! -d "/etc/apache2/userconf-enabled/" ] ; then
        MKDIR "/etc/apache2/userconf-enabled" || break
    fi
    cat <<-EOF > "${_apache_conf}"
	RewriteEngine on
	RewriteRule ^${_prefix}$ ${_prefix}/ [R=permanent]
	<Location ${_prefix}>
	    order deny,allow
	    deny from all
	    allow from all
	    AuthType Digest
	    AuthName "apache2"
	    AuthUserFile ${_password_file}
	    Require user ${USERNAME}
	    ProxyPass http://localhost:${CC_PORT}${_prefix}
	    ProxyPassReverse http://localhost:${CC_PORT}${_prefix}
	</Location>
	EOF

    RUN_LOG "apachectl -t" || break
    SVC_RESTART "${APACHE_SVC}"


    main_rc=0
    break

done


# Cleanup if error
if [ ${main_rc} -ne 0 -a ${main_rc} -ne 111 -a ${main_rc} -ne 117 ] ; then
    ERROR "'${APP}': Starting cleanup procedure"
    SVC_DISABLE "cloudcmd@${USERNAME}"
    SVC_STOP  "cloudcmd@${USERNAME}"
    RM_FILES \
        "/etc/apache2/userconf-enabled/cloudcmd-${USERNAME}.conf" \
        "${USERHOME}/.cloudcmd.json"
fi

SCRIPTEXIT
