]> source.dussan.org Git - nextcloud-server.git/commitdiff
Allow the video player on the hide download 20147/head
authorJoas Schilling <coding@schilljs.com>
Thu, 19 Mar 2020 14:14:00 +0000 (15:14 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Tue, 24 Mar 2020 19:31:44 +0000 (19:31 +0000)
Signed-off-by: Joas Schilling <coding@schilljs.com>
apps/files_sharing/lib/Controller/ShareController.php

index 307152dcc9b367d8336b7b851a65307f16a5c65c..43cf741f407060ad7b2df9fde01c156d7738372e 100644 (file)
@@ -46,6 +46,7 @@ use OCP\AppFramework\Http\Template\ExternalShareMenuAction;
 use OCP\AppFramework\Http\Template\LinkMenuAction;
 use OCP\AppFramework\Http\Template\PublicTemplateResponse;
 use OCP\Defaults;
+use OCP\Files\Folder;
 use OCP\IL10N;
 use OCP\Template;
 use OCP\Share;
@@ -557,16 +558,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());
-                               }
                        }
                }
 
@@ -618,8 +619,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);
@@ -631,8 +637,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();