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 <me@jacobneplokh.com>
This commit is contained in:
Jacob Neplokh 2020-09-05 11:44:01 -07:00
parent 62ab3eb700
commit e8a4feb1c6
No known key found for this signature in database
GPG Key ID: E4050DE078D551BA
4 changed files with 7 additions and 6 deletions

View File

@ -103,7 +103,8 @@ class ImageExportPlugin extends ServerPlugin {
try { try {
$file = $this->cache->get($addressbook->getResourceId(), $node->getName(), $size, $node); $file = $this->cache->get($addressbook->getResourceId(), $node->getName(), $size, $node);
$response->setHeader('Content-Type', $file->getMimeType()); $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->setStatus(200);
$response->setBody($file->getContent()); $response->setBody($file->getContent());

View File

@ -43,7 +43,7 @@ use Sabre\VObject\Reader;
class PhotoCache { class PhotoCache {
/** @var array */ /** @var array */
protected const ALLOWED_CONTENT_TYPES = [ public const ALLOWED_CONTENT_TYPES = [
'image/png' => 'png', 'image/png' => 'png',
'image/jpeg' => 'jpg', 'image/jpeg' => 'jpg',
'image/gif' => 'gif', 'image/gif' => 'gif',

View File

@ -166,7 +166,7 @@ class ImageExportPluginTest extends TestCase {
if ($photo) { if ($photo) {
$file = $this->createMock(ISimpleFile::class); $file = $this->createMock(ISimpleFile::class);
$file->method('getMimeType') $file->method('getMimeType')
->willReturn('imgtype'); ->willReturn('image/jpeg');
$file->method('getContent') $file->method('getContent')
->willReturn('imgdata'); ->willReturn('imgdata');
@ -176,10 +176,10 @@ class ImageExportPluginTest extends TestCase {
$this->response->expects($this->at(3)) $this->response->expects($this->at(3))
->method('setHeader') ->method('setHeader')
->with('Content-Type', 'imgtype'); ->with('Content-Type', 'image/jpeg');
$this->response->expects($this->at(4)) $this->response->expects($this->at(4))
->method('setHeader') ->method('setHeader')
->with('Content-Disposition', 'attachment'); ->with('Content-Disposition', 'attachment; filename=card.jpg');
$this->response->expects($this->once()) $this->response->expects($this->once())
->method('setStatus') ->method('setStatus')

View File

@ -55,7 +55,7 @@ Feature: carddav
Given "admin" uploads the contact "bjoern.vcf" to the addressbook "MyAddressbook" 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" When Exporting the picture of contact "bjoern.vcf" from addressbook "MyAddressbook" as user "admin"
Then The following HTTP headers should be set Then The following HTTP headers should be set
|Content-Disposition|attachment| |Content-Disposition|attachment; filename=bjoern.vcf.jpg|
|Content-Type|image/jpeg| |Content-Type|image/jpeg|
|Content-Security-Policy|default-src 'none';| |Content-Security-Policy|default-src 'none';|
|X-Content-Type-Options |nosniff| |X-Content-Type-Options |nosniff|