Sfoglia il codice sorgente

Fix bug when the linked account was disactived and list the linked accounts (#29263)

The bug has been fixed on v1.22 but not backport to v1.21.
This original PR have many refactors so I don't think it's necessary to
backport all of them.

Fix #28667
tags/v1.21.6
Lunny Xiao 3 mesi fa
parent
commit
e2eac7574f
Nessun account collegato all'indirizzo email del committer

+ 7
- 3
models/auth/oauth2.go Vedi File

@@ -626,10 +626,14 @@ func (err ErrOAuthApplicationNotFound) Unwrap() error {
return util.ErrNotExist
}

// GetActiveOAuth2ProviderSources returns all actived LoginOAuth2 sources
func GetActiveOAuth2ProviderSources() ([]*Source, error) {
// GetOAuth2ProviderSources returns all actived LoginOAuth2 sources
func GetOAuth2ProviderSources(onlyActive bool) ([]*Source, error) {
sources := make([]*Source, 0, 1)
if err := db.GetEngine(db.DefaultContext).Where("is_active = ? and type = ?", true, OAuth2).Find(&sources); err != nil {
sess := db.GetEngine(db.DefaultContext)
if onlyActive {
sess = sess.Where("is_active = ?", true)
}
if err := sess.Where("type = ?", OAuth2).Find(&sources); err != nil {
return nil, err
}
return sources, nil

+ 4
- 4
routers/web/auth/auth.go Vedi File

@@ -146,7 +146,7 @@ func SignIn(ctx *context.Context) {
return
}

orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers()
orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil {
ctx.ServerError("UserSignIn", err)
return
@@ -170,7 +170,7 @@ func SignIn(ctx *context.Context) {
func SignInPost(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("sign_in")

orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers()
orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil {
ctx.ServerError("UserSignIn", err)
return
@@ -392,7 +392,7 @@ func SignUp(ctx *context.Context) {

ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up"

orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers()
orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil {
ctx.ServerError("UserSignUp", err)
return
@@ -422,7 +422,7 @@ func SignUpPost(ctx *context.Context) {

ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up"

orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers()
orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil {
ctx.ServerError("UserSignUp", err)
return

+ 1
- 1
routers/web/user/setting/security/security.go Vedi File

@@ -105,7 +105,7 @@ func loadSecurityData(ctx *context.Context) {
}
ctx.Data["AccountLinks"] = sources

orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers()
orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(false)
if err != nil {
ctx.ServerError("GetActiveOAuth2Providers", err)
return

+ 1
- 1
services/auth/source/oauth2/init.go Vedi File

@@ -62,7 +62,7 @@ func ResetOAuth2() error {

// initOAuth2Sources is used to load and register all active OAuth2 providers
func initOAuth2Sources() error {
authSources, _ := auth.GetActiveOAuth2ProviderSources()
authSources, _ := auth.GetOAuth2ProviderSources(true)
for _, source := range authSources {
oauth2Source, ok := source.Cfg.(*Source)
if !ok {

+ 3
- 4
services/auth/source/oauth2/providers.go Vedi File

@@ -94,13 +94,12 @@ func GetOAuth2Providers() []Provider {
return providers
}

// GetActiveOAuth2Providers returns the map of configured active OAuth2 providers
// GetOAuth2ProvidersMap returns the map of configured active OAuth2 providers
// key is used as technical name (like in the callbackURL)
// values to display
func GetActiveOAuth2Providers() ([]string, map[string]Provider, error) {
func GetOAuth2ProvidersMap(onlyActive bool) ([]string, map[string]Provider, error) {
// Maybe also separate used and unused providers so we can force the registration of only 1 active provider for each type

authSources, err := auth.GetActiveOAuth2ProviderSources()
authSources, err := auth.GetOAuth2ProviderSources(onlyActive)
if err != nil {
return nil, nil, err
}

Loading…
Annulla
Salva