#!/bin/bash

SCRIPT_VER="1.5"

APP="ruTorrent (Latest)"
APP_CATEGORY="Torrent Clients and Utilities"
APP_SCOPE="user"
APP_ENABLED="yes"
##><#APP_UPGRADE_VER_CMD="wget -S --timeout=10 --tries=3 -vvv --spider https://github.com/Novik/ruTorrent/tarball/master 2>&1 | grep filename= | awk "{print \$3}" | sed -e "s/filename=Novik-ruTorrent-\(.*\)\.tar\.gz/\1/" | sed "s/\(.*\)-.*/\1/" | tr "-" "_""
#><#APP_UPGRADE_VER_CMD="echo "3.10""
SUPPORTED_ON="Debian9,Debian10,Ubuntu16.04,Ubuntu18.04"
DAEMON_PORT=5000
USE_APACHE2="yes"
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="/var/www/rutorrent"
APP_SESSION_DIRECTORY="/var/www/session"
RUTORRENT_VERSION="3.10"

while : ; do

    main_rc=1

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


    ADD_PKGS=""
    case "${LSB_VENDOR}" in
      "Debian"|"Ubuntu")
          case "${LSB_CODENAME}" in
              "stretch"|"buster")
                  # Plowshare
                  ADD_PKGS="${ADD_PKGS} plowshare"
                  # PHP
                  ADD_PKGS="${ADD_PKGS} php libapache2-mod-php php-xmlrpc php-geoip rar unrar"
                  ;;
              "vivid"|"wily")
                  # Plowshare
                  ADD_APT_REPO "ppa:plowsharepackagers/daily"
                  if [ $? -eq 0 ] ; then
                      ADD_PKGS="${ADD_PKGS} plowshare4"
                      APT_UPDATE="yes"
                  else
                      ERROR "Will skip 'plowshare4' installation"
                  fi
                  # PHP
                  ADD_PKGS="${ADD_PKGS} php5 libapache2-mod-php5 php5-xmlrpc php5-geoip rar unrar"
                  ;;
              "xenial")
                  # Plowshare
                  ADD_PKGS="${ADD_PKGS} plowshare"
                  # PHP
                  ADD_PKGS="${ADD_PKGS} php7.0 libapache2-mod-php7.0 php7.0-xml php7.0-xmlrpc php-mbstring php-geoip rar unrar"

                  ;;
              "bionic")
                  # Plowshare, archivers
                  ADD_PKGS="${ADD_PKGS} plowshare rar unrar"
                  # PHP
                  ADD_PKGS="${ADD_PKGS} php libapache2-mod-php php-xml php-xmlrpc php-mbstring php-geoip"

                  ;;
              *)
                  ERROR "Unsupported ${LSB_VENDOR} release: ${LSB_RELEASE}"
                  break
                  ;;
          esac

          APT_UPDATE || break

          APT_INSTALL \
              "apache2" \
              "rtorrent" \
              "libapache2-mod-scgi" \
              "git-core" \
              "screen" \
              "ffmpeg" \
              "mediainfo" \
              "bzip2" \
              "zip" \
              "sox" \
              ${ADD_PKGS} \
            || break
          ;;
    esac

    RM_FILES \
        "${APP_DIRECTORY}/css/style.css" \
        "${APP_DIRECTORY}/plugins/mediainfo/init.js" \
        "${APP_DIRECTORY}/plugins/screenshots/ffmpeg.php" \
        "${APP_DIRECTORY}/plugins/theme/conf.php" \
      || break

    RM_DIRS "${APP_DIRECTORY}/.git" \
            "${APP_DIRECTORY}/.github" \
            "${APP_DIRECTORY}/css" \
            "${APP_DIRECTORY}/images" \
            "${APP_DIRECTORY}/js" \
            "${APP_DIRECTORY}/lang" \
            "${APP_DIRECTORY}/php" \
            "${APP_DIRECTORY}/plugins"

#    oWD="$( pwd )"
#    cd "${APP_DIRECTORY}" || break
#    if [ ! -d "./.git" ] ; then
#        RUN_LOG "git init" || break
#        RUN_LOG "git config --global user.email 'user@example.com'" || break
#        RUN_LOG "git config --global user.name 'Seedbox Admin'" || break
#        RUN_LOG "git add ." || break
#        RUN_LOG "git commit -m'RSB: initial commit'" || break
#        RUN_LOG "git clean -f" || break
#        RUN_LOG "git remote add origin 'https://github.com/Novik/ruTorrent'" || break
#    fi
#    RUN_LOG "git fetch --all" || break
#    RUN_LOG "git reset --hard origin/master" || break
#    RUN_LOG "git pull --no-edit origin master -f" || break
#    cd "${oWD}"

    WGET "https://github.com/Novik/ruTorrent/archive/refs/tags/v${RUTORRENT_VERSION}.tar.gz" \
         "${TMP_DIR}/rutorrent.tar.gz" \
      || break
    TAR_ZXF "${TMP_DIR}/rutorrent.tar.gz" "${TMP_DIR}/" \
      || break

    RUN_LOG "mv -f '${TMP_DIR}/ruTorrent-${RUTORRENT_VERSION}'/* '${APP_DIRECTORY}'/"


    # Configure Screenshots plugin
    RUN_LOG "sed -i -e \"s|'exfrmcount'=>.*,|'exfrmcount'=>10,|\" \
        '${APP_DIRECTORY}/plugins/screenshots/ffmpeg.php'"
    RUN_LOG "sed -i -e \"s|'exfrminterval'=>.*,|'exfrminterval'=>90,|\" \
        '${APP_DIRECTORY}/plugins/screenshots/ffmpeg.php'"

    JOB_NAME="Creating '${APP_DIRECTORY}/.htaccess' file"
    cat <<-EOF > "${APP_DIRECTORY}/.htaccess" 2>> "${LOGFILE}"
	AuthType Basic
	AuthName "ruTorrent Login"
	AuthUserFile  "${APP_DIRECTORY}/.htpasswd"
	require valid-user
	EOF
    [ $? -ne 0 ] && ERROR "Error code: $?"

    # install rutorrent-thirdparty-plugins
    GIT_CLONE "https://github.com/nelu/rutorrent-thirdparty-plugins" \
              "${TMP_DIR}/rutorrent-thirdparty-plugins"
    if [ $? -eq 0 ] ; then
        RM_DIRS "${TMP_DIR}/rutorrent-thirdparty-plugins/.git"
        CP_DIR "${TMP_DIR}/rutorrent-thirdparty-plugins/." \
               "${APP_DIRECTORY}/plugins/"
        #
        # -- Disable Screenshots plugin in File Manager (it is broken as of Aug-2016)
        cat <<-EOF > "${APP_DIRECTORY}/plugins/filemanager/scripts/screens" 2>> "${LOGFILE}"
		#!/bin/bash

		SCRIPT_VER="1.0"
		echo "FATAL ERROR: this plugin is broken." >> "\$2/log"
		echo "FATAL ERROR: Please use standard ruTorrent's Screenshot plugin." >> "\$2/log"
		exit
		EOF
        CHMOD_FILE 755 "${APP_DIRECTORY}/plugins/filemanager/scripts/screens"

        #
        # -- Disable context menu for Filemanager's Screenshots plugin
        RUN_LOG "sed -i -e 's|^\(\s*create_sub\.push(\[theUILang\.fcScreens.*\)$|//\1|' \
            '${APP_DIRECTORY}/plugins/filemanager/init.js' 2>&1"
        #
        # -- Do not show "hidden" files
        RUN_LOG "sed -i -e 's|^\(.*showhidden:\).*,.*$|\1 false,|' \
            '${APP_DIRECTORY}/plugins/filemanager/init.js' 2>&1"

        # -- Remove 'mediastream' plugin
        # this will remove 'View' context menu entry from 'filemanager' plugin
        RM_DIRS "${APP_DIRECTORY}/plugins/mediastream"

#        # -- Remove 'fileupload' plugin
#        # !!! BROKEN as of 2022/01/11 !!!
#        RM_DIRS "${APP_DIRECTORY}/plugins/fileupload"

        # -- Remove '_cloudflare' plugin
        RM_DIRS "${APP_DIRECTORY}/plugins/_cloudflare"
        
        # -- Fix `fileshare` plugin
        LN "/var/www/rutorrent/plugins/fileshare/share.php" \
           "/var/www/html/share.php" \
         || break
        RUN_LOG "sed -i -e 's|^\\\$downloadpath.*|\\\$downloadpath = \"https://\".\\\$_SERVER['\\''HTTP_X_FORWARDED_HOST'\\''].\"/share.php\";|' /var/www/rutorrent/plugins/fileshare/conf.php" \
         || break
    fi


    # install ratiocolor plugin
    RM_DIRS "${APP_DIRECTORY}/plugins/ratiocolor"
    GIT_CLONE "https://github.com/Gyran/rutorrent-ratiocolor" "${APP_DIRECTORY}/plugins/ratiocolor" \
        && RM_DIRS "${APP_DIRECTORY}/plugins/ratiocolor/.git"

    # install rutorrent logoff plugin
    # !!! BROKEN as of 2022/01/11 !!!
    WGET \
        "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/rutorrent-logoff/logoff-1.3.tar.gz" \
        "${TMP_DIR}/logoff.tar.gz"
    TAR_ZXF "${TMP_DIR}/logoff.tar.gz" "${APP_DIRECTORY}/plugins/"

    # install `mobile` plugin
    GIT_CLONE "https://github.com/xombiemp/rutorrentMobile" \
              "${APP_DIRECTORY}/plugins/mobile"
    # remove `ipad` plugin - it conflicts with the `mobile` plugin
    [ -d "${APP_DIRECTORY}/plugins/ipad" ] \
        && RM_DIRS "${APP_DIRECTORY}/plugins/ipad"


    # 20190904: Install ruTorrent themes
    # https://github.com/artyuum/ruTorrent-Themes
    for theme in \
      "Agent34" \
      "Agent46" \
      "club-quad" \
      "club-Swizards" \
      "QuickBox-Dark" \
      "MaterialDesign" \
      "FlatUI_Dark" \
      "FlatUI_Light" \
      "FlatUI_Material" \
    ; do
        WGET \
            "${SUPPORT}/rutorrent/${theme}.tar.gz" \
          || break 2
        TAR_ZXF "${TMP_DIR}/${theme}.tar.gz" "${APP_DIRECTORY}/plugins/theme/themes/" \
          || break 2
    done

    #
    # Set rutorrent directory owner & permissions
    CHOWN_DIR "${APACHE_USER}":"${APACHE_GROUP}" "${APP_DIRECTORY}"
    RUN_LOG "find '${APP_DIRECTORY}' -type d -exec chmod 0755 {} \; 2>&1"

    # Restart service 'rtorrent@user'
    SVC_STATUS "rtorrent@${USERNAME}" \
        && SVC_RESTART "rtorrent@${USERNAME}"


    main_rc=0
    break

done


SCRIPTEXIT
