Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2019-11-20 11:06:47 +0300
committerJulius Härtl <jus@bitgrid.net>2019-11-20 11:17:44 +0300
commitd715cd88c1be53e363d260eb1cad19169cd057a5 (patch)
tree37d3e6a3093bc05f82bb32df970cfe53b44f5a89
parenta61d88f473a73d456da21bca1b5df677773517b6 (diff)
Use files node API for single file downloads
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-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) {