Skip to content
Snippets Groups Projects
header.go 741 B
Newer Older
package header

import (
	"context"
	"net/http"
)

type key string

const headerKey key = "header"

// Middleware is an HTTP server middleware that gets all HTTP headers
// and adds them to a request context value.
func Middleware() func(http.Handler) http.Handler {
	return func(h http.Handler) http.Handler {
		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			ctx := ToContext(r.Context(), r)
			req := r.WithContext(ctx)

			h.ServeHTTP(w, req)
		})
	}
}

func ToContext(ctx context.Context, r *http.Request) context.Context {
	return context.WithValue(ctx, headerKey, r.Header)
}

func FromContext(ctx context.Context) (http.Header, bool) {
	header, ok := ctx.Value(headerKey).(http.Header)
	return header, ok
}