aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2017-09-11 15:04:26 +0200
committerJulius Härtl <jus@bitgrid.net>2017-09-12 09:23:12 +0200
commit770aae42f6c57e3a273c7b09a91d43a366175234 (patch)
treed11c4f5e63d7f692e1d1be7fe156a134ca2a2450 /apps
parentb49ab065b783b3ec041ca395739d747d20e2e187 (diff)
downloadnextcloud-server-770aae42f6c57e3a273c7b09a91d43a366175234.tar.gz
nextcloud-server-770aae42f6c57e3a273c7b09a91d43a366175234.zip
Add themed manifest.json to theming app
Signed-off-by: Julius Haertl <jus@bitgrid.net>
Diffstat (limited to 'apps')
-rw-r--r--apps/theming/appinfo/routes.php6
-rw-r--r--apps/theming/lib/Controller/ThemingController.php35
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php49
3 files changed, 90 insertions, 0 deletions
diff --git a/apps/theming/appinfo/routes.php b/apps/theming/appinfo/routes.php
index f4aa2f93162..530e13f53d4 100644
--- a/apps/theming/appinfo/routes.php
+++ b/apps/theming/appinfo/routes.php
@@ -61,6 +61,12 @@ return ['routes' => [
'verb' => 'GET',
],
[
+ 'name' => 'Theming#getManifest',
+ 'url' => '/manifest/{app}',
+ 'verb' => 'GET',
+ 'defaults' => array('app' => 'core')
+ ],
+ [
'name' => 'Icon#getFavicon',
'url' => '/favicon/{app}',
'verb' => 'GET',
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index b409d309f4d..06c2c430b7f 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -423,4 +423,39 @@ class ThemingController extends Controller {
$response->cacheFor(3600);
return $response;
}
+
+ /**
+ * @NoCSRFRequired
+ * @PublicPage
+ *
+ * @return Http\JSONResponse
+ */
+ public function getManifest($app) {
+ $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0');
+ $responseJS = [
+ 'name' => $this->themingDefaults->getName(),
+ 'start_url' => $this->urlGenerator->getBaseUrl(),
+ 'icons' =>
+ [
+ [
+ 'src' => $this->urlGenerator->linkToRoute('theming.Icon.getTouchIcon',
+ ['app' => $app]) . '?v=' . $cacheBusterValue,
+ 'type'=> 'image/png',
+ 'sizes'=> '128x128'
+ ],
+ [
+ 'src' => $this->urlGenerator->linkToRoute('theming.Icon.getFavicon',
+ ['app' => $app]) . '?v=' . $cacheBusterValue,
+ 'type' => 'image/svg+xml',
+ 'sizes' => '16x16'
+ ]
+ ],
+ 'display' => 'standalone'
+ ];
+ $response = new Http\JSONResponse($responseJS);
+ $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
+ $response->addHeader('Pragma', 'cache');
+ $response->cacheFor(3600);
+ return $response;
+ }
}
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index 5e6e43ca3cb..c03eccb6eef 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -729,4 +729,53 @@ class ThemingControllerTest extends TestCase {
$expected->cacheFor(3600);
@$this->assertEquals($expected, $this->themingController->getJavascript());
}
+
+ public function testGetManifest() {
+ $this->config
+ ->expects($this->once())
+ ->method('getAppValue')
+ ->with('theming', 'cachebuster', '0')
+ ->willReturn('0');
+ $this->themingDefaults
+ ->expects($this->any())
+ ->method('getName')
+ ->willReturn('Nextcloud');
+ $this->urlGenerator
+ ->expects($this->at(0))
+ ->method('getBaseUrl')
+ ->willReturn('localhost');
+ $this->urlGenerator
+ ->expects($this->at(1))
+ ->method('linkToRoute')
+ ->with('theming.Icon.getTouchIcon', ['app' => 'core'])
+ ->willReturn('touchicon');
+ $this->urlGenerator
+ ->expects($this->at(2))
+ ->method('linkToRoute')
+ ->with('theming.Icon.getFavicon', ['app' => 'core'])
+ ->willReturn('favicon');
+ $response = new Http\JSONResponse([
+ 'name' => 'Nextcloud',
+ 'start_url' => 'localhost',
+ 'icons' =>
+ [
+ [
+ 'src' => 'touchicon?v=0',
+ 'type'=> 'image/png',
+ 'sizes'=> '128x128'
+ ],
+ [
+ 'src' => 'favicon?v=0',
+ 'type' => 'image/svg+xml',
+ 'sizes' => '16x16'
+ ]
+ ],
+ 'display' => 'standalone'
+ ]);
+ $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime()));
+ $response->addHeader('Pragma', 'cache');
+ $response->cacheFor(3600);
+ $this->assertEquals($response, $this->themingController->getManifest('core'));
+ }
+
}