#!/usr/bin/env bash
##makedesc: Install openvpn v2.6.3 (src)

set -eo pipefail

installed() { command -v "$1" >/dev/null 2>&1; }

require() {
    local missing=()
    for pkg in "$@"; do
        installed "$pkg" || missing+=("$pkg")
    done
    if [ ${#missing[@]} -gt 0 ]; then
        if [ "$(uname -s)" = "Darwin" ]; then
            if installed brew; then
                brew install "${missing[@]}"
            else
                echo "ERROR: Missing: ${missing[*]}. Install manually or use brew." >&2
                exit 1
            fi
        else
            sudo apt install -y "${missing[@]}"
        fi
    fi
}

download() {
    if installed wget; then
        wget -q --show-progress "$1" -O "$2"
    else
        curl -fsSL "$1" -o "$2"
    fi
}

unpack_targz() {
    tar -xzvf "$1" -C "$2"
}

install() {
    if [ "$(uname -s)" = "Darwin" ]; then
        if installed brew; then
            brew install openvpn
        else
            echo "ERROR: Install Homebrew first." >&2
            exit 1
        fi
        return
    fi

    echo
    echo "==============================================="
    echo "Installing openvpn"
    echo "==============================================="
    echo

    # https://openvpn.net/community-downloads/
    # https://openvpn.net/community-resources/installing-openvpn/

    OVPNVER='2.6.3'

    require libssl-dev liblzo2-dev libpam0g-dev

    mkdir -p "$HOME/install/"
    download "https://swupdate.openvpn.org/community/releases/openvpn-${OVPNVER}.tar.gz" "$HOME/install/openvpn-${OVPNVER}.tar.gz"
    unpack_targz "$HOME/install/openvpn-${OVPNVER}.tar.gz" "$HOME/install/"
    cd "$HOME/install/openvpn-${OVPNVER}"
    sudo ./configure
    sudo make
    sudo make install
    sudo apt install -y network-manager-openvpn network-manager-openvpn-gnome

    echo
    echo "Finish!"
    openvpn --version
    echo
}

case "$1" in
    *) install ;;
esac
