From 63bd6b25db5e3d9860e12789032b42890d23c202 Mon Sep 17 00:00:00 2001
From: Lukas Reschke <lukas@owncloud.com>
Date: Fri, 4 Mar 2016 15:13:56 +0100
Subject: [PATCH] Cache results of testRemoteUrl

Otherwise setting up the storage will result in a HTTP request and thus slowing down ownCloud.

Replaces https://github.com/owncloud/core/pull/22855
---
 apps/files_sharing/lib/external/storage.php | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 41f7bef589b..87f5a3598fb 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -54,6 +54,11 @@ class Storage extends DAV implements ISharedStorage {
 	 */
 	private $token;
 
+	/**
+	 * @var \OCP\ICacheFactory
+	 */
+	private $memcacheFactory;
+
 	/**
 	 * @var \OCP\ICertificateManager
 	 */
@@ -67,8 +72,9 @@ class Storage extends DAV implements ISharedStorage {
 	private $manager;
 
 	public function __construct($options) {
+		$this->memcacheFactory = \OC::$server->getMemCacheFactory();
 		$discoveryManager = new DiscoveryManager(
-			\OC::$server->getMemCacheFactory(),
+			$this->memcacheFactory,
 			\OC::$server->getHTTPClientService()
 		);
 
@@ -241,10 +247,21 @@ class Storage extends DAV implements ISharedStorage {
 		}
 	}
 
+	/**
+	 * @param string $url
+	 * @return bool
+	 */
 	private function testRemoteUrl($url) {
+		$cache = $this->memcacheFactory->create('files_sharing_remote_url');
+		if($result = $cache->get($url)) {
+			return (bool)$result;
+		}
+
 		$result = file_get_contents($url);
 		$data = json_decode($result);
-		return (is_object($data) and !empty($data->version));
+		$returnValue = (is_object($data) and !empty($data->version));
+		$cache->set($url, $returnValue);
+		return $returnValue;
 	}
 
 	/**
-- 
GitLab