1919use OCP \AppFramework \Http \DataResponse ;
2020use OCP \AppFramework \OCS \OCSNotFoundException ;
2121use OCP \AppFramework \OCSController ;
22+ use OCP \EventDispatcher \IEventDispatcher ;
2223use OCP \IRequest ;
24+ use OCP \User \Events \UserEnumerationFilterEvent ;
2325use OCP \UserStatus \IUserStatus ;
2426
2527/**
@@ -38,7 +40,8 @@ class StatusesController extends OCSController {
3840 public function __construct (
3941 string $ appName ,
4042 IRequest $ request ,
41- private StatusService $ service ,
43+ private readonly StatusService $ service ,
44+ private readonly IEventDispatcher $ eventDispatcher ,
4245 ) {
4346 parent ::__construct ($ appName , $ request );
4447 }
@@ -57,6 +60,15 @@ public function __construct(
5760 public function findAll (?int $ limit = null , ?int $ offset = null ): DataResponse {
5861 $ allStatuses = $ this ->service ->findAll ($ limit , $ offset );
5962
63+ $ users = array_map (fn (UserStatus $ userStatus ): string => $ userStatus ->getUserId (), $ allStatuses );
64+ $ event = new UserEnumerationFilterEvent ($ users );
65+ $ this ->eventDispatcher ->dispatchTyped ($ event );
66+
67+ if ($ users !== $ event ->getUsers ()) {
68+ $ removedUsers = $ event ->getFilteredOutUsers ();
69+ $ allStatuses = array_filter ($ allStatuses , fn (UserStatus $ userStatus ): bool => in_array ($ userStatus ->getUserId (), $ removedUsers , true ));
70+ }
71+
6072 return new DataResponse (array_values (array_map (function ($ userStatus ) {
6173 return $ this ->formatStatus ($ userStatus );
6274 }, $ allStatuses )));
0 commit comments