Fix creating OAuth2 auth source from CLI (#14116)
Fix creation OAuth2 auth source from CLI. Fix #8356 Co-authored-by: Daniil Pankratov <daniil.pankratov@t-systems.com>
This commit is contained in:
		
							parent
							
								
									bdeccc3688
								
							
						
					
					
						commit
						5a94db37ed
					
				
					 3 changed files with 27 additions and 3 deletions
				
			
		|  | @ -125,8 +125,18 @@ func InitOAuth2() error { | |||
| 	if err := oauth2.Init(x); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	loginSources, _ := GetActiveOAuth2ProviderLoginSources() | ||||
| 	return initOAuth2LoginSources() | ||||
| } | ||||
| 
 | ||||
| // ResetOAuth2 clears existing OAuth2 providers and loads them from DB
 | ||||
| func ResetOAuth2() error { | ||||
| 	oauth2.ClearProviders() | ||||
| 	return initOAuth2LoginSources() | ||||
| } | ||||
| 
 | ||||
| // initOAuth2LoginSources is used to load and register all active OAuth2 providers
 | ||||
| func initOAuth2LoginSources() error { | ||||
| 	loginSources, _ := GetActiveOAuth2ProviderLoginSources() | ||||
| 	for _, source := range loginSources { | ||||
| 		oAuth2Config := source.OAuth2() | ||||
| 		err := oauth2.RegisterProvider(source.Name, oAuth2Config.Provider, oAuth2Config.ClientID, oAuth2Config.ClientSecret, oAuth2Config.OpenIDConnectAutoDiscoveryURL, oAuth2Config.CustomURLMapping) | ||||
|  |  | |||
|  | @ -119,6 +119,11 @@ func RemoveProvider(providerName string) { | |||
| 	delete(goth.GetProviders(), providerName) | ||||
| } | ||||
| 
 | ||||
| // ClearProviders clears all OAuth2 providers from the goth lib
 | ||||
| func ClearProviders() { | ||||
| 	goth.ClearProviders() | ||||
| } | ||||
| 
 | ||||
| // used to create different types of goth providers
 | ||||
| func createProvider(providerName, providerType, clientID, clientSecret, openIDConnectAutoDiscoveryURL string, customURLMapping *CustomURLMapping) (goth.Provider, error) { | ||||
| 	callbackURL := setting.AppURL + "user/oauth2/" + url.PathEscape(providerName) + "/callback" | ||||
|  |  | |||
|  | @ -570,8 +570,17 @@ func SignInOAuth(ctx *context.Context) { | |||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	err = oauth2.Auth(loginSource.Name, ctx.Req.Request, ctx.Resp) | ||||
| 	if err != nil { | ||||
| 	if err = oauth2.Auth(loginSource.Name, ctx.Req.Request, ctx.Resp); err != nil { | ||||
| 		if strings.Contains(err.Error(), "no provider for ") { | ||||
| 			if err = models.ResetOAuth2(); err != nil { | ||||
| 				ctx.ServerError("SignIn", err) | ||||
| 				return | ||||
| 			} | ||||
| 			if err = oauth2.Auth(loginSource.Name, ctx.Req.Request, ctx.Resp); err != nil { | ||||
| 				ctx.ServerError("SignIn", err) | ||||
| 			} | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.ServerError("SignIn", err) | ||||
| 	} | ||||
| 	// redirect is done in oauth2.Auth
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue