Files
nixos-router/scripts/webui-dev.sh
T
nilsandClaude Sonnet 5.5 876080d3f5 Show the API reference with Redoc
Replace the hand-built reference page with Redoc rendering the generated
OpenAPI document. The bundle is fetched by package.nix (pinned hash) and
served from the UI's own address; only that page gets a style nonce and
worker-src blob: in its CSP.

The spec now explains authentication, saved-not-applied, ETags (If-Match,
409) and errors, documents the ETag header, gives each operation a curl
sample, and no longer names MCP tools. Area GETs no longer emit
"parameters": null, which Redoc could not render.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeFqV9dZrK6nipHkPfyM4F
2026-11-01 22:01:30 +01:00

32 lines
1.8 KiB
Bash

# The web UI on your own machine, with sample settings, leases and your real
# interface counters. Templates and CSS are re-read on every request: edit,
# reload the browser. (Pings need root and fail here; applying does nothing.)
root=$(git rev-parse --show-toplevel)
dir=$(mktemp -d)
trap 'rm -rf "$dir"' EXIT
mkdir -p "$dir/config"
wan=$(ip -j route show default 2>/dev/null | jq -r '.[0].dev // empty')
lan=$(ip -j link show 2>/dev/null | jq -r --arg wan "$wan" '[.[] | select(.link_type == "ether" and .ifname != $wan) | .ifname][0] // "eth1"')
cat > "$dir/config/settings.json" <<JSON
{"version": 2, "system": {"hostName": "dev"},
"router": {"wan": {"interface": "${wan:-eth0}", "ipv4": {"type": "dhcp"}},
"lans": {"lan": {"interface": "$lan", "internet": true, "ipv4": {"address": "192.168.10.1"},
"dhcp": {"pool": {"start": "192.168.10.100", "end": "192.168.10.200"}}}}}}
JSON
now=$(date +%s)
cat > "$dir/leases" <<LEASES
address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state,user_context,pool_id
192.168.10.101,52:54:00:12:34:56,,3600,$((now + 3000)),1,0,0,laptop,0,,0
192.168.10.120,52:54:00:aa:bb:cc,,3600,$((now + 1200)),1,0,0,phone,0,,0
LEASES
echo '{"version": "0.0.0-dev", "serial": 1, "schema": 2}' > "$dir/router-release"
cd "$root/pkgs/router-webui"
# The API reference page is Redoc; the package fetches it (pkgs/router-webui/package.nix, same version).
[ -e static/redoc.standalone.js ] ||
curl -fsSL -o static/redoc.standalone.js https://cdn.jsdelivr.net/npm/redoc@2.5.2/bundles/redoc.standalone.js
echo devpassword1 | go run . passwd "$dir/webui-password"
echo
echo " https://127.0.0.1:8443 password: devpassword1 (the certificate is self-signed)"
echo
exec go run . -listen 127.0.0.1:8443 -config "$dir/config" -state "$dir" -leases "$dir/leases" -assets .