feat: DNS provider abstraction — Technitium, Cloudflare, RFC 2136, Manual
- dns-providers/: adapter base class + registry with auto-discovery - technitium.js: wraps existing Technitium API calls into adapter interface - cloudflare.js: Cloudflare API v4 adapter (zones, records, credentials) - rfc2136.js: RFC 2136 dynamic DNS via nsupdate (BIND, PowerDNS, etc.) - manual.js: no-op adapter for external DNS management with instructions - provider-dns.js: provider-aware DNS context, resolves active adapter from config - Universal helper methods: universalCreateRecord/Delete/ResolveRecord - All 7 route files updated to use universal methods instead of raw dns.call() - Setup wizard: provider dropdown (Technitium, Cloudflare, RFC 2136, Manual) - DNS template selector: added Cloudflare and External/Manual options - Config schema: validates dns.provider field - Capability gating on Technitium-specific endpoints (logs, restart, update) - Backward compatible: no provider set = auto-detect (technitium if dns.ip exists)
This commit is contained in:
@@ -95,6 +95,36 @@
|
||||
'Prometheus metrics'
|
||||
],
|
||||
recommended: false
|
||||
},
|
||||
{
|
||||
id: 'cloudflare',
|
||||
name: 'Cloudflare DNS',
|
||||
description: 'Managed DNS with API access — no self-hosting needed',
|
||||
icon: '🔶',
|
||||
difficulty: 'Easy',
|
||||
features: [
|
||||
'Fully managed, no server needed',
|
||||
'API for automated record management',
|
||||
'Global anycast network',
|
||||
'Free tier available'
|
||||
],
|
||||
recommended: false,
|
||||
providerId: 'cloudflare'
|
||||
},
|
||||
{
|
||||
id: 'external',
|
||||
name: 'External / Manual DNS',
|
||||
description: 'Use your own DNS provider (cPanel, Route53, etc.)',
|
||||
icon: '🔗',
|
||||
difficulty: 'Easy',
|
||||
features: [
|
||||
'Works with any DNS provider',
|
||||
'DashCaddy shows you what records to create',
|
||||
'Propagation checking still works',
|
||||
'No API credentials needed'
|
||||
],
|
||||
recommended: false,
|
||||
providerId: 'manual'
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
@@ -174,8 +174,9 @@ window.populateTimezoneSelect = function(selectEl, selectedTz) {
|
||||
if (currentConfigType === 'homelab') {
|
||||
config.tld = document.getElementById('setup-tld')?.value?.trim() || '.home';
|
||||
config.caName = document.getElementById('setup-ca-name')?.value?.trim() || '';
|
||||
const selectedProvider = document.getElementById('setup-dns-provider')?.value || 'technitium';
|
||||
config.dns = {
|
||||
provider: 'technitium',
|
||||
provider: selectedProvider,
|
||||
ip: document.getElementById('setup-dns-ip')?.value?.trim() || '',
|
||||
port: document.getElementById('setup-dns-port')?.value?.trim() || DC.DEFAULTS.DNS_PORT,
|
||||
token: document.getElementById('setup-dns-token')?.value?.trim() || ''
|
||||
|
||||
Reference in New Issue
Block a user