From 58c9abd35a170ce421e07e6954d3c865dc15a337 Mon Sep 17 00:00:00 2001 From: Kunal Sachdev <57170-kunal.sachdev@users.noreply.drupalcode.org> Date: Wed, 26 Apr 2023 13:37:45 +0000 Subject: [PATCH] Issue #3354594 by kunal.sachdev: Merge ComposerSettingsValidator into ComposerValidator --- package_manager/package_manager.services.yml | 4 - .../Validator/ComposerSettingsValidator.php | 91 ------------------- .../src/Validator/ComposerValidator.php | 38 +++++++- ...atorTest.php => ComposerValidatorTest.php} | 4 +- 4 files changed, 39 insertions(+), 98 deletions(-) delete mode 100644 package_manager/src/Validator/ComposerSettingsValidator.php rename package_manager/tests/src/Kernel/{ComposerSettingsValidatorTest.php => ComposerValidatorTest.php} (96%) diff --git a/package_manager/package_manager.services.yml b/package_manager/package_manager.services.yml index 28b08b69ba..f7ef38a037 100644 --- a/package_manager/package_manager.services.yml +++ b/package_manager/package_manager.services.yml @@ -92,10 +92,6 @@ services: tags: - { name: event_subscriber } Drupal\package_manager\Validator\WritableFileSystemValidator: '@package_manager.validator.file_system' - package_manager.validator.composer_settings: - class: Drupal\package_manager\Validator\ComposerSettingsValidator - tags: - - { name: event_subscriber } package_manger.validator.composer_minimum_stability: class: Drupal\package_manager\Validator\ComposerMinimumStabilityValidator tags: diff --git a/package_manager/src/Validator/ComposerSettingsValidator.php b/package_manager/src/Validator/ComposerSettingsValidator.php deleted file mode 100644 index 69ac533acb..0000000000 --- a/package_manager/src/Validator/ComposerSettingsValidator.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php - -declare(strict_types = 1); - -namespace Drupal\package_manager\Validator; - -use Drupal\Core\StringTranslation\StringTranslationTrait; -use Drupal\package_manager\ComposerInspector; -use Drupal\package_manager\Event\PreApplyEvent; -use Drupal\package_manager\Event\PreCreateEvent; -use Drupal\package_manager\Event\PreOperationStageEvent; -use Drupal\package_manager\Event\StatusCheckEvent; -use Drupal\package_manager\PathLocator; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; - -/** - * Validates certain Composer settings. - * - * @internal - * This is an internal part of Package Manager and may be changed or removed - * at any time without warning. External code should not interact with this - * class. - */ -final class ComposerSettingsValidator implements EventSubscriberInterface { - - use StringTranslationTrait; - - /** - * Constructs a ComposerSettingsValidator object. - * - * @param \Drupal\package_manager\ComposerInspector $inspector - * The Composer inspector service. - * @param \Drupal\package_manager\PathLocator $pathLocator - * The path locator service. - */ - public function __construct(protected ComposerInspector $inspector, protected PathLocator $pathLocator) { - } - - /** - * Validates Composer settings. - */ - public function validate(PreOperationStageEvent $event): void { - $dir = $event instanceof PreApplyEvent - ? $event->stage->getStageDirectory() - : $this->pathLocator->getProjectRoot(); - - $settings = []; - foreach (['disable-tls', 'secure-http'] as $key) { - try { - $settings[$key] = ComposerInspector::toBoolean($this->inspector->getConfig($key, $dir) ?: '0'); - } - catch (\Throwable $throwable) { - $event->addErrorFromThrowable($throwable, $this->t('Unable to determine Composer <code>@key</code> setting.', [ - '@key' => $key, - ])); - return; - } - } - - // If disable-tls is enabled, it overrides secure-http and sets its value to - // FALSE, even if secure-http is set to TRUE explicitly. - $messages = []; - if ($settings['disable-tls'] === TRUE) { - $messages[] = $this->t('TLS must be enabled for HTTPS Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [ - ':url' => 'https://getcomposer.org/doc/06-config.md#disable-tls', - ]); - $messages[] = $this->t('You should also check the value of <code>secure-http</code> and make sure that it is set to <code>true</code> or not set at all.'); - } - elseif ($settings['secure-http'] !== TRUE) { - $messages[] = $this->t('HTTPS must be enabled for Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [ - ':url' => 'https://getcomposer.org/doc/06-config.md#secure-http', - ]); - } - - if ($messages) { - $event->addError($messages, $this->t("Composer settings don't satisfy Package Manager's requirements.")); - } - } - - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents(): array { - return [ - PreCreateEvent::class => 'validate', - PreApplyEvent::class => 'validate', - StatusCheckEvent::class => 'validate', - ]; - } - -} diff --git a/package_manager/src/Validator/ComposerValidator.php b/package_manager/src/Validator/ComposerValidator.php index 784513f780..dd9772aed4 100644 --- a/package_manager/src/Validator/ComposerValidator.php +++ b/package_manager/src/Validator/ComposerValidator.php @@ -7,6 +7,7 @@ namespace Drupal\package_manager\Validator; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Url; use Drupal\package_manager\ComposerInspector; +use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreOperationStageEvent; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\package_manager\PathLocator; @@ -45,8 +46,12 @@ class ComposerValidator implements EventSubscriberInterface { * Validates that the Composer executable is the correct version. */ public function validate(PreOperationStageEvent $event): void { + $messages = []; + $dir = $event instanceof PreApplyEvent + ? $event->stage->getStageDirectory() + : $this->pathLocator->getProjectRoot(); try { - $this->composerInspector->validate($this->pathLocator->getProjectRoot()); + $this->composerInspector->validate($dir); } catch (\Throwable $e) { if ($this->moduleHandler->moduleExists('help')) { @@ -63,7 +68,38 @@ class ComposerValidator implements EventSubscriberInterface { else { $event->addErrorFromThrowable($e); } + return; + } + + $settings = []; + foreach (['disable-tls', 'secure-http'] as $key) { + try { + $settings[$key] = ComposerInspector::toBoolean($this->composerInspector->getConfig($key, $dir) ?: '0'); + } + catch (\Throwable $e) { + $event->addErrorFromThrowable($e, $this->t('Unable to determine Composer <code>@key</code> setting.', [ + '@key' => $key, + ])); + return; + } + } + + // If disable-tls is enabled, it overrides secure-http and sets its value to + // FALSE, even if secure-http is set to TRUE explicitly. + if ($settings['disable-tls'] === TRUE) { + $messages[] = $this->t('TLS must be enabled for HTTPS Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [ + ':url' => 'https://getcomposer.org/doc/06-config.md#disable-tls', + ]); + $messages[] = $this->t('You should also check the value of <code>secure-http</code> and make sure that it is set to <code>true</code> or not set at all.'); + } + elseif ($settings['secure-http'] !== TRUE) { + $messages[] = $this->t('HTTPS must be enabled for Composer downloads. See <a href=":url">the Composer documentation</a> for more information.', [ + ':url' => 'https://getcomposer.org/doc/06-config.md#secure-http', + ]); + } + if ($messages) { + $event->addError($messages, $this->t("Composer settings don't satisfy Package Manager's requirements.")); } } diff --git a/package_manager/tests/src/Kernel/ComposerSettingsValidatorTest.php b/package_manager/tests/src/Kernel/ComposerValidatorTest.php similarity index 96% rename from package_manager/tests/src/Kernel/ComposerSettingsValidatorTest.php rename to package_manager/tests/src/Kernel/ComposerValidatorTest.php index fefe092eff..f008de987f 100644 --- a/package_manager/tests/src/Kernel/ComposerSettingsValidatorTest.php +++ b/package_manager/tests/src/Kernel/ComposerValidatorTest.php @@ -10,11 +10,11 @@ use Drupal\package_manager\Event\PreCreateEvent; use Drupal\package_manager\ValidationResult; /** - * @covers \Drupal\package_manager\Validator\ComposerSettingsValidator + * @covers \Drupal\package_manager\Validator\ComposerValidator * @group package_manager * @internal */ -class ComposerSettingsValidatorTest extends PackageManagerKernelTestBase { +class ComposerValidatorTest extends PackageManagerKernelTestBase { /** * Data provider for testComposerSettingsValidation(). -- GitLab