diff --git a/main.go b/main.go index 20bb51c..4b704fa 100644 --- a/main.go +++ b/main.go @@ -77,40 +77,46 @@ func main() { mux := http.NewServeMux() mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { httpLog(r) - if err := records.templ.ExecuteTemplate(w, "index", records); err != nil { + resp := &Response{} + resp.Entries = records.Entries + if err := records.templ.ExecuteTemplate(w, "index", resp); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } }) mux.HandleFunc("POST /records", func(w http.ResponseWriter, r *http.Request) { httpLog(r) - + resp := &Response{} ipStr := r.FormValue("ip") ip := net.ParseIP(ipStr) - rec := Record{ - Name: r.FormValue("name"), - IP: ip, + if ip != nil { + rec := Record{ + Name: r.FormValue("name"), + IP: ip, + } + + records.Entries = append(records.Entries, rec) + records.Save(*dataDir) + } else { + resp.Error = fmt.Errorf("invalid IP: %q", ipStr) } - records.Entries = append(records.Entries, rec) - records.Save(*dataDir) + resp.Entries = records.Entries - if err := records.templ.ExecuteTemplate(w, "table", records); err != nil { + if err := records.templ.ExecuteTemplate(w, "table", resp); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } }) mux.HandleFunc("DELETE /records/{name}", func(w http.ResponseWriter, r *http.Request) { httpLog(r) - + resp := Response{} records.Delete(r.PathValue("name")) records.Save(*dataDir) - if err := records.templ.ExecuteTemplate(w, "table", records); err != nil { + resp.Entries = records.Entries + if err := records.templ.ExecuteTemplate(w, "table", resp); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } }) - mux.HandleFunc("PUT /records/{name}", func(w http.ResponseWriter, r *http.Request) { - httpLog(r) - }) httpServer := &http.Server{ Handler: mux, diff --git a/records.go b/records.go index e99b1fa..3115251 100644 --- a/records.go +++ b/records.go @@ -12,6 +12,11 @@ import ( "github.com/miekg/dns" ) +type Response struct { + Error error `json:"error"` + Entries []Record `json:"entries"` +} + type Record struct { Name string `json:"name"` IP net.IP `json:"ip"` diff --git a/templates/templates.html b/templates/templates.html index aef61c8..c2fe25b 100644 --- a/templates/templates.html +++ b/templates/templates.html @@ -23,7 +23,6 @@ -

tsns


@@ -48,7 +47,15 @@ {{ template "row" . }} {{ end }} + + + +
{{ .Error }}
+ + + + {{ end }} {{ block "row" . }}