mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	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:
		| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user