Files
rmm-openwrt/agent/package/rmm-agent-go-production/files/usr/libexec/rmm-agent-uci-sync
2026-07-21 04:03:49 +03:00

73 lines
2.3 KiB
Bash

#!/bin/sh
set -eu
UCI_CONFIG="rmm-agent"
SHELL_CONFIG="/etc/rmm-agent.conf"
uci_get() {
uci -q get "$UCI_CONFIG.main.$1" 2>/dev/null || true
}
shell_get() {
key="$1"
[ -f "$SHELL_CONFIG" ] || return 0
sed -n "s/^${key}=\"\(.*\)\"$/\1/p" "$SHELL_CONFIG" | tail -n 1
}
escape_value() {
printf '%s' "$1" | tr -d '\r\n' | sed 's/[\\`"$]/\\&/g'
}
device_id="$(shell_get DEVICE_ID)"
device_token="$(shell_get DEVICE_TOKEN)"
if [ "$(uci_get migration_complete)" != "1" ]; then
legacy_url="$(shell_get SERVER_URL)"
if [ -n "$device_id" ] && [ -n "$device_token" ]; then
[ -z "$legacy_url" ] || uci -q set "$UCI_CONFIG.main.server_url=$legacy_url"
case "$legacy_url" in http://*) uci -q set "$UCI_CONFIG.main.allow_insecure_http=1" ;; esac
uci -q set "$UCI_CONFIG.main.enabled=1"
fi
uci -q set "$UCI_CONFIG.main.migration_complete=1"
uci -q commit "$UCI_CONFIG"
fi
server_url="$(uci_get server_url)"
allow_insecure="$(uci_get allow_insecure_http)"
case "$server_url" in
https://*) ;;
http://*) [ "$allow_insecure" = "1" ] || exit 1 ;;
*) exit 1 ;;
esac
if [ "$(uci_get reset_identity)" = "1" ]; then
device_id=""
device_token=""
uci -q set "$UCI_CONFIG.main.reset_identity=0"
uci -q commit "$UCI_CONFIG"
fi
enrollment_token="$(uci_get enrollment_token)"
if [ -n "$device_id" ] && [ -n "$device_token" ]; then
enrollment_token=""
uci -q delete "$UCI_CONFIG.main.enrollment_token"
uci -q commit "$UCI_CONFIG"
fi
umask 077
temporary="${SHELL_CONFIG}.tmp"
{
printf 'SERVER_URL="%s"\n' "$(escape_value "$server_url")"
printf 'ENROLLMENT_TOKEN="%s"\n' "$(escape_value "$enrollment_token")"
printf 'INTERVAL_SECONDS="%s"\n' "$(escape_value "$(uci_get interval_seconds)")"
printf 'CHECK_TARGETS="%s"\n' "$(escape_value "$(uci_get check_targets)")"
printf 'DIRECT_DNS_ENABLED="%s"\n' "$(escape_value "$(uci_get direct_dns_enabled)")"
printf 'DNS_UPDATE_INTERVAL_SECONDS="%s"\n' "$(escape_value "$(uci_get dns_update_interval_seconds)")"
printf 'PUBLIC_IPV4_URL="%s"\n' "$(escape_value "$(uci_get public_ipv4_url)")"
printf 'PUBLIC_IPV6_URL="%s"\n' "$(escape_value "$(uci_get public_ipv6_url)")"
printf 'TUNNEL_IDENTITY_FILE="%s"\n' "$(escape_value "$(uci_get tunnel_identity_file)")"
printf 'DEVICE_ID="%s"\n' "$(escape_value "$device_id")"
printf 'DEVICE_TOKEN="%s"\n' "$(escape_value "$device_token")"
} > "$temporary"
chmod 0600 "$temporary"
mv "$temporary" "$SHELL_CONFIG"