Skip to content
Snippets Groups Projects
Commit b5ccc9ee authored by André Noack's avatar André Noack Committed by Jan-Hendrik Willms
Browse files

Resolve #2411 "Dateibereich: Per Proxy verlinkte Datei kann nicht heruntergeladen werden"

Closes #2411

Merge request studip/studip!1607
parent fc305b5e
No related branches found
No related tags found
No related merge requests found
...@@ -142,7 +142,7 @@ switch ($type) { ...@@ -142,7 +142,7 @@ switch ($type) {
$path_file = $file->metadata['url']; $path_file = $file->metadata['url'];
} }
} else { } else {
$path_file = is_a($file, "URLFile") $path_file = $file instanceof URLFile
? $file_ref->file->metadata['url'] ? $file_ref->file->metadata['url']
: $file_ref->file->path; : $file_ref->file->path;
} }
...@@ -154,12 +154,12 @@ switch ($type) { ...@@ -154,12 +154,12 @@ switch ($type) {
// check if linked file is obtainable // check if linked file is obtainable
$filesize = 0; $filesize = 0;
if ( 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' && $file_ref->file->metadata['access_type'] === 'proxy'
) { ) {
$link_data = FileManager::fetchURLMetadata($file_ref->file->metadata['url']); $link_data = FileManager::fetchURLMetadata($file_ref->file->metadata['url']);
if ($link_data['response_code'] != 200) { 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); $content_type = $link_data['Content-Type'] ? strstr($link_data['Content-Type'], ';', true) : get_mime_type($file_name);
...@@ -169,9 +169,10 @@ if ( ...@@ -169,9 +169,10 @@ if (
if (isset($file)) { if (isset($file)) {
$filesize = $file->getSize(); $filesize = $file->getSize();
if ($filesize === false) { 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 // close session, download will mostly be a parallel action
page_close(); page_close();
...@@ -187,8 +188,8 @@ if (isset($file_ref, $file_ref->file, $file_ref->file->metadata['access_type']) ...@@ -187,8 +188,8 @@ if (isset($file_ref, $file_ref->file, $file_ref->file->metadata['access_type'])
} }
// Check if file actually exists // Check if file actually exists
if (!file_exists($path_file)) { if (!parse_url($path_file, PHP_URL_SCHEME) && !file_exists($path_file)) {
throw new Exception(_('Fehler beim Laden der Inhalte der Datei')); throw new Trails_Exception(404, _('Fehler beim Laden der Inhalte der Datei'));
} }
$allowed_mime_types = get_mime_types(); $allowed_mime_types = get_mime_types();
...@@ -203,7 +204,7 @@ if (Request::int('force_download') || $content_type == "application/octet-stream ...@@ -203,7 +204,7 @@ if (Request::int('force_download') || $content_type == "application/octet-stream
} }
$start = $end = null; $start = $end = null;
if ($filesize && $file_ref->file->filetype !== 'URLFile') { if ($filesize && !parse_url($path_file, PHP_URL_SCHEME)) {
header("Accept-Ranges: bytes"); header("Accept-Ranges: bytes");
$start = 0; $start = 0;
$end = $filesize - 1; $end = $filesize - 1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment