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
pull/29264/head^2
Lunny Xiao 9 months ago committed by GitHub
parent 5b8b22bd75
commit e2eac7574f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 10
      models/auth/oauth2.go
  2. 8
      routers/web/auth/auth.go
  3. 2
      routers/web/user/setting/security/security.go
  4. 2
      services/auth/source/oauth2/init.go
  5. 7
      services/auth/source/oauth2/providers.go

@ -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

@ -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

@ -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

@ -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 {

@ -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…
Cancel
Save