From cfc0d34a584254a9ed76620951c810771aff6f3b Mon Sep 17 00:00:00 2001 From: Alexander Hunt Date: Sun, 21 Jun 2026 12:43:31 -0700 Subject: STUFF --- args/args.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'args') diff --git a/args/args.go b/args/args.go index 6655f4a..6c79fe9 100644 --- a/args/args.go +++ b/args/args.go @@ -3,6 +3,7 @@ package args import ( "flag" "os" + "strings" ) type Arguments struct { @@ -16,6 +17,17 @@ type Arguments struct { Port int Server bool + // Dns runs the authoritative DNS server for the LAN. DnsZone is the suffix + // it owns (e.g. penguins.lan); queries outside it are forwarded to + // DnsResolvers (empty = no forwarding, since the LAN has no outside + // internet). ServerIP (env SERVER_IP) answers the zone apex so the website + // itself resolves; empty leaves the apex unanswered. + Dns bool + DnsPort int + DnsResolvers []string + DnsZone string + ServerIP string + // DevMAC (env DEV_MAC) forces every client's MAC, for testing auth from // loopback where the browser never appears in the ARP table. DevMAC string @@ -40,8 +52,20 @@ func GetArgs() (*Arguments, error) { port := flag.Int("port", 8080, "Port to listen on") server := flag.Bool("server", false, "Run the HTTP server") + dns := flag.Bool("dns", false, "Run the authoritative DNS server") + dnsPort := flag.Int("dns-port", 8053, "Port for the DNS server to listen on") + dnsZone := flag.String("dns-zone", "penguins.lan", "DNS zone this server is authoritative for") + dnsResolvers := flag.String("dns-resolvers", "", "Comma-separated upstream resolvers for non-zone queries (empty disables forwarding)") + flag.Parse() + resolvers := []string{} + for _, r := range strings.Split(*dnsResolvers, ",") { + if r = strings.TrimSpace(r); r != "" { + resolvers = append(resolvers, r) + } + } + return &Arguments{ DatabasePath: *databasePath, TemplatePath: *templatePath, @@ -50,6 +74,11 @@ func GetArgs() (*Arguments, error) { Scheduler: *scheduler, Port: *port, Server: *server, + Dns: *dns, + DnsPort: *dnsPort, + DnsResolvers: resolvers, + DnsZone: *dnsZone, + ServerIP: os.Getenv("SERVER_IP"), DevMAC: os.Getenv("DEV_MAC"), RconAddress: os.Getenv("RCON_ADDRESS"), RconPassword: os.Getenv("RCON_PASSWORD"), -- cgit v1.3