summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/CardDAV/ImageExportPlugin.php3
-rw-r--r--apps/dav/lib/CardDAV/PhotoCache.php2
-rw-r--r--apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php6
-rw-r--r--build/integration/features/carddav.feature2
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|