diff --git a/cmd/realm/main.go b/cmd/realm/main.go index cf3c09d..b662671 100644 --- a/cmd/realm/main.go +++ b/cmd/realm/main.go @@ -2,41 +2,31 @@ package main import ( "log" + "os" + "github.com/alexflint/go-arg" "github.com/brettlangdon/realm" - "github.com/codegangsta/cli" ) +var args struct { + Zones []string `arg:"--zone,positional,help:DNS zone files to serve from this server"` + Bind string `arg:"help:[]: to bind too"` +} + func main() { - // Setup our CLI app - var app *cli.App = cli.NewApp() - app.Name = "realm" - app.Usage = "A simple non-recursive DNS server" - app.Version = "0.1.0" - app.Author = "Brett Langdon" - app.Email = "me@brett.is" - app.Flags = []cli.Flag{ - cli.StringFlag{ - Name: "zone, z", - EnvVar: "REALM_ZONE", - Usage: "location to DNS zone file [required]", - }, - cli.StringFlag{ - Name: "bind, b", - EnvVar: "REALM_BIND", - Value: ":53", - Usage: "'[]:' to bind too", - }, + args.Bind = ":53" + argParser := arg.MustParse(&args) + + if len(args.Zones) == 0 { + log.Println("must supply at least 1 zone file to serve") + argParser.WriteUsage(os.Stderr) + os.Exit(1) } - // This action is called for all commands - app.Action = func(c *cli.Context) { - // Ensure that a zone filename was provided - var filename string = c.String("zone") - if filename == "" { - log.Fatal("must supply zone file via \"--zone\" flag or \"REALM_ZONE\" environment variable") - } + var registry *realm.Registry + registry = realm.NewRegistry() + for _, filename := range args.Zones { // Load and parse the zone file var zone *realm.Zone var err error @@ -45,14 +35,11 @@ func main() { if err != nil { log.Fatal(err) } - - // Create and start the server - var bind string = c.String("bind") - log.Printf("starting the server on \"%s\"\n", bind) - var server *realm.Server = realm.NewServer(bind, zone) - log.Fatal(server.ListenAndServe()) + registry.AddZone(zone) } - // Parse command arguments and run `app.Action` - app.RunAndExitOnError() + // Create and start the server + log.Printf("starting the server on \"%s\"\n", args.Bind) + var server *realm.Server = realm.NewServer(args.Bind, registry) + log.Fatal(server.ListenAndServe()) }