#!/bin/bash

set -e

NAME=leonardo

# source debconf library
. /usr/share/debconf/confmodule

setup_user() {
    db_get ${NAME}/user
    USER=$RET
    db_get ${NAME}/group
    GROUP=$RET

    getent group "${GROUP}" >/dev/null || addgroup --system ${GROUP}
    getent passwd "${USER}" >/dev/null || adduser --system ${USER} --ingroup ${GROUP} --home /var/lib/${NAME}

    # Ensure log file exists to set correct permissions
    [ ! -e /var/log/${NAME}/django.log ] && touch /var/log/${NAME}/django.log

    chown ${USER}:${GROUP} /var/log/${NAME} || true
    chown ${USER}:${GROUP} /var/log/${NAME}/*.log || true

    # Media dir should be writable by both our user and www-data (suppose they
    # are accessed directly via nginx)
    chown ${USER}:www-data /var/lib/${NAME}/media
    chmod 775 /var/lib/${NAME}/media
}

conf_set() {
    key=$1
    value=$2

    if grep "^$key[\ \t]*=.*" /etc/${NAME}/settings.py 2>&1 >/dev/null; then
        sed -i "s|^$key[\ \t]*=.*|$key = $value|g" /etc/${NAME}/settings.py
    else
        echo "$key = $value" >> /etc/${NAME}/settings.py
    fi
}

set_sh_var() {
    key=$1
    value=$2
    config=$3

    if [ -e $config ] && \
        grep "^${key}=.*" $config 2>&1 >/dev/null; then
        sed -i "s|^$key=.*|$key=\"$value\"|g" $config
    else
        echo "$key=\"$value\"" >> $config
    fi
}

del_sh_var() {
    key=$1
    config=$2

    sed -i "/^${key}=.*/d" $config
}

setup_gunicorn() {
    config=/etc/${NAME}/gunicorn

    set_sh_var USER "$USER" $config
    set_sh_var GROUP "$GROUP" $config

    db_get ${NAME}/bind_host
    set_sh_var LISTEN_HOST "${RET}" $config
    db_get ${NAME}/bind_port
    set_sh_var LISTEN_PORT "${RET}" $config
    db_get ${NAME}/log_level
    set_sh_var LOG_LEVEL "${RET}" $config

    if db_get ${NAME}/workers; then
        set_sh_var WORKERS "${RET}" $config
    else
        del_sh_var WORKERS $config
    fi
}

update_configfile() {
    db_get ${NAME}/debug
    if [[ $RET == 'true' ]]; then
        DEBUG='True'
    else
        DEBUG='False'
    fi

    conf_set DEBUG ${DEBUG}
    conf_set TEMPLATE_DEBUG ${DEBUG}

    db_get ${NAME}/static_root
    conf_set STATIC_ROOT "'$RET'"
    db_get ${NAME}/media_root
    conf_set MEDIA_ROOT "'$RET'"
}

create_configfile() {
    if [ -e /etc/${NAME}/settings.py ]; then
        return 0
    else
        SECRET_KEY=$(cat << "EOF" | python
import string
import random
chars = ''.join([string.ascii_letters, string.digits, string.punctuation]).replace('\'', '').replace('"', '').replace('\\', '')
print ''.join([random.SystemRandom().choice(chars) for i in range(50)])
EOF
)

        cat << EOF > /etc/${NAME}/settings.py
# Package generated configuration file
SECRET_KEY = "${SECRET_KEY}"
EOF
        chown root:${GROUP} /etc/${NAME}/settings.py
        chmod 0640 /etc/${NAME}/settings.py
    fi
}

case "$1" in
    configure)
        db_input low ${NAME}/user || true
        db_input low ${NAME}/group || true
        db_input low ${NAME}/debug || true
        db_input high ${NAME}/host || true
        db_input high ${NAME}/port || true
        db_input medium ${NAME}/workers || true
        db_input medium ${NAME}/log_level || true
        db_go

        setup_user
        create_configfile
        update_configfile

        setup_gunicorn

        /usr/lib/${NAME}/bin/manage.py migrate --noinput
        /usr/lib/${NAME}/bin/manage.py collectstatic --noinput
        ;;

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

    *)
        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#

db_stop

exit 0
