![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework-message-queue/Config/Reader/Env/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\MessageQueue\Config\Reader\Env; use Magento\Framework\MessageQueue\ConfigInterface as QueueConfig; use Magento\Framework\MessageQueue\Config\Validator as ConfigValidator; use Magento\Framework\Reflection\MethodsMap; use Magento\Framework\Reflection\TypeProcessor; /** * Communication configuration validator. Validates data, that have been read from env.php. */ class Validator extends ConfigValidator { /** * @var MethodsMap */ private $methodsMap; /** * Initialize dependencies * * @param TypeProcessor $typeProcessor * @param MethodsMap $methodsMap */ public function __construct( TypeProcessor $typeProcessor, MethodsMap $methodsMap ) { $this->methodsMap = $methodsMap; parent::__construct($typeProcessor, $methodsMap); } /** * Validate config data * * @param array $configData * @param array|null $xmlConfigData * @return void * @throws \LogicException */ public function validate($configData, array $xmlConfigData = []) { if (isset($configData[QueueConfig::TOPICS])) { foreach ($configData[QueueConfig::TOPICS] as $topicName => $configDataItem) { $this->validateTopic($topicName, $configDataItem); $publisherName = $configDataItem[QueueConfig::TOPIC_PUBLISHER]; $this->validateTopicPublisher( $this->getAvailablePublishers($configData, $xmlConfigData), $publisherName, $topicName ); } } if (isset($configData[QueueConfig::CONSUMERS])) { foreach ($configData[QueueConfig::CONSUMERS] as $consumerName => $configDataItem) { $handlers = isset($configDataItem[QueueConfig::CONSUMER_HANDLERS]) ? $configDataItem[QueueConfig::CONSUMER_HANDLERS] : []; foreach ($handlers as $handler) { $this->validateHandlerType( $handler[QueueConfig::CONSUMER_CLASS], $handler[QueueConfig::CONSUMER_METHOD], $consumerName ); } } } if (isset($configData[QueueConfig::BINDS])) { foreach ($configData[QueueConfig::BINDS] as $configDataItem) { $this->validateBindTopic( $this->getAvailableTopics($configData, $xmlConfigData), $configDataItem[QueueConfig::BIND_TOPIC] ); } } } /** * Validate topic config data * * @param string $topicName * @param array $configDataItem * @return void * @throws \LogicException */ private function validateTopic(string $topicName, array $configDataItem): void { if (isset($configDataItem[QueueConfig::TOPIC_SCHEMA])) { $schemaType = $configDataItem[QueueConfig::TOPIC_SCHEMA][QueueConfig::TOPIC_SCHEMA_VALUE]; $this->validateSchemaType($schemaType, $topicName); } if (isset($configDataItem[QueueConfig::TOPIC_RESPONSE_SCHEMA])) { $responseSchemaType = $configDataItem[QueueConfig::TOPIC_RESPONSE_SCHEMA][QueueConfig::TOPIC_SCHEMA_VALUE]; if (null !== $responseSchemaType) { $this->validateResponseSchemaType($responseSchemaType, $topicName); } } } /** * Return all available publishers from xml and env configs * * @param array $configData * @param array $xmlConfigData * @return array */ private function getAvailablePublishers(array $configData, array $xmlConfigData): array { $envConfigPublishers = isset($configData[QueueConfig::PUBLISHERS]) ? $configData[QueueConfig::PUBLISHERS] : []; $xmlConfigPublishers = isset($xmlConfigData[QueueConfig::PUBLISHERS]) ? $xmlConfigData[QueueConfig::PUBLISHERS] : []; return array_unique( array_merge( array_keys($xmlConfigPublishers), array_keys($envConfigPublishers) ) ); } /** * Return all available topics from xml and env configs * * @param array $configData * @param array $xmlConfigData * @return array */ private function getAvailableTopics(array $configData, array $xmlConfigData): array { $envConfigTopics = isset($configData[QueueConfig::TOPICS]) ? $configData[QueueConfig::TOPICS] : []; $xmlConfigTopics = isset($xmlConfigData[QueueConfig::TOPICS]) ? $xmlConfigData[QueueConfig::TOPICS] : []; return array_unique( array_merge( array_keys($xmlConfigTopics), array_keys($envConfigTopics) ) ); } }