#!/bin/sh

set -e

# debconf
. /usr/share/debconf/confmodule
db_version 2.0

CONFFILE="/etc/ufw/ufw.conf"
USER_PATH="/lib/ufw"
TEMPLATE_PATH="/usr/share/ufw"

has_existing() {
    if [ ! -e "$USER_PATH/user.rules" ]; then
        return 1
    fi

    orig=`md5sum $TEMPLATE_PATH/user.rules | cut -d ' ' -f 1`
    orig_md5file="$TEMPLATE_PATH/user.rules.md5sum"
    user=`md5sum $USER_PATH/user.rules | cut -d ' ' -f 1`
    orig6=`md5sum $TEMPLATE_PATH/user6.rules | cut -d ' ' -f 1`
    orig6_md5file="$TEMPLATE_PATH/user6.rules.md5sum"
    user6=`md5sum $USER_PATH/user6.rules | cut -d ' ' -f 1`

    if [ "$orig" != "$user" ] && ! grep -q "$user" "$orig_md5file" 2>/dev/null ; then
        return 0
    elif [ "$orig6" != "$user6" ] && ! grep -q "$user6" "$orig6_md5file" 2>/dev/null ; then
        return 0
    else
        return 1
    fi
}

# https://bugs.launchpad.net/ufw/+bug/400208
OLD_USER_PATH="/var/lib/ufw"
if dpkg --compare-versions "$2" lt 0.28-1 ; then
    test -d $USER_PATH || mkdir $USER_PATH
    for f in user.rules user6.rules
    do
        test -f $OLD_USER_PATH/$f && mv -f $OLD_USER_PATH/$f $USER_PATH/$f
    done
fi

# If ufw is enabled (eg during an upgrade), then update debconf
if [ -f "$CONFFILE" ]; then
    if egrep -q '^ENABLED=yes$' "$CONFFILE" ; then
        db_set ufw/enable true || true
    else
        db_set ufw/enable false || true
    fi
fi

db_get ufw/enable
previous="$RET"

db_input medium ufw/enable || true
db_go

db_get ufw/enable
# only use existing_configuration/allow_known_ports if the user changed from
# false to true
if [ ! -z "$RET" ] && [ "$previous" = "false" ] && [ "$RET" = true ]; then
    if has_existing ; then
        # Can't reliably configure ports in an existing configuration
        db_text low ufw/existing_configuration || true
        db_go
    else
        db_input medium ufw/allow_known_ports || true
        db_go
        db_input low ufw/allow_custom_ports || true
        db_go
    fi
fi
