Merge pull request #8549 from kyrofa/backport_12/8462/theming_app_outside_root
[stable12] theming: handle not being in the serverroot
This commit is contained in:
commit
7c6b7b40ae
|
@ -48,6 +48,7 @@ use OCP\IRequest;
|
|||
use OCA\Theming\Util;
|
||||
use OCP\ITempManager;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\App\IAppManager;
|
||||
|
||||
/**
|
||||
* Class ThemingController
|
||||
|
@ -75,6 +76,8 @@ class ThemingController extends Controller {
|
|||
private $scssCacher;
|
||||
/** @var IURLGenerator */
|
||||
private $urlGenerator;
|
||||
/** @var IAppManager */
|
||||
private $appManager;
|
||||
|
||||
/**
|
||||
* ThemingController constructor.
|
||||
|
@ -90,6 +93,7 @@ class ThemingController extends Controller {
|
|||
* @param IAppData $appData
|
||||
* @param SCSSCacher $scssCacher
|
||||
* @param IURLGenerator $urlGenerator
|
||||
* @param IAppManager $appManager
|
||||
*/
|
||||
public function __construct(
|
||||
$appName,
|
||||
|
@ -102,7 +106,8 @@ class ThemingController extends Controller {
|
|||
ITempManager $tempManager,
|
||||
IAppData $appData,
|
||||
SCSSCacher $scssCacher,
|
||||
IURLGenerator $urlGenerator
|
||||
IURLGenerator $urlGenerator,
|
||||
IAppManager $appManager
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
|
||||
|
@ -115,6 +120,7 @@ class ThemingController extends Controller {
|
|||
$this->appData = $appData;
|
||||
$this->scssCacher = $scssCacher;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
$this->appManager = $appManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -374,12 +380,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();
|
||||
}
|
||||
|
|
|
@ -100,7 +100,8 @@ class ThemingControllerTest extends TestCase {
|
|||
$this->tempManager,
|
||||
$this->appData,
|
||||
$this->scssCacher,
|
||||
$this->urlGenerator
|
||||
$this->urlGenerator,
|
||||
$this->appManager
|
||||
);
|
||||
|
||||
return parent::setUp();
|
||||
|
@ -629,7 +630,7 @@ class ThemingControllerTest extends TestCase {
|
|||
|
||||
|
||||
public function testGetStylesheet() {
|
||||
|
||||
$this->appManager->expects($this->once())->method('getAppPath')->with('theming')->willReturn(\OC::$SERVERROOT . '/theming');
|
||||
$file = $this->createMock(ISimpleFile::class);
|
||||
$file->expects($this->any())->method('getName')->willReturn('theming.css');
|
||||
$file->expects($this->any())->method('getContent')->willReturn('compiled');
|
||||
|
@ -649,6 +650,7 @@ class ThemingControllerTest extends TestCase {
|
|||
}
|
||||
|
||||
public function testGetStylesheetFails() {
|
||||
$this->appManager->expects($this->once())->method('getAppPath')->with('theming')->willReturn(\OC::$SERVERROOT . '/theming');
|
||||
$file = $this->createMock(ISimpleFile::class);
|
||||
$file->expects($this->any())->method('getName')->willReturn('theming.css');
|
||||
$file->expects($this->any())->method('getContent')->willReturn('compiled');
|
||||
|
@ -660,6 +662,26 @@ class ThemingControllerTest extends TestCase {
|
|||
$this->assertEquals($response, $actual);
|
||||
}
|
||||
|
||||
public function testGetStylesheetOutsideServerroot() {
|
||||
$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))
|
||||
|
|
Loading…
Reference in New Issue