diff options
-rw-r--r-- | apps/dav/lib/CardDAV/ImageExportPlugin.php | 3 | ||||
-rw-r--r-- | apps/dav/lib/CardDAV/PhotoCache.php | 2 | ||||
-rw-r--r-- | apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php | 6 | ||||
-rw-r--r-- | build/integration/features/carddav.feature | 2 |
4 files changed, 7 insertions, 6 deletions
diff --git a/apps/dav/lib/CardDAV/ImageExportPlugin.php b/apps/dav/lib/CardDAV/ImageExportPlugin.php index 192c1e69ed1..fa4d5ea23f2 100644 --- a/apps/dav/lib/CardDAV/ImageExportPlugin.php +++ b/apps/dav/lib/CardDAV/ImageExportPlugin.php @@ -103,7 +103,8 @@ class ImageExportPlugin extends ServerPlugin { try { $file = $this->cache->get($addressbook->getResourceId(), $node->getName(), $size, $node); $response->setHeader('Content-Type', $file->getMimeType()); - $response->setHeader('Content-Disposition', 'attachment'); + $fileName = $node->getName() . '.' . PhotoCache::ALLOWED_CONTENT_TYPES[$file->getMimeType()]; + $response->setHeader('Content-Disposition', "attachment; filename=$fileName"); $response->setStatus(200); $response->setBody($file->getContent()); diff --git a/apps/dav/lib/CardDAV/PhotoCache.php b/apps/dav/lib/CardDAV/PhotoCache.php index ca3853c76e6..6ea999444af 100644 --- a/apps/dav/lib/CardDAV/PhotoCache.php +++ b/apps/dav/lib/CardDAV/PhotoCache.php @@ -43,7 +43,7 @@ use Sabre\VObject\Reader; class PhotoCache { /** @var array */ - protected const ALLOWED_CONTENT_TYPES = [ + public const ALLOWED_CONTENT_TYPES = [ 'image/png' => 'png', 'image/jpeg' => 'jpg', 'image/gif' => 'gif', diff --git a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php index c3698a24a78..c116a5ff775 100644 --- a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php +++ b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php @@ -166,7 +166,7 @@ class ImageExportPluginTest extends TestCase { if ($photo) { $file = $this->createMock(ISimpleFile::class); $file->method('getMimeType') - ->willReturn('imgtype'); + ->willReturn('image/jpeg'); $file->method('getContent') ->willReturn('imgdata'); @@ -176,10 +176,10 @@ class ImageExportPluginTest extends TestCase { $this->response->expects($this->at(3)) ->method('setHeader') - ->with('Content-Type', 'imgtype'); + ->with('Content-Type', 'image/jpeg'); $this->response->expects($this->at(4)) ->method('setHeader') - ->with('Content-Disposition', 'attachment'); + ->with('Content-Disposition', 'attachment; filename=card.jpg'); $this->response->expects($this->once()) ->method('setStatus') diff --git a/build/integration/features/carddav.feature b/build/integration/features/carddav.feature index 57fd8cd7da4..16c165b6bab 100644 --- a/build/integration/features/carddav.feature +++ b/build/integration/features/carddav.feature @@ -55,7 +55,7 @@ Feature: carddav Given "admin" uploads the contact "bjoern.vcf" to the addressbook "MyAddressbook" When Exporting the picture of contact "bjoern.vcf" from addressbook "MyAddressbook" as user "admin" Then The following HTTP headers should be set - |Content-Disposition|attachment| + |Content-Disposition|attachment; filename=bjoern.vcf.jpg| |Content-Type|image/jpeg| |Content-Security-Policy|default-src 'none';| |X-Content-Type-Options |nosniff| |