code 281- get source router from the handler

This commit is contained in:
atefeh 2023-05-25 11:07:06 -07:00
parent 5e063bd729
commit 2b77e3aad6
5 changed files with 13 additions and 13 deletions

View File

@ -18,14 +18,14 @@ import (
// Attempt returns an http.HandlerFunc middleware that authenticates // Attempt returns an http.HandlerFunc middleware that authenticates
// the http.Request if authentication payload is available. // the http.Request if authentication payload is available.
func Attempt(authenticator authn.Authenticator) func(http.Handler) http.Handler { func Attempt(authenticator authn.Authenticator, sourceRouter authn.SourceRouter) func(http.Handler) http.Handler {
return performAuthentication(authenticator, false, authn.AuthGitCaller) return performAuthentication(authenticator, false, sourceRouter)
} }
// Required returns an http.HandlerFunc middleware that authenticates // Required returns an http.HandlerFunc middleware that authenticates
// the http.Request and fails the request if no auth data was available. // the http.Request and fails the request if no auth data was available.
func Required(authenticator authn.Authenticator) func(http.Handler) http.Handler { func Required(authenticator authn.Authenticator, sourceRouter authn.SourceRouter) func(http.Handler) http.Handler {
return performAuthentication(authenticator, true, authn.AuthAPICaller) return performAuthentication(authenticator, true, sourceRouter)
} }
// performAuthentication returns an http.HandlerFunc middleware that authenticates // performAuthentication returns an http.HandlerFunc middleware that authenticates
@ -33,14 +33,14 @@ func Required(authenticator authn.Authenticator) func(http.Handler) http.Handler
// Depending on whether it is required or not, the request will be failed. // Depending on whether it is required or not, the request will be failed.
func performAuthentication( func performAuthentication(
authenticator authn.Authenticator, authenticator authn.Authenticator,
required bool, caller authn.APICaller, required bool, sourceRouter authn.SourceRouter,
) func(http.Handler) http.Handler { ) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context() ctx := r.Context()
log := hlog.FromRequest(r) log := hlog.FromRequest(r)
session, err := authenticator.Authenticate(r, caller) session, err := authenticator.Authenticate(r, sourceRouter)
if errors.Is(err, authn.ErrNoAuthData) { if errors.Is(err, authn.ErrNoAuthData) {
if required { if required {

View File

@ -19,11 +19,11 @@ var (
ErrNotAcceptedAuthMethod = errors.New("the request contains auth method that is not accepted by the Authorizer") ErrNotAcceptedAuthMethod = errors.New("the request contains auth method that is not accepted by the Authorizer")
) )
type APICaller string type SourceRouter string
const ( const (
AuthAPICaller APICaller = "api" SourceRouterAPI SourceRouter = "api"
AuthGitCaller APICaller = "git" SourceRouterGIT SourceRouter = "git"
) )
// Authenticator is an abstraction of an entity that's responsible for authenticating principals // Authenticator is an abstraction of an entity that's responsible for authenticating principals
@ -36,5 +36,5 @@ type Authenticator interface {
* (nil, ErrNoAuthData) - request doesn't contain any auth data * (nil, ErrNoAuthData) - request doesn't contain any auth data
* (nil, err) - request contains auth data but verification failed * (nil, err) - request contains auth data but verification failed
*/ */
Authenticate(r *http.Request, caller APICaller) (*auth.Session, error) Authenticate(r *http.Request, sourceRouter SourceRouter) (*auth.Session, error)
} }

View File

@ -38,7 +38,7 @@ func NewTokenAuthenticator(
} }
} }
func (a *TokenAuthenticator) Authenticate(r *http.Request, caller APICaller) (*auth.Session, error) { func (a *TokenAuthenticator) Authenticate(r *http.Request, sourceRouter SourceRouter) (*auth.Session, error) {
ctx := r.Context() ctx := r.Context()
str := extractToken(r) str := extractToken(r)

View File

@ -82,7 +82,7 @@ func NewAPIHandler(
r.Use(corsHandler(config)) r.Use(corsHandler(config))
// for now always attempt auth - enforced per operation. // for now always attempt auth - enforced per operation.
r.Use(middlewareauthn.Attempt(authenticator)) r.Use(middlewareauthn.Attempt(authenticator, authn.SourceRouterAPI))
r.Route("/v1", func(r chi.Router) { r.Route("/v1", func(r chi.Router) {
setupRoutesV1(r, repoCtrl, spaceCtrl, pullreqCtrl, webhookCtrl, githookCtrl, saCtrl, userCtrl, principalCtrl) setupRoutesV1(r, repoCtrl, spaceCtrl, pullreqCtrl, webhookCtrl, githookCtrl, saCtrl, userCtrl, principalCtrl)

View File

@ -53,7 +53,7 @@ func NewGitHandler(
r.Use(logging.HLogAccessLogHandler()) r.Use(logging.HLogAccessLogHandler())
r.Route(fmt.Sprintf("/{%s}", request.PathParamRepoRef), func(r chi.Router) { r.Route(fmt.Sprintf("/{%s}", request.PathParamRepoRef), func(r chi.Router) {
r.Use(middlewareauthn.Attempt(authenticator)) r.Use(middlewareauthn.Attempt(authenticator, authn.SourceRouterGIT))
// smart protocol // smart protocol
r.Handle("/git-upload-pack", handlerrepo.GetUploadPack(client, urlProvider, repoStore, authorizer)) r.Handle("/git-upload-pack", handlerrepo.GetUploadPack(client, urlProvider, repoStore, authorizer))