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