Browse Source
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>
mj-v1.14.3
Daniil Pankratov
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
27 additions and
3 deletions
-
models/oauth2.go
-
modules/auth/oauth2/oauth2.go
-
routers/user/auth.go
|
|
@ -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
|
|
|
|