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

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 
This commit is contained in:
Lunny Xiao 2024-02-19 23:23:47 +08:00 committed by GitHub
parent 5b8b22bd75
commit e2eac7574f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 16 additions and 13 deletions
models/auth
routers/web
auth
user/setting/security
services/auth/source/oauth2

@ -626,10 +626,14 @@ func (err ErrOAuthApplicationNotFound) Unwrap() error {
return util.ErrNotExist return util.ErrNotExist
} }
// GetActiveOAuth2ProviderSources returns all actived LoginOAuth2 sources // GetOAuth2ProviderSources returns all actived LoginOAuth2 sources
func GetActiveOAuth2ProviderSources() ([]*Source, error) { func GetOAuth2ProviderSources(onlyActive bool) ([]*Source, error) {
sources := make([]*Source, 0, 1) 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 nil, err
} }
return sources, nil return sources, nil

@ -146,7 +146,7 @@ func SignIn(ctx *context.Context) {
return return
} }
orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers() orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil { if err != nil {
ctx.ServerError("UserSignIn", err) ctx.ServerError("UserSignIn", err)
return return
@ -170,7 +170,7 @@ func SignIn(ctx *context.Context) {
func SignInPost(ctx *context.Context) { func SignInPost(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("sign_in") ctx.Data["Title"] = ctx.Tr("sign_in")
orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers() orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil { if err != nil {
ctx.ServerError("UserSignIn", err) ctx.ServerError("UserSignIn", err)
return return
@ -392,7 +392,7 @@ func SignUp(ctx *context.Context) {
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up" ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up"
orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers() orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil { if err != nil {
ctx.ServerError("UserSignUp", err) ctx.ServerError("UserSignUp", err)
return return
@ -422,7 +422,7 @@ func SignUpPost(ctx *context.Context) {
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up" ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/sign_up"
orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers() orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(true)
if err != nil { if err != nil {
ctx.ServerError("UserSignUp", err) ctx.ServerError("UserSignUp", err)
return return

@ -105,7 +105,7 @@ func loadSecurityData(ctx *context.Context) {
} }
ctx.Data["AccountLinks"] = sources ctx.Data["AccountLinks"] = sources
orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers() orderedOAuth2Names, oauth2Providers, err := oauth2.GetOAuth2ProvidersMap(false)
if err != nil { if err != nil {
ctx.ServerError("GetActiveOAuth2Providers", err) ctx.ServerError("GetActiveOAuth2Providers", err)
return return

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

@ -94,13 +94,12 @@ func GetOAuth2Providers() []Provider {
return providers 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) // key is used as technical name (like in the callbackURL)
// values to display // 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 // Maybe also separate used and unused providers so we can force the registration of only 1 active provider for each type
authSources, err := auth.GetOAuth2ProviderSources(onlyActive)
authSources, err := auth.GetActiveOAuth2ProviderSources()
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }