From 55b22a95a72247f1d19a0074393582c189a2f979 Mon Sep 17 00:00:00 2001 From: Vladimir Tsykun Date: Fri, 3 Jan 2020 20:03:30 +0300 Subject: [PATCH] Minor changes in webhooks --- .../WebBundle/Repository/PackageRepository.php | 18 +++++++++++------- .../WebBundle/Repository/VersionRepository.php | 2 +- .../Resources/config/twig_sandbox.yml | 2 +- .../WebBundle/Webhook/HookTestAction.php | 7 ++++--- .../WebBundle/Webhook/SenderWorker.php | 2 +- .../Webhook/Twig/WebhookExtension.php | 4 ++-- 6 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/Packagist/WebBundle/Repository/PackageRepository.php b/src/Packagist/WebBundle/Repository/PackageRepository.php index c8dbedcf..891fd380 100644 --- a/src/Packagist/WebBundle/Repository/PackageRepository.php +++ b/src/Packagist/WebBundle/Repository/PackageRepository.php @@ -461,13 +461,17 @@ function ($item) { private function checkExtension($extensionName) { $conn = $this->getEntityManager()->getConnection(); - $count = $conn - ->executeQuery( - 'SELECT COUNT(1) as v FROM pg_extension WHERE extname = :name', - [ - 'name' => $extensionName - ] - )->fetch(); + try { + $count = $conn + ->executeQuery( + 'SELECT COUNT(1) as v FROM pg_extension WHERE extname = :name', + [ + 'name' => $extensionName + ] + )->fetch(); + } catch (\Exception $exception) { + return false; + } return isset($count['v']) && $count['v'] === 1; } diff --git a/src/Packagist/WebBundle/Repository/VersionRepository.php b/src/Packagist/WebBundle/Repository/VersionRepository.php index dc71d4cb..0dc04be6 100644 --- a/src/Packagist/WebBundle/Repository/VersionRepository.php +++ b/src/Packagist/WebBundle/Repository/VersionRepository.php @@ -217,7 +217,7 @@ public function getPreviousRelease(string $package, string $version) $result = null; $versions = $versions ? array_column($versions, 'version') : null; foreach ($versions as $candidate) { - if (version_compare($version, $candidate) < 0) { + if (version_compare($version, $candidate) <= 0) { continue; } if ($result === null || version_compare($result, $candidate) < 0) { diff --git a/src/Packagist/WebBundle/Resources/config/twig_sandbox.yml b/src/Packagist/WebBundle/Resources/config/twig_sandbox.yml index 144efe6c..5eda871b 100644 --- a/src/Packagist/WebBundle/Resources/config/twig_sandbox.yml +++ b/src/Packagist/WebBundle/Resources/config/twig_sandbox.yml @@ -1,5 +1,5 @@ parameters: - security_policy_tags: ['app', 'for', 'if', 'spaceless', 'set', 'apply', 'verbatim'] + security_policy_tags: ['app', 'for', 'if', 'spaceless', 'set', 'do', 'apply', 'verbatim'] security_policy_functions: ['attribute', 'cycle', 'date', 'max', 'min', 'random', 'range', 'constant'] security_policy_methods: [] security_policy_forbidden_classes: diff --git a/src/Packagist/WebBundle/Webhook/HookTestAction.php b/src/Packagist/WebBundle/Webhook/HookTestAction.php index 5eb95bb5..c1685b39 100644 --- a/src/Packagist/WebBundle/Webhook/HookTestAction.php +++ b/src/Packagist/WebBundle/Webhook/HookTestAction.php @@ -122,10 +122,11 @@ private function processChildWebhook(Webhook $webhook, array $context, HttpClien if (isset($runtimeContext[WebhookContext::CHILD_WEBHOOK])) { /** @var Webhook $childHook */ foreach ($runtimeContext[WebhookContext::CHILD_WEBHOOK] as list($childHook, $childContext)) { - if (null !== $childHook->getOwner() && $childHook->getOwner() !== $webhook->getOwner()) { + if (null !== $childHook->getOwner() && $childHook->getVisibility() === Webhook::USER_VISIBLE && $childHook->getOwner() !== $webhook->getOwner()) { + $response[] = new HookErrorResponse('You can not call private webhooks of another user owner, please check nesting webhook visibility'); continue; } - $child = $this->processChildWebhook($webhook, $childContext, $client, $nestingLevel+1); + $child = $this->processChildWebhook($childHook, $childContext, $client, $nestingLevel+1); $response = array_merge($response, $child); } } @@ -159,7 +160,7 @@ private function selectVersion(array &$data): void $collection = $collection->filter(function (Version $version) use ($versions) { return in_array($version->getVersion(), $versions); }); - $data['versions'] = $collection->toArray(); + $data['versions'] = array_values($collection->toArray()); } elseif ($ver = $collection->first()) { $data['versions'] = [$ver]; } else { diff --git a/src/Packagist/WebBundle/Webhook/SenderWorker.php b/src/Packagist/WebBundle/Webhook/SenderWorker.php index 67f101d2..308bd9d5 100644 --- a/src/Packagist/WebBundle/Webhook/SenderWorker.php +++ b/src/Packagist/WebBundle/Webhook/SenderWorker.php @@ -77,7 +77,7 @@ private function processChildWebhook(Webhook $parent, int $nestingLevel, array { /** @var Webhook $hook */ foreach ($child as list($hook, $context)) { - if (null !== $hook->getOwner() && $hook->getOwner() !== $parent->getOwner()) { + if (null !== $hook->getOwner() && $hook->getVisibility() === Webhook::USER_VISIBLE && $hook->getOwner() !== $parent->getOwner()) { continue; } diff --git a/src/Packagist/WebBundle/Webhook/Twig/WebhookExtension.php b/src/Packagist/WebBundle/Webhook/Twig/WebhookExtension.php index 6471a87b..7dbaaf57 100644 --- a/src/Packagist/WebBundle/Webhook/Twig/WebhookExtension.php +++ b/src/Packagist/WebBundle/Webhook/Twig/WebhookExtension.php @@ -67,7 +67,7 @@ public function hook_function_get_changelog($package, $fromVersion = null, $toVe } if (!is_string($fromVersion)) { - $toVersion = $this->registry->getRepository(Version::class) + $fromVersion = $this->registry->getRepository(Version::class) ->getPreviousRelease($package->getName(), $toVersion); } if ($toVersion && $fromVersion) { @@ -77,7 +77,7 @@ public function hook_function_get_changelog($package, $fromVersion = null, $toVe return []; } - public function hook_function_preg_match_all($regex, $content, $matchOffset = 1) + public function hook_function_preg_match_all($regex, $content, $matchOffset = null) { try { @preg_match_all($regex, $content, $matches);