From 1b5f4bff2c092e4910ef0dbd72b8f13f9bb73f66 Mon Sep 17 00:00:00 2001 From: Christoph Kluge Date: Mon, 9 Sep 2024 10:32:26 +0200 Subject: [PATCH] feat: SyncUserOnLogin now updates name of token logged user --- internal/auth/auth.go | 8 ++++++-- internal/repository/user.go | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/internal/auth/auth.go b/internal/auth/auth.go index e45fa9d..b6e4cbe 100644 --- a/internal/auth/auth.go +++ b/internal/auth/auth.go @@ -145,14 +145,18 @@ func GetAuthInstance() *Authentication { func persistUser(user *schema.User) { r := repository.GetUserRepository() - _, err := r.GetUser(user.Username) + dbUser, err := r.GetUser(user.Username) if err != nil && err != sql.ErrNoRows { log.Errorf("Error while loading user '%s': %v", user.Username, err) - } else if err == sql.ErrNoRows { + } else if err == sql.ErrNoRows { // Adds New User if err := r.AddUser(user); err != nil { log.Errorf("Error while adding user '%s' to DB: %v", user.Username, err) } + } else { // Update Existing + if err := r.UpdateUser(dbUser, user); err != nil { + log.Errorf("Error while updating user '%s' to DB: %v", user.Username, err) + } } } diff --git a/internal/repository/user.go b/internal/repository/user.go index a8776a9..db96136 100644 --- a/internal/repository/user.go +++ b/internal/repository/user.go @@ -130,6 +130,27 @@ func (r *UserRepository) AddUser(user *schema.User) error { return nil } +func (r *UserRepository) UpdateUser(dbUser *schema.User, user *schema.User) error { + // user contains updated info, apply to dbuser + // TODO: Discuss updatable fields + if dbUser.Name != user.Name { + if _, err := sq.Update("user").Set("name", user.Name).Where("user.username = ?", dbUser.Username).RunWith(r.DB).Exec(); err != nil { + log.Errorf("error while updating name of user '%s'", user.Username) + return err + } + } + + // Toggled until greenlit + // if dbUser.HasRole(schema.RoleManager) && !reflect.DeepEqual(dbUser.Projects, user.Projects) { + // projects, _ := json.Marshal(user.Projects) + // if _, err := sq.Update("user").Set("projects", projects).Where("user.username = ?", dbUser.Username).RunWith(r.DB).Exec(); err != nil { + // return err + // } + // } + + return nil +} + func (r *UserRepository) DelUser(username string) error { _, err := r.DB.Exec(`DELETE FROM user WHERE user.username = ?`, username) if err != nil {