func userIdHandler(next http.Handler) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { key := r.Header.Get("x-key") if key == "" { log.Printf("No x-key passed") WriteError(w, ErrNoXKey) return } if next != nil { context.Set(r, "x-key", key) next.ServeHTTP(w, r) } } return http.HandlerFunc(fn) }
func bodyHandler(v interface{}) func(http.Handler) http.Handler { t := reflect.TypeOf(v) m := func(next http.Handler) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { val := reflect.New(t).Interface() err := json.NewDecoder(r.Body).Decode(val) if err != nil { WriteError(w, ErrBadRequest) return } if next != nil { context.Set(r, "body", val) next.ServeHTTP(w, r) } } return http.HandlerFunc(fn) } return m }
func wrapHandler(h http.Handler) httprouter.Handle { return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { context.Set(r, "params", ps) h.ServeHTTP(w, r) } }