]> source.dussan.org Git - gitea.git/commitdiff
Fix 500 error if there is a name conflict when edit authentication source (#23832)
authoryp05327 <576951401@qq.com>
Fri, 31 Mar 2023 14:32:18 +0000 (23:32 +0900)
committerGitHub <noreply@github.com>
Fri, 31 Mar 2023 14:32:18 +0000 (22:32 +0800)
models/auth/source.go
routers/web/admin/auths.go

index bade2fecf098b995e6ceaa6b7d8fe7fca012c5bf..0a904b7772394741219a12f252105f9544b1506d 100644 (file)
@@ -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
        }
index d2953f753d7a49265c0a61dfe8c4491c6958c4c7..6ebd23b7bbd59c05a8ce6d9465d1c846851db800 100644 (file)
@@ -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)