aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/theming/lib/Controller/ThemingController.php18
-rw-r--r--apps/theming/tests/Controller/ThemingControllerTest.php34
2 files changed, 49 insertions, 3 deletions
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 4e9ce1b646e..f41b9062a11 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -51,6 +51,7 @@ use OCP\IRequest;
use OCA\Theming\Util;
use OCP\ITempManager;
use OCP\IURLGenerator;
+use OCP\App\IAppManager;
/**
* Class ThemingController
@@ -78,6 +79,8 @@ class ThemingController extends Controller {
private $scssCacher;
/** @var IURLGenerator */
private $urlGenerator;
+ /** @var IAppManager */
+ private $appManager;
/**
* ThemingController constructor.
@@ -93,6 +96,7 @@ class ThemingController extends Controller {
* @param IAppData $appData
* @param SCSSCacher $scssCacher
* @param IURLGenerator $urlGenerator
+ * @param IAppManager $appManager
*/
public function __construct(
$appName,
@@ -105,7 +109,8 @@ class ThemingController extends Controller {
ITempManager $tempManager,
IAppData $appData,
SCSSCacher $scssCacher,
- IURLGenerator $urlGenerator
+ IURLGenerator $urlGenerator,
+ IAppManager $appManager = NULL
) {
parent::__construct($appName, $request);
@@ -118,6 +123,12 @@ class ThemingController extends Controller {
$this->appData = $appData;
$this->scssCacher = $scssCacher;
$this->urlGenerator = $urlGenerator;
+
+ if (!is_null($appManager)) {
+ $this->appManager = $appManager;
+ } else {
+ $this->appManager = \OC::$server->getAppManager();
+ }
}
/**
@@ -409,12 +420,13 @@ class ThemingController extends Controller {
* @return FileDisplayResponse|NotFoundResponse
*/
public function getStylesheet() {
- $appPath = substr(\OC::$server->getAppManager()->getAppPath('theming'), strlen(\OC::$SERVERROOT) + 1);
+ $appPath = $this->appManager->getAppPath('theming');
+
/* SCSSCacher is required here
* We cannot rely on automatic caching done by \OC_Util::addStyle,
* since we need to add the cacheBuster value to the url
*/
- $cssCached = $this->scssCacher->process(\OC::$SERVERROOT, $appPath . '/css/theming.scss', 'theming');
+ $cssCached = $this->scssCacher->process($appPath, 'css/theming.scss', 'theming');
if(!$cssCached) {
return new NotFoundResponse();
}
diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php
index 54b842bc4e8..9ab8d7a06e9 100644
--- a/apps/theming/tests/Controller/ThemingControllerTest.php
+++ b/apps/theming/tests/Controller/ThemingControllerTest.php
@@ -829,6 +829,40 @@ class ThemingControllerTest extends TestCase {
$this->assertEquals($response, $actual);
}
+ public function testGetStylesheetOutsideServerroot() {
+ $this->themingController = new ThemingController(
+ 'theming',
+ $this->request,
+ $this->config,
+ $this->themingDefaults,
+ $this->util,
+ $this->timeFactory,
+ $this->l10n,
+ $this->tempManager,
+ $this->appData,
+ $this->scssCacher,
+ $this->urlGenerator,
+ $this->appManager
+ );
+ $this->appManager->expects($this->once())->method('getAppPath')->with('theming')->willReturn('/outside/serverroot/theming');
+ $file = $this->createMock(ISimpleFile::class);
+ $file->expects($this->any())->method('getName')->willReturn('theming.css');
+ $file->expects($this->any())->method('getContent')->willReturn('compiled');
+ $this->scssCacher->expects($this->once())->method('process')->with('/outside/serverroot/theming', 'css/theming.scss', 'theming')->willReturn(true);
+ $this->scssCacher->expects($this->once())->method('getCachedCSS')->willReturn($file);
+
+ $response = new Http\FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => 'text/css']);
+ $response->cacheFor(86400);
+ $expires = new \DateTime();
+ $expires->setTimestamp($this->timeFactory->getTime());
+ $expires->add(new \DateInterval('PT24H'));
+ $response->addHeader('Expires', $expires->format(\DateTime::RFC1123));
+ $response->addHeader('Pragma', 'cache');
+
+ $actual = $this->themingController->getStylesheet();
+ $this->assertEquals($response, $actual);
+ }
+
public function testGetJavascript() {
$this->themingDefaults
->expects($this->at(0))