From 51538dfe487dbd304ffac11d2351dd7364f29476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de> Date: Tue, 21 Mar 2023 17:17:10 +0000 Subject: [PATCH] Resolve #2411 "Dateibereich: Per Proxy verlinkte Datei kann nicht heruntergeladen werden" Closes #2411 Merge request studip/studip!1607 --- public/sendfile.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/public/sendfile.php b/public/sendfile.php index 3847ec80b5b..620a215764d 100644 --- a/public/sendfile.php +++ b/public/sendfile.php @@ -142,7 +142,7 @@ switch ($type) { $path_file = $file->metadata['url']; } } else { - $path_file = is_a($file, "URLFile") + $path_file = $file instanceof URLFile ? $file_ref->file->metadata['url'] : $file_ref->file->path; } @@ -154,12 +154,12 @@ switch ($type) { // check if linked file is obtainable $filesize = 0; if ( - isset($file_ref, $file_ref->file, $file_ref->file->metadata['access_type']) + isset($file_ref, $file_ref->file, $file_ref->file->metadata['access_type']) && $file_ref->file->metadata['access_type'] === 'proxy' ) { $link_data = FileManager::fetchURLMetadata($file_ref->file->metadata['url']); if ($link_data['response_code'] != 200) { - throw new Exception(_("Diese Datei wird von einem externen Server geladen und ist dort momentan nicht erreichbar!")); + throw new Trails_Exception(404, _("Diese Datei wird von einem externen Server geladen und ist dort momentan nicht erreichbar!")); } $content_type = $link_data['Content-Type'] ? strstr($link_data['Content-Type'], ';', true) : get_mime_type($file_name); @@ -169,9 +169,10 @@ if ( if (isset($file)) { $filesize = $file->getSize(); if ($filesize === false) { - throw new Exception(_('Fehler beim Laden der Inhalte der Datei')); + throw new Trails_Exception(404, _('Fehler beim Laden der Inhalte der Datei')); } } + // close session, download will mostly be a parallel action page_close(); @@ -187,8 +188,8 @@ if (isset($file_ref, $file_ref->file, $file_ref->file->metadata['access_type']) } // Check if file actually exists -if (!file_exists($path_file)) { - throw new Exception(_('Fehler beim Laden der Inhalte der Datei')); +if (!parse_url($path_file, PHP_URL_SCHEME) && !file_exists($path_file)) { + throw new Trails_Exception(404, _('Fehler beim Laden der Inhalte der Datei')); } $allowed_mime_types = get_mime_types(); @@ -203,7 +204,7 @@ if (Request::int('force_download') || $content_type == "application/octet-stream } $start = $end = null; -if ($filesize && $file_ref->file->filetype !== 'URLFile') { +if ($filesize && !parse_url($path_file, PHP_URL_SCHEME)) { header("Accept-Ranges: bytes"); $start = 0; $end = $filesize - 1; -- GitLab