1818use OCP \AppFramework \Http \DataResponse ;
1919use OCP \AppFramework \OCS \OCSNotFoundException ;
2020use OCP \AppFramework \OCSController ;
21+ use OCP \EventDispatcher \IEventDispatcher ;
2122use OCP \IRequest ;
23+ use OCP \User \Events \UserEnumerationFilterEvent ;
2224use OCP \UserStatus \IUserStatus ;
2325
2426/**
@@ -37,7 +39,8 @@ class StatusesController extends OCSController {
3739 public function __construct (
3840 string $ appName ,
3941 IRequest $ request ,
40- private StatusService $ service ,
42+ private readonly StatusService $ service ,
43+ private readonly IEventDispatcher $ eventDispatcher ,
4144 ) {
4245 parent ::__construct ($ appName , $ request );
4346 }
@@ -56,6 +59,15 @@ public function __construct(
5659 public function findAll (?int $ limit = null , ?int $ offset = null ): DataResponse {
5760 $ allStatuses = $ this ->service ->findAll ($ limit , $ offset );
5861
62+ $ users = array_map (fn (UserStatus $ userStatus ): string => $ userStatus ->getUserId (), $ allStatuses );
63+ $ event = new UserEnumerationFilterEvent ($ users );
64+ $ this ->eventDispatcher ->dispatchTyped ($ event );
65+
66+ if ($ users !== $ event ->getUsers ()) {
67+ $ removedUsers = $ event ->getFilteredOutUsers ();
68+ $ allStatuses = array_filter ($ allStatuses , fn (UserStatus $ userStatus ): bool => in_array ($ userStatus ->getUserId (), $ removedUsers , true ));
69+ }
70+
5971 return new DataResponse (array_values (array_map (function ($ userStatus ) {
6072 return $ this ->formatStatus ($ userStatus );
6173 }, $ allStatuses )));
0 commit comments