#!/bin/bash

#================================================================================
# Инициализация
#================================================================================
SUCCESS=0
ERROR=1

#================================================================================
# Функции
#================================================================================
function getOTP() {
    local USERS=($(who | awk '{ if ($2 !~ /^pts/) print $1 }'))

    for username in "${USERS[@]}"
    do
        local userid=$(id -u "$username")
        if [ $userid -ge 1000  ]; then
            export XDG_RUNTIME_DIR=/run/user/$userid
            break
        fi
    done

    echo $(zenity --password)
}

function disconnect() {
    SCRIPT_PATH=$(dirname "$(readlink -f "$0")")
    $SCRIPT_PATH/astra-mobile-vpn-stop
}

function connect_not_mpl() {
    return $ERROR
}

function connect_openconnect_impl() {
    local exit_code=$SUCCESS
#     ПОЛЯ ТРЕБУЮТ ЗАПОЛНЕНИЯ!
    local URL=""
    local GROUP=""
    local USERNAME=""
    local PASSWORD=""
    local USE_2FA=1

    if [[ -z "$URL" || -z "$(command -v openconnect)" ]]; then
        exit_code=$ERROR
    else
        if [ $USE_2FA -eq 0 ]; then
            openconnect --background --user="${USERNAME}" --authgroup="${GROUP}" --passwd-on-stdin "${URL}" <<< $(echo -e "${PASSWORD}")
            exit_code=$?
        else
            local OTPCODE="$(getOTP)"

            if [ -z "$OTPCODE" ]; then
                exit_code=$ERROR
            else
                openconnect --background --user="${USERNAME}" --authgroup="${GROUP}" --passwd-on-stdin "${URL}" <<< $(echo -e "${PASSWORD}\n${OTPCODE}")
                exit_code=$?
            fi
        fi
    fi

    return $exit_code
}

function connect_vipnet_impl() {
    local exit_code=$SUCCESS

    if [ -z "$(command -v vipnetclient)" ]; then
        exit_code=$ERROR
    else
        vipnetclient start
        exit_code=$?
    fi

    return $exit_code
}

function connect_continent_ap_impl() {
    local exit_code=$SUCCESS
    local USE_DEFAULT_PROFILE=1

    local CTS_PATH='/usr/share/cts/bin'
    PATH="$PATH:$CTS_PATH"

    if [ -z "$(command -v cts)" ]; then
        exit_code=$ERROR
    else
        if [ $USE_DEFAULT_PROFILE -eq 0 ]; then
            cts autoconnect
            exit_code=$?
        else
#             ПОЛЯ ТРЕБУЮТ ЗАПОЛНЕНИЯ!
            local NAME=""
            local PASS=""

            cts connect -profile "${NAME}" -pass "${PASS}"
            exit_code=$?
        fi
    fi

    return $exit_code
}

function connect_imitation_impl() {
    echo 0 > '/tmp/test.vpn'
    return $SUCCESS
}

function main() {
    disconnect

#     ВЫБОР РЕАЛИЗАЦИИ
    connect_not_mpl
#     connect_openconnect_impl
#     connect_vipnet_impl
#     connect_continent_ap_impl
#     connect_imitation_impl

    return $?
}

#================================================================================
# main
#================================================================================
main
exit $?
