diff options
Diffstat (limited to 'apps/theming/lib/Controller/ThemingController.php')
-rw-r--r-- | apps/theming/lib/Controller/ThemingController.php | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php index 8a7aaec6b5e..67300b17c6d 100644 --- a/apps/theming/lib/Controller/ThemingController.php +++ b/apps/theming/lib/Controller/ThemingController.php @@ -171,7 +171,8 @@ class ThemingController extends Controller { 'message' => $this->l->t('No file uploaded') ] ], - Http::STATUS_UNPROCESSABLE_ENTITY); + Http::STATUS_UNPROCESSABLE_ENTITY + ); } $name = ''; if(!empty($newLogo)) { @@ -182,7 +183,30 @@ class ThemingController extends Controller { } if(!empty($newBackgroundLogo)) { $target = $this->rootFolder->newFile('themedbackgroundlogo'); - stream_copy_to_stream(fopen($newBackgroundLogo['tmp_name'], 'r'), $target->fopen('w')); + + $image = @imagecreatefromstring(file_get_contents($newBackgroundLogo['tmp_name'], 'r')); + if($image === false) { + return new DataResponse( + [ + 'data' => [ + 'message' => $this->l->t('Unsupported image type'), + ], + 'status' => 'failure', + ], + Http::STATUS_UNPROCESSABLE_ENTITY + ); + } + + // Optimize the image since some people may upload images that will be + // either to big or are not progressive rendering. + if(function_exists('imagescale')) { + // FIXME: Once PHP 5.5.0 is a requirement the above check can be removed + $image = imagescale($image, 1920); + } + imageinterlace($image, 1); + imagejpeg($image, $target->fopen('w'), 75); + imagedestroy($image); + $this->template->set('backgroundMime', $newBackgroundLogo['type']); $name = $newBackgroundLogo['name']; } @@ -236,6 +260,7 @@ class ThemingController extends Controller { $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); $response->addHeader('Content-Disposition', 'attachment'); $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'logoMime', '')); + $response->addHeader('Pragma', 'cache'); return $response; } @@ -256,6 +281,7 @@ class ThemingController extends Controller { $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); $response->addHeader('Content-Disposition', 'attachment'); $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'backgroundMime', '')); + $response->addHeader('Pragma', 'cache'); return $response; } @@ -358,6 +384,7 @@ class ThemingController extends Controller { $response = new DataDownloadResponse($responseCss, 'style', 'text/css'); $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $response->addHeader('Pragma', 'cache'); $response->cacheFor(3600); return $response; } @@ -378,8 +405,9 @@ class ThemingController extends Controller { }; })();'; $response = new Http\DataDisplayResponse($responseJS); - $response->addHeader("Content-type","text/javascript"); + $response->addHeader('Content-type', 'text/javascript'); $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $response->addHeader('Pragma', 'cache'); $response->cacheFor(3600); return $response; } |