#!/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 }