Files
QSfera/proxy/pkg/middleware/authentication.go
T
2020-11-30 17:19:03 +01:00

49 lines
1.1 KiB
Go

package middleware
import (
"fmt"
"net/http"
"time"
)
// Authentication is a higher level authentication middleware.
func Authentication(opts ...Option) func(next http.Handler) http.Handler {
options := newOptions(opts...)
oidc := OIDCAuth(
Logger(options.Logger),
OIDCProviderFunc(options.OIDCProviderFunc),
HTTPClient(options.HTTPClient),
OIDCIss(options.OIDCIss),
TokenCacheSize(options.UserinfoCacheSize),
TokenCacheTTL(time.Second*time.Duration(options.UserinfoCacheTTL)),
)
basic := BasicAuth(
Logger(options.Logger),
EnableBasicAuth(options.EnableBasicAuth),
AccountsClient(options.AccountsClient),
OIDCIss(options.OIDCIss),
)
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// here we multiplex depending on the use agent
userAgent := r.Header.Get("User-Agent")
fmt.Printf("\n\nUser-Agent:\t%s\n\n", userAgent)
switch userAgent {
case "a":
oidc(next).ServeHTTP(w, r)
return
case "b":
basic(next).ServeHTTP(w, r)
return
default:
oidc(next).ServeHTTP(w, r)
basic(next).ServeHTTP(w, r)
return
}
})
}
}