summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/connector/sabre/serverfactory.php
diff options
context:
space:
mode:
authorLukas Reschke <lukas@owncloud.com>2015-11-13 11:47:32 +0100
committerLukas Reschke <lukas@owncloud.com>2015-11-13 23:31:08 +0100
commita3fc40921b20a3fcc1c7260f4abfcadc5a8c1d13 (patch)
treeb359e30824d121cf2004ae4a048710d68a6ecbee /apps/dav/lib/connector/sabre/serverfactory.php
parent1e9203cdef7009ef129f0f3e3db6a326d3f4db12 (diff)
downloadnextcloud-server-a3fc40921b20a3fcc1c7260f4abfcadc5a8c1d13.tar.gz
nextcloud-server-a3fc40921b20a3fcc1c7260f4abfcadc5a8c1d13.zip
Add fake locker plugin for WebDAVFS
WebDAVFS as used by Finder requires a Class 2 compatible WebDAV server. This change introduces a fake locking provider which will simply advertise Locking support when a request originates from WebDAVFS. It will also return successful LOCK and UNLOCK responses.
Diffstat (limited to 'apps/dav/lib/connector/sabre/serverfactory.php')
-rw-r--r--apps/dav/lib/connector/sabre/serverfactory.php43
1 files changed, 41 insertions, 2 deletions
diff --git a/apps/dav/lib/connector/sabre/serverfactory.php b/apps/dav/lib/connector/sabre/serverfactory.php
index f67e949e802..a33acc9f00b 100644
--- a/apps/dav/lib/connector/sabre/serverfactory.php
+++ b/apps/dav/lib/connector/sabre/serverfactory.php
@@ -26,12 +26,41 @@ use OCP\Files\Mount\IMountManager;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\ILogger;
+use OCP\IRequest;
use OCP\ITagManager;
use OCP\IUserSession;
use Sabre\DAV\Auth\Backend\BackendInterface;
+use Sabre\DAV\Locks\Plugin;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class ServerFactory {
+ /** @var IConfig */
+ private $config;
+ /** @var ILogger */
+ private $logger;
+ /** @var IDBConnection */
+ private $databaseConnection;
+ /** @var IUserSession */
+ private $userSession;
+ /** @var IMountManager */
+ private $mountManager;
+ /** @var ITagManager */
+ private $tagManager;
+ /** @var EventDispatcherInterface */
+ private $dispatcher;
+ /** @var IRequest */
+ private $request;
+
+ /**
+ * @param IConfig $config
+ * @param ILogger $logger
+ * @param IDBConnection $databaseConnection
+ * @param IUserSession $userSession
+ * @param IMountManager $mountManager
+ * @param ITagManager $tagManager
+ * @param EventDispatcherInterface $dispatcher
+ * @param IRequest $request
+ */
public function __construct(
IConfig $config,
ILogger $logger,
@@ -39,7 +68,8 @@ class ServerFactory {
IUserSession $userSession,
IMountManager $mountManager,
ITagManager $tagManager,
- EventDispatcherInterface $dispatcher
+ EventDispatcherInterface $dispatcher,
+ IRequest $request
) {
$this->config = $config;
$this->logger = $logger;
@@ -48,6 +78,7 @@ class ServerFactory {
$this->mountManager = $mountManager;
$this->tagManager = $tagManager;
$this->dispatcher = $dispatcher;
+ $this->request = $request;
}
/**
@@ -57,7 +88,10 @@ class ServerFactory {
* @param callable $viewCallBack callback that should return the view for the dav endpoint
* @return Server
*/
- public function createServer($baseUri, $requestUri, BackendInterface $authBackend, callable $viewCallBack) {
+ public function createServer($baseUri,
+ $requestUri,
+ BackendInterface $authBackend,
+ callable $viewCallBack) {
// Fire up server
$objectTree = new \OCA\DAV\Connector\Sabre\ObjectTree();
$server = new \OCA\DAV\Connector\Sabre\Server($objectTree);
@@ -75,6 +109,11 @@ class ServerFactory {
$server->addPlugin(new \OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin('webdav', $this->logger));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\LockPlugin($objectTree));
$server->addPlugin(new \OCA\DAV\Connector\Sabre\ListenerPlugin($this->dispatcher));
+ // Finder on OS X requires Class 2 WebDAV support (locking), since we do
+ // not provide locking we emulate it using a fake locking plugin.
+ if($this->request->isUserAgent(['/WebDAVFS/'])) {
+ $server->addPlugin(new \OCA\DAV\Connector\Sabre\FakeLockerPlugin());
+ }
// wait with registering these until auth is handled and the filesystem is setup
$server->on('beforeMethod', function () use ($server, $objectTree, $viewCallBack) {