diff options
| author | Alexander Hunt <me@liz.coffee> | 2026-06-21 12:43:31 -0700 |
|---|---|---|
| committer | Alexander Hunt <me@liz.coffee> | 2026-06-21 12:43:31 -0700 |
| commit | cfc0d34a584254a9ed76620951c810771aff6f3b (patch) | |
| tree | 7fba034f7347ce0003e7a3a56adcaf862c834907 /args | |
| parent | fb653292612eddca5b088ed88466c546d1597107 (diff) | |
| download | penguins.lan-cfc0d34a584254a9ed76620951c810771aff6f3b.tar.gz penguins.lan-cfc0d34a584254a9ed76620951c810771aff6f3b.zip | |
STUFF
Diffstat (limited to 'args')
| -rw-r--r-- | args/args.go | 29 |
1 files changed, 29 insertions, 0 deletions
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"), |
