refactor(dns): extend DnsValidator to DnsManager with DNS record creation

- Rename DnsValidator to DnsManager to better reflect its expanded responsibilities
- Move DNS record creation logic from UnifiedEmailServer to DnsManager
- Add ensureDnsRecords() method that handles both validation and creation
- Consolidate internal DNS record creation (MX, SPF, DMARC) in one place
- Keep DKIM key generation in UnifiedEmailServer but move DNS registration to DnsManager
- Update all imports and tests to use DnsManager instead of DnsValidator
- Improve code organization and discoverability of DNS functionality
This commit is contained in:
2025-05-30 08:52:07 +00:00
parent e6251ab655
commit 37e1ecefd2
5 changed files with 211 additions and 182 deletions

View File

@ -2,7 +2,7 @@ import { tap, expect } from '@git.zone/tstest/tapbundle';
import * as plugins from '../ts/plugins.js';
import * as paths from '../ts/paths.js';
import { StorageManager } from '../ts/storage/classes.storagemanager.js';
import { DnsValidator } from '../ts/mail/routing/classes.dns.validator.js';
import { DnsManager } from '../ts/mail/routing/classes.dns.manager.js';
import { DomainRegistry } from '../ts/mail/routing/classes.domain.registry.js';
import { DKIMCreator } from '../ts/mail/security/classes.dkimcreator.js';
import type { IEmailDomainConfig } from '../ts/mail/routing/interfaces.js';

View File

@ -1,7 +1,7 @@
import { tap, expect } from '@git.zone/tstest/tapbundle';
import * as plugins from '../ts/plugins.js';
import * as paths from '../ts/paths.js';
import { DnsValidator } from '../ts/mail/routing/classes.dns.validator.js';
import { DnsManager } from '../ts/mail/routing/classes.dns.manager.js';
import { DomainRegistry } from '../ts/mail/routing/classes.domain.registry.js';
import { StorageManager } from '../ts/storage/classes.storagemanager.js';
import { DKIMCreator } from '../ts/mail/security/classes.dkimcreator.js';
@ -21,7 +21,7 @@ class MockDcRouter {
}
// Mock DNS resolver for testing
class MockDnsValidator extends DnsValidator {
class MockDnsManager extends DnsManager {
private mockNsRecords: Map<string, string[]> = new Map();
private mockTxtRecords: Map<string, string[][]> = new Map();
private mockMxRecords: Map<string, any[]> = new Map();
@ -54,7 +54,7 @@ class MockDnsValidator extends DnsValidator {
tap.test('DNS Validator - Forward Mode', async () => {
const testDir = plugins.path.join(paths.dataDir, '.test-dns-forward');
const mockRouter = new MockDcRouter(testDir) as any;
const validator = new DnsValidator(mockRouter);
const validator = new DnsManager(mockRouter);
const config: IEmailDomainConfig = {
domain: 'forward.example.com',
@ -79,7 +79,7 @@ tap.test('DNS Validator - Forward Mode', async () => {
tap.test('DNS Validator - Internal DNS Mode', async () => {
const testDir = plugins.path.join(paths.dataDir, '.test-dns-internal');
const mockRouter = new MockDcRouter(testDir, 'ns.myservice.com') as any;
const validator = new MockDnsValidator(mockRouter);
const validator = new MockDnsManager(mockRouter);
// Setup NS delegation
validator.setNsRecords('mail.example.com', ['ns.myservice.com']);
@ -122,7 +122,7 @@ tap.test('DNS Validator - Internal DNS Mode', async () => {
tap.test('DNS Validator - External DNS Mode', async () => {
const testDir = plugins.path.join(paths.dataDir, '.test-dns-external');
const mockRouter = new MockDcRouter(testDir) as any;
const validator = new MockDnsValidator(mockRouter);
const validator = new MockDnsManager(mockRouter);
// Setup mock DNS records
validator.setMxRecords('example.com', [
@ -273,7 +273,7 @@ tap.test('DNS Record Generation', async () => {
expect(dkimRecord.name).toContain('_domainkey.records.example.com');
expect(dkimRecord.value).toContain('v=DKIM1');
// Note: The DnsValidator doesn't have a generateDnsRecords method exposed
// Note: The DnsManager doesn't have a generateDnsRecords method exposed
// DNS records are handled internally or by the DNS server component
// Clean up