#!/bin/bash

set -e

if [ -f /var/lib/openvpn-server/ca-store ]; then
    if grep -q ca-store /proc/mounts; then
        echo "ca-store mounted"
    else
        echo "ca-store not mounted, or your session has expired."
        echo "Use ovs mount-ca-store to mount your ca-store"
        exit 1
    fi
fi

. /usr/share/openvpn-server/functions.sh
. /etc/openvpn-server/config.sh

WORKDIR=$(mktemp -d)
pushd $WORKDIR >/dev/null

# Command-line arguments
OVPN_COMMONNAME=$1
OVPN_EMAIL=$2
EMAIL=${3:-n}  # Optional third argument to skip email prompt, default to 'n'

if [ -z "$OVPN_COMMONNAME" ] || [ -z "$OVPN_EMAIL" ]; then
    ask_key_questions
fi

FILEBASE="${OVPN_ORGNICK}-${OVPN_COMMONNAME}"

make_generic_bundle "$OVPN_EMAIL" "$OVPN_COMMONNAME" "$WORKDIR"

CA=$(cat "$OVPN_ORGNAME"-ca.crt)
CERT=$(sed -n "/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p" $OVPN_COMMONNAME.crt)
KEY=$(cat $OVPN_COMMONNAME.key)

sed "s/%%PORT%%/$OVPN_PORT/;
    s/%%PORT2%%/$OVPN_PORT2/;
    s/%%PROTOCOL%%/$OVPN_PROTO/;
    s/%%REMOTEIP%%/$OVPN_REMOTEIP/;
    s/%%REMOTE%%/$OVPN_REMOTE/" \
    /usr/share/openvpn-server/config-templates/ovpn-generic-client.conf \
    > ${FILEBASE}.ovpn

cat <<EOF >>${FILEBASE}.ovpn
<ca>
$CA
</ca>
<cert>
$CERT
</cert>
<key>
$KEY
</key>
EOF

if [ "$AUTHUSERPASS" == "yes" ]; then
    cat <<EOF >>${FILEBASE}.ovpn
auth-user-pass
reneg-sec 0
EOF
fi

popd >/dev/null

OVPNFILE="openvpn-${FILEBASE}.ovpn"
cp ${WORKDIR}/${FILEBASE}.ovpn ./$OVPNFILE

if [ -z "$CACHE_BUILDS" ]; then
    cp ${WORKDIR}/${FILEBASE}.ovpn ./$OVPNFILE
    echo "Your OpenVPN generic client has been built in ${OVPNFILE}"
else
    make_cache
    cp ${WORKDIR}/${FILEBASE}.ovpn "${CACHE_BUILDS}/${OVPNFILE}"
    echo "Your OpenVPN generic client has been built in ${CACHE_BUILDS}/${OVPNFILE}"
fi

rm -rf $WORKDIR

if [ "$EMAIL" == "y" ]; then
    if [ -z "$3" ]; then
        read -p "Users E-mail address to send .ovpn file: " EMAILADDRESS
    else
        EMAILADDRESS=$3
    fi

    uuencode $OVPNFILE $OVPNFILE | bsd-mailx -s "OpenVPN Client $OVPN_COMMONNAME" $EMAILADDRESS
else
    echo -n ""
fi

upload_nextcloud $OVPNFILE


