#!/bin/bash -e

fatal() { echo "FATAL: $@" 1>&2; exit 1; }

usage() {
cat<<EOF
Syntax: $0 client-name
Create an obfuscated URL for downloading the client profile via HTTPS.

EOF
exit 1
}

if [[ "$#" != "1" ]]; then
    usage
fi

client_name=$1

TEMPLATE=/var/www/wireguard/template.html
PROFILES=/var/www/wireguard/htdocs/profiles

CONF_PATH=/etc/wireguard/clients/$client_name.conf
[ -e $CONF_PATH ] || fatal "$CONF_PATH does not exist"

SERVER_ADDR=$(cat /etc/wireguard/domain.txt)
PROFILE_HASH=$(date +%s%N | cat $CONF_PATH - | sha1sum - | cut -d " " -f 1)
PROFILE_PATH=$PROFILES/$PROFILE_HASH
PROFILE_INDEX=$(mktemp /run/wireguard-profile-index.XXXXXX)

cleanup() {
    rm -f -- "$PROFILE_INDEX"
}
trap cleanup EXIT

install -d -o www-data -g www-data -m 0750 "$PROFILE_PATH"
install -o www-data -g www-data -m 0440 \
    "$CONF_PATH" "$PROFILE_PATH/$client_name.conf"
awk -v config_content="$(cat $CONF_PATH)" '{
    sub(/CONFIG_CONTENT/, config_content);
    print;
}' "$TEMPLATE" > "$PROFILE_INDEX"
sed -i "s|CLIENT_NAME|$client_name|" "$PROFILE_INDEX"
install -o www-data -g www-data -m 0440 \
    "$PROFILE_INDEX" "$PROFILE_PATH/index.html"

echo "URL: https://$SERVER_ADDR/profiles/$PROFILE_HASH/"
