#!/bin/sh /etc/rc.common

START=82

USE_PROCD=1

ETEBASE_INI="/var/etc/etebase/server.ini"


etebase_print_uci_allow_all_ips_of() {
    local ifstat="$(ifstatus "$1")"

    for ip in $(echo "${ifstat}" | jsonfilter -e '@["ipv4-address"].*.address')
    do echo "allowed_host_${ip//[^0-9]/_} = ${ip}"
    done

    for ip in $(echo "${ifstat}" | jsonfilter -e '@["ipv6-address"].*.address')
    do echo "allowed_host_${ip//[^0-9A-Fa-f]/_} = [${ip}]"
    done

    for ip in $(echo "${ifstat}" | \
        jsonfilter -e '@["ipv6-prefix-assignment"].*["local-address"].address')
    do echo "allowed_host_${ip//[^0-9A-Fa-f]/_} = [${ip}]"
    done
}


etebase_validate_global() {
    cd /usr/share/etebase/ >/dev/null || return

    uci_load_validate etebase django "global" "$1" \
        'secret_file:file:secret.txt' \
        'static_url:string:static/' \
        'language_code:string:en-us' \
        'time_zone:string:UTC' \
        'debug:bool:false' \
        ;
}


etebase_print_global() {
    printf "\n[global]\n"

    echo "secret_file = ${secret_file}"
    echo "static_root = /www/etebase/static" #sic!
    echo "static_url = ${static_url}"
    echo "language_code = ${language_code}"
    echo "time_zone = ${time_zone}"
    echo "debug = ${debug}"
}


etebase_validate_allowed_hosts() {
    cd /usr/share/etebase/ >/dev/null || return

    uci_load_validate etebase django "allowed_hosts" "$1" \
        'uci_allow_all_ips_of:network' \
        'allowed_host:host' \
        ;
}


etebase_print_allowed_hosts() {
    printf "\n[allowed_hosts]\n"

    local iface
    for iface in ${uci_allow_all_ips_of}
    do etebase_print_uci_allow_all_ips_of "${iface}"
    done

    local host
    for host in ${allowed_host}
    do echo "allowed_host_${host//[^0-9A-Za-z]/_} = ${host}"
    done
}


etebase_validate_database() {
    cd /usr/share/etebase/ >/dev/null || return

    uci_load_validate etebase django "database" "$1" \
        'engine:hostname:django.db.backends.sqlite3' \
        'name:file:db.sqlite3' \
        ;
}


etebase_print_database() {
    printf "\n[database]\n"
    echo "engine = ${engine}"
    echo "name = ${name}"
}


etebase_init() { # This must print ONLY configuration lines:
    echo "; This file is re-created from /etc/config/etebase "
    etebase_validate_global etebase_print_global
    etebase_validate_allowed_hosts etebase_print_allowed_hosts
    etebase_validate_database etebase_print_database
} >"${ETEBASE_INI}"


start_service() {
    mkdir -p /var/etc/etebase/

    etebase_init

    logger -p 'daemon.info' -t 'etebase_init' 'starting ...'
    ln -sf /etc/uwsgi/vassals/etebase.available /var/etc/etebase/uwsgi.ini
}


stop_service() {
    rm -f /var/etc/etebase/uwsgi.ini "${ETEBASE_INI}"
}


reload_service() {
    etebase_init

    logger -p 'daemon.info' -t 'etebase_init' 'reloading ...'
    kill -SIGHUP "$(cat "/var/etc/etebase/master.pid")" 2>/dev/null
    #if the server is in on-demand mode, the ini files are reloaded then, too.
}


service_triggers() {
    procd_open_validate
    etebase_validate_global "$@"
    etebase_validate_allowed_hosts "$@"
    etebase_validate_database "$@"
    procd_close_validate

    config_load etebase
    config_list_foreach "allowed_hosts" "uci_allow_all_ips_of" procd_add_reload_interface_trigger
    procd_add_reload_trigger etebase
}