#!/bin/sh
set -e

if [ -n "$EX4DEBUG" ]; then
	echo "now debugging $0 $@"
	set -x
fi

DIR=/etc/exim
CERT=$DIR/exim.crt
KEY=$DIR/exim.key

if ! which openssl > /dev/null ;then
	echo "$0: openssl is not installed, exiting" 1>&2
	exit 1
fi

if [ "$1" != "--force" ] && [ -f $CERT ] && [ -f $KEY ]; then
	echo "[*] $CERT and $KEY exists!"
	printf "\n    Use \"$0 --force\" to force generation!\n"
	exit 0
fi

case "$1" in
	--force) shift;;
	--help) echo "Usage: $0 -or- $0 days keysize"; exit 0;;
esac

DAYS=${1:-1095}
KEYSIZE=${2:-4096}
SSLEAY="$(mktemp)" && chmod 600 "$SSLEAY"

cat > "$SSLEAY" <<-EOF
	RANDFILE = $HOME/.rnd
	[ req ]
	default_bits = $KEYSIZE
	default_keyfile = exim.key
	distinguished_name = req_distinguished_name
	[ req_distinguished_name ]
	countryName = Country Code (2 letters)
	countryName_default = US
	countryName_min = 2
	countryName_max = 2
	stateOrProvinceName = State or Province Name (full name)
	localityName = Locality Name (eg, city)
	organizationName = Organization Name (eg, company; recommended)
	organizationName_max = 64
	organizationalUnitName = Organizational Unit Name (eg, section)
	organizationalUnitName_max = 64
	commonName = Server name (eg. ssl.domain.tld; required!!!)
	commonName_max = 64
	emailAddress = Email Address
	emailAddress_max = 40
EOF

cat <<-EOF

	[*] Generating a self signed SSL certificate for Exim:

	    Key Size  = $KEYSIZE  Validity = $DAYS days
	    Key File  = $KEY
	    Cert File = $CERT

EOF
read -p 'Continue [ Y/n ] ? : ' ans

case "$ans" in
	n*|N*)	exit 0;;
	*)	printf "\n    Please enter the hostname of your MTA at the Common Name (CN) prompt:\n"
		openssl req -config "$SSLEAY" -x509 -newkey rsa:$KEYSIZE -keyout $KEY -out $CERT -days $DAYS -nodes
		rm -f "$SSLEAY"

		chown root:exim $KEY $CERT $DH
		chmod 640 $KEY $CERT $DH

		printf "\n[*] Done generating self signed certificates for exim!"
		;;
esac
