#!/usr/bin/env bash

connect() {
	read -sp $'Please enter your Encryption Password: ' encpass
	echo "
    ==> Connecting"
	TOKEN=$(cat ~/.local/share/ethz-vpn-connect/ethzvpntoken.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
	PASSWORD=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnpass.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
	USERNAME=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnusername.txt)
	echo $PASSWORD | sudo openconnect -b -u $USERNAME@student-net.ethz.ch -g student-net --useragent=AnyConnect --no-external-auth --passwd-on-stdin --token-mode=totp --token-secret=sha1:base32:$TOKEN sslvpn.ethz.ch
	if [ $? -ne 0 ]; then
		echo ' ==> Failed to connect <=='
	else
		echo ' ==> Connected <==
        '
	fi
	encpass=""
	PASSWORD=""
	TOKEN=""
}

disconnect() {
	sudo killall -v -SIGINT openconnect
	echo " ==> Disconnected"
}

setup() {
	echo 'You are about to overwrite your secrets. Press ctrl + C to cancel.'
	read -p 'Please enter your ETHZ-Username: ' USERNAME
	read -sp 'Please choose and enter your Encryption Password (will be required when launching): ' encpass
	echo ""
	read -sp 'Please enter your ETHZ WLAN (= Radius) Password: ' PASSWORD
	echo ""
	read -sp 'Please enter your ETHZ OTP Secret: ' TOKEN
	echo ""
	if [[ -d ~/.local/share/ethz-vpn-connect ]]; then
		rm -rf ~/.local/share/ethz-vpn-connect
	fi
	mkdir ~/.local/share/ethz-vpn-connect
	echo $PASSWORD | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpnpass.secret
	echo $TOKEN | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpntoken.secret
	echo $USERNAME >~/.local/share/ethz-vpn-connect/ethzvpnusername.txt
	encpass=""
	PASSWORD=""
	TOKEN=""
	if [ $? -ne 0 ]; then
		echo ' ==> Failed to set secrets <=='
	else
		echo ' ==> Secrets set <==\n'
	fi
}

case "$1" in
'connect')
	connect
	;;
c)
	connect
	;;
'disconnect')
	disconnect
	;;
d)
	disconnect
	;;
dc)
	disconnect
	;;
setup)
	setup
	;;
*)
	echo -e 'Usage: ethz-vpn [Option] \n [Option]: \n       connect, c:             Connect VPN \n  disconnect, d, dc:      Disconnect VPN \n setup: set secrets and eth-Username.\n'
	;;
esac
