From f018bfc7de7322651473edbfe65bd440b9c9e85b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?=
 <skjnldsv@protonmail.com>
Date: Tue, 5 Dec 2017 18:10:33 +0100
Subject: [PATCH] Fixed md5 generation and added fallback for scss requests
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
---
 lib/private/TemplateLayout.php | 38 ++++++++++++++++++++++++++++------
 1 file changed, 32 insertions(+), 6 deletions(-)

diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php
index 2868d48a911..1bd9004265c 100644
--- a/lib/private/TemplateLayout.php
+++ b/lib/private/TemplateLayout.php
@@ -188,22 +188,32 @@ class TemplateLayout extends \OC_Template {
 			if (substr($file, -strlen('print.css')) === 'print.css') {
 				$this->append( 'printcssfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
 			} else {
-				$this->append( 'cssfiles', $web.'/'.$file . $this->getVersionHashSuffix($web)  );
+				$this->append( 'cssfiles', $web.'/'.$file . $this->getVersionHashSuffix($web, $file)  );
 			}
 		}
 	}
 
-	protected function getVersionHashSuffix($app=false) {
+	protected function getVersionHashSuffix($path = false, $file = false) {
 		if (\OC::$server->getConfig()->getSystemValue('debug', false)) {
 			// allows chrome workspace mapping in debug mode
 			return "";
 		}
-		if ($app !== false && $app !== '') {
-			$v = \OC_App::getAppVersions();
-			$appName = end(explode('/', $app));
+		$v = \OC_App::getAppVersions();
+
+		// Try the webroot path for a match
+		if ($path !== false && $path !== '') {
+			$appName = $this->getAppNamefromPath($path);
+			if(array_key_exists($appName, $v)) {
+				$appVersion = $v[$appName];
+				return '?v=' . substr(md5($appVersion), 0, 8) . '-' . $this->config->getAppValue('theming', 'cachebuster', '0');
+			}
+		}
+		// fallback to the file path instead
+		if ($file !== false && $file !== '') {
+			$appName = $this->getAppNamefromPath($file);
 			if(array_key_exists($appName, $v)) {
 				$appVersion = $v[$appName];
-				return '?v=' . substr(md5(implode(',', $appVersion)), 0, 8) . '-' . $this->config->getAppValue('theming', 'cachebuster', '0');
+				return '?v=' . substr(md5($appVersion), 0, 8) . '-' . $this->config->getAppValue('theming', 'cachebuster', '0');
 			}
 		}
 
@@ -238,6 +248,22 @@ class TemplateLayout extends \OC_Template {
 		return $locator->getResources();
 	}
 
+	/**
+	 * @param string $path
+	 * @return string
+	 */
+	static public function getAppNamefromPath($path) {
+		if ($path !== '' && is_string($path)) {
+			$pathParts = explode('/', $path);
+			if ($pathParts[0] === 'css') {
+				// This is a scss request
+				return $pathParts[1];
+			}
+			return end($pathParts);
+		}
+
+	}
+
 	/**
 	 * @param array $scripts
 	 * @return array
-- 
GitLab