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 { | 	if err := oauth2.Init(x); err != nil { | ||||||
| 		return err | 		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 { | 	for _, source := range loginSources { | ||||||
| 		oAuth2Config := source.OAuth2() | 		oAuth2Config := source.OAuth2() | ||||||
| 		err := oauth2.RegisterProvider(source.Name, oAuth2Config.Provider, oAuth2Config.ClientID, oAuth2Config.ClientSecret, oAuth2Config.OpenIDConnectAutoDiscoveryURL, oAuth2Config.CustomURLMapping) | 		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) | 	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
 | // used to create different types of goth providers
 | ||||||
| func createProvider(providerName, providerType, clientID, clientSecret, openIDConnectAutoDiscoveryURL string, customURLMapping *CustomURLMapping) (goth.Provider, error) { | func createProvider(providerName, providerType, clientID, clientSecret, openIDConnectAutoDiscoveryURL string, customURLMapping *CustomURLMapping) (goth.Provider, error) { | ||||||
| 	callbackURL := setting.AppURL + "user/oauth2/" + url.PathEscape(providerName) + "/callback" | 	callbackURL := setting.AppURL + "user/oauth2/" + url.PathEscape(providerName) + "/callback" | ||||||
|  |  | ||||||
|  | @ -570,8 +570,17 @@ func SignInOAuth(ctx *context.Context) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	err = oauth2.Auth(loginSource.Name, ctx.Req.Request, ctx.Resp) | 	if err = oauth2.Auth(loginSource.Name, ctx.Req.Request, ctx.Resp); err != nil { | ||||||
| 	if 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) | 		ctx.ServerError("SignIn", err) | ||||||
| 	} | 	} | ||||||
| 	// redirect is done in oauth2.Auth
 | 	// redirect is done in oauth2.Auth
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue