diff options
author | Joas Schilling <coding@schilljs.com> | 2016-08-19 10:34:45 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2016-08-19 12:23:05 +0200 |
commit | a111181eb32750d9701df3d6025cfe97960ba9f3 (patch) | |
tree | 6c624464db7dfa93d357985fcdcc5a9eeead779c | |
parent | 6d4ede3e84a95340f3a2c51c57384d30d8467f8a (diff) | |
download | nextcloud-server-a111181eb32750d9701df3d6025cfe97960ba9f3.tar.gz nextcloud-server-a111181eb32750d9701df3d6025cfe97960ba9f3.zip |
Validate the operation
-rw-r--r-- | apps/workflowengine/lib/Manager.php | 48 | ||||
-rw-r--r-- | lib/public/WorkflowEngine/IOperation.php | 39 |
2 files changed, 82 insertions, 5 deletions
diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php index b72836a919c..9140ef73ea7 100644 --- a/apps/workflowengine/lib/Manager.php +++ b/apps/workflowengine/lib/Manager.php @@ -30,6 +30,7 @@ use OCP\IL10N; use OCP\IServerContainer; use OCP\WorkflowEngine\ICheck; use OCP\WorkflowEngine\IManager; +use OCP\WorkflowEngine\IOperation; class Manager implements IManager { @@ -176,6 +177,8 @@ class Manager implements IManager { * @throws \UnexpectedValueException */ public function addOperation($class, $name, array $checks, $operation) { + $this->validateOperation($class, $name, $checks, $operation); + $checkIds = []; foreach ($checks as $check) { $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']); @@ -204,6 +207,9 @@ class Manager implements IManager { * @throws \UnexpectedValueException */ public function updateOperation($id, $name, array $checks, $operation) { + $row = $this->getOperation($id); + $this->validateOperation($row['class'], $name, $checks, $operation); + $checkIds = []; foreach ($checks as $check) { $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']); @@ -233,6 +239,43 @@ class Manager implements IManager { } /** + * @param string $class + * @param string $name + * @param array[] $checks + * @param string $operation + * @throws \UnexpectedValueException + */ + protected function validateOperation($class, $name, array $checks, $operation) { + try { + /** @var IOperation $instance */ + $instance = $this->container->query($class); + } catch (QueryException $e) { + throw new \UnexpectedValueException($this->l->t('Operation %s does not exist', $class)); + } + + if (!($instance instanceof IOperation)) { + throw new \UnexpectedValueException($this->l->t('Operation %s is invalid', $class)); + } + + $instance->validateOperation($name, $checks, $operation); + + foreach ($checks as $check) { + try { + /** @var ICheck $instance */ + $instance = $this->container->query($check['class']); + } catch (QueryException $e) { + throw new \UnexpectedValueException($this->l->t('Check %s does not exist', $class)); + } + + if (!($instance instanceof ICheck)) { + throw new \UnexpectedValueException($this->l->t('Check %s is invalid', $class)); + } + + $instance->validateCheck($check['operator'], $check['value']); + } + } + + /** * @param int[] $checkIds * @return array[] */ @@ -279,13 +322,8 @@ class Manager implements IManager { * @param string $operator * @param string $value * @return int Check unique ID - * @throws \UnexpectedValueException */ protected function addCheck($class, $operator, $value) { - /** @var ICheck $check */ - $check = $this->container->query($class); - $check->validateCheck($operator, $value); - $hash = md5($class . '::' . $operator . '::' . $value); $query = $this->connection->getQueryBuilder(); diff --git a/lib/public/WorkflowEngine/IOperation.php b/lib/public/WorkflowEngine/IOperation.php new file mode 100644 index 00000000000..c75e5d940c5 --- /dev/null +++ b/lib/public/WorkflowEngine/IOperation.php @@ -0,0 +1,39 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\WorkflowEngine; + +/** + * Interface IOperation + * + * @package OCP\WorkflowEngine + * @since 9.1 + */ +interface IOperation { + /** + * @param string $name + * @param array[] $checks + * @param string $operation + * @throws \UnexpectedValueException + * @since 9.1 + */ + public function validateOperation($name, array $checks, $operation); +} |