Add a "null" auth backend

Not built by default, but can be added with `go build -tags nullauth`.
Enabled by running tokidoki with `-auth.url null://`. Very useful for
simpler debugging when you don't want manage test accounts with actual
passwords.
This commit is contained in:
Conrad Hoffmann 2024-02-01 14:21:43 +01:00
parent ddc11d4c7b
commit 1d871b000a
3 changed files with 50 additions and 0 deletions

37
auth/null.go Normal file
View File

@ -0,0 +1,37 @@
//go:build nullauth
package auth
import (
"net/http"
)
type nullProvider struct{}
func NewNull() (AuthProvider, error) {
return nullProvider{}, nil
}
func (nullProvider) Middleware() func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
nullAuth(next, w, r)
})
}
}
func nullAuth(next http.Handler, w http.ResponseWriter, r *http.Request) {
user, _, ok := r.BasicAuth()
if !ok {
w.Header().Add("WWW-Authenticate", `Basic realm="Please provide your system credentials", charset="UTF-8"`)
http.Error(w, "HTTP Basic auth is required", http.StatusUnauthorized)
return
}
authCtx := AuthContext{
AuthMethod: "null",
UserName: user,
}
ctx := NewContext(r.Context(), &authCtx)
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
}

11
auth/null_stub.go Normal file
View File

@ -0,0 +1,11 @@
//go:build !nullauth
package auth
import (
"errors"
)
func NewNull() (AuthProvider, error) {
return nil, errors.New("NullAuth is disabled")
}

View File

@ -18,6 +18,8 @@ func NewFromURL(authURL string) (AuthProvider, error) {
return NewIMAP(u.Host, true), nil
case "pam":
return NewPAM()
case "null":
return NewNull()
default:
return nil, fmt.Errorf("no auth provider found for %s:// URL", u.Scheme)
}