146 lines
3.9 KiB
Bash
Executable File
146 lines
3.9 KiB
Bash
Executable File
#!/bin/sh
|
|
. /lib/functions.sh
|
|
. /usr/share/libubox/jshn.sh
|
|
|
|
get_status() {
|
|
json_init
|
|
|
|
local enabled
|
|
config_load vhost
|
|
config_get enabled global enabled "0"
|
|
|
|
json_add_boolean "enabled" "$enabled"
|
|
|
|
# Check nginx
|
|
local nginx_running=0
|
|
pgrep -f nginx >/dev/null && nginx_running=1
|
|
json_add_boolean "nginx_active" "$nginx_running"
|
|
|
|
# Check dnsmasq
|
|
local dns_running=0
|
|
pgrep -f dnsmasq >/dev/null && dns_running=1
|
|
json_add_boolean "dns_active" "$dns_running"
|
|
|
|
# Count vhosts
|
|
local internal=0 redirects=0
|
|
config_foreach _count_internal internal
|
|
config_foreach _count_redirect redirect
|
|
|
|
json_add_int "internal_hosts" "$internal"
|
|
json_add_int "redirects" "$redirects"
|
|
|
|
json_dump
|
|
}
|
|
|
|
_count_internal() { internal=$((internal + 1)); }
|
|
_count_redirect() { redirects=$((redirects + 1)); }
|
|
|
|
get_internal_hosts() {
|
|
config_load vhost
|
|
json_init
|
|
json_add_array "hosts"
|
|
|
|
_add_host() {
|
|
local enabled name domain backend ssl icon color desc
|
|
config_get enabled "$1" enabled "0"
|
|
config_get name "$1" name ""
|
|
config_get domain "$1" domain ""
|
|
config_get backend "$1" backend ""
|
|
config_get ssl "$1" ssl "0"
|
|
config_get icon "$1" icon "server"
|
|
config_get color "$1" color "#64748b"
|
|
config_get desc "$1" description ""
|
|
|
|
json_add_object ""
|
|
json_add_string "id" "$1"
|
|
json_add_boolean "enabled" "$enabled"
|
|
json_add_string "name" "$name"
|
|
json_add_string "domain" "$domain"
|
|
json_add_string "backend" "$backend"
|
|
json_add_boolean "ssl" "$ssl"
|
|
json_add_string "icon" "$icon"
|
|
json_add_string "color" "$color"
|
|
json_add_string "description" "$desc"
|
|
json_close_object
|
|
}
|
|
config_foreach _add_host internal
|
|
|
|
json_close_array
|
|
json_dump
|
|
}
|
|
|
|
get_redirects() {
|
|
config_load vhost
|
|
json_init
|
|
json_add_array "redirects"
|
|
|
|
_add_redirect() {
|
|
local enabled name external local desc
|
|
config_get enabled "$1" enabled "0"
|
|
config_get name "$1" name ""
|
|
config_get external "$1" external_domain ""
|
|
config_get local "$1" local_domain ""
|
|
config_get desc "$1" description ""
|
|
|
|
json_add_object ""
|
|
json_add_string "id" "$1"
|
|
json_add_boolean "enabled" "$enabled"
|
|
json_add_string "name" "$name"
|
|
json_add_string "external_domain" "$external"
|
|
json_add_string "local_domain" "$local"
|
|
json_add_string "description" "$desc"
|
|
json_close_object
|
|
}
|
|
config_foreach _add_redirect redirect
|
|
|
|
json_close_array
|
|
json_dump
|
|
}
|
|
|
|
get_certificates() {
|
|
json_init
|
|
json_add_array "certificates"
|
|
|
|
# List certificates from /etc/ssl/acme or similar
|
|
for cert in /etc/ssl/acme/*.crt 2>/dev/null; do
|
|
[ -f "$cert" ] || continue
|
|
local domain=$(basename "$cert" .crt)
|
|
local expiry=$(openssl x509 -enddate -noout -in "$cert" 2>/dev/null | cut -d= -f2)
|
|
|
|
json_add_object ""
|
|
json_add_string "domain" "$domain"
|
|
json_add_string "expiry" "$expiry"
|
|
json_add_string "path" "$cert"
|
|
json_close_object
|
|
done
|
|
|
|
json_close_array
|
|
json_dump
|
|
}
|
|
|
|
apply_config() {
|
|
# Generate nginx configs
|
|
# Generate dnsmasq entries
|
|
|
|
json_init
|
|
json_add_boolean "success" 1
|
|
json_add_string "message" "Configuration applied"
|
|
json_dump
|
|
}
|
|
|
|
case "$1" in
|
|
list)
|
|
echo '{"status":{},"internal_hosts":{},"redirects":{},"certificates":{},"apply_config":{}}'
|
|
;;
|
|
call)
|
|
case "$2" in
|
|
status) get_status ;;
|
|
internal_hosts) get_internal_hosts ;;
|
|
redirects) get_redirects ;;
|
|
certificates) get_certificates ;;
|
|
apply_config) apply_config ;;
|
|
*) echo '{"error":"Unknown method"}' ;;
|
|
esac
|
|
;;
|
|
esac
|