authn.go 697 B

1234567891011121314151617181920212223242526
  1. package middleware
  2. import (
  3. "net/http"
  4. "github.com/ncarlier/webhookd/pkg/auth"
  5. )
  6. const xWebAuthUser = "X-WebAuth-User"
  7. // AuthN is a middleware to checks HTTP request credentials
  8. func AuthN(authenticator auth.Authenticator) Middleware {
  9. return func(next http.Handler) http.Handler {
  10. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  11. r.Header.Del(xWebAuthUser)
  12. if ok, username := authenticator.Validate(r); ok {
  13. r.Header.Set(xWebAuthUser, username)
  14. next.ServeHTTP(w, r)
  15. return
  16. }
  17. w.Header().Set("WWW-Authenticate", `Basic realm="Ah ah ah, you didn't say the magic word"`)
  18. w.WriteHeader(401)
  19. w.Write([]byte("401 Unauthorized\n"))
  20. })
  21. }
  22. }