mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	use existing oauth grant for public client (#31015)
Do not try to create a new authorization grant when one exists already,
thus preventing a DB-related authorization issue.
Fix https://github.com/go-gitea/gitea/pull/30790#issuecomment-2118812426
---------
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
(cherry picked from commit 9c8c9ff6d10b35de8d2d7eae0fc2646ad9bbe94a)
(cherry picked from commit 07fe5a8b13)
	
	
This commit is contained in:
		
					parent
					
						
							
								a228ab3ab2
							
						
					
				
			
			
				commit
				
					
						0c770d528f
					
				
			
		
					 1 changed files with 17 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -556,15 +556,30 @@ func GrantApplicationOAuth(ctx *context.Context) {
 | 
			
		|||
		ctx.ServerError("GetOAuth2ApplicationByClientID", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	grant, err := app.CreateGrant(ctx, ctx.Doer.ID, form.Scope)
 | 
			
		||||
	grant, err := app.GetGrantByUserID(ctx, ctx.Doer.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		handleServerError(ctx, form.State, form.RedirectURI)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if grant == nil {
 | 
			
		||||
		grant, err = app.CreateGrant(ctx, ctx.Doer.ID, form.Scope)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			handleAuthorizeError(ctx, AuthorizeError{
 | 
			
		||||
				State:            form.State,
 | 
			
		||||
				ErrorDescription: "cannot create grant for user",
 | 
			
		||||
				ErrorCode:        ErrorCodeServerError,
 | 
			
		||||
			}, form.RedirectURI)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	} else if grant.Scope != form.Scope {
 | 
			
		||||
		handleAuthorizeError(ctx, AuthorizeError{
 | 
			
		||||
			State:            form.State,
 | 
			
		||||
			ErrorDescription: "cannot create grant for user",
 | 
			
		||||
			ErrorDescription: "a grant exists with different scope",
 | 
			
		||||
			ErrorCode:        ErrorCodeServerError,
 | 
			
		||||
		}, form.RedirectURI)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(form.Nonce) > 0 {
 | 
			
		||||
		err := grant.SetNonce(ctx, form.Nonce)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue