#!/usr/bin/env bash
### Copyright 1999-2026. WebPros International GmbH. All rights reserved.

SFTP_SOCKET="proftpd-sftp.socket"
SFTP_SOCKET_DROPIN_DIR="/etc/systemd/system/${SFTP_SOCKET}.d"
SFTP_SOCKET_DROPIN="${SFTP_SOCKET_DROPIN_DIR}/10-plesk-port.conf"

usage()
{
    cat << EOH

Usage: $0 --enable <port>
       $0 --disable

 Enables or disables the Plesk ProFTPD SFTP instance.

EOH
}

enable_socket()
{
    local port="$1"
    mkdir -p "$SFTP_SOCKET_DROPIN_DIR" || return $?
    cat > "$SFTP_SOCKET_DROPIN" << EOF || return $?
[Socket]
ListenStream=
ListenStream=${port}
EOF
    chmod 644 "$SFTP_SOCKET_DROPIN"
    systemctl daemon-reload
    systemctl enable --quiet "$SFTP_SOCKET"
    systemctl restart "$SFTP_SOCKET"
}

disable_socket()
{
    systemctl disable --now "$SFTP_SOCKET" || return $?
    systemctl stop 'proftpd-sftp@*.service' >/dev/null 2>&1
    return 0
}

action=""
port=""
while [ $# -gt 0 ]; do
    case "$1" in
        --enable)
            action="enable"
            shift
            port="$1"
            ;;
        --disable) action="disable" ;;
        *)         usage; exit 1 ;;
    esac
    shift
done

case "$action" in
    enable)
        if ! [[ "$port" =~ ^[0-9]+$ ]] || (( 10#$port < 1 || 10#$port > 65535 )); then
            echo "The --enable port must be an integer between 1 and 65535" >&2
            exit 1
        fi
        enable_socket "$port"
        ;;
    disable)
        disable_socket
        ;;
    *)
        usage
        exit 1
        ;;
esac

exit $?
