Merge pull request #20147 from nextcloud/backport/20131/stable16

[stable16] Fix PDF and video viewers on public links
This commit is contained in:
Roeland Jago Douma 2020-04-04 10:33:19 +02:00 committed by GitHub
commit 506ca2b8be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 8 deletions

View File

@ -46,6 +46,7 @@ use OCP\AppFramework\Http\Template\ExternalShareMenuAction;
use OCP\AppFramework\Http\Template\LinkMenuAction; use OCP\AppFramework\Http\Template\LinkMenuAction;
use OCP\AppFramework\Http\Template\PublicTemplateResponse; use OCP\AppFramework\Http\Template\PublicTemplateResponse;
use OCP\Defaults; use OCP\Defaults;
use OCP\Files\Folder;
use OCP\IL10N; use OCP\IL10N;
use OCP\Template; use OCP\Template;
use OCP\Share; use OCP\Share;
@ -527,10 +528,6 @@ class ShareController extends AuthPublicShareController {
throw new NotFoundException(); throw new NotFoundException();
} }
if ($share->getHideDownload()) {
return new NotFoundResponse();
}
$userFolder = $this->rootFolder->getUserFolder($share->getShareOwner()); $userFolder = $this->rootFolder->getUserFolder($share->getShareOwner());
$originalSharePath = $userFolder->getRelativePath($share->getNode()->getPath()); $originalSharePath = $userFolder->getRelativePath($share->getNode()->getPath());
@ -560,12 +557,18 @@ class ShareController extends AuthPublicShareController {
if ($node instanceof \OCP\Files\File) { if ($node instanceof \OCP\Files\File) {
// Single file download // Single file download
$this->singleFileDownloaded($share, $share->getNode()); $this->singleFileDownloaded($share, $share->getNode());
} else if (!empty($files_list)) { } else {
try {
if (!empty($files_list)) {
$this->fileListDownloaded($share, $files_list, $node); $this->fileListDownloaded($share, $files_list, $node);
} else { } else {
// The folder is downloaded // The folder is downloaded
$this->singleFileDownloaded($share, $share->getNode()); $this->singleFileDownloaded($share, $share->getNode());
} }
} catch (NotFoundException $e) {
return new NotFoundResponse();
}
}
} }
/* FIXME: We should do this all nicely in OCP */ /* FIXME: We should do this all nicely in OCP */
@ -616,8 +619,13 @@ class ShareController extends AuthPublicShareController {
* @param Share\IShare $share * @param Share\IShare $share
* @param array $files_list * @param array $files_list
* @param \OCP\Files\Folder $node * @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) { 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) { foreach ($files_list as $file) {
$subNode = $node->get($file); $subNode = $node->get($file);
$this->singleFileDownloaded($share, $subNode); $this->singleFileDownloaded($share, $subNode);
@ -629,8 +637,12 @@ class ShareController extends AuthPublicShareController {
* create activity if a single file was downloaded from a link share * create activity if a single file was downloaded from a link share
* *
* @param Share\IShare $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) { 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(); $fileId = $node->getId();