#!/usr/bin/env bash

# set -xe

eval $(egrep -v '^#' .env | xargs)
cd ./docker/cert/

rm dhparam.pem
rm $VIRTUAL_HOST.*

cat <<EOF >> ssl.conf
[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = NO
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = Norway
localityName                = Locality Name (eg, city)
localityName_default        = Trondheim
organizationName            = Organization Name (eg, company)
organizationName_default    = Headspin AS
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = localhost

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = $VIRTUAL_HOST
EOF

if [ ! -f dhparam.pem ]; then
	echo "dhparam.pem doesn't exist, downloading new one"
	wget -qO dhparam.pem https://2ton.com.au/dhparam/4096
fi;

if [ ! -f $VIRTUAL_HOST.key ]; then
	echo "$VIRTUAL_HOST.key doesn't exist, generating a new one"
	openssl genrsa 4096 > $VIRTUAL_HOST.key
fi;

if [ ! -f $VIRTUAL_HOST.csr ]; then
	echo "$VIRTUAL_HOST.csr doesn't exist, generating a new one"

	openssl req -new -sha256 -utf8 \
		-out $VIRTUAL_HOST.csr \
		-key $VIRTUAL_HOST.key \
		-subj "/C=NO/ST=Sør-Trøndelag/L=Trondheim/O=Headspin AS/CN=$VIRTUAL_HOST" \
		-config ssl.conf

fi;

if [ ! -f $VIRTUAL_HOST.crt ]; then
	echo "$VIRTUAL_HOST.crt doesn't exist, generating a new one"
	openssl x509 -req \
		-days 365 \
		-in $VIRTUAL_HOST.csr \
		-signkey $VIRTUAL_HOST.key \
		-out $VIRTUAL_HOST.crt \
		-extensions req_ext \
		-extfile ssl.conf
fi;

rm ssl.conf