#!/bin/bash
#
# postinst script for linuxmuster-base
# thomas@linuxmuster.net
# 20200319
# GPL v3
#

# see: dh_installdeb(1)

set -e

# summary of how this script can be called:
#        * <postinst> `configure' <most-recently-configured-version>
#        * <old-postinst> `abort-upgrade' <new version>
#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
#          <new-version>
#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
#          <failed-install-package> <version> `removing'
#          <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
#

NAME="linuxmuster-mail"
SHAREDIR="/usr/share/$NAME"
SYSDIR="/etc/linuxmuster"
SSLDIR="$SYSDIR/ssl"
DOCKERDIR="/srv/docker/$NAME"
START="$DOCKERDIR/start.sh"
STOP="$DOCKERDIR/stop.sh"
YAML="$DOCKERDIR/docker-compose.yml"
YAMLTPL="$SHAREDIR/templates/docker/docker-compose.yml"
MAILDATA="$DOCKERDIR/maildata"
MAILSTATE="$DOCKERDIR/mailstate"
SERVICE="/etc/systemd/system/$NAME.service"
RELEASE_OLD="release-v6.1.0"
RELEASE="stable"


case "$1" in

 configure)

  # create docker group & user
  grep -q ^docker: /etc/group || groupadd -g 5000 docker
  grep ^docker: /etc/group | grep -q 5000 || groupmod -g 5000 docker
  grep -q ^docker: /etc/passwd || useradd -u 5000 -d /srv/docker -g docker docker
  grep ^docker: /etc/passwd | grep -q 5000 || usermod -u 5000 -d /srv/docker -g docker docker

  # permissions
  mkdir -p "$SSLDIR"
  chgrp docker "$SSLDIR" -R
  chmod 750 "$SSLDIR"
  chown docker:docker "$MAILSTATE" -R
  chown docker:docker "$MAILDATA" -R
  chmod 775 "$MAILSTATE"
  chmod 775 "$MAILDATA"

  # remove obsolete systemd service
  if [ -s "$SERVICE" ]; then
    echo "Removing obsolete $NAME systemd service."
    systemctl disable "$NAME.service"
    mv "$SERVICE" "$SERVICE.dpkg-bak"
  fi

  # manage pinned version
  if [ -s "$YAML" ]; then
    current_release="$(grep image: "$YAML" | awk -F: '{ print $3 }')"
    if [ "$current_release" = "$RELEASE_OLD" -a ! -s "$YAML.bak-release" ]; then
      echo "Changing image version to $RELEASE."
      image="tvial/docker-mailserver:$RELEASE"
      cp "$YAML" "$YAML.bak-release"
      sed -e "s|image: .*|image: $image|" "$YAML.bak-release" > "$YAML"
      restart="yes"
    fi
    # check restart policy
    if ! grep -v ^# "$YAML" | grep -q 'restart:'; then
      echo "Adding restart policy to $YAML."
      cp "$YAML" "$YAML.bak-restart"
      sed -e 's|mail:|mail:\n    restart: always|' "$YAML.bak-restart" > "$YAML"
      restart="yes"
    fi
    # check compose file version
    cd "$DOCKERDIR"
    version="$(docker-compose config | grep ^version | awk -F\' '{ print $2 }' | awk -F\. '{ print $1 }')"
    if [ "$version" = "2" ]; then
      echo "Changing compose file version to 3."
      cp "$YAML" "$YAML.bak-version"
      sed -e "s|^version: .*|version: \'3\'|" "$YAML.bak-version" > "$YAML"
      restart="yes"
    fi
  fi

  # restart message
  [ -n "$restart" ] && echo "Please restart the mail container to make the changes effective."
 ;;

 abort-upgrade|abort-remove|abort-deconfigure)
 ;;

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

esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

exit 0
