package handlers
import (
"net/http"
"github.com/golang/glog"
"github.com/openshift/origin/pkg/auth/authenticator"
)
type RequestContext interface {
Set(*http.Request, interface{})
Remove(*http.Request)
}
func NewRequestAuthenticator(context RequestContext, auth authenticator.Request, failed http.Handler, handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
user, ok, err := auth.AuthenticateRequest(req)
if err != nil || !ok {
failed.ServeHTTP(w, req)
return
}
glog.V(1).Infof("Found user, %v, when accessing %v", user, req.URL)
context.Set(req, user)
defer context.Remove(req)
handler.ServeHTTP(w, req)
})
}