You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
2.8 KiB
128 lines
2.8 KiB
#!/bin/sh
|
|
|
|
# TODO :
|
|
# - add root user detection
|
|
# - verify curl output to prevent overwriting config file with an HTTP answer
|
|
|
|
_usage() {
|
|
echo "
|
|
Usage: $0 <command> --url <wgportal_url> [options...]
|
|
|
|
Commands :
|
|
-d, --download only download config file
|
|
-i, --install download config file and install the service (UNIMPLEMENTED)
|
|
|
|
Parameters:
|
|
-u, --url <url> Specify your WG Portal base URL
|
|
-f, --filename <file> Specify Wireguard filename (default: /etc/wireguard/wg0.conf)
|
|
"
|
|
_version
|
|
}
|
|
|
|
_version() {
|
|
printf "%s version pre-alpha 0.1 (yes we're very cautious)\n" "$0"
|
|
printf "USE AT YOUR OWN RISK and read the code before\n"
|
|
}
|
|
|
|
_startswith() {
|
|
_str="$1"
|
|
_sub="$2"
|
|
echo "$_str" | grep "^$_sub" >/dev/null 2>&1
|
|
}
|
|
|
|
_download() {
|
|
[ -z "$WGPORTAL_URL" ] && printf "Please set wg-portal URL (see help)\n" && return 1
|
|
[ -z "$WG_CONFFILE" ] && WG_CONFFILE=/etc/wireguard/wg0.conf
|
|
|
|
trap 'stty echo; exit 99;' INT
|
|
|
|
if [ -f $WG_CONFFILE -a "$OVERWRITE" != "on" ]; then
|
|
printf "WARNING : Wireguard config file already exists\n"
|
|
printf "Exiting now to prevent overrid of your actual parameters\n"
|
|
printf "You can force config overwriting with :\n"
|
|
printf "OVERWRITE=on %s %s\n" "$0" "$_ARGS"
|
|
exit 1;
|
|
fi
|
|
|
|
printf "Username: "
|
|
IFS= read -r username
|
|
|
|
printf "Password: "
|
|
stty -echo
|
|
IFS= read -r password
|
|
stty echo
|
|
printf "\n"
|
|
|
|
printf "Peer public key: "
|
|
IFS= read -r wgpubkey
|
|
printf "\n"
|
|
|
|
HTTP_STATUS=$(curl -w "%{http_code}" -G -s -o $WG_CONFFILE --user $username:$password --data-urlencode "pkey=$wgpubkey" -X GET $WGPORTAL_URL"api/v1/provisioning/peer" -H "accept: text/plain")
|
|
res=$?
|
|
if [ "$res" != "0" ]; then
|
|
echo "the curl command failed with: $res"
|
|
fi
|
|
|
|
[ $HTTP_STATUS -ne 200 ] && printf "Curl returned HTTP code %s\n" "$HTTP_STATUS" && exit 1
|
|
|
|
printf "WG config successfully download at %s\n" "$WG_CONFFILE"
|
|
}
|
|
|
|
_install() {
|
|
printf "install : This command does nothing ... yet (TDB)\n"
|
|
}
|
|
|
|
_process() {
|
|
while [ ${#} -gt 0 ]; do
|
|
case "${1}" in
|
|
--help | -h)
|
|
_usage
|
|
return
|
|
;;
|
|
--version | -v)
|
|
_version
|
|
return
|
|
;;
|
|
--download | -d)
|
|
_CMD="download"
|
|
;;
|
|
--url | -u)
|
|
WGPORTAL_URL="$2"
|
|
shift
|
|
;;
|
|
--filename | -f)
|
|
WG_CONFFILE="$2"
|
|
shift
|
|
;;
|
|
--install | -i)
|
|
_CMD="install"
|
|
;;
|
|
*)
|
|
printf "Unknown parameter : %s\n" "$1"
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
shift 1
|
|
done
|
|
case "${_CMD}" in
|
|
download)
|
|
_download
|
|
;;
|
|
install)
|
|
_install
|
|
;;
|
|
*)
|
|
if [ "$_CMD" ]; then
|
|
printf "Invalid command: %s\n" "$_CMD"
|
|
fi
|
|
esac
|
|
}
|
|
|
|
main() {
|
|
[ -z "$1" ] && _usage && return
|
|
if _startswith "$1" '-'; then _process "$@"; else "$@"; fi
|
|
}
|
|
|
|
_ARGS="$*"
|
|
main "$@"
|