From 91300d957b5d9dde8fbef3c295b21202857ad2ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Bouzour=C3=A8ne?= Date: Fri, 3 Jan 2025 16:21:40 +0100 Subject: [PATCH] Check if email already exists & fix last admin check --- controllers/users.go | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/controllers/users.go b/controllers/users.go index 37841d3..d266d85 100644 --- a/controllers/users.go +++ b/controllers/users.go @@ -108,6 +108,16 @@ func UserAdd(c *fiber.Ctx) error { user.Name = data.Name user.Email = data.Email + var usersEmail []models.User + result := db.Find(&usersEmail, "email = ?", user.Email) + if result.Error != nil { + return result.Error + } + + if result.RowsAffected > 0 { + errors = append(errors, "L'adresse email est déjà utilisée par un autre utilisateur") + } + passwordHash, err := helpers.HashPassword(data.Password) if err != nil { return err @@ -119,7 +129,7 @@ func UserAdd(c *fiber.Ctx) error { user.IsAdmin = (c.FormValue("is_admin") == "on") if len(errors) == 0 { - result := db.Create(&user) + result = db.Create(&user) if result.Error != nil { return result.Error } else { @@ -191,6 +201,16 @@ func UserEdit(c *fiber.Ctx) error { user.Name = data.Name user.Email = data.Email + var usersEmail []models.User + result := db.Find(&usersEmail, "email = ? AND id <> ?", user.Email, user.ID) + if result.Error != nil { + return result.Error + } + + if result.RowsAffected > 0 { + errors = append(errors, "L'adresse email est déjà utilisée par un autre utilisateur") + } + if len(data.Password) > 0 { passwordHash, err := helpers.HashPassword(data.Password) if err != nil { @@ -207,14 +227,16 @@ func UserEdit(c *fiber.Ctx) error { user.IsAdmin = (c.FormValue("is_admin") == "on") - var users []models.User - result := db.Find(&users, "is_admin = ?", true) - if result.Error != nil { - return result.Error - } + if !user.IsAdmin { + var users []models.User + result = db.Find(&users, "is_admin = ? AND id <> ?", true, user.ID) + if result.Error != nil { + return result.Error + } - if !user.IsAdmin && result.RowsAffected < 2 { - errors = append(errors, "Il doit y avoir au moins un administrateur") + if result.RowsAffected < 1 { + errors = append(errors, "Il doit y avoir au moins un administrateur") + } } if len(errors) == 0 {