Make DNS servers fully dynamic from config.json

DNS server IDs (dns1, dns2, dns3) were hardcoded throughout the frontend
and backend. Now config.json's dnsServers object is the single source of
truth — adding or removing a DNS server in config automatically updates
the dashboard cards, credential modal, health checks, and probes.

- credentials.js: rebuild modal sections dynamically from SITE.dnsServers
- globals.js: add getPrimaryDnsId() helper for primary DNS lookups
- service-create.js, service-infrastructure.js: use dynamic DNS ID
- startup-validator.js: dynamic topCardServices from config
- middleware.js: add license endpoints to public routes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 16:55:07 -07:00
parent 2815233e86
commit f2f33b4b40
6 changed files with 121 additions and 144 deletions

View File

@@ -162,14 +162,12 @@ async function validateStartupConfig({ log, CADDYFILE_PATH, SERVICES_FILE, CONFI
async function syncHealthCheckerServices({ log, SERVICES_FILE, servicesStateManager, healthChecker, buildServiceUrl, siteConfig, APP }) {
try {
const topCardServices = [
{ id: 'dns1', name: 'DNS1' },
{ id: 'dns2', name: 'DNS2' },
{ id: 'internet', name: 'Internet' },
];
// Add dns3 if it exists in dnsServers config
if (siteConfig?.dnsServers?.dns3) {
topCardServices.push({ id: 'dns3', name: 'DNS3' });
// Dynamically add all configured DNS servers from config
for (const [id, info] of Object.entries(siteConfig?.dnsServers || {})) {
topCardServices.push({ id, name: info.name || id.toUpperCase() });
}
let appServices = [];