// authenticate is an example of middleware that authenticates using basic authentication func authenticate(h httpctx.Handler) httpctx.Handler { return httpctx.HandlerFunc(func(ctx context.Context, w http.ResponseWriter, r *http.Request) error { credentials := r.Header.Get("WWW-Authenticate") ctx, err := checkCredentials(ctx, credentials) if err != nil { return err } return h.ServeHTTPContext(ctx, w, r) }) }
// ensureHttps is an example of middleware that ensures that the request scheme is https. func ensureHttps(h httpctx.Handler) httpctx.Handler { return httpctx.HandlerFunc(func(ctx context.Context, w http.ResponseWriter, r *http.Request) error { if r.URL.Scheme != "https" { u := *r.URL u.Scheme = "https" http.Redirect(w, r, u.String(), http.StatusMovedPermanently) return nil } return h.ServeHTTPContext(ctx, w, r) }) }
func ensureAdmin(h httpctx.Handler) httpctx.Handler { return httpctx.HandlerFunc(func(ctx context.Context, w http.ResponseWriter, r *http.Request) error { // ... get the userid from the context and ensure that the user has admin privilege ... return h.ServeHTTPContext(ctx, w, r) }) }