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 192c1e69ed..fa4d5ea23f 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 ca3853c76e..6ea999444a 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 c3698a24a7..c116a5ff77 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 57fd8cd7da..16c165b6ba 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|