From e8a4feb1c646f39ca83c72ae493095c3d37b9eb6 Mon Sep 17 00:00:00 2001 From: Jacob Neplokh Date: Sat, 5 Sep 2020 11:44:01 -0700 Subject: [PATCH] Change Content-Disposition Header - Make ALLOWED_CONTENT_TYPES public in order to use - Add $fileName variable which uses "$node->getName()" to get the proper file name and "$file->getMimeType()" along with the ALLOWED_CONTENT_TYPES array in PhotoCache.php to get the proper file extension - Make "$fileName" the name of the file in the Content-Disposition header when downloading a Contact's photo - Add filename to the CardDAV integration image export test header - Change headers in ImageExportPluginTest to reflect changes Signed-off-by: Jacob Neplokh --- apps/dav/lib/CardDAV/ImageExportPlugin.php | 3 ++- apps/dav/lib/CardDAV/PhotoCache.php | 2 +- apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php | 6 +++--- 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| -- 2.39.5