summaryrefslogtreecommitdiffstats
path: root/apps/theming/lib
diff options
context:
space:
mode:
authorLukas Reschke <lukas@statuscode.ch>2017-05-18 23:30:02 +0200
committerGitHub <noreply@github.com>2017-05-18 23:30:02 +0200
commitc60547295025eec862ee1ea9a3f5009f901f8bc2 (patch)
tree7646d1df52473e5adc4be3903971ab50e670a9fc /apps/theming/lib
parent10930c9ff29fb551d50a2dc29a61d18e61602d15 (diff)
parent489131333ab2db67d84baca623f3649336f417c1 (diff)
downloadnextcloud-server-c60547295025eec862ee1ea9a3f5009f901f8bc2.tar.gz
nextcloud-server-c60547295025eec862ee1ea9a3f5009f901f8bc2.zip
Merge pull request #4888 from nextcloud/theming-fallback-icons
Fallback to default favicon
Diffstat (limited to 'apps/theming/lib')
-rw-r--r--apps/theming/lib/Controller/IconController.php50
-rw-r--r--apps/theming/lib/IconBuilder.php32
2 files changed, 52 insertions, 30 deletions
diff --git a/apps/theming/lib/Controller/IconController.php b/apps/theming/lib/Controller/IconController.php
index 7c4e209d0df..5532a08c83c 100644
--- a/apps/theming/lib/Controller/IconController.php
+++ b/apps/theming/lib/Controller/IconController.php
@@ -22,6 +22,7 @@
*/
namespace OCA\Theming\Controller;
+use OC\IntegrityCheck\Helpers\FileAccessHelper;
use OCA\Theming\IconBuilder;
use OCA\Theming\ImageManager;
use OCA\Theming\ThemingDefaults;
@@ -29,6 +30,7 @@ use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\NotFoundResponse;
use OCP\AppFramework\Http\FileDisplayResponse;
+use OCP\AppFramework\Http\DataDisplayResponse;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Files\NotFoundException;
use OCP\IRequest;
@@ -48,6 +50,8 @@ class IconController extends Controller {
private $iconBuilder;
/** @var ImageManager */
private $imageManager;
+ /** @var FileAccessHelper */
+ private $fileAccessHelper;
/**
* IconController constructor.
@@ -69,7 +73,8 @@ class IconController extends Controller {
ITimeFactory $timeFactory,
IConfig $config,
IconBuilder $iconBuilder,
- ImageManager $imageManager
+ ImageManager $imageManager,
+ FileAccessHelper $fileAccessHelper
) {
parent::__construct($appName, $request);
@@ -79,6 +84,7 @@ class IconController extends Controller {
$this->config = $config;
$this->iconBuilder = $iconBuilder;
$this->imageManager = $imageManager;
+ $this->fileAccessHelper = $fileAccessHelper;
}
/**
@@ -120,9 +126,10 @@ class IconController extends Controller {
* @NoCSRFRequired
*
* @param $app string app name
- * @return FileDisplayResponse|NotFoundResponse
+ * @return FileDisplayResponse|DataDisplayResponse
*/
public function getFavicon($app = "core") {
+ $response = null;
if ($this->themingDefaults->shouldReplaceIcons()) {
try {
$iconFile = $this->imageManager->getCachedImage('favIcon-' . $app);
@@ -132,16 +139,19 @@ class IconController extends Controller {
}
if ($iconFile !== false) {
$response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/x-icon']);
- $response->cacheFor(86400);
- $expires = new \DateTime();
- $expires->setTimestamp($this->timeFactory->getTime());
- $expires->add(new \DateInterval('PT24H'));
- $response->addHeader('Expires', $expires->format(\DateTime::RFC2822));
- $response->addHeader('Pragma', 'cache');
- return $response;
}
}
- return new NotFoundResponse();
+ if($response === null) {
+ $fallbackLogo = \OC::$SERVERROOT . '/core/img/favicon.png';
+ $response = new DataDisplayResponse($this->fileAccessHelper->file_get_contents($fallbackLogo), Http::STATUS_OK, ['Content-Type' => 'image/x-icon']);
+ }
+ $response->cacheFor(86400);
+ $expires = new \DateTime();
+ $expires->setTimestamp($this->timeFactory->getTime());
+ $expires->add(new \DateInterval('PT24H'));
+ $response->addHeader('Expires', $expires->format(\DateTime::RFC2822));
+ $response->addHeader('Pragma', 'cache');
+ return $response;
}
/**
@@ -154,6 +164,7 @@ class IconController extends Controller {
* @return FileDisplayResponse|NotFoundResponse
*/
public function getTouchIcon($app = "core") {
+ $response = null;
if ($this->themingDefaults->shouldReplaceIcons()) {
try {
$iconFile = $this->imageManager->getCachedImage('touchIcon-' . $app);
@@ -163,15 +174,18 @@ class IconController extends Controller {
}
if ($iconFile !== false) {
$response = new FileDisplayResponse($iconFile, Http::STATUS_OK, ['Content-Type' => 'image/png']);
- $response->cacheFor(86400);
- $expires = new \DateTime();
- $expires->setTimestamp($this->timeFactory->getTime());
- $expires->add(new \DateInterval('PT24H'));
- $response->addHeader('Expires', $expires->format(\DateTime::RFC2822));
- $response->addHeader('Pragma', 'cache');
- return $response;
}
}
- return new NotFoundResponse();
+ if($response === null) {
+ $fallbackLogo = \OC::$SERVERROOT . '/core/img/favicon-touch.png';
+ $response = new DataDisplayResponse($this->fileAccessHelper->file_get_contents($fallbackLogo), Http::STATUS_OK, ['Content-Type' => 'image/png']);
+ }
+ $response->cacheFor(86400);
+ $expires = new \DateTime();
+ $expires->setTimestamp($this->timeFactory->getTime());
+ $expires->add(new \DateInterval('PT24H'));
+ $response->addHeader('Expires', $expires->format(\DateTime::RFC2822));
+ $response->addHeader('Pragma', 'cache');
+ return $response;
}
}
diff --git a/apps/theming/lib/IconBuilder.php b/apps/theming/lib/IconBuilder.php
index 42a7031f405..4383ccc7cd9 100644
--- a/apps/theming/lib/IconBuilder.php
+++ b/apps/theming/lib/IconBuilder.php
@@ -53,14 +53,18 @@ class IconBuilder {
* @return string|false image blob
*/
public function getFavicon($app) {
- $icon = $this->renderAppIcon($app, 32);
- if($icon === false) {
+ try {
+ $icon = $this->renderAppIcon($app, 32);
+ if ($icon === false) {
+ return false;
+ }
+ $icon->setImageFormat("png24");
+ $data = $icon->getImageBlob();
+ $icon->destroy();
+ return $data;
+ } catch (\ImagickException $e) {
return false;
}
- $icon->setImageFormat("png24");
- $data = $icon->getImageBlob();
- $icon->destroy();
- return $data;
}
/**
@@ -68,14 +72,18 @@ class IconBuilder {
* @return string|false image blob
*/
public function getTouchIcon($app) {
- $icon = $this->renderAppIcon($app, 512);
- if($icon === false) {
+ try {
+ $icon = $this->renderAppIcon($app, 512);
+ if ($icon === false) {
+ return false;
+ }
+ $icon->setImageFormat("png24");
+ $data = $icon->getImageBlob();
+ $icon->destroy();
+ return $data;
+ } catch (\ImagickException $e) {
return false;
}
- $icon->setImageFormat("png24");
- $data = $icon->getImageBlob();
- $icon->destroy();
- return $data;
}
/**