#!/bin/bash
cnf_hostname=`/bin/hostname -f`

# Check for hostname -f command issue
hostnameissuecheck=$?
if [ $hostnameissuecheck -ne 0 ];then
	cnf_hostname=`/bin/hostname`
fi

# Cert
if [ -e "/root/$cnf_hostname.crt" ];then
	mv /root/$cnf_hostname.crt /root/$cnf_hostname.crt.$(date +%F-%H:%M:%S)
fi

# Key
if [ -e "/root/$cnf_hostname.key" ];then
	mv /root/$cnf_hostname.key /root/$cnf_hostname.key.$(date +%F-%H:%M:%S)
fi


# SSL Self signed certificate
cd /root
DOMAIN="$cnf_hostname"
if [ -z "$DOMAIN" ]; then
echo "Usage: $(basename $0) <domain>"
exit 11
fi

fail_if_error() {
[ $1 != 0 ] && {
unset PASSPHRASE
exit 10
}
}

# Generate a passphrase
export PASSPHRASE=$(head -c 500 /dev/urandom | tr -dc a-z0-9A-Z | head -c 128; echo)

# Certificate details; replace items in angle brackets with your own info
subj="
C=HR
ST=Zagreb
O=CentOS Web Panel
localityName=HR
commonName=$DOMAIN
organizationalUnitName=CentOS Web Panel
emailAddress=info@centos-webpanel.com
"

# Generate the server private key
openssl genrsa -des3 -out $DOMAIN.key -passout env:PASSPHRASE 2048
fail_if_error $?

# Generate the CSR
openssl req \
-new \
-batch \
-subj "$(echo -n "$subj" | tr "\n" "/")" \
-key $DOMAIN.key \
-out $DOMAIN.csr \
-passin env:PASSPHRASE
fail_if_error $?
cp $DOMAIN.key $DOMAIN.key.org
fail_if_error $?

# Strip the password so we don't have to type it every time we restart Apache
openssl rsa -in $DOMAIN.key.org -out $DOMAIN.key -passin env:PASSPHRASE
fail_if_error $?

# Generate the cert (good for 10 years)
openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt
fail_if_error $?

# Prepare Clean
if [ -e "/etc/pki/tls/private/hostname.key" ];then
	mv /etc/pki/tls/private/hostname.key /etc/pki/tls/private/hostname.key.$(date +%F-%H:%M:%S)
fi

if [ -e "/etc/pki/tls/certs/hostname.crt" ];then
	mv /etc/pki/tls/certs/hostname.crt /etc/pki/tls/certs/hostname.crt.$(date +%F-%H:%M:%S)
fi

if [ -e "/etc/pki/tls/certs/hostname.cert" ];then
	mv /etc/pki/tls/certs/hostname.cert /etc/pki/tls/certs/hostname.cert.$(date +%F-%H:%M:%S)
fi

mv /root/$cnf_hostname.key /etc/pki/tls/private/hostname.key
mv /root/$cnf_hostname.crt /etc/pki/tls/certs/hostname.crt


if [ -e "/etc/pki/tls/private/$cnf_hostname.key" ];then
	unlink /etc/pki/tls/private/$cnf_hostname.key
fi

if [ -e "/etc/pki/tls/certs/$cnf_hostname.crt" ];then
	unlink /etc/pki/tls/certs/$cnf_hostname.crt
fi

if [ -e "/etc/pki/tls/certs/$cnf_hostname.cert" ];then
	unlink /etc/pki/tls/certs/$cnf_hostname.cert
fi

if [ -e "/etc/pki/tls/certs/server-cwp.crt" ];then
	unlink /etc/pki/tls/certs/server-cwp.crt
fi

if [ -e "/etc/pki/tls/certs/server-dovecot.crt" ];then
	unlink /etc/pki/tls/certs/server-dovecot.crt
fi

if [ -e "/etc/pki/tls/certs/server-http.crt" ];then
	unlink /etc/pki/tls/certs/server-http.crt
fi

if [ -e "/etc/pki/tls/certs/server-postfix.crt" ];then
	unlink /etc/pki/tls/certs/server-postfix.crt
fi

if [ -e "/etc/pki/tls/private/server-cwp.key" ];then
	unlink /etc/pki/tls/private/server-cwp.key
fi

if [ -e "/etc/pki/tls/private/server-dovecot.key" ];then
	unlink /etc/pki/tls/private/server-dovecot.key
fi

if [ -e "/etc/pki/tls/private/server-http.key" ];then
	unlink /etc/pki/tls/private/server-http.key
fi

if [ -e "/etc/pki/tls/private/server-postfix.key" ];then
	unlink /etc/pki/tls/private/server-postfix.key
fi


ln -s /etc/pki/tls/private/hostname.key /etc/pki/tls/private/$cnf_hostname.key
ln -s /etc/pki/tls/certs/hostname.crt /etc/pki/tls/certs/$cnf_hostname.crt
ln -s /etc/pki/tls/certs/hostname.crt /etc/pki/tls/certs/$cnf_hostname.cert

# Services Certs
ln -s /etc/pki/tls/certs/hostname.crt /etc/pki/tls/certs/server-cwp.crt
ln -s /etc/pki/tls/certs/hostname.crt /etc/pki/tls/certs/server-dovecot.crt
ln -s /etc/pki/tls/certs/hostname.crt /etc/pki/tls/certs/server-http.crt
ln -s /etc/pki/tls/certs/hostname.crt /etc/pki/tls/certs/server-postfix.crt

ln -s /etc/pki/tls/private/hostname.key /etc/pki/tls/private/server-cwp.key
ln -s /etc/pki/tls/private/hostname.key /etc/pki/tls/private/server-dovecot.key
ln -s /etc/pki/tls/private/hostname.key /etc/pki/tls/private/server-http.key
ln -s /etc/pki/tls/private/hostname.key /etc/pki/tls/private/server-postfix.key

echo " " > /etc/pki/tls/certs/$cnf_hostname.bundle

##### END SSL Certifikat START #####
