(logger slog.Logger, auditor *atomic.Pointer[audit.Auditor], db database.Store)
| 641 | } |
| 642 | |
| 643 | func ActivateDormantUser(logger slog.Logger, auditor *atomic.Pointer[audit.Auditor], db database.Store) func(ctx context.Context, user database.User) (database.User, error) { |
| 644 | return func(ctx context.Context, user database.User) (database.User, error) { |
| 645 | if user.ID == uuid.Nil || user.Status != database.UserStatusDormant { |
| 646 | return user, nil |
| 647 | } |
| 648 | |
| 649 | //nolint:gocritic // System needs to update status of the user account (dormant -> active). |
| 650 | newUser, err := db.UpdateUserStatus(dbauthz.AsSystemRestricted(ctx), database.UpdateUserStatusParams{ |
| 651 | ID: user.ID, |
| 652 | Status: database.UserStatusActive, |
| 653 | UpdatedAt: dbtime.Now(), |
| 654 | UserIsSeen: true, |
| 655 | }) |
| 656 | if err != nil { |
| 657 | logger.Error(ctx, "unable to update user status to active", slog.Error(err)) |
| 658 | return user, xerrors.Errorf("update user status: %w", err) |
| 659 | } |
| 660 | |
| 661 | oldAuditUser := user |
| 662 | newAuditUser := user |
| 663 | newAuditUser.Status = database.UserStatusActive |
| 664 | |
| 665 | audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.User]{ |
| 666 | Audit: *auditor.Load(), |
| 667 | Log: logger, |
| 668 | UserID: user.ID, |
| 669 | Action: database.AuditActionWrite, |
| 670 | Old: oldAuditUser, |
| 671 | New: newAuditUser, |
| 672 | Status: http.StatusOK, |
| 673 | AdditionalFields: audit.BackgroundTaskFieldsBytes(ctx, logger, audit.BackgroundSubsystemDormancy), |
| 674 | }) |
| 675 | |
| 676 | return newUser, nil |
| 677 | } |
| 678 | } |
| 679 | |
| 680 | // Clear the user's session cookie. |
| 681 | // |
no test coverage detected