From bf7514f76abef4bcbb533e4c6c33e00a4e1fdfb5 Mon Sep 17 00:00:00 2001
From: Markus Goetz <markus@woboq.com>
Date: Fri, 12 Jul 2013 13:42:01 +0200
Subject: [PATCH] WebDAV Auth Connector: Check if already logged in

---
 lib/connector/sabre/auth.php | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/lib/connector/sabre/auth.php b/lib/connector/sabre/auth.php
index 6990d928cff..bf3a49593cb 100644
--- a/lib/connector/sabre/auth.php
+++ b/lib/connector/sabre/auth.php
@@ -60,4 +60,25 @@ class OC_Connector_Sabre_Auth extends Sabre_DAV_Auth_Backend_AbstractBasic {
 		}
 		return $user;
 	}
+
+	/**
+	  * Override function here. We want to cache authentication cookies
+	  * in the syncing client to avoid HTTP-401 roundtrips.
+	  * If the sync client supplies the cookies, then OC_User::isLoggedIn()
+	  * will return true and we can see this WebDAV request as already authenticated,
+	  * even if there are no HTTP Basic Auth headers.
+	  * In other case, just fallback to the parent implementation.
+	  *
+	  * @return bool
+	  */
+	public function authenticate(Sabre_DAV_Server $server, $realm) {
+		if (OC_User::isLoggedIn()) {
+			$user = OC_User::getUser();
+			OC_Util::setupFS($user);
+			$this->currentUser = $user;
+			return true;
+		}
+
+		return parent::authenticate($server, $realm);
+    }
 }
-- 
GitLab