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) +} | 
