From 49a2911d59e0dd23c932d3e39c8516dc0012c098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lie=20Delhaie?= Date: Thu, 14 Jul 2022 18:34:05 +0200 Subject: [PATCH] Change username of other users --- database/database.go | 9 +++++++++ server/admin.go | 42 ++++++++++++++++++++++++++++++++++++++++++ server/server.go | 1 + 3 files changed, 52 insertions(+) diff --git a/database/database.go b/database/database.go index cc24f4e..d13d5bb 100644 --- a/database/database.go +++ b/database/database.go @@ -77,6 +77,15 @@ func UserByUsername(username string) (*User, error) { return user, nil } +func ChangeUsername(userId int, newUsername string) error { + user, err := UserById(userId) + if err != nil { + return err + } + user.Username = newUsername + return db.Save(user).Error +} + // UserById get a user func UserById(userId int) (*User, error) { var user *User diff --git a/server/admin.go b/server/admin.go index 287697d..d354738 100644 --- a/server/admin.go +++ b/server/admin.go @@ -13,6 +13,11 @@ import ( "time" ) +type UpdateUsername struct { + Id int `json:"id"` + Username string `json:"username"` +} + func AddUser(w http.ResponseWriter, r *http.Request) { body, err := io.ReadAll(r.Body) if err != nil { @@ -176,3 +181,40 @@ func ChangeUserPassword(w http.ResponseWriter, r *http.Request) { } ok(payload, w, r) } + +func ChangeUsername(w http.ResponseWriter, r *http.Request) { + body, err := io.ReadAll(r.Body) + if err != nil { + internalServerError(w, r) + log.Println(err) + return + } + newUserInfo := new(UpdateUsername) + err = json.Unmarshal(body, newUserInfo) + if err != nil { + internalServerError(w, r) + log.Println(err) + return + } + if len(newUserInfo.Username) < 3 { + badRequest("username need at least 3 characters", w, r) + return + } + _, err = database.UserByUsername(newUserInfo.Username) + if err == nil { + badRequest("username already exist", w, r) + return + } + err = database.ChangeUsername(newUserInfo.Id, newUserInfo.Username) + if err != nil { + internalServerError(w, r) + log.Println(err) + return + } + payload := &successMessage{ + Message: "Username changed", + Timestamp: time.Now(), + Status: 200, + } + ok(payload, w, r) +} diff --git a/server/server.go b/server/server.go index 008df41..a7a6b19 100644 --- a/server/server.go +++ b/server/server.go @@ -39,6 +39,7 @@ func Serve() { r.Route("/admin", func(adminRouter chi.Router) { adminRouter.Use(adminMiddleware) adminRouter.Post("/user", AddUser) + adminRouter.Post("/user/username", ChangeUsername) adminRouter.Post("/user/passwd/{id}", ChangeUserPassword) adminRouter.Delete("/user/{id}", RemoveUser) adminRouter.Get("/user/{id}", User)