Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Use files node API for single file downloads
Signed-off-by: Julius Härtl <[email protected]>
  • Loading branch information
juliusknorr authored and Backportbot committed Dec 19, 2019
commit 4d646a75f5650fcbde0da785802bb55a65e60a86
42 changes: 28 additions & 14 deletions lib/private/legacy/files.php
Original file line number Diff line number Diff line change
Expand Up @@ -284,30 +284,44 @@ private static function parseHttpRangeHeader($rangeHeaderPos, $fileSize) {
*/
private static function getSingleFile($view, $dir, $name, $params) {
$filename = $dir . '/' . $name;
$file = null;

try {
$userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
$file = $userFolder->get($filename);
if(!$file instanceof \OC\Files\Node\File || !$file->isReadable()) {
http_response_code(403);
die('403 Forbidden');
}
$fileSize = $file->getSize();
} catch (\OCP\Files\NotPermittedException $e) {
http_response_code(403);
die('403 Forbidden');
} catch (\OCP\Files\InvalidPathException $e) {
http_response_code(403);
die('403 Forbidden');
} catch (\OCP\Files\NotFoundException $e) {
http_response_code(404);
$tmpl = new OC_Template('', '404', 'guest');
$tmpl->printPage();
exit();
}

OC_Util::obEnd();
$view->lockFile($filename, ILockingProvider::LOCK_SHARED);

$rangeArray = array();

if (isset($params['range']) && substr($params['range'], 0, 6) === 'bytes=') {
$rangeArray = self::parseHttpRangeHeader(substr($params['range'], 6),
\OC\Files\Filesystem::filesize($filename));
}

if (\OC\Files\Filesystem::isReadable($filename)) {
self::sendHeaders($filename, $name, $rangeArray);
} elseif (!\OC\Files\Filesystem::file_exists($filename)) {
http_response_code(404);
$tmpl = new OC_Template('', '404', 'guest');
$tmpl->printPage();
exit();
} else {
http_response_code(403);
die('403 Forbidden');
$rangeArray = self::parseHttpRangeHeader(substr($params['range'], 6), $fileSize);
}

self::sendHeaders($filename, $name, $rangeArray);

if (isset($params['head']) && $params['head']) {
return;
}

if (!empty($rangeArray)) {
try {
if (count($rangeArray) == 1) {
Expand Down