]> source.dussan.org Git - nextcloud-server.git/commitdiff
Allow the video player on the hide download 20032/head
authorJoas Schilling <coding@schilljs.com>
Thu, 19 Mar 2020 14:14:00 +0000 (15:14 +0100)
committerJoas Schilling <coding@schilljs.com>
Thu, 19 Mar 2020 14:14:00 +0000 (15:14 +0100)
Signed-off-by: Joas Schilling <coding@schilljs.com>
apps/files_sharing/lib/Controller/ShareController.php

index 3feb98f7f02c6da5d627bf452654e87b03785986..620aaf42c6917ee5f3d60909b5ff05078e82717d 100644 (file)
@@ -55,6 +55,7 @@ use OCP\AppFramework\Http\Template\PublicTemplateResponse;
 use OCP\AppFramework\Http\Template\SimpleMenuAction;
 use OCP\AppFramework\Http\TemplateResponse;
 use OCP\Defaults;
+use OCP\Files\Folder;
 use OCP\Files\IRootFolder;
 use OCP\Files\NotFoundException;
 use OCP\IConfig;
@@ -582,16 +583,16 @@ class ShareController extends AuthPublicShareController {
                                // Single file download
                                $this->singleFileDownloaded($share, $share->getNode());
                        } else {
-                               if ($share->getHideDownload()) {
+                               try {
+                                       if (!empty($files_list)) {
+                                               $this->fileListDownloaded($share, $files_list, $node);
+                                       } else {
+                                               // The folder is downloaded
+                                               $this->singleFileDownloaded($share, $share->getNode());
+                                       }
+                               } catch (NotFoundException $e) {
                                        return new NotFoundResponse();
                                }
-
-                               if (!empty($files_list)) {
-                                       $this->fileListDownloaded($share, $files_list, $node);
-                               } else {
-                                       // The folder is downloaded
-                                       $this->singleFileDownloaded($share, $share->getNode());
-                               }
                        }
                }
 
@@ -643,8 +644,13 @@ class ShareController extends AuthPublicShareController {
         * @param Share\IShare $share
         * @param array $files_list
         * @param \OCP\Files\Folder $node
+        * @throws NotFoundException when trying to download a folder or multiple files of a "hide download" share
         */
        protected function fileListDownloaded(Share\IShare $share, array $files_list, \OCP\Files\Folder $node) {
+               if ($share->getHideDownload() && count($files_list) > 1) {
+                       throw new NotFoundException('Downloading more than 1 file');
+               }
+
                foreach ($files_list as $file) {
                        $subNode = $node->get($file);
                        $this->singleFileDownloaded($share, $subNode);
@@ -656,8 +662,12 @@ class ShareController extends AuthPublicShareController {
         * create activity if a single file was downloaded from a link share
         *
         * @param Share\IShare $share
+        * @throws NotFoundException when trying to download a folder of a "hide download" share
         */
        protected function singleFileDownloaded(Share\IShare $share, \OCP\Files\Node $node) {
+               if ($share->getHideDownload() && $node instanceof Folder) {
+                       throw new NotFoundException('Downloading a folder');
+               }
 
                $fileId = $node->getId();