aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2019-11-20 09:06:47 +0100
committerBackportbot <backportbot-noreply@rullzer.com>2019-12-19 16:55:53 +0000
commit4d646a75f5650fcbde0da785802bb55a65e60a86 (patch)
tree577519b2dc77eba0dcb383e975b7573f185c4bfe /lib/private
parent08b62656704708a064e785121bd98b71843994e0 (diff)
downloadnextcloud-server-4d646a75f5650fcbde0da785802bb55a65e60a86.tar.gz
nextcloud-server-4d646a75f5650fcbde0da785802bb55a65e60a86.zip
Use files node API for single file downloads
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/legacy/files.php42
1 files changed, 28 insertions, 14 deletions
diff --git a/lib/private/legacy/files.php b/lib/private/legacy/files.php
index 140c02e77b6..d8de0381606 100644
--- a/lib/private/legacy/files.php
+++ b/lib/private/legacy/files.php
@@ -284,30 +284,44 @@ class OC_Files {
*/
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) {