fix: mark users seen when activating on login (#21305)

fixes #21303

Update user last_seen_at when we mark them active on login. This prevents a narrow race where they can be re-marked dormant and fail to log in.
This commit is contained in:
Spike Curtis
2025-12-17 16:49:40 +04:00
committed by GitHub
parent f9087d6feb
commit bd753d9cb9
6 changed files with 43 additions and 26 deletions
+11 -8
View File
@@ -256,8 +256,9 @@ func (api *API) scimPostUser(rw http.ResponseWriter, r *http.Request) {
newUser, err := api.Database.UpdateUserStatus(dbauthz.AsSystemRestricted(r.Context()), database.UpdateUserStatusParams{
ID: dbUser.ID,
// The user will get transitioned to Active after logging in.
Status: database.UserStatusDormant,
UpdatedAt: dbtime.Now(),
Status: database.UserStatusDormant,
UpdatedAt: dbtime.Now(),
UserIsSeen: false,
})
if err != nil {
_ = handlerutil.WriteError(rw, err) // internal error
@@ -395,9 +396,10 @@ func (api *API) scimPatchUser(rw http.ResponseWriter, r *http.Request) {
if dbUser.Status != newStatus {
//nolint:gocritic // needed for SCIM
userNew, err := api.Database.UpdateUserStatus(dbauthz.AsSystemRestricted(r.Context()), database.UpdateUserStatusParams{
ID: dbUser.ID,
Status: newStatus,
UpdatedAt: dbtime.Now(),
ID: dbUser.ID,
Status: newStatus,
UpdatedAt: dbtime.Now(),
UserIsSeen: false,
})
if err != nil {
_ = handlerutil.WriteError(rw, err) // internal error
@@ -490,9 +492,10 @@ func (api *API) scimPutUser(rw http.ResponseWriter, r *http.Request) {
if dbUser.Status != newStatus {
//nolint:gocritic // needed for SCIM
userNew, err := api.Database.UpdateUserStatus(dbauthz.AsSystemRestricted(r.Context()), database.UpdateUserStatusParams{
ID: dbUser.ID,
Status: newStatus,
UpdatedAt: dbtime.Now(),
ID: dbUser.ID,
Status: newStatus,
UpdatedAt: dbtime.Now(),
UserIsSeen: false,
})
if err != nil {
_ = handlerutil.WriteError(rw, err) // internal error