]> source.dussan.org Git - nextcloud-server.git/commitdiff
Remove locks plugin.
authorThomas Müller <thomas.mueller@tmit.eu>
Mon, 23 Feb 2015 12:49:23 +0000 (13:49 +0100)
committerThomas Müller <thomas.mueller@tmit.eu>
Wed, 25 Feb 2015 09:30:47 +0000 (10:30 +0100)
Reasoning:
- a WebDAV server is not required to implement locking support
- WebDAV Locking is know to break the sync algorithm
- the current lock implementation is known to be broken (locks are not moved if a file is moved, locks on shared files don't work)

apps/files/appinfo/remote.php
apps/files_sharing/publicwebdav.php
lib/private/connector/sabre/locks.php [deleted file]

index e4a105b6d28dc934fae2164df0650c818ec5c49d..dbab3256b98d8bac85df899f35309890fd56d8b2 100644 (file)
@@ -28,7 +28,6 @@
  */
 // Backends
 $authBackend = new \OC\Connector\Sabre\Auth();
-$lockBackend = new \OC\Connector\Sabre\Locks();
 
 // Fire up server
 $objectTree = new \OC\Connector\Sabre\ObjectTree();
@@ -40,7 +39,6 @@ $server->setBaseUri($baseuri);
 // Load plugins
 $defaults = new OC_Defaults();
 $server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
-$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
 // FIXME: The following line is a workaround for legacy components relying on being able to send a GET to /
 $server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin());
 $server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
index abed58b5ee2e86f799102567a2bfa532263afb7f..e96dabbdd3fda9f3f098e9fce433b0f9b041f81b 100644 (file)
@@ -34,7 +34,6 @@ OC_Util::obEnd();
 
 // Backends
 $authBackend = new OCA\Files_Sharing\Connector\PublicAuth(\OC::$server->getConfig());
-$lockBackend = new \OC\Connector\Sabre\Locks();
 
 // Fire up server
 $objectTree = new \OC\Connector\Sabre\ObjectTree();
@@ -46,7 +45,6 @@ $server->setBaseUri($baseuri);
 // Load plugins
 $defaults = new OC_Defaults();
 $server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
-$server->addPlugin(new \Sabre\DAV\Locks\Plugin($lockBackend));
 $server->addPlugin(new \Sabre\DAV\Browser\Plugin(false)); // Show something in the Browser, but no upload
 $server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
 $server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin());
diff --git a/lib/private/connector/sabre/locks.php b/lib/private/connector/sabre/locks.php
deleted file mode 100644 (file)
index a212c95..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-namespace OC\Connector\Sabre;
-
-
-class Locks extends \Sabre\DAV\Locks\Backend\AbstractBackend {
-
-       /**
-        * Returns a list of \Sabre\DAV\Locks_LockInfo objects
-        *
-        * This method should return all the locks for a particular uri, including
-        * locks that might be set on a parent uri.
-        *
-        * If returnChildLocks is set to true, this method should also look for
-        * any locks in the subtree of the uri for locks.
-        *
-        * @param string $uri
-        * @param bool $returnChildLocks
-        * @return array
-        */
-       public function getLocks($uri, $returnChildLocks) {
-
-               // NOTE: the following 10 lines or so could be easily replaced by
-               // pure sql. MySQL's non-standard string concatination prevents us
-               // from doing this though.
-               // NOTE: SQLite requires time() to be inserted directly. That's ugly
-               // but otherwise reading locks from SQLite Databases will return
-               // nothing
-               $query = 'SELECT * FROM `*PREFIX*locks`'
-                          .' WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)';
-               if (\OC_Config::getValue( "dbtype") === 'oci') {
-                       //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
-                       $query = 'SELECT * FROM `*PREFIX*locks`'
-                                  .' WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( to_char(`uri`) = ?)';
-               }
-               $params = array(\OC_User::getUser(), $uri);
-
-               // We need to check locks for every part in the uri.
-               $uriParts = explode('/', $uri);
-
-               // We already covered the last part of the uri
-               array_pop($uriParts);
-
-               $currentPath='';
-
-               foreach($uriParts as $part) {
-
-                       if ($currentPath) $currentPath.='/';
-                       $currentPath.=$part;
-                       //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
-                       if (\OC_Config::getValue( "dbtype") === 'oci') {
-                               $query.=' OR (`depth` != 0 AND to_char(`uri`) = ?)';
-                       } else {
-                               $query.=' OR (`depth` != 0 AND `uri` = ?)';
-                       }
-                       $params[] = $currentPath;
-
-               }
-
-               if ($returnChildLocks) {
-
-                       //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
-                       if (\OC_Config::getValue( "dbtype") === 'oci') {
-                               $query.=' OR (to_char(`uri`) LIKE ?)';
-                       } else {
-                               $query.=' OR (`uri` LIKE ?)';
-                       }
-                       $params[] = $uri . '/%';
-
-               }
-               $query.=')';
-
-               $result = \OC_DB::executeAudited( $query, $params );
-               
-               $lockList = array();
-               while( $row = $result->fetchRow()) {
-
-                       $lockInfo = new \Sabre\DAV\Locks\LockInfo();
-                       $lockInfo->owner = $row['owner'];
-                       $lockInfo->token = $row['token'];
-                       $lockInfo->timeout = $row['timeout'];
-                       $lockInfo->created = $row['created'];
-                       $lockInfo->scope = $row['scope'];
-                       $lockInfo->depth = $row['depth'];
-                       $lockInfo->uri   = $row['uri'];
-                       $lockList[] = $lockInfo;
-
-               }
-
-               return $lockList;
-
-       }
-
-       /**
-        * Locks a uri
-        *
-        * @param string $uri
-        * @param \Sabre\DAV\Locks\LockInfo $lockInfo
-        * @return bool
-        */
-       public function lock($uri, \Sabre\DAV\Locks\LockInfo $lockInfo) {
-
-               // We're making the lock timeout 5 minutes
-               $lockInfo->timeout = 300;
-               $lockInfo->created = time();
-               $lockInfo->uri = $uri;
-
-               $locks = $this->getLocks($uri, false);
-               $exists = false;
-               foreach($locks as $lock) {
-                       if ($lock->token == $lockInfo->token) {
-                               $exists = true;
-                               break;
-                       }
-               }
-
-               if ($exists) {
-                       $sql = 'UPDATE `*PREFIX*locks`'
-                                .' SET `owner` = ?, `timeout` = ?, `scope` = ?, `depth` = ?, `uri` = ?, `created` = ?'
-                                .' WHERE `userid` = ? AND `token` = ?';
-                       $result = \OC_DB::executeAudited( $sql, array(
-                               $lockInfo->owner,
-                               $lockInfo->timeout,
-                               $lockInfo->scope,
-                               $lockInfo->depth,
-                               $uri,
-                               $lockInfo->created,
-                               \OC_User::getUser(),
-                               $lockInfo->token)
-                       );
-               } else {
-                       $sql = 'INSERT INTO `*PREFIX*locks`'
-                                .' (`userid`,`owner`,`timeout`,`scope`,`depth`,`uri`,`created`,`token`)'
-                                .' VALUES (?,?,?,?,?,?,?,?)';
-                       $result = \OC_DB::executeAudited( $sql, array(
-                               \OC_User::getUser(),
-                               $lockInfo->owner,
-                               $lockInfo->timeout,
-                               $lockInfo->scope,
-                               $lockInfo->depth,
-                               $uri,
-                               $lockInfo->created,
-                               $lockInfo->token)
-                       );
-               }
-
-               return true;
-
-       }
-
-       /**
-        * Removes a lock from a uri
-        *
-        * @param string $uri
-        * @param \Sabre\DAV\Locks\LockInfo $lockInfo
-        * @return bool
-        */
-       public function unlock($uri, \Sabre\DAV\Locks\LockInfo $lockInfo) {
-
-               $sql = 'DELETE FROM `*PREFIX*locks` WHERE `userid` = ? AND `uri` = ? AND `token` = ?';
-               if (\OC_Config::getValue( "dbtype") === 'oci') {
-                       //FIXME oracle hack: need to explicitly cast CLOB to CHAR for comparison
-                       $sql = 'DELETE FROM `*PREFIX*locks` WHERE `userid` = ? AND to_char(`uri`) = ? AND `token` = ?';
-               }
-               $result = \OC_DB::executeAudited( $sql, array(\OC_User::getUser(), $uri, $lockInfo->token));
-
-               return $result === 1;
-
-       }
-
-}