]> source.dussan.org Git - nextcloud-server.git/commitdiff
Make cache and scss caching depend on the baseUrl
authorJulius Härtl <jus@bitgrid.net>
Thu, 15 Jun 2017 10:35:16 +0000 (12:35 +0200)
committerJulius Härtl <jus@bitgrid.net>
Sun, 2 Jul 2017 12:03:35 +0000 (14:03 +0200)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
lib/private/Server.php
lib/private/Template/SCSSCacher.php
lib/private/URLGenerator.php
lib/public/IURLGenerator.php

index 75e9d911632071ad23c859f32455b67b43eaa643..081bee3d2ba699eb7b833de51c118ac8d34f08ba 100644 (file)
@@ -433,7 +433,13 @@ class Server extends ServerContainer implements IServerContainer {
                $this->registerAlias('UserCache', \OCP\ICache::class);
 
                $this->registerService(Factory::class, function (Server $c) {
+                       $arrayCacheFactory = new \OC\Memcache\Factory('', $c->getLogger(),
+                               '\\OC\\Memcache\\ArrayCache',
+                               '\\OC\\Memcache\\ArrayCache',
+                               '\\OC\\Memcache\\ArrayCache'
+                       );
                        $config = $c->getConfig();
+                       $urlGenerator = new URLGenerator($config, $arrayCacheFactory);
 
                        if ($config->getSystemValue('installed', false) && !(defined('PHPUNIT_RUN') && PHPUNIT_RUN)) {
                                $v = \OC_App::getAppVersions();
@@ -441,19 +447,15 @@ class Server extends ServerContainer implements IServerContainer {
                                $version = implode(',', $v);
                                $instanceId = \OC_Util::getInstanceId();
                                $path = \OC::$SERVERROOT;
-                               $prefix = md5($instanceId . '-' . $version . '-' . $path . '-' . \OC::$WEBROOT);
+                               $prefix = md5($instanceId . '-' . $version . '-' . $path . '-' . $urlGenerator->getBaseUrl());
                                return new \OC\Memcache\Factory($prefix, $c->getLogger(),
                                        $config->getSystemValue('memcache.local', null),
                                        $config->getSystemValue('memcache.distributed', null),
                                        $config->getSystemValue('memcache.locking', null)
                                );
                        }
+                       return $arrayCacheFactory;
 
-                       return new \OC\Memcache\Factory('', $c->getLogger(),
-                               '\\OC\\Memcache\\ArrayCache',
-                               '\\OC\\Memcache\\ArrayCache',
-                               '\\OC\\Memcache\\ArrayCache'
-                       );
                });
                $this->registerAlias('MemCacheFactory', Factory::class);
                $this->registerAlias(ICacheFactory::class, Factory::class);
index 6b1c594bd2ec41b53ef7b43ea2e43028157d3485..eccc65a5cc96dc5b158188624d40805745d4dab8 100644 (file)
@@ -92,7 +92,7 @@ class SCSSCacher {
                $path = explode('/', $root . '/' . $file);
 
                $fileNameSCSS = array_pop($path);
-               $fileNameCSS = str_replace('.scss', '.css', $fileNameSCSS);
+               $fileNameCSS = $this->getBaseUrlHash() . '-' . str_replace('.scss', '.css', $fileNameSCSS);
 
                $path = implode('/', $path);
 
@@ -292,8 +292,12 @@ class SCSSCacher {
        public function getCachedSCSS($appName, $fileName) {
                $tmpfileLoc = explode('/', $fileName);
                $fileName = array_pop($tmpfileLoc);
-               $fileName = str_replace('.scss', '.css', $fileName);
+               $fileName = $this->getBaseUrlHash() . '-' . str_replace('.scss', '.css', $fileName);
 
                return substr($this->urlGenerator->linkToRoute('core.Css.getCss', array('fileName' => $fileName, 'appName' => $appName)), strlen(\OC::$WEBROOT) + 1);
        }
+
+       private function getBaseUrlHash() {
+               return md5($this->urlGenerator->getBaseUrl());
+       }
 }
index 2387deb6100c4f589b0d5edbcb51e9462d133c88..6db675e7d7705b2462319764bfbc5f26ca105b2c 100644 (file)
@@ -142,7 +142,7 @@ class URLGenerator implements IURLGenerator {
         * Returns the path to the image.
         */
        public function imagePath($app, $image) {
-               $cache = $this->cacheFactory->create('imagePath');
+               $cache = $this->cacheFactory->create('imagePath-'.md5($this->getBaseUrl()).'-');
                $cacheKey = $app.'-'.$image;
                if($key = $cache->get($cacheKey)) {
                        return $key;
@@ -223,14 +223,12 @@ class URLGenerator implements IURLGenerator {
                if (\OC::$CLI && !defined('PHPUNIT_RUN')) {
                        return rtrim($this->config->getSystemValue('overwrite.cli.url'), '/') . '/' . ltrim($url, '/');
                }
-
                // The ownCloud web root can already be prepended.
-               $webRoot = substr($url, 0, strlen(\OC::$WEBROOT)) === \OC::$WEBROOT
-                       ? ''
-                       : \OC::$WEBROOT;
+               if(substr($url, 0, strlen(\OC::$WEBROOT)) === \OC::$WEBROOT) {
+                       $url = substr($url, strlen(\OC::$WEBROOT));
+               }
 
-               $request = \OC::$server->getRequest();
-               return $request->getServerProtocol() . '://' . $request->getServerHost() . $webRoot . $separator . $url;
+               return $this->getBaseUrl() . $separator . $url;
        }
 
        /**
@@ -241,4 +239,12 @@ class URLGenerator implements IURLGenerator {
                $theme = \OC::$server->getThemingDefaults();
                return $theme->buildDocLinkToKey($key);
        }
+
+       /**
+        * @return string base url of the current request
+        */
+       public function getBaseUrl() {
+               $request = \OC::$server->getRequest();
+               return $request->getServerProtocol() . '://' . $request->getServerHost() . \OC::$WEBROOT;
+       }
 }
index e309336c0f0bb607a268ac2015ada99d3f8550d6..3869d2f86f8f85b4c4bb740503f00eca7c483df9 100644 (file)
@@ -91,4 +91,10 @@ interface IURLGenerator {
         * @since 8.0.0
         */
        public function linkToDocs($key);
+
+       /**
+        * @return string base url of the current request
+        * @since 13.0.0
+        */
+       public function getBaseUrl();
 }