#!/sbin/runscript
# Copyright (c) 2005, Gecad Technologies
# For any feedback, please contact:
# "AXIGEN Team" <team@axigen.com>

opts="${opts} reload init"

depend() {
  need net hostname
  use logger
}

_gen_cert() {
  local ret
  local _ssl_cnf="/var/opt/axigen/axigen_ssl.cnf"
  local _cert_file="/var/opt/axigen/axigen_cert.pem"
  if [ "$1" != "force" ]; then
    if [ -f "${_cert_file}" ]; then
      return 0
    fi
  fi
  cat > ${_ssl_cnf} << SSLCNF
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
O=AXIGEN Mail Server
OU=Automatically-generated SSL key
CN=AXIGEN

[ cert_type ]
nsCertType = server
SSLCNF
  ebegin "Generating self-signed SSL certificate"
  openssl req -new -x509 -days 365 -nodes \
    -config ${_ssl_cnf} -out ${_cert_file} \
    -keyout ${_cert_file} >/dev/null 2>&1
  ret=$?
  eend "${ret}"
  chown axigen:axigen ${_cert_file} >/dev/null 2>&1
  rm -f ${_ssl_cnf} >/dev/null 2>&1
  return ${ret}
}

start() {
  # executes only if state is 'stopped'
  _gen_cert
  ebegin "Starting AXIGEN Mail Server"
  if pgrep -f -x ${AXIBIN} >/dev/null 2>&1; then
    # axigen is running
    ewarn "  Axigen daemon is already running"
    ebegin "  Resetting initscript state to 'started'"
    mark_service_started "${myservice}"
    eend
    return
  fi
  /sbin/start-stop-daemon --start --quiet --exec ${AXIBIN} --pidfile ${PIDFILE} -- ${AXIOPT}
  ret=$?
  if [[ ${ret} -ne 0 ]]; then
    eerror "Error while trying to start AXIGEN Mail Server"
    eerror "Please check the log files for more information"
  fi
  eend ${ret}
  if [ ${ret} -ne 0 ]; then
    return ${ret}
  fi
  return ${ret}
}

stop() {
  # executes only if state is 'started'
  ebegin "Stopping AXIGEN Mail Server"
  if ! pgrep -f -x ${AXIBIN} >/dev/null 2>&1; then
    # axigen is running
    ewarn "  Axigen daemon is not running"
    ebegin "  Resetting initscript state to 'stopped'"
    mark_service_stopped "${myservice}"
    eend
    return
  fi
  /sbin/start-stop-daemon --stop --quiet --retry 15 --exec ${AXIBIN} >/dev/null
  ret=$?
  if [[ ${ret} -ne 0 ]]; then
    eerror "Error while trying to stop AXIGEN Mail Server"
    eerror "Please check the log files for more information"
  fi
  eend ${ret}
}

reload() {
  if ! service_started "${myservice}"; then
    eerror "AXIGEN Mail Server not started!"
    eerror "reload signal can be sent only when server is running"
    ret=255
  else
    ebegin "Reloading AXIGEN Configuration"
    if [ -f "${PIDFILE}" ]; then
      kill -HUP $(<"${PIDFILE}")
      ret=$?
    else
      eerror "${PIDFILE} PID file does not exist"
      ret=1
    fi
  fi
  eend ${ret}
}

init() {
  _gen_cert force
}

