#!/bin/bash set -euo pipefail diyvpn_cfg="${DIYVPN_CFG:-$HOME/.config/diyvpn/servers}" add() { local name listen_address idle_timeout hostname port username identityfile read -rp "Server name [e.g. vps1] [required] : " name if [[ -d "$diyvpn_cfg/$name" ]]; then echo "Warning: $diyvpn_cfg/$name already exists. Exising files will be overwritten. [Ctrl+C to quit]" fi read -rp "Listen address [e.g. 127.0.0.1:9090] [required] : " listen_address read -rp "Idle Timeout [e.g. 5min] [5min] : " idle_timeout : "${idle_timeout:=5min}" read -rp "Remote server Ip [e.g. 1.2.3.4] [required] : " hostname read -rp "Remote server ssh port [e.g. 2222] [22] : " port : "${port:=22}" read -rp "Remote server username [e.g. dave] [required] : " username read -rp "SSH private key [e.g. ~/.ssh/id_ed25519] [required] : " identityfile mkdir -p "$diyvpn_cfg/$name" cat >"$diyvpn_cfg/$name/config.rc" <<-EOF LISTEN_ADDRESS=$listen_address IDLE_TIMEOUT=$idle_timeout EOF cat >"$diyvpn_cfg/$name/ssh_config" <<-EOF Hostname $hostname Port $port User $username IdentityFile $identityfile # vim: set filetype=sshconfig: EOF echo "Diyvpn config for $name added. Edit below configs for further changes" head -100 "$diyvpn_cfg/$name/"* systemctl --user daemon-reload systemctl --user start "diyvpnact-$name.socket" } list() { echo "config path: $diyvpn_cfg" paste <( echo "servers" cd "$diyvpn_cfg" basename ./* ) <( echo "ListenAddress" sed -n '/LISTEN/s/.*=\(.*\)/\1/p' "$diyvpn_cfg"/*/config.rc ) | column -t } action="${1:-none}" case "$action" in add) add ;; list) list ;; *) echo "Usage: diyvpnctl.sh [add|list]" ;; esac