add a response type and pass back errors
This commit is contained in:
parent
259060aa74
commit
94a5f9c8da
22
main.go
22
main.go
@ -77,15 +77,18 @@ func main() {
|
|||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) {
|
||||||
httpLog(r)
|
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)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
mux.HandleFunc("POST /records", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("POST /records", func(w http.ResponseWriter, r *http.Request) {
|
||||||
httpLog(r)
|
httpLog(r)
|
||||||
|
resp := &Response{}
|
||||||
ipStr := r.FormValue("ip")
|
ipStr := r.FormValue("ip")
|
||||||
ip := net.ParseIP(ipStr)
|
ip := net.ParseIP(ipStr)
|
||||||
|
if ip != nil {
|
||||||
rec := Record{
|
rec := Record{
|
||||||
Name: r.FormValue("name"),
|
Name: r.FormValue("name"),
|
||||||
IP: ip,
|
IP: ip,
|
||||||
@ -93,24 +96,27 @@ func main() {
|
|||||||
|
|
||||||
records.Entries = append(records.Entries, rec)
|
records.Entries = append(records.Entries, rec)
|
||||||
records.Save(*dataDir)
|
records.Save(*dataDir)
|
||||||
|
} else {
|
||||||
|
resp.Error = fmt.Errorf("invalid IP: %q", ipStr)
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
mux.HandleFunc("DELETE /records/{name}", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("DELETE /records/{name}", func(w http.ResponseWriter, r *http.Request) {
|
||||||
httpLog(r)
|
httpLog(r)
|
||||||
|
resp := Response{}
|
||||||
records.Delete(r.PathValue("name"))
|
records.Delete(r.PathValue("name"))
|
||||||
records.Save(*dataDir)
|
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)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
mux.HandleFunc("PUT /records/{name}", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
httpLog(r)
|
|
||||||
})
|
|
||||||
|
|
||||||
httpServer := &http.Server{
|
httpServer := &http.Server{
|
||||||
Handler: mux,
|
Handler: mux,
|
||||||
|
@ -12,6 +12,11 @@ import (
|
|||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Response struct {
|
||||||
|
Error error `json:"error"`
|
||||||
|
Entries []Record `json:"entries"`
|
||||||
|
}
|
||||||
|
|
||||||
type Record struct {
|
type Record struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
IP net.IP `json:"ip"`
|
IP net.IP `json:"ip"`
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1>tsns</h1>
|
<h1>tsns</h1>
|
||||||
<hr/>
|
<hr/>
|
||||||
@ -48,7 +47,15 @@
|
|||||||
{{ template "row" . }}
|
{{ template "row" . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div id="error" >{{ .Error }}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ block "row" . }}
|
{{ block "row" . }}
|
||||||
|
Loading…
Reference in New Issue
Block a user