fix downloads via WebDAV of backups stored in S3, caused by slightly wrong Content-Size header, due to encryption of backups

This commit is contained in:
ralf 2024-04-15 18:59:05 +02:00
parent 12f3d3a8ee
commit 16b98ce4d1

View File

@ -403,7 +403,7 @@ class HTTP_WebDAV_Server_Filesystem extends HTTP_WebDAV_Server
// detect modification time // detect modification time
// see rfc2518, section 13.7 // see rfc2518, section 13.7
// some clients seem to treat this as a reverse rule // some clients seem to treat this as a reverse rule
// requiering a Last-Modified header if the getlastmodified header was set // requiring a Last-Modified header if the getlastmodified header was set
$options['mtime'] = filemtime($fspath); $options['mtime'] = filemtime($fspath);
// detect resource size // detect resource size
@ -436,6 +436,16 @@ class HTTP_WebDAV_Server_Filesystem extends HTTP_WebDAV_Server
// no need to check result here, it is handled by the base class // no need to check result here, it is handled by the base class
$options['stream'] = fopen($fspath, "r"); $options['stream'] = fopen($fspath, "r");
// hack to fix downloads from s3direct stream-wrapper reporting slightly wrong sizes in stat calls due to encryption
if (class_exists('EGroupware\Api\Vfs') &&
($url=EGroupware\Api\Vfs::resolve_url($options['path'])) &&
str_starts_with($url, 'stylite.s3direct://'))
{
fseek($options['stream'], 0, SEEK_END);
$options['size'] = ftell($options['stream']);
fseek($options['stream'], 0);
}
return true; return true;
} }
@ -939,4 +949,4 @@ class HTTP_WebDAV_Server_Filesystem extends HTTP_WebDAV_Server
* c-basic-offset: 4 * c-basic-offset: 4
* indent-tabs-mode:nil * indent-tabs-mode:nil
* End: * End:
*/ */