diff options
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/appframework/db/db.php | 189 | ||||
-rw-r--r-- | lib/private/cache/fileglobal.php | 25 | ||||
-rw-r--r-- | lib/private/cache/fileglobalgc.php | 49 | ||||
-rw-r--r-- | lib/private/connector/sabre/custompropertiesbackend.php | 74 | ||||
-rw-r--r-- | lib/private/server.php | 4 | ||||
-rw-r--r-- | lib/private/tagging/tagmapper.php | 6 | ||||
-rw-r--r-- | lib/private/tagmanager.php | 5 | ||||
-rw-r--r-- | lib/private/user/manager.php | 5 | ||||
-rw-r--r-- | lib/private/util.php | 10 |
9 files changed, 273 insertions, 94 deletions
diff --git a/lib/private/appframework/db/db.php b/lib/private/appframework/db/db.php index 4aa43a811b3..da3e3a9c1ce 100644 --- a/lib/private/appframework/db/db.php +++ b/lib/private/appframework/db/db.php @@ -21,31 +21,33 @@ */ namespace OC\AppFramework\Db; -use \OCP\IDb; - +use OCP\IDb; +use OCP\IDBConnection; /** + * @deprecated use IDBConnection directly, will be removed in ownCloud 10 * Small Facade for being able to inject the database connection for tests */ class Db implements IDb { /** - * @var \OCP\IDBConnection + * @var IDBConnection */ protected $connection; /** - * @param \OCP\IDBConnection $connection + * @param IDBConnection $connection */ - public function __construct($connection) { + public function __construct(IDBConnection $connection) { $this->connection = $connection; } /** - * Used to abstract the owncloud database access away + * Used to abstract the ownCloud database access away * * @param string $sql the sql query with ? placeholder for params * @param int $limit the maximum number of rows * @param int $offset from which row we want to start + * @deprecated use prepare instead, will be removed in ownCloud 10 * @return \OC_DB_StatementWrapper prepared SQL query */ public function prepareQuery($sql, $limit = null, $offset = null) { @@ -58,6 +60,7 @@ class Db implements IDb { /** * Used to get the id of the just inserted element * + * @deprecated use lastInsertId instead, will be removed in ownCloud 10 * @param string $tableName the name of the table where we inserted the item * @return int the id of the inserted element */ @@ -65,5 +68,179 @@ class Db implements IDb { return $this->connection->lastInsertId($tableName); } + /** + * Used to abstract the ownCloud database access away + * @param string $sql the sql query with ? placeholder for params + * @param int $limit the maximum number of rows + * @param int $offset from which row we want to start + * @return \Doctrine\DBAL\Driver\Statement The prepared statement. + */ + public function prepare($sql, $limit=null, $offset=null) { + return $this->connection->prepare($sql, $limit, $offset); + } + + /** + * Executes an, optionally parameterized, SQL query. + * + * If the query is parameterized, a prepared statement is used. + * If an SQLLogger is configured, the execution is logged. + * + * @param string $query The SQL query to execute. + * @param string[] $params The parameters to bind to the query, if any. + * @param array $types The types the previous parameters are in. + * @return \Doctrine\DBAL\Driver\Statement The executed statement. + */ + public function executeQuery($query, array $params = array(), $types = array()) { + return $this->connection->executeQuery($query, $params, $types); + } + + /** + * Executes an SQL INSERT/UPDATE/DELETE query with the given parameters + * and returns the number of affected rows. + * + * This method supports PDO binding types as well as DBAL mapping types. + * + * @param string $query The SQL query. + * @param array $params The query parameters. + * @param array $types The parameter types. + * @return integer The number of affected rows. + */ + public function executeUpdate($query, array $params = array(), array $types = array()) { + return $this->connection->executeUpdate($query, $params, $types); + } + + /** + * Used to get the id of the just inserted element + * @param string $table the name of the table where we inserted the item + * @return int the id of the inserted element + */ + public function lastInsertId($table = null) { + return $this->connection->lastInsertId($table); + } + + /** + * Insert a row if a matching row doesn't exists. + * @param string $table The table name (will replace *PREFIX*) to perform the replace on. + * @param array $input + * @throws \OC\HintException + * + * The input array if in the form: + * + * array ( 'id' => array ( 'value' => 6, + * 'key' => true + * ), + * 'name' => array ('value' => 'Stoyan'), + * 'family' => array ('value' => 'Stefanov'), + * 'birth_date' => array ('value' => '1975-06-20') + * ); + * @return bool + * + */ + public function insertIfNotExist($table, $input) { + return $this->connection->insertIfNotExist($table, $input); + } + + /** + * Start a transaction + */ + public function beginTransaction() { + $this->connection->beginTransaction(); + } + + /** + * Commit the database changes done during a transaction that is in progress + */ + public function commit() { + $this->connection->commit(); + } + + /** + * Rollback the database changes done during a transaction that is in progress + */ + public function rollBack() { + $this->connection->rollBack(); + } + + /** + * Gets the error code and message as a string for logging + * @return string + */ + public function getError() { + return $this->connection->getError(); + } + + /** + * Fetch the SQLSTATE associated with the last database operation. + * + * @return integer The last error code. + */ + public function errorCode() { + return $this->connection->errorCode(); + } + + /** + * Fetch extended error information associated with the last database operation. + * + * @return array The last error information. + */ + public function errorInfo() { + return $this->connection->errorInfo(); + } + + /** + * Establishes the connection with the database. + * + * @return bool + */ + public function connect() { + return $this->connection->connect(); + } + + /** + * Close the database connection + */ + public function close() { + $this->connection->close(); + } + + /** + * Quotes a given input parameter. + * + * @param mixed $input Parameter to be quoted. + * @param int $type Type of the parameter. + * @return string The quoted parameter. + */ + public function quote($input, $type = \PDO::PARAM_STR) { + return $this->connection->quote($input, $type); + } + + /** + * Gets the DatabasePlatform instance that provides all the metadata about + * the platform this driver connects to. + * + * @return \Doctrine\DBAL\Platforms\AbstractPlatform The database platform. + */ + public function getDatabasePlatform() { + return $this->connection->getDatabasePlatform(); + } + + /** + * Drop a table from the database if it exists + * + * @param string $table table name without the prefix + */ + public function dropTable($table) { + $this->connection->dropTable($table); + } + + /** + * Check if a table exists + * + * @param string $table table name without the prefix + * @return bool + */ + public function tableExists($table) { + return $this->connection->tableExists($table); + } } diff --git a/lib/private/cache/fileglobal.php b/lib/private/cache/fileglobal.php index b7ca3f5eb64..2605340648f 100644 --- a/lib/private/cache/fileglobal.php +++ b/lib/private/cache/fileglobal.php @@ -103,29 +103,4 @@ class FileGlobal { } } } - - static public function gc() { - $appConfig = \OC::$server->getAppConfig(); - $last_run = $appConfig->getValue('core', 'global_cache_gc_lastrun', 0); - $now = time(); - if (($now - $last_run) < 300) { - // only do cleanup every 5 minutes - return; - } - $appConfig->setValue('core', 'global_cache_gc_lastrun', $now); - $cache_dir = self::getCacheDir(); - if($cache_dir and is_dir($cache_dir)) { - $dh=opendir($cache_dir); - if(is_resource($dh)) { - while (($file = readdir($dh)) !== false) { - if($file!='.' and $file!='..') { - $mtime = filemtime($cache_dir.$file); - if ($mtime < $now) { - unlink($cache_dir.$file); - } - } - } - } - } - } } diff --git a/lib/private/cache/fileglobalgc.php b/lib/private/cache/fileglobalgc.php index 9be031b2aec..c95154952de 100644 --- a/lib/private/cache/fileglobalgc.php +++ b/lib/private/cache/fileglobalgc.php @@ -21,8 +21,51 @@ */ namespace OC\Cache; -class FileGlobalGC extends \OC\BackgroundJob\Job{ - public function run($argument){ - FileGlobal::gc(); +use OC\BackgroundJob\Job; +use OCP\IConfig; + +class FileGlobalGC extends Job { + public function run($argument) { + $this->gc(\OC::$server->getConfig(), $this->getCacheDir()); + } + + protected function getCacheDir() { + return get_temp_dir() . '/owncloud-' . \OC_Util::getInstanceId() . '/'; + } + + /** + * @param string $cacheDir + * @param int $now + * @return string[] + */ + public function getExpiredPaths($cacheDir, $now) { + $files = scandir($cacheDir); + $files = array_filter($files, function ($file) { + return $file != '.' and $file != '..'; + }); + $paths = array_map(function ($file) use ($cacheDir) { + return $cacheDir . $file; + }, $files); + return array_values(array_filter($paths, function ($path) use ($now) { + return is_file($path) and (filemtime($path) < $now); + })); + } + + /** + * @param \OCP\IConfig $config + * @param string $cacheDir + */ + public function gc(IConfig $config, $cacheDir) { + $lastRun = $config->getAppValue('core', 'global_cache_gc_lastrun', 0); + $now = time(); + if (($now - $lastRun) < 300) { + // only do cleanup every 5 minutes + return; + } + $config->setAppValue('core', 'global_cache_gc_lastrun', $now); + if (!is_dir($cacheDir)) { + return; + } + array_walk($this->getExpiredPaths($cacheDir, $now), 'unlink'); } } diff --git a/lib/private/connector/sabre/custompropertiesbackend.php b/lib/private/connector/sabre/custompropertiesbackend.php index eaf13238b63..76ac8b84ef9 100644 --- a/lib/private/connector/sabre/custompropertiesbackend.php +++ b/lib/private/connector/sabre/custompropertiesbackend.php @@ -23,12 +23,14 @@ namespace OC\Connector\Sabre; -use \Sabre\DAV\PropFind; -use \Sabre\DAV\PropPatch; -use \Sabre\HTTP\RequestInterface; -use \Sabre\HTTP\ResponseInterface; +use OCP\IDBConnection; +use OCP\IUser; +use Sabre\DAV\PropertyStorage\Backend\BackendInterface; +use Sabre\DAV\PropFind; +use Sabre\DAV\PropPatch; +use Sabre\DAV\Tree; -class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\BackendInterface { +class CustomPropertiesBackend implements BackendInterface { /** * Ignored properties @@ -49,17 +51,17 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back ); /** - * @var \Sabre\DAV\Tree + * @var Tree */ private $tree; /** - * @var \OCP\IDBConnection + * @var IDBConnection */ private $connection; /** - * @var \OCP\IUser + * @var IUser */ private $user; @@ -71,14 +73,14 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back private $cache = []; /** - * @param \Sabre\DAV\Tree $tree node tree - * @param \OCP\IDBConnection $connection database connection - * @param \OCP\IUser $user owner of the tree and properties + * @param Tree $tree node tree + * @param IDBConnection $connection database connection + * @param IUser $user owner of the tree and properties */ public function __construct( - \Sabre\DAV\Tree $tree, - \OCP\IDBConnection $connection, - \OCP\IUser $user) { + Tree $tree, + IDBConnection $connection, + IUser $user) { $this->tree = $tree; $this->connection = $connection; $this->user = $user->getUID(); @@ -93,7 +95,7 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back */ public function propFind($path, PropFind $propFind) { $node = $this->tree->getNodeForPath($path); - if (!($node instanceof \OC\Connector\Sabre\Node)) { + if (!($node instanceof Node)) { return; } @@ -109,7 +111,7 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back return; } - if ($node instanceof \OC\Connector\Sabre\Directory + if ($node instanceof Directory && $propFind->getDepth() !== 0 ) { // note: pre-fetching only supported for depth <= 1 @@ -132,7 +134,7 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back */ public function propPatch($path, PropPatch $propPatch) { $node = $this->tree->getNodeForPath($path); - if (!($node instanceof \OC\Connector\Sabre\Node)) { + if (!($node instanceof Node)) { return; } @@ -175,7 +177,7 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back /** * Returns a list of properties for this nodes.; - * @param \OC\Connector\Sabre\Node $node + * @param Node $node * @param array $requestedProperties requested properties or empty array for "all" * @return array * @note The properties list is a list of propertynames the client @@ -183,7 +185,7 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back * http://www.example.org/namespace#author If the array is empty, all * properties should be returned */ - private function getProperties(\OC\Connector\Sabre\Node $node, array $requestedProperties) { + private function getProperties(Node $node, array $requestedProperties) { $path = $node->getPath(); if (isset($this->cache[$path])) { return $this->cache[$path]; @@ -222,7 +224,7 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back /** * Update properties * - * @param \OC\Connector\Sabre\Node $node node for which to update properties + * @param Node $node node for which to update properties * @param array $properties array of properties to update * * @return bool @@ -230,20 +232,14 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back private function updateProperties($node, $properties) { $path = $node->getPath(); - $deleteStatement = $this->connection->prepare( - 'DELETE FROM `*PREFIX*properties`' . - ' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' - ); + $deleteStatement = 'DELETE FROM `*PREFIX*properties`' . + ' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?'; - $insertStatement = $this->connection->prepare( - 'INSERT INTO `*PREFIX*properties`' . - ' (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' - ); + $insertStatement = 'INSERT INTO `*PREFIX*properties`' . + ' (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)'; - $updateStatement = $this->connection->prepare( - 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ?' . - ' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' - ); + $updateStatement = 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ?' . + ' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?'; // TODO: use "insert or update" strategy ? $existing = $this->getProperties($node, array()); @@ -252,18 +248,17 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back // If it was null, we need to delete the property if (is_null($propertyValue)) { if (array_key_exists($propertyName, $existing)) { - $deleteStatement->execute( + $this->connection->executeUpdate($deleteStatement, array( $this->user, $path, $propertyName ) ); - $deleteStatement->closeCursor(); } } else { if (!array_key_exists($propertyName, $existing)) { - $insertStatement->execute( + $this->connection->executeUpdate($insertStatement, array( $this->user, $path, @@ -271,9 +266,8 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back $propertyValue ) ); - $insertStatement->closeCursor(); } else { - $updateStatement->execute( + $this->connection->executeUpdate($updateStatement, array( $propertyValue, $this->user, @@ -281,7 +275,6 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back $propertyName ) ); - $updateStatement->closeCursor(); } } } @@ -295,12 +288,12 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back /** * Bulk load properties for directory children * - * @param \OC\Connector\Sabre\Directory $node + * @param Directory $node * @param array $requestedProperties requested properties * * @return void */ - private function loadChildrenProperties(\OC\Connector\Sabre\Directory $node, $requestedProperties) { + private function loadChildrenProperties(Directory $node, $requestedProperties) { $path = $node->getPath(); if (isset($this->cache[$path])) { // we already loaded them at some point @@ -322,7 +315,6 @@ class CustomPropertiesBackend implements \Sabre\DAV\PropertyStorage\Backend\Back array(null, null, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY) ); - $props = []; $oldPath = null; $props = []; while ($row = $result->fetch()) { diff --git a/lib/private/server.php b/lib/private/server.php index f6fa5387e49..bc9d11404a6 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -77,7 +77,7 @@ class Server extends SimpleContainer implements IServerContainer { return new PreviewManager(); }); $this->registerService('TagMapper', function(Server $c) { - return new TagMapper($c->getDb()); + return new TagMapper($c->getDatabaseConnection()); }); $this->registerService('TagManager', function (Server $c) { $tagMapper = $c->query('TagMapper'); @@ -655,7 +655,7 @@ class Server extends SimpleContainer implements IServerContainer { /** * Returns an instance of the db facade - * + * @deprecated use getDatabaseConnection, will be removed in ownCloud 10 * @return \OCP\IDb */ function getDb() { diff --git a/lib/private/tagging/tagmapper.php b/lib/private/tagging/tagmapper.php index dbeb5526524..ed9b8af25d2 100644 --- a/lib/private/tagging/tagmapper.php +++ b/lib/private/tagging/tagmapper.php @@ -22,7 +22,7 @@ namespace OC\Tagging; use \OCP\AppFramework\Db\Mapper, \OCP\AppFramework\Db\DoesNotExistException, - \OCP\IDb; + \OCP\IDBConnection; /** * Mapper for Tag entity @@ -32,9 +32,9 @@ class TagMapper extends Mapper { /** * Constructor. * - * @param IDb $db Instance of the Db abstraction layer. + * @param IDBConnection $db Instance of the Db abstraction layer. */ - public function __construct(IDb $db) { + public function __construct(IDBConnection $db) { parent::__construct($db, 'vcategory', 'OC\Tagging\Tag'); } diff --git a/lib/private/tagmanager.php b/lib/private/tagmanager.php index 9bc461f25eb..1c7ace11469 100644 --- a/lib/private/tagmanager.php +++ b/lib/private/tagmanager.php @@ -65,6 +65,11 @@ class TagManager implements \OCP\ITagManager { */ public function load($type, $defaultTags = array(), $includeShared = false, $userId = null) { if (is_null($userId)) { + $user = $this->userSession->getUser(); + if ($user === null) { + // nothing we can do without a user + return null; + } $userId = $this->userSession->getUser()->getUId(); } return new Tags($this->mapper, $userId, $type, $defaultTags, $includeShared); diff --git a/lib/private/user/manager.php b/lib/private/user/manager.php index 33858dfd9dd..c965b22edbc 100644 --- a/lib/private/user/manager.php +++ b/lib/private/user/manager.php @@ -181,10 +181,7 @@ class Manager extends PublicEmitter implements IUserManager { } } - $remoteAddr = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; - $forwardedFor = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : ''; - - \OC::$server->getLogger()->warning('Login failed: \''. $loginname .'\' (Remote IP: \''. $remoteAddr .'\', X-Forwarded-For: \''. $forwardedFor .'\')', array('app' => 'core')); + \OC::$server->getLogger()->warning('Login failed: \''. $loginname .'\' (Remote IP: \''. \OC::$server->getRequest()->getRemoteAddress(). ')', ['app' => 'core']); return false; } diff --git a/lib/private/util.php b/lib/private/util.php index 8ffb9e35bad..68b248f0003 100644 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -1287,16 +1287,6 @@ class OC_Util { } /** - * Checks if a secure random number generator is available - * - * @return true - * @deprecated Function will be removed in the future and does only return true. - */ - public static function secureRNGAvailable() { - return true; - } - - /** * Get URL content * @param string $url Url to get content * @deprecated Use \OC::$server->getHTTPHelper()->getUrlContent($url); |