Support cmdline switches
authorvolpol <volpol@packet-gain.de>
Sat, 9 Jun 2018 19:07:44 +0000 (21:07 +0200)
committervolpol <volpol@packet-gain.de>
Sat, 9 Jun 2018 19:07:44 +0000 (21:07 +0200)
ddnset.go

index 97d9cd5c80db34c2d1fbd37ec9d1f531301cd4ee..416a9a79418da96a2762322f3318fc710fa9f162 100644 (file)
--- a/ddnset.go
+++ b/ddnset.go
@@ -4,6 +4,7 @@ import (
        "bufio"
        "crypto/md5"
        "encoding/base64"
+       "flag"
        "fmt"
        "io"
        "io/ioutil"
@@ -15,14 +16,20 @@ import (
        "strings"
 )
 
-//TODO add parsing of cmdline
 const (
-       AccFile    = "/usr/local/etc/ddnset/ddnset.acc"
-       ZoneFile   = "/usr/local/etc/ddnset/ddnset.zon"
-       Logfile    = "/var/log/ddnset/default.log"
-       ListenPort = "1980"
+       DefaultAccFile    = "/usr/local/etc/ddnset/ddnset.acc"
+       DefaultZoneFile   = "/usr/local/etc/ddnset/ddnset.zon"
+       DefaultLogFile    = "/var/log/ddnset/default.log"
+       DefaultListenPort = 1980
 )
 
+var AccFile = flag.String("a", DefaultAccFile, "Path to account file")
+var ZoneFile = flag.String("z", DefaultZoneFile, "Path to zone file")
+var LogFile = flag.String("l", DefaultLogFile, "Path to log file")
+var ListenPort = flag.Uint("p", DefaultListenPort, "Port to listen on")
+
+var Help = flag.Bool("h", false, "Show usage")
+
 const (
        StatusGood    = "good"
        StatusBadAuth = "badauth"
@@ -116,7 +123,7 @@ func checkIP(s string) (string, int, bool) {
 
 func isValidAuth(usr, psw string) (bool, string) {
        pwentry := fmt.Sprintf("%s:%x", usr, md5.Sum([]byte(psw)))
-       acc, err := os.Open(AccFile)
+       acc, err := os.Open(*AccFile)
        if nil == err {
                defer acc.Close()
                scanner := bufio.NewScanner(acc)
@@ -133,7 +140,7 @@ func isValidAuth(usr, psw string) (bool, string) {
 }
 
 func isValidZone(h string) (bool, string) {
-       zon, err := os.Open(ZoneFile)
+       zon, err := os.Open(*ZoneFile)
        if nil == err {
                defer zon.Close()
                scanner := bufio.NewScanner(zon)
@@ -272,10 +279,18 @@ func rootHandle(w http.ResponseWriter, r *http.Request) {
 }
 
 func main() {
+       flag.Parse()
+       if *Help {
+               fmt.Printf("Usage: \n")
+               flag.PrintDefaults()
+               return
+       }
+       fmt.Printf("Current settings: \n")
+       flag.VisitAll(func(f *flag.Flag) { fmt.Printf("%v: %v\n", f.Usage, f.Value) })
        http.HandleFunc("/myip", myipHandle)
        http.HandleFunc("/myip.php", myipHandle)
        http.HandleFunc("/", rootHandle)
-       logf, err := os.OpenFile(Logfile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
+       logf, err := os.OpenFile(*LogFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
        if nil == err {
                defer logf.Close()
                log.SetOutput(logf)
@@ -283,5 +298,5 @@ func main() {
                log.Print(err)
        }
 
-       log.Fatal(http.ListenAndServe(":"+ListenPort, nil))
+       log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *ListenPort), nil))
 }