c730cfaa45
Add flexible DNS management to Docker Watcher. By default, wildcard DNS is assumed (current behavior). When disabled, users can configure a Cloudflare DNS provider with API token and zone selection. DNS A records are automatically created/updated/deleted in sync with proxy consumers (deployed instances and standalone proxies). - Settings: wildcard_dns toggle, dns_provider, cloudflare credentials - Cloudflare client: Provider interface with EnsureRecord/DeleteRecord/ListRecords - DNS lifecycle hooks in deployer and proxy manager (best-effort) - Settings UI: DNS config section with provider picker, zone selector, test button - DNS Records page at /dns with filtering, sync status, reconciliation - Records visible in both wildcard and managed modes - Cleanup on provider change: removes old records when switching modes
2.1 KiB
2.1 KiB
Phase 4: Settings UI — DNS Configuration
Status: ⬜ Not Started Parent plan: PLAN.md Domain: frontend
Objective
Add a "DNS Configuration" section to the Settings page with wildcard toggle, provider selection, Cloudflare credential fields, and connection test.
Tasks
- Task 1: Add new API functions in
web/src/lib/api.tstestDnsConnection(token, zoneId)→ POST /api/settings/dns/testlistDnsZones(token)→ GET /api/settings/dns/zones
- Task 2: Add i18n keys for DNS settings in locale files
- Task 3: Add DNS Configuration section to
web/src/routes/settings/+page.svelte- Toggle: "Wildcard DNS is configured" (checkbox/switch)
- When unchecked, show:
- DNS Provider dropdown (only "Cloudflare" option)
- API Token field (password type, show
has_cloudflare_api_tokenindicator) - Zone picker (loaded from API after token provided)
- "Test Connection" button with success/error feedback
- All DNS fields hidden when wildcard is checked
- Task 4: Wire save logic — include new fields in
handleSave - Task 5: Wire load logic — populate DNS fields from settings response
Files to Modify/Create
web/src/lib/api.ts— add DNS API functionsweb/src/routes/settings/+page.svelte— add DNS config sectionweb/src/lib/i18n/en.ts(or equivalent locale file) — add DNS translation keys
Acceptance Criteria
- Wildcard toggle visible and functional (default: checked)
- Unchecking reveals Cloudflare configuration form
- API token field uses password masking
- Zone picker loads zones from Cloudflare API
- Test Connection button shows success/failure
- Settings save includes DNS fields
- Settings load populates DNS fields
Notes
- Follow existing settings page patterns (FormField, EntityPicker for zones)
- Zone picker similar to SSL certificate picker pattern
- Token field similar to NPM password field (has_token indicator)
Review Checklist
- All tasks completed
- Code follows project conventions
- No unintended side effects
- Build passes
- Tests pass (new + existing)