Merge pull request #22410 from nextcloud/backport/22359/stable19
[stable19] fix possible leaking scope in Flow
This commit is contained in:
commit
c9a1379bdf
|
@ -95,6 +95,7 @@ class Application extends \OCP\AppFramework\App {
|
|||
/** @var IOperation $operation */
|
||||
$operation = $this->getContainer()->query($operationClass);
|
||||
|
||||
$ruleMatcher->setEventName($eventName);
|
||||
$ruleMatcher->setEntity($entity);
|
||||
$ruleMatcher->setOperation($operation);
|
||||
|
||||
|
|
|
@ -62,6 +62,8 @@ class RuleMatcher implements IRuleMatcher {
|
|||
protected $entity;
|
||||
/** @var Logger */
|
||||
protected $logger;
|
||||
/** @var string */
|
||||
protected $eventName;
|
||||
|
||||
public function __construct(
|
||||
IUserSession $session,
|
||||
|
@ -101,6 +103,13 @@ class RuleMatcher implements IRuleMatcher {
|
|||
$this->entity = $entity;
|
||||
}
|
||||
|
||||
public function setEventName(string $eventName): void {
|
||||
if ($this->eventName !== null) {
|
||||
throw new RuntimeException('This method must not be called more than once');
|
||||
}
|
||||
$this->eventName = $eventName;
|
||||
}
|
||||
|
||||
public function getEntity(): IEntity {
|
||||
if ($this->entity === null) {
|
||||
throw new \LogicException('Entity was not set yet');
|
||||
|
@ -155,6 +164,11 @@ class RuleMatcher implements IRuleMatcher {
|
|||
|
||||
$matches = [];
|
||||
foreach ($operations as $operation) {
|
||||
$configuredEvents = json_decode($operation['events'], true);
|
||||
if ($this->eventName !== null && !in_array($this->eventName, $configuredEvents)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$checkIds = json_decode($operation['checks'], true);
|
||||
$checks = $this->manager->getChecks($checkIds);
|
||||
|
||||
|
|
|
@ -78,4 +78,14 @@ interface IRuleMatcher extends IFileCheck {
|
|||
* @since 18.0.0
|
||||
*/
|
||||
public function getEntity(): IEntity;
|
||||
|
||||
/**
|
||||
* this method can be called once to set the event name that is currently
|
||||
* being processed. The workflow engine takes care of this usually, only an
|
||||
* IComplexOperation might want to make use of it.
|
||||
*
|
||||
* @throws RuntimeException
|
||||
* @since 19.0.3
|
||||
*/
|
||||
public function setEventName(string $eventName): void;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue