mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Map OIDC groups to Orgs/Teams (#21441)
Fixes #19555 Test-Instructions: https://github.com/go-gitea/gitea/pull/21441#issuecomment-1419438000 This PR implements the mapping of user groups provided by OIDC providers to orgs teams in Gitea. The main part is a refactoring of the existing LDAP code to make it usable from different providers. Refactorings: - Moved the router auth code from module to service because of import cycles - Changed some model methods to take a `Context` parameter - Moved the mapping code from LDAP to a common location I've tested it with Keycloak but other providers should work too. The JSON mapping format is the same as for LDAP.  --------- Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -19,7 +19,6 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/web/middleware"
 | 
			
		||||
	auth_service "code.gitea.io/gitea/services/auth"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// APIContext is a specific context for API service
 | 
			
		||||
@@ -215,35 +214,6 @@ func (ctx *APIContext) CheckForOTP() {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// APIAuth converts auth_service.Auth as a middleware
 | 
			
		||||
func APIAuth(authMethod auth_service.Method) func(*APIContext) {
 | 
			
		||||
	return func(ctx *APIContext) {
 | 
			
		||||
		// Get user from session if logged in.
 | 
			
		||||
		var err error
 | 
			
		||||
		ctx.Doer, err = authMethod.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.Error(http.StatusUnauthorized, "APIAuth", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ctx.Doer != nil {
 | 
			
		||||
			if ctx.Locale.Language() != ctx.Doer.Language {
 | 
			
		||||
				ctx.Locale = middleware.Locale(ctx.Resp, ctx.Req)
 | 
			
		||||
			}
 | 
			
		||||
			ctx.IsBasicAuth = ctx.Data["AuthedMethod"].(string) == auth_service.BasicMethodName
 | 
			
		||||
			ctx.IsSigned = true
 | 
			
		||||
			ctx.Data["IsSigned"] = ctx.IsSigned
 | 
			
		||||
			ctx.Data["SignedUser"] = ctx.Doer
 | 
			
		||||
			ctx.Data["SignedUserID"] = ctx.Doer.ID
 | 
			
		||||
			ctx.Data["SignedUserName"] = ctx.Doer.Name
 | 
			
		||||
			ctx.Data["IsAdmin"] = ctx.Doer.IsAdmin
 | 
			
		||||
		} else {
 | 
			
		||||
			ctx.Data["SignedUserID"] = int64(0)
 | 
			
		||||
			ctx.Data["SignedUserName"] = ""
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// APIContexter returns apicontext as middleware
 | 
			
		||||
func APIContexter() func(http.Handler) http.Handler {
 | 
			
		||||
	return func(next http.Handler) http.Handler {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user