#!/bin/bash

pause () {
   read -p "$*"
}

usage () {
   echo "zmcreatecert v0.1b para Zimbra 5.0.11, por amperisblog[@]gmail.com"
   echo
   echo "Uso:"
   echo "   zmcreatecert create"
   echo
   echo "Importante:"
   echo "   Si deseas cambiar el tipo de hash por defecto del certificado de MD5 a SHA1, modifica el parametro"
   echo "   [default_md=md5] por [default_md=sha1] dentro de /opt/zimbra/conf/zmssl.cnf.in."
   echo
   exit 1;
}

if [ $# = 0 ]; then
   usage
fi

ACTION=$1
shift

if [ "$ACTION" = "create" ]; then

   echo '-> Creando backup de los certificados'
   cd /
   tar cf /tmp/zimbra-ssl-bak.tar opt/zimbra/ssl/
   tar cf /tmp/zimbra-ssl-conf-bak.tar opt/zimbra/conf/ca/ opt/zimbra/conf/*.crt opt/zimbra/conf/*.key opt/zimbra/java/jre/lib/security/cacerts
   
   echo '-> Creando estructura de carpetas SSL'
   rm -rf /opt/zimbra/ssl
   mkdir /opt/zimbra/ssl
   chown zimbra:zimbra /opt/zimbra/ssl

   echo '-> Eliminado certificado del cacerts keystore'
   /opt/zimbra/java/bin/keytool -delete -alias my_ca -keystore /opt/zimbra/java/jre/lib/security/cacerts -storepass changeit

   echo '-> Eliminado certficicado del mailbox keystore'
   PSW=$(su - zimbra -c 'zmlocalconfig -s -m nokey mailboxd_keystore_password')
   /opt/zimbra/java/bin/keytool -delete -alias jetty -keystore /opt/zimbra/mailboxd/etc/keystore -storepass ${PSW}

   echo '-> Creando certificados'
   /opt/zimbra/bin/zmcertmgr createca -new
   /opt/zimbra/bin/zmcertmgr deployca -localonly
   /opt/zimbra/bin/zmcertmgr createcrt self -new
   /opt/zimbra/bin/zmcertmgr verifycrt self

   echo '-> Instalando certificados'
   /opt/zimbra/bin/zmcertmgr deploycrt self

   echo '-> Comprobando certificados'
   /opt/zimbra/bin/zmprov -l gcf zimbraCertAuthorityKeySelfSigned 
   /opt/zimbra/bin/zmprov -l gcf zimbraCertAuthorityCertSelfSigned

   echo
   echo '-> Ahora voy a reiniciar Zimbra, ¿estas listo/a?'
   pause 'Enter para continuar...'


   echo '-> Parando Zimbra...'
   su - zimbra -c 'zmcontrol stop'
   echo '-> Arrancando Zimbra...'
   su - zimbra -c 'zmcontrol start'
   #echo '-> Comprobando el estado...'
   #su - zimbra -c 'zmcontrol status'

else
   usage
fi

exit 0;

