diff options
Diffstat (limited to 'pkg/server/handler.go')
-rw-r--r-- | pkg/server/handler.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/pkg/server/handler.go b/pkg/server/handler.go new file mode 100644 index 0000000..6d17af7 --- /dev/null +++ b/pkg/server/handler.go @@ -0,0 +1,32 @@ +package server + +import ( + "fmt" + "net/http" +) + +// handler implements the http.Handler interface +type handler struct { + method string + endpoint string + callback func(w http.ResponseWriter, r *http.Request) (int, string) +} + +func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + w.Header().Set("Cache-Control", "no-cache") + if r.Method != h.method { + http.Error(w, "Invalid HTTP method, expected "+h.method, http.StatusMethodNotAllowed) + return + } + code, text := h.callback(w, r) + if code != http.StatusOK { + http.Error(w, text, code) + return + } + fmt.Fprintf(w, fmt.Sprintf("%s\n", text)) +} + +func (h handler) register(mux *http.ServeMux) { + mux.Handle("/"+h.endpoint, h) +} |