@ -114,11 +114,15 @@ func apiErrorDefined(ctx *context.Context, err *namedError) {
} )
}
// ReqContainerAccess is a middleware which checks the current user valid (real user or ghost for anonymous access)
func apiUnauthorizedError ( ctx * context . Context ) {
ctx . Resp . Header ( ) . Add ( "WWW-Authenticate" , ` Bearer realm=" ` + setting . AppURL + ` v2/token",service="container_registry",scope="*" ` )
apiErrorDefined ( ctx , errUnauthorized )
}
// ReqContainerAccess is a middleware which checks the current user valid (real user or ghost if anonymous access is enabled)
func ReqContainerAccess ( ctx * context . Context ) {
if ctx . Doer == nil {
ctx . Resp . Header ( ) . Add ( "WWW-Authenticate" , ` Bearer realm=" ` + setting . AppURL + ` v2/token",service="container_registry",scope="*" ` )
apiErrorDefined ( ctx , errUnauthorized )
if ctx . Doer == nil || ( setting . Service . RequireSignInView && ctx . Doer . IsGhost ( ) ) {
apiUnauthorizedError ( ctx )
}
}
@ -138,10 +142,15 @@ func DetermineSupport(ctx *context.Context) {
}
// Authenticate creates a token for the current user
// If the current user is anonymous, the ghost user is used
// If the current user is anonymous, the ghost user is used unless RequireSignInView is enabled.
func Authenticate ( ctx * context . Context ) {
u := ctx . Doer
if u == nil {
if setting . Service . RequireSignInView {
apiUnauthorizedError ( ctx )
return
}
u = user_model . NewGhostUser ( )
}