#!/bin/sh
set -e

case "$1" in
  install)
    # Create /etc/ejabberd if it doesn't already exist
    mkdir -p /etc/ejabberd
    # Ejabberd config dir may contain sensitive data, so making it unreadable by
    # the world.
    if ! dpkg-statoverride --list /etc/ejabberd >/dev/null; then
        chmod 750 /etc/ejabberd
    fi

    # Create a certificate and store it in /etc/ejabberd
    echo "Generating SSL certificate /etc/ejabberd/ejabberd.pem..."
    EHOSTNAME=$(hostname -s 2>/dev/null || echo localhost)
    EDOMAINNAME=$(hostname -d 2>/dev/null || echo localdomain)
    openssl req -new -x509 -days 365 -nodes -out /etc/ejabberd/ejabberd.pem \
                -keyout /etc/ejabberd/ejabberd.pem > /dev/null 2>&1 <<+++
.
.
.
$EDOMAINNAME
$EHOSTNAME
ejabberd
root@$EHOSTNAME.$EDOMAINNAME
+++

    # Ejabberd cert should have appropriate permissions so as to not be readable
    # by the world.
    if [ -f /etc/ejabberd/ejabberd.pem ]
    then
        if ! dpkg-statoverride --list /etc/ejabberd/ejabberd.pem >/dev/null; then
            chmod 640 /etc/ejabberd/ejabberd.pem
        fi
    fi
  ;;

  upgrade)
    # This flag would determine whether or not debconf would query a user's
    # preferences - it is used for get_hostname() and  get_username() in debian/config
    touch /var/lib/ejabberd/.upgrade_flag && chmod 644 /var/lib/ejabberd/.upgrade_flag

    # If the config has an old node configuration (pre ejabberd/nodenamechanges),
    # use a flag so that debian/config may alert the user of a change and how to
    # deal with the change
    node_check="$(debconf-show ejabberd | grep -E 'ejabberd/nodenamechanges' | sed 's/.//2g')"
    if [ -z "$node_check" ]; then
      touch /var/lib/ejabberd/.ctlcfg.update

      if grep -Eq '^#?ERLANG_NODE=ejabberd$' /etc/default/ejabberd; then
        echo "high" > /var/lib/ejabberd/.ctlcfg.update
      else
        echo "medium" > /var/lib/ejabberd/.ctlcfg.update
      fi

      chmod 644 /var/lib/ejabberd/.ctlcfg.update
    fi
  ;;

  abort-upgrade)
    rm -f /var/lib/ejabberd/.upgrade_flag
  ;;

  *)
  echo "postinst called with unknown argument \`$1'" >&2
  exit 0
  ;;
esac

#DEBHELPER#

exit 0
