From 6e58f8400e911e642957acb6d4b63111d98d3de7 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Fri, 31 Mar 2023 23:32:18 +0900 Subject: [PATCH] Fix 500 error if there is a name conflict when edit authentication source (#23832) --- models/auth/source.go | 9 ++++++++- routers/web/admin/auths.go | 6 ++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/models/auth/source.go b/models/auth/source.go index bade2fecf098..0a904b777239 100644 --- a/models/auth/source.go +++ b/models/auth/source.go @@ -317,7 +317,14 @@ func UpdateSource(source *Source) error { } } - _, err := db.GetEngine(db.DefaultContext).ID(source.ID).AllCols().Update(source) + has, err := db.GetEngine(db.DefaultContext).Where("name=? AND id!=?", source.Name, source.ID).Exist(new(Source)) + if err != nil { + return err + } else if has { + return ErrSourceAlreadyExist{source.Name} + } + + _, err = db.GetEngine(db.DefaultContext).ID(source.ID).AllCols().Update(source) if err != nil { return err } diff --git a/routers/web/admin/auths.go b/routers/web/admin/auths.go index d2953f753d7a..6ebd23b7bbd5 100644 --- a/routers/web/admin/auths.go +++ b/routers/web/admin/auths.go @@ -426,9 +426,11 @@ func EditAuthSourcePost(ctx *context.Context) { source.IsActive = form.IsActive source.IsSyncEnabled = form.IsSyncEnabled source.Cfg = config - // FIXME: if the name conflicts, it will result in 500: Error 1062: Duplicate entry 'aa' for key 'login_source.UQE_login_source_name' if err := auth.UpdateSource(source); err != nil { - if oauth2.IsErrOpenIDConnectInitialize(err) { + if auth.IsErrSourceAlreadyExist(err) { + ctx.Data["Err_Name"] = true + ctx.RenderWithErr(ctx.Tr("admin.auths.login_source_exist", err.(auth.ErrSourceAlreadyExist).Name), tplAuthEdit, form) + } else if oauth2.IsErrOpenIDConnectInitialize(err) { ctx.Flash.Error(err.Error(), true) ctx.Data["Err_DiscoveryURL"] = true ctx.HTML(http.StatusOK, tplAuthEdit)