|
50 | 50 | use OCA\Files_Sharing\Notification\Notifier; |
51 | 51 | use OCA\Files\Event\LoadAdditionalScriptsEvent; |
52 | 52 | use OCA\Files\Event\LoadSidebar; |
| 53 | +use OCP\Files\Event\BeforeDirectGetEvent; |
53 | 54 | use OCA\Files_Sharing\ShareBackend\File; |
54 | 55 | use OCA\Files_Sharing\ShareBackend\Folder; |
55 | 56 | use OCA\Files_Sharing\ViewOnly; |
|
61 | 62 | use OCP\EventDispatcher\GenericEvent; |
62 | 63 | use OCP\Federation\ICloudIdManager; |
63 | 64 | use OCP\Files\Config\IMountProviderCollection; |
| 65 | +use OCP\Files\Events\BeforeDirectFileDownloadEvent; |
| 66 | +use OCP\Files\Events\BeforeZipCreatedEvent; |
64 | 67 | use OCP\Files\IRootFolder; |
65 | 68 | use OCP\Group\Events\UserAddedEvent; |
66 | 69 | use OCP\IDBConnection; |
@@ -156,59 +159,53 @@ public function registerEventsScripts(IEventDispatcher $dispatcher, EventDispatc |
156 | 159 |
|
157 | 160 | public function registerDownloadEvents( |
158 | 161 | IEventDispatcher $dispatcher, |
159 | | - ?IUserSession $userSession, |
| 162 | + IUserSession $userSession, |
160 | 163 | IRootFolder $rootFolder |
161 | 164 | ): void { |
162 | 165 |
|
163 | 166 | $dispatcher->addListener( |
164 | | - 'file.beforeGetDirect', |
165 | | - function (GenericEvent $event) use ($userSession, $rootFolder) { |
166 | | - $pathsToCheck = [$event->getArgument('path')]; |
167 | | - $event->setArgument('run', true); |
168 | | - |
| 167 | + BeforeDirectFileDownloadEvent::class, |
| 168 | + function (BeforeDirectFileDownloadEvent $event) use ($userSession, $rootFolder): void { |
| 169 | + $pathsToCheck = [$event->getPath()]; |
169 | 170 | // Check only for user/group shares. Don't restrict e.g. share links |
170 | | - if ($userSession && $userSession->isLoggedIn()) { |
171 | | - $uid = $userSession->getUser()->getUID(); |
| 171 | + $user = $userSession->getUser(); |
| 172 | + if ($user) { |
172 | 173 | $viewOnlyHandler = new ViewOnly( |
173 | | - $rootFolder->getUserFolder($uid) |
| 174 | + $rootFolder->getUserFolder($user->getUID()) |
174 | 175 | ); |
175 | 176 | if (!$viewOnlyHandler->check($pathsToCheck)) { |
176 | | - $event->setArgument('run', false); |
177 | | - $event->setArgument('errorMessage', 'Access to this resource or one of its sub-items has been denied.'); |
| 177 | + $event->setSuccessful(false); |
| 178 | + $event->setErrorMessage('Access to this resource or one of its sub-items has been denied.'); |
178 | 179 | } |
179 | 180 | } |
180 | 181 | } |
181 | 182 | ); |
182 | 183 |
|
183 | 184 | $dispatcher->addListener( |
184 | | - 'file.beforeCreateZip', |
185 | | - function (GenericEvent $event) use ($userSession, $rootFolder) { |
186 | | - $dir = $event->getArgument('dir'); |
187 | | - $files = $event->getArgument('files'); |
| 185 | + BeforeZipCreatedEvent::class, |
| 186 | + function (BeforeZipCreatedEvent $event) use ($userSession, $rootFolder): void { |
| 187 | + $dir = $event->getDirectory(); |
| 188 | + $files = $event->getFiles(); |
188 | 189 |
|
189 | 190 | $pathsToCheck = []; |
190 | | - if (\is_array($files)) { |
191 | | - foreach ($files as $file) { |
192 | | - $pathsToCheck[] = $dir . '/' . $file; |
193 | | - } |
194 | | - } elseif (\is_string($files)) { |
195 | | - $pathsToCheck[] = $dir . '/' . $files; |
| 191 | + foreach ($files as $file) { |
| 192 | + $pathsToCheck[] = $dir . '/' . $file; |
196 | 193 | } |
197 | 194 |
|
198 | 195 | // Check only for user/group shares. Don't restrict e.g. share links |
199 | | - if ($userSession && $userSession->isLoggedIn()) { |
200 | | - $uid = $userSession->getUser()->getUID(); |
| 196 | + $user = $userSession->getUser(); |
| 197 | + if ($user) { |
201 | 198 | $viewOnlyHandler = new ViewOnly( |
202 | | - $rootFolder->getUserFolder($uid) |
| 199 | + $rootFolder->getUserFolder($user->getUID()) |
203 | 200 | ); |
204 | 201 | if (!$viewOnlyHandler->check($pathsToCheck)) { |
205 | | - $event->setArgument('errorMessage', 'Access to this resource or one of its sub-items has been denied.'); |
206 | | - $event->setArgument('run', false); |
| 202 | + $event->setErrorMessage('Access to this resource or one of its sub-items has been denied.'); |
| 203 | + $event->setSuccessful(false); |
207 | 204 | } else { |
208 | | - $event->setArgument('run', true); |
| 205 | + $event->setSuccessful(true); |
209 | 206 | } |
210 | 207 | } else { |
211 | | - $event->setArgument('run', true); |
| 208 | + $event->setSuccessful(true); |
212 | 209 | } |
213 | 210 | } |
214 | 211 | ); |
|
0 commit comments