def unsuspend_account(user: User, actor: User) -> None: user.isActive = True user.suspensionReason = "" repository.save(user) logger.info( "Account has been unsuspended", extra={ "actor": actor.id, "user": user.id, }, )
def suspend_account(user: User, reason: constants.SuspensionReason, actor: User) -> None: user.isActive = False user.suspensionReason = str(reason) # If we ever unsuspend the account, we'll have to explictly enable # isAdmin again. An admin now may not be an admin later. user.isAdmin = False user.setPassword(secrets.token_urlsafe(30)) repository.save(user) sessions = UserSession.query.filter_by(userId=user.id) repository.delete(*sessions) logger.info("user=%s has been suspended by actor=%s for reason=%s", user.id, actor.id, reason)
def suspend_account(user: User, reason: constants.SuspensionReason, actor: User) -> dict[str, int]: import pcapi.core.bookings.api as bookings_api # avoid import loop user.isActive = False user.suspensionReason = str(reason) user.remove_admin_role() user.setPassword(secrets.token_urlsafe(30)) repository.save(user) sessions = UserSession.query.filter_by(userId=user.id) repository.delete(*sessions) n_bookings = 0 # Cancel all bookings of the related offerer if the suspended # account was the last active offerer's account. if reason == constants.SuspensionReason.FRAUD: for offerer in user.offerers: if any(u.isActive and u != user for u in offerer.users): continue bookings = bookings_repository.find_cancellable_bookings_by_offerer(offerer.id) for booking in bookings: bookings_api.cancel_booking_for_fraud(booking) n_bookings += 1 # Cancel all bookings of the user (the following works even if the # user is not a beneficiary). cancel_booking_callback = { constants.SuspensionReason.FRAUD: bookings_api.cancel_booking_for_fraud, constants.SuspensionReason.UPON_USER_REQUEST: bookings_api.cancel_booking_on_user_requested_account_suspension, }.get(reason) if cancel_booking_callback: for booking in bookings_repository.find_cancellable_bookings_by_beneficiaries([user]): cancel_booking_callback(booking) n_bookings += 1 logger.info( "Account has been suspended", extra={ "actor": actor.id, "user": user.id, "reason": str(reason), }, ) return {"cancelled_bookings": n_bookings}
def unsuspend_account(user: User, actor: User) -> None: user.isActive = True user.suspensionReason = "" repository.save(user) logger.info("user=%s has been unsuspended by actor=%s", user.id, actor.id)