From ee884344d0ce500bad47f8020a1845c776de1cf5 Mon Sep 17 00:00:00 2001 From: Anbraten Date: Fri, 7 Feb 2025 08:40:43 +0100 Subject: [PATCH] fix org assign on login --- server/api/login.go | 29 +++++++++++++++++------------ server/store/datastore/helper.go | 4 ++-- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/server/api/login.go b/server/api/login.go index 06134b27d..adedb421f 100644 --- a/server/api/login.go +++ b/server/api/login.go @@ -110,7 +110,7 @@ func HandleAuth(c *gin.Context) { _forge, err := server.Config.Services.Manager.ForgeByID(forgeID) if err != nil { - log.Error().Err(err).Msgf("Cannot get forge by id %d", forgeID) + log.Error().Err(err).Msgf("cannot get forge by id %d", forgeID) c.Redirect(http.StatusSeeOther, server.Config.Server.RootPath+"/login?error=internal_error") return } @@ -183,21 +183,26 @@ func HandleAuth(c *gin.Context) { // create or set the user's organization if it isn't linked yet if user.OrgID == 0 { // check if an org with the same name exists already and assign it to the user if it does - if org, err := _store.OrgFindByName(user.Login); err == nil && org != nil { - org.IsUser = true - user.OrgID = org.ID - - if err := _store.OrgUpdate(org); err != nil { - log.Error().Err(err).Msgf("on user creation, could not mark org as user") - } - } + // TODO: find the org by name and forgeID directly + org, err := _store.OrgFindByName(user.Login) if err != nil && !errors.Is(err, types.RecordNotExist) { log.Error().Err(err).Msgf("cannot get org %s", user.Login) c.Redirect(http.StatusSeeOther, server.Config.Server.RootPath+"/login?error=internal_error") return } - if user.OrgID == 0 { + // if an org with the same name exists => assign org to the user + if err == nil && org != nil { + org.IsUser = true + user.OrgID = org.ID + + if err := _store.OrgUpdate(org); err != nil { + log.Error().Err(err).Msgf("on login, could not assign user to existing org") + } + } + + // if no org with the same name exists => create a new org + if user.OrgID == 0 || errors.Is(err, types.RecordNotExist) { org := &model.Org{ Name: user.Login, IsUser: true, @@ -205,7 +210,7 @@ func HandleAuth(c *gin.Context) { ForgeID: user.ForgeID, } if err := _store.OrgCreate(org); err != nil { - log.Error().Err(err).Msgf("on user creation, could not create org for user") + log.Error().Err(err).Msgf("on login, could not create org for user") } user.OrgID = org.ID } @@ -220,7 +225,7 @@ func HandleAuth(c *gin.Context) { if org != nil && org.Name != user.Login { org.Name = user.Login if err := _store.OrgUpdate(org); err != nil { - log.Error().Err(err).Msgf("on user creation, could not mark org as user") + log.Error().Err(err).Msgf("on login, could not update org %d name to user name %s", org.ID, user.Login) } } } diff --git a/server/store/datastore/helper.go b/server/store/datastore/helper.go index 16f8f296d..b3b2bfffc 100644 --- a/server/store/datastore/helper.go +++ b/server/store/datastore/helper.go @@ -31,7 +31,7 @@ func wrapGet(exist bool, err error) error { return types.RecordNotExist } if err != nil { - // we only ask for the function's name if needed, as it's not as preformatted as to just execute it + // we only ask for the function's name if needed for performance reasons fnName := callerName(2) return fmt.Errorf("%s: %w", fnName, err) } @@ -44,7 +44,7 @@ func wrapDelete(c int64, err error) error { return types.RecordNotExist } if err != nil { - // we only ask for the function's name if needed, as it's not as preformatted as to just execute it + // we only ask for the function's name if needed for performance reasons fnName := callerName(2) return fmt.Errorf("%s: %w", fnName, err) }