diff options
author | Morris Jobke <hey@morrisjobke.de> | 2017-07-24 15:03:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-24 15:03:15 +0200 |
commit | e785b849c71ebc980c5dc17f9c4c470fe0a7404a (patch) | |
tree | c0287817f22e2f0dc10aa335af506584b8b59e24 /apps | |
parent | c775d5e49792759e8055348ab33f61e1ced26c9d (diff) | |
parent | 25c36be9010486b31315b9c4272e6d7385b07dc2 (diff) | |
download | nextcloud-server-e785b849c71ebc980c5dc17f9c4c470fe0a7404a.tar.gz nextcloud-server-e785b849c71ebc980c5dc17f9c4c470fe0a7404a.zip |
Merge pull request #5835 from nextcloud/cleanup_testing_app
Cleanup testing app
Diffstat (limited to 'apps')
-rw-r--r-- | apps/testing/appinfo/app.php | 2 | ||||
-rw-r--r-- | apps/testing/appinfo/routes.php | 118 | ||||
-rw-r--r-- | apps/testing/lib/AppInfo/Application.php (renamed from apps/testing/lib/Application.php) | 2 | ||||
-rw-r--r-- | apps/testing/lib/Controller/ConfigController.php (renamed from apps/testing/lib/Config.php) | 50 | ||||
-rw-r--r-- | apps/testing/lib/Controller/LockingController.php | 246 | ||||
-rw-r--r-- | apps/testing/lib/Locking/FakeDBLockingProvider.php (renamed from apps/testing/locking/fakedblockingprovider.php) | 0 | ||||
-rw-r--r-- | apps/testing/locking/provisioning.php | 227 |
7 files changed, 330 insertions, 315 deletions
diff --git a/apps/testing/appinfo/app.php b/apps/testing/appinfo/app.php index 402889f2674..5dce74bf786 100644 --- a/apps/testing/appinfo/app.php +++ b/apps/testing/appinfo/app.php @@ -19,5 +19,5 @@ * */ -$app = new \OCA\Testing\Application(); +$app = new \OCA\Testing\AppInfo\Application(); diff --git a/apps/testing/appinfo/routes.php b/apps/testing/appinfo/routes.php index d45cfe00eca..3e5fda4fc14 100644 --- a/apps/testing/appinfo/routes.php +++ b/apps/testing/appinfo/routes.php @@ -20,63 +20,63 @@ * */ -namespace OCA\Testing\AppInfo; +return [ + 'routes' => [ + [ + 'name' => 'RateLimitTest#userAndAnonProtected', + 'url' => '/userAndAnonProtected', + 'verb' => 'GET', + ], + [ + 'name' => 'RateLimitTest#onlyAnonProtected', + 'url' => '/anonProtected', + 'verb' => 'GET', + ], + ], -use OCA\Testing\Config; -use OCA\Testing\Locking\Provisioning; -use OCP\API; -use OCP\AppFramework\App; - -$config = new Config( - \OC::$server->getConfig(), - \OC::$server->getRequest() -); - -$app = new App('testing'); -$app->registerRoutes( - $this, - [ - 'routes' => [ - [ - 'name' => 'RateLimitTest#userAndAnonProtected', - 'url' => '/userAndAnonProtected', - 'verb' => 'GET', - ], - [ - 'name' => 'RateLimitTest#onlyAnonProtected', - 'url' => '/anonProtected', - 'verb' => 'GET', - ], - ] - ] -); - -API::register( - 'post', - '/apps/testing/api/v1/app/{appid}/{configkey}', - [$config, 'setAppValue'], - 'testing', - API::ADMIN_AUTH -); - -API::register( - 'delete', - '/apps/testing/api/v1/app/{appid}/{configkey}', - [$config, 'deleteAppValue'], - 'testing', - API::ADMIN_AUTH -); - -$locking = new Provisioning( - \OC::$server->getLockingProvider(), - \OC::$server->getDatabaseConnection(), - \OC::$server->getConfig(), - \OC::$server->getRequest() -); -API::register('get', '/apps/testing/api/v1/lockprovisioning', [$locking, 'isLockingEnabled'], 'files_lockprovisioning', API::ADMIN_AUTH); -API::register('get', '/apps/testing/api/v1/lockprovisioning/{type}/{user}', [$locking, 'isLocked'], 'files_lockprovisioning', API::ADMIN_AUTH); -API::register('post', '/apps/testing/api/v1/lockprovisioning/{type}/{user}', [$locking, 'acquireLock'], 'files_lockprovisioning', API::ADMIN_AUTH); -API::register('put', '/apps/testing/api/v1/lockprovisioning/{type}/{user}', [$locking, 'changeLock'], 'files_lockprovisioning', API::ADMIN_AUTH); -API::register('delete', '/apps/testing/api/v1/lockprovisioning/{type}/{user}', [$locking, 'releaseLock'], 'files_lockprovisioning', API::ADMIN_AUTH); -API::register('delete', '/apps/testing/api/v1/lockprovisioning/{type}', [$locking, 'releaseAll'], 'files_lockprovisioning', API::ADMIN_AUTH); -API::register('delete', '/apps/testing/api/v1/lockprovisioning', [$locking, 'releaseAll'], 'files_lockprovisioning', API::ADMIN_AUTH); + 'ocs' => [ + [ + 'name' => 'Config#setAppValue', + 'url' => '/api/v1/app/{appid}/{configkey}', + 'verb' => 'POST', + ], + [ + 'name' => 'Config#deleteAppValue', + 'url' => '/api/v1/app/{appid}/{configkey}', + 'verb' => 'DELETE', + ], + [ + 'name' => 'Locking#isLockingEnabled', + 'url' => '/api/v1/lockprovisioning', + 'verb' => 'GET', + ], + [ + 'name' => 'Locking#isLocked', + 'url' => '/api/v1/lockprovisioning/{type}/{user}', + 'verb' => 'GET', + ], + [ + 'name' => 'Locking#acquireLock', + 'url' => '/api/v1/lockprovisioning/{type}/{user}', + 'verb' => 'POST', + ], + [ + 'name' => 'Locking#changeLock', + 'url' => '/api/v1/lockprovisioning/{type}/{user}', + 'verb' => 'PUT', + ], + [ + 'name' => 'Locking#releaseLock', + 'url' => '/api/v1/lockprovisioning/{type}/{user}', + 'verb' => 'DELETE', + ], + [ + 'name' => 'Locking#releaseAll', + 'url' => '/api/v1/lockprovisioning/{type}', + 'verb' => 'DELETE', + 'defaults' => [ + 'type' => null + ] + ], + ], +]; diff --git a/apps/testing/lib/Application.php b/apps/testing/lib/AppInfo/Application.php index 8f42d0442dd..9d2b100e8b0 100644 --- a/apps/testing/lib/Application.php +++ b/apps/testing/lib/AppInfo/Application.php @@ -19,7 +19,7 @@ * */ -namespace OCA\Testing; +namespace OCA\Testing\AppInfo; use OCP\AppFramework\App; use OCA\Testing\AlternativeHomeUserBackend; diff --git a/apps/testing/lib/Config.php b/apps/testing/lib/Controller/ConfigController.php index 6cdd28d4b3e..7b3e73ab173 100644 --- a/apps/testing/lib/Config.php +++ b/apps/testing/lib/Controller/ConfigController.php @@ -20,52 +20,48 @@ * */ -namespace OCA\Testing; +namespace OCA\Testing\Controller; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCSController; use OCP\IConfig; use OCP\IRequest; -class Config { +class ConfigController extends OCSController { /** @var IConfig */ private $config; - /** @var IRequest */ - private $request; - /** - * @param IConfig $config + * @param string $appName * @param IRequest $request + * @param IConfig $config */ - public function __construct(IConfig $config, IRequest $request) { + public function __construct($appName, + IRequest $request, + IConfig $config) { + parent::__construct($appName, $request); $this->config = $config; - $this->request = $request; } /** - * @param array $parameters - * @return \OC_OCS_Result + * @param string $appid + * @param string $configkey + * @param string $value + * @return DataResponse */ - public function setAppValue($parameters) { - $app = $parameters['appid']; - $configKey = $parameters['configkey']; - - $value = $this->request->getParam('value'); - $this->config->setAppValue($app, $configKey, $value); - - return new \OC_OCS_Result(); + public function setAppValue($appid, $configkey, $value) { + $this->config->setAppValue($appid, $configkey, $value); + return new DataResponse(); } /** - * @param array $parameters - * @return \OC_OCS_Result + * @param string $appid + * @param string $configkey + * @return DataResponse */ - public function deleteAppValue($parameters) { - $app = $parameters['appid']; - $configKey = $parameters['configkey']; - - $this->config->deleteAppValue($app, $configKey); - - return new \OC_OCS_Result(); + public function deleteAppValue($appid, $configkey) { + $this->config->deleteAppValue($appid, $configkey); + return new DataResponse(); } } diff --git a/apps/testing/lib/Controller/LockingController.php b/apps/testing/lib/Controller/LockingController.php new file mode 100644 index 00000000000..6056d9d5d7e --- /dev/null +++ b/apps/testing/lib/Controller/LockingController.php @@ -0,0 +1,246 @@ +<?php +/** + * @copyright Copyright (c) 2016, ownCloud, Inc. + * + * @author Joas Schilling <coding@schilljs.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\Testing\Controller; + +use OC\Lock\DBLockingProvider; +use OC\User\NoUserException; +use OCA\Testing\Locking\FakeDBLockingProvider; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCSController; +use OCP\Files\IRootFolder; +use OCP\Files\NotFoundException; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IRequest; +use OCP\Lock\ILockingProvider; +use OCP\Lock\LockedException; + +class LockingController extends OCSController { + + /** @var ILockingProvider */ + protected $lockingProvider; + + /** @var FakeDBLockingProvider */ + protected $fakeDBLockingProvider; + + /** @var IDBConnection */ + protected $connection; + + /** @var IConfig */ + protected $config; + + /** @var IRootFolder */ + protected $rootFolder; + + /** + * @param string $appName + * @param IRequest $request + * @param ILockingProvider $lockingProvider + * @param FakeDBLockingProvider $fakeDBLockingProvider + * @param IDBConnection $connection + * @param IConfig $config + * @param IRootFolder $rootFolder + */ + public function __construct($appName, + IRequest $request, + ILockingProvider $lockingProvider, + FakeDBLockingProvider $fakeDBLockingProvider, + IDBConnection $connection, + IConfig $config, + IRootFolder $rootFolder) { + parent::__construct($appName, $request); + + $this->lockingProvider = $lockingProvider; + $this->fakeDBLockingProvider = $fakeDBLockingProvider; + $this->connection = $connection; + $this->config = $config; + $this->rootFolder = $rootFolder; + } + + /** + * @return ILockingProvider + * @throws \RuntimeException + */ + protected function getLockingProvider() { + if ($this->lockingProvider instanceof DBLockingProvider) { + return $this->fakeDBLockingProvider; + } + throw new \RuntimeException('Lock provisioning is only possible using the DBLockingProvider'); + } + + /** + * @param string $user + * @param string $path + * @return string + * @throws NotFoundException + */ + protected function getPath($user, $path) { + $node = $this->rootFolder->getUserFolder($user)->get($path); + return 'files/' . md5($node->getStorage()->getId() . '::' . trim($node->getInternalPath(), '/')); + } + + /** + * @return DataResponse + * @throws OCSException + */ + public function isLockingEnabled() { + try { + $this->getLockingProvider(); + return new DataResponse(); + } catch (\RuntimeException $e) { + throw new OCSException($e->getMessage(), Http::STATUS_NOT_IMPLEMENTED, $e); + } + } + + /** + * @param int $type + * @param string $user + * @param string $path + * @return DataResponse + * @throws OCSException + */ + public function acquireLock($type, $user, $path) { + try { + $path = $this->getPath($user, $path); + } catch (NoUserException $e) { + throw new OCSException('User not found', Http::STATUS_NOT_FOUND, $e); + } catch (NotFoundException $e) { + throw new OCSException('Path not found', Http::STATUS_NOT_FOUND, $e); + } + + $lockingProvider = $this->getLockingProvider(); + + try { + $lockingProvider->acquireLock($path, $type); + $this->config->setAppValue('testing', 'locking_' . $path, $type); + return new DataResponse(); + } catch (LockedException $e) { + throw new OCSException('', Http::STATUS_LOCKED, $e); + } + } + + /** + * @param int $type + * @param string $user + * @param string $path + * @return DataResponse + * @throws OCSException + */ + public function changeLock($type, $user, $path) { + try { + $path = $this->getPath($user, $path); + } catch (NoUserException $e) { + throw new OCSException('User not found', Http::STATUS_NOT_FOUND, $e); + } catch (NotFoundException $e) { + throw new OCSException('Path not found', Http::STATUS_NOT_FOUND, $e); + } + + $lockingProvider = $this->getLockingProvider(); + + try { + $lockingProvider->changeLock($path, $type); + $this->config->setAppValue('testing', 'locking_' . $path, $type); + return new DataResponse(); + } catch (LockedException $e) { + throw new OCSException('', Http::STATUS_LOCKED, $e); + } + } + + /** + * @param int $type + * @param string $user + * @param string $path + * @return DataResponse + * @throws OCSException + */ + public function releaseLock($type, $user, $path) { + try { + $path = $this->getPath($user, $path); + } catch (NoUserException $e) { + throw new OCSException('User not found', Http::STATUS_NOT_FOUND, $e); + } catch (NotFoundException $e) { + throw new OCSException('Path not found', Http::STATUS_NOT_FOUND, $e); + } + + $lockingProvider = $this->getLockingProvider(); + + try { + $lockingProvider->releaseLock($path, $type); + $this->config->deleteAppValue('testing', 'locking_' . $path); + return new DataResponse(); + } catch (LockedException $e) { + throw new OCSException('', Http::STATUS_LOCKED, $e); + } + } + + /** + * @param int $type + * @param string $user + * @param string $path + * @return DataResponse + * @throws OCSException + */ + public function isLocked($type, $user, $path) { + try { + $path = $this->getPath($user, $path); + } catch (NoUserException $e) { + throw new OCSException('User not found', Http::STATUS_NOT_FOUND, $e); + } catch (NotFoundException $e) { + throw new OCSException('Path not found', Http::STATUS_NOT_FOUND, $e); + } + + $lockingProvider = $this->getLockingProvider(); + + if ($lockingProvider->isLocked($path, $type)) { + return new DataResponse(); + } + + throw new OCSException('', Http::STATUS_LOCKED); + } + + /** + * @param int $type + * @return DataResponse + */ + public function releaseAll($type = null) { + $lockingProvider = $this->getLockingProvider(); + + foreach ($this->config->getAppKeys('testing') as $lock) { + if (strpos($lock, 'locking_') === 0) { + $path = substr($lock, strlen('locking_')); + + if ($type === ILockingProvider::LOCK_EXCLUSIVE && (int)$this->config->getAppValue('testing', $lock) === ILockingProvider::LOCK_EXCLUSIVE) { + $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); + } else if ($type === ILockingProvider::LOCK_SHARED && (int)$this->config->getAppValue('testing', $lock) === ILockingProvider::LOCK_SHARED) { + $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); + } else { + $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); + } + } + } + + return new DataResponse(); + } +} diff --git a/apps/testing/locking/fakedblockingprovider.php b/apps/testing/lib/Locking/FakeDBLockingProvider.php index 174cc2ec7fe..174cc2ec7fe 100644 --- a/apps/testing/locking/fakedblockingprovider.php +++ b/apps/testing/lib/Locking/FakeDBLockingProvider.php diff --git a/apps/testing/locking/provisioning.php b/apps/testing/locking/provisioning.php deleted file mode 100644 index 7e3256ec605..00000000000 --- a/apps/testing/locking/provisioning.php +++ /dev/null @@ -1,227 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Joas Schilling <coding@schilljs.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OCA\Testing\Locking; - -use OC\Lock\DBLockingProvider; -use OC\User\NoUserException; -use OCP\AppFramework\Http; -use OCP\Files\NotFoundException; -use OCP\IConfig; -use OCP\IDBConnection; -use OCP\IRequest; -use OCP\Lock\ILockingProvider; -use OCP\Lock\LockedException; - -class Provisioning { - - /** @var ILockingProvider */ - protected $lockingProvider; - - /** @var IDBConnection */ - protected $connection; - - /** @var IConfig */ - protected $config; - - /** @var IRequest */ - protected $request; - - /** - * @param ILockingProvider $lockingProvider - * @param IDBConnection $connection - * @param IConfig $config - * @param IRequest $request - */ - public function __construct(ILockingProvider $lockingProvider, IDBConnection $connection, IConfig $config, IRequest $request) { - $this->lockingProvider = $lockingProvider; - $this->connection = $connection; - $this->config = $config; - $this->request = $request; - } - - /** - * @return ILockingProvider - */ - protected function getLockingProvider() { - if ($this->lockingProvider instanceof DBLockingProvider) { - return \OC::$server->query('OCA\Testing\Locking\FakeDBLockingProvider'); - } else { - throw new \RuntimeException('Lock provisioning is only possible using the DBLockingProvider'); - } - } - - /** - * @param array $parameters - * @return int - */ - protected function getType($parameters) { - return isset($parameters['type']) ? (int) $parameters['type'] : 0; - } - - /** - * @param array $parameters - * @return int - */ - protected function getPath($parameters) { - $node = \OC::$server->getRootFolder() - ->getUserFolder($parameters['user']) - ->get($this->request->getParam('path')); - return 'files/' . md5($node->getStorage()->getId() . '::' . trim($node->getInternalPath(), '/')); - } - - /** - * @return \OC_OCS_Result - */ - public function isLockingEnabled() { - try { - $this->getLockingProvider(); - return new \OC_OCS_Result(null, 100); - } catch (\RuntimeException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_IMPLEMENTED, $e->getMessage()); - } - } - - /** - * @param array $parameters - * @return \OC_OCS_Result - */ - public function acquireLock(array $parameters) { - try { - $path = $this->getPath($parameters); - } catch (NoUserException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'User not found'); - } catch (NotFoundException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'Path not found'); - } - $type = $this->getType($parameters); - - $lockingProvider = $this->getLockingProvider(); - - try { - $lockingProvider->acquireLock($path, $type); - $this->config->setAppValue('testing', 'locking_' . $path, $type); - return new \OC_OCS_Result(null, 100); - } catch (LockedException $e) { - return new \OC_OCS_Result(null, Http::STATUS_LOCKED); - } - } - - /** - * @param array $parameters - * @return \OC_OCS_Result - */ - public function changeLock(array $parameters) { - try { - $path = $this->getPath($parameters); - } catch (NoUserException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'User not found'); - } catch (NotFoundException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'Path not found'); - } - $type = $this->getType($parameters); - - $lockingProvider = $this->getLockingProvider(); - - try { - $lockingProvider->changeLock($path, $type); - $this->config->setAppValue('testing', 'locking_' . $path, $type); - return new \OC_OCS_Result(null, 100); - } catch (LockedException $e) { - return new \OC_OCS_Result(null, Http::STATUS_LOCKED); - } - } - - /** - * @param array $parameters - * @return \OC_OCS_Result - */ - public function releaseLock(array $parameters) { - try { - $path = $this->getPath($parameters); - } catch (NoUserException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'User not found'); - } catch (NotFoundException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'Path not found'); - } - $type = $this->getType($parameters); - - $lockingProvider = $this->getLockingProvider(); - - try { - $lockingProvider->releaseLock($path, $type); - $this->config->deleteAppValue('testing', 'locking_' . $path); - return new \OC_OCS_Result(null, 100); - } catch (LockedException $e) { - return new \OC_OCS_Result(null, Http::STATUS_LOCKED); - } - } - - /** - * @param array $parameters - * @return \OC_OCS_Result - */ - public function isLocked(array $parameters) { - try { - $path = $this->getPath($parameters); - } catch (NoUserException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'User not found'); - } catch (NotFoundException $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND, 'Path not found'); - } - $type = $this->getType($parameters); - - $lockingProvider = $this->getLockingProvider(); - - if ($lockingProvider->isLocked($path, $type)) { - return new \OC_OCS_Result(null, 100); - } - - return new \OC_OCS_Result(null, Http::STATUS_LOCKED); - } - - /** - * @param array $parameters - * @return \OC_OCS_Result - */ - public function releaseAll(array $parameters) { - $type = $this->getType($parameters); - - $lockingProvider = $this->getLockingProvider(); - - foreach ($this->config->getAppKeys('testing') as $lock) { - if (strpos($lock, 'locking_') === 0) { - $path = substr($lock, strlen('locking_')); - - if ($type === ILockingProvider::LOCK_EXCLUSIVE && $this->config->getAppValue('testing', $lock) == ILockingProvider::LOCK_EXCLUSIVE) { - $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); - } else if ($type === ILockingProvider::LOCK_SHARED && $this->config->getAppValue('testing', $lock) == ILockingProvider::LOCK_SHARED) { - $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); - } else { - $lockingProvider->releaseLock($path, $this->config->getAppValue('testing', $lock)); - } - } - } - - return new \OC_OCS_Result(null, 100); - } -} |