wisski-cloud-distillery/pkg/httpx/basic.go
2022-09-16 17:54:40 +02:00

24 lines
771 B
Go

package httpx
import "net/http"
var basicUnauthorized = []byte("Unauthorized")
// BasicAuth returns a new [http.Handler] that requires any credentials to pass the check function
func BasicAuth(handler http.Handler, realm string, check func(username, password string) bool) http.Handler {
var authenticateHeader = `Basic realm="` + realm + `"`
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// if the basic authentication passes
// we can just use the handler!
user, pass, ok := r.BasicAuth()
if ok && check(user, pass) {
handler.ServeHTTP(w, r)
return
}
// http authentication did not pass
w.Header().Add("WWW-Authenticate", authenticateHeader)
w.WriteHeader(http.StatusUnauthorized)
w.Write(basicUnauthorized)
})
}