3838use OCA \Files_Sharing \External \Manager ;
3939use OCA \Files_Sharing \External \MountProvider as ExternalMountProvider ;
4040use OCA \Files_Sharing \Helper ;
41+ use OCA \Files_Sharing \Listener \BeforeDirectFileDownloadListener ;
42+ use OCA \Files_Sharing \Listener \BeforeZipCreatedListener ;
4143use OCA \Files_Sharing \Listener \LoadAdditionalListener ;
4244use OCA \Files_Sharing \Listener \LoadSidebarListener ;
4345use OCA \Files_Sharing \Listener \ShareInteractionListener ;
5153use OCA \Files_Sharing \Notification \Notifier ;
5254use OCA \Files_Sharing \ShareBackend \File ;
5355use OCA \Files_Sharing \ShareBackend \Folder ;
54- use OCA \Files_Sharing \ViewOnly ;
5556use OCP \AppFramework \App ;
5657use OCP \AppFramework \Bootstrap \IBootContext ;
5758use OCP \AppFramework \Bootstrap \IBootstrap ;
6263use OCP \Files \Config \IMountProviderCollection ;
6364use OCP \Files \Events \BeforeDirectFileDownloadEvent ;
6465use OCP \Files \Events \BeforeZipCreatedEvent ;
65- use OCP \Files \IRootFolder ;
6666use OCP \Group \Events \GroupChangedEvent ;
6767use OCP \Group \Events \GroupDeletedEvent ;
6868use OCP \Group \Events \UserAddedEvent ;
6969use OCP \IDBConnection ;
7070use OCP \IGroup ;
71- use OCP \IUserSession ;
7271use OCP \Share \Events \ShareCreatedEvent ;
7372use OCP \User \Events \UserChangedEvent ;
7473use OCP \User \Events \UserDeletedEvent ;
@@ -108,12 +107,22 @@ function () use ($c) {
108107 $ context ->registerEventListener (UserDeletedEvent::class, DisplayNameCache::class);
109108 $ context ->registerEventListener (GroupChangedEvent::class, GroupDisplayNameCache::class);
110109 $ context ->registerEventListener (GroupDeletedEvent::class, GroupDisplayNameCache::class);
110+
111+ // sidebar and files scripts
112+ $ context ->registerEventListener (LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class);
113+ $ context ->registerEventListener (LoadSidebar::class, LoadSidebarListener::class);
114+ $ context ->registerEventListener (ShareCreatedEvent::class, ShareInteractionListener::class);
115+ $ context ->registerEventListener (ShareCreatedEvent::class, UserShareAcceptanceListener::class);
116+ $ context ->registerEventListener (UserAddedEvent::class, UserAddedToGroupListener::class);
117+
118+ // Handle download events for view only checks
119+ $ context ->registerEventListener (BeforeZipCreatedEvent::class, BeforeZipCreatedListener::class);
120+ $ context ->registerEventListener (BeforeDirectFileDownloadEvent::class, BeforeDirectFileDownloadListener::class);
111121 }
112122
113123 public function boot (IBootContext $ context ): void {
114124 $ context ->injectFn ([$ this , 'registerMountProviders ' ]);
115125 $ context ->injectFn ([$ this , 'registerEventsScripts ' ]);
116- $ context ->injectFn ([$ this , 'registerDownloadEvents ' ]);
117126
118127 Helper::registerHooks ();
119128
@@ -128,12 +137,6 @@ public function registerMountProviders(IMountProviderCollection $mountProviderCo
128137 }
129138
130139 public function registerEventsScripts (IEventDispatcher $ dispatcher ): void {
131- // sidebar and files scripts
132- $ dispatcher ->addServiceListener (LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class);
133- $ dispatcher ->addServiceListener (LoadSidebar::class, LoadSidebarListener::class);
134- $ dispatcher ->addServiceListener (ShareCreatedEvent::class, ShareInteractionListener::class);
135- $ dispatcher ->addServiceListener (ShareCreatedEvent::class, UserShareAcceptanceListener::class);
136- $ dispatcher ->addServiceListener (UserAddedEvent::class, UserAddedToGroupListener::class);
137140 $ dispatcher ->addListener (ResourcesLoadAdditionalScriptsEvent::class, function () {
138141 \OCP \Util::addScript ('files_sharing ' , 'collaboration ' );
139142 });
@@ -159,58 +162,4 @@ public function registerEventsScripts(IEventDispatcher $dispatcher): void {
159162 $ listener ->userAddedToGroup ($ event );
160163 });
161164 }
162-
163- public function registerDownloadEvents (
164- IEventDispatcher $ dispatcher ,
165- IUserSession $ userSession ,
166- IRootFolder $ rootFolder
167- ): void {
168-
169- $ dispatcher ->addListener (
170- BeforeDirectFileDownloadEvent::class,
171- function (BeforeDirectFileDownloadEvent $ event ) use ($ userSession , $ rootFolder ): void {
172- $ pathsToCheck = [$ event ->getPath ()];
173- // Check only for user/group shares. Don't restrict e.g. share links
174- $ user = $ userSession ->getUser ();
175- if ($ user ) {
176- $ viewOnlyHandler = new ViewOnly (
177- $ rootFolder ->getUserFolder ($ user ->getUID ())
178- );
179- if (!$ viewOnlyHandler ->check ($ pathsToCheck )) {
180- $ event ->setSuccessful (false );
181- $ event ->setErrorMessage ('Access to this resource or one of its sub-items has been denied. ' );
182- }
183- }
184- }
185- );
186-
187- $ dispatcher ->addListener (
188- BeforeZipCreatedEvent::class,
189- function (BeforeZipCreatedEvent $ event ) use ($ userSession , $ rootFolder ): void {
190- $ dir = $ event ->getDirectory ();
191- $ files = $ event ->getFiles ();
192-
193- $ pathsToCheck = [];
194- foreach ($ files as $ file ) {
195- $ pathsToCheck [] = $ dir . '/ ' . $ file ;
196- }
197-
198- // Check only for user/group shares. Don't restrict e.g. share links
199- $ user = $ userSession ->getUser ();
200- if ($ user ) {
201- $ viewOnlyHandler = new ViewOnly (
202- $ rootFolder ->getUserFolder ($ user ->getUID ())
203- );
204- if (!$ viewOnlyHandler ->check ($ pathsToCheck )) {
205- $ event ->setErrorMessage ('Access to this resource or one of its sub-items has been denied. ' );
206- $ event ->setSuccessful (false );
207- } else {
208- $ event ->setSuccessful (true );
209- }
210- } else {
211- $ event ->setSuccessful (true );
212- }
213- }
214- );
215- }
216165}
0 commit comments