Replace the CoreDNS precursor with a purpose-built authoritative DNS server. Zones and records (A, AAAA, CNAME) are stored in SQLite and managed via synchronized gRPC + REST APIs authenticated through MCIAS. Non-authoritative queries are forwarded to upstream resolvers with in-memory caching. Key components: - DNS server (miekg/dns) with authoritative zone handling and forwarding - gRPC + REST management APIs with MCIAS auth (mcdsl integration) - SQLite storage with CNAME exclusivity enforcement and auto SOA serials - 30 tests covering database CRUD, DNS resolution, and caching Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
package db
|
|
|
|
import (
|
|
mcdsldb "git.wntrmute.dev/kyle/mcdsl/db"
|
|
)
|
|
|
|
// Migrations is the ordered list of MCNS schema migrations.
|
|
var Migrations = []mcdsldb.Migration{
|
|
{
|
|
Version: 1,
|
|
Name: "zones and records",
|
|
SQL: `
|
|
CREATE TABLE IF NOT EXISTS zones (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL UNIQUE,
|
|
primary_ns TEXT NOT NULL,
|
|
admin_email TEXT NOT NULL,
|
|
refresh INTEGER NOT NULL DEFAULT 3600,
|
|
retry INTEGER NOT NULL DEFAULT 600,
|
|
expire INTEGER NOT NULL DEFAULT 86400,
|
|
minimum_ttl INTEGER NOT NULL DEFAULT 300,
|
|
serial INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
|
|
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS records (
|
|
id INTEGER PRIMARY KEY,
|
|
zone_id INTEGER NOT NULL REFERENCES zones(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
type TEXT NOT NULL CHECK (type IN ('A', 'AAAA', 'CNAME')),
|
|
value TEXT NOT NULL,
|
|
ttl INTEGER NOT NULL DEFAULT 300,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
|
|
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
|
|
UNIQUE(zone_id, name, type, value)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_records_zone_name ON records(zone_id, name);`,
|
|
},
|
|
}
|
|
|
|
// Migrate applies all pending migrations.
|
|
func (d *DB) Migrate() error {
|
|
return mcdsldb.Migrate(d.DB, Migrations)
|
|
}
|