@@ -90,7 +90,6 @@ import Data.Json.Util
9090import Data.LegalHold (UserLegalHoldStatus (.. ), defUserLegalHoldStatus )
9191import Data.List.Extra
9292import Data.List.NonEmpty (NonEmpty )
93- import Data.List.NonEmpty qualified as NonEmpty
9493import Data.Misc
9594import Data.Qualified
9695import Data.Range
@@ -627,14 +626,19 @@ changeAccountStatus ::
627626 ( Member (Concurrency 'Unsafe) r ,
628627 Member UserSubsystem r ,
629628 Member Events r ,
630- Member AuthenticationSubsystem r ,
631629 Member UserStore r
632630 ) =>
633631 NonEmpty UserId ->
634632 AccountStatus ->
635633 ExceptT AccountStatusError (AppT r ) ()
636634changeAccountStatus usrs status = do
637- ev <- mkUserEvent usrs status
635+ -- It is safe to not revoke any cookies here; if no valid access
636+ -- token is available, cookies are only validated when calling `POST
637+ -- /access`, and access token refresh only works on unsuspended
638+ -- users.
639+ --
640+ -- Evidence: `git grep -Hn --color=never 'UserToken\b' | grep libs/wire-api/src/Wire/API/Routes/Public/`.
641+ ev <- mkUserEvent status
638642 lift $ liftSem $ unsafePooledMapConcurrentlyN_ 16 (update ev) usrs
639643 where
640644 update ::
@@ -649,35 +653,27 @@ changeAccountStatus usrs status = do
649653changeSingleAccountStatus ::
650654 ( Member UserSubsystem r ,
651655 Member Events r ,
652- Member (Concurrency Unsafe ) r ,
653- Member AuthenticationSubsystem r ,
654656 Member UserStore r
655657 ) =>
656658 UserId ->
657659 AccountStatus ->
658660 ExceptT AccountStatusError (AppT r ) ()
659661changeSingleAccountStatus uid status = do
660662 unlessM (lift . liftSem $ UserStore. doesUserExist uid) $ throwE AccountNotFound
661- ev <- mkUserEvent ( NonEmpty. singleton uid) status
663+ ev <- mkUserEvent status
662664 lift . liftSem $ do
663665 UserStore. updateAccountStatus uid status
664666 User. internalUpdateSearchIndex uid
665667 Events. generateUserEvent uid Nothing (ev uid)
666668
667669mkUserEvent ::
668- ( Traversable t ,
669- Member (Concurrency Unsafe ) r ,
670- Member AuthenticationSubsystem r
671- ) =>
672- t UserId ->
670+ (Monad m ) =>
673671 AccountStatus ->
674- ExceptT AccountStatusError ( AppT r ) (UserId -> UserEvent )
675- mkUserEvent usrs status =
672+ ExceptT AccountStatusError m (UserId -> UserEvent )
673+ mkUserEvent status =
676674 case status of
677675 Active -> pure UserResumed
678- Suspended -> do
679- lift $ liftSem (unsafePooledMapConcurrentlyN_ 16 Auth. revokeAllCookies usrs)
680- pure UserSuspended
676+ Suspended -> pure UserSuspended
681677 Deleted -> throwE InvalidAccountStatus
682678 Ephemeral -> throwE InvalidAccountStatus
683679 PendingInvitation -> throwE InvalidAccountStatus
0 commit comments