Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/seo/lib/catalog/ |
Upload File : |
<?php namespace Bitrix\Seo\Catalog; use Bitrix\Seo\Engine; use Bitrix\Main\Error; use Bitrix\Main\Event; use Bitrix\Main\Request; use Bitrix\Main\Result; use Bitrix\Main\Web\JWT; use Bitrix\Main\EventManager; use Bitrix\Main\Application; use Bitrix\Main\Engine\Response\Json; class CatalogWebhookHandler { /**@var Request $request*/ private $request; /**@var Engine $engine*/ private $engine; /**@var EventManager $eventManager*/ private $eventManager; /**@var Application $eventManager*/ private $application; public function __construct( Request $request, Engine $engine, EventManager $eventManager, Application $application ) { $this->request = $request; $this->engine = $engine; $this->eventManager = $eventManager; $this->application = $application; } private function verifyRequest() : Result { $result = new Result(); $authToken = $this->request->getHeader('Authorization'); if (!$authToken) { $authToken = \Bitrix\Main\Context::getCurrent()->getServer()->get('REMOTE_USER'); } if (!$authToken) { $result->addError(new Error('wrong request')); return $result; } $authToken = substr($authToken, strlen('Bearer ')); $engineClientSecret = $this->engine->getClientSecret(); $authTokenSalt = mb_substr($authToken, 0, 8); $isAllowedToken = $authToken === $authTokenSalt . md5($authTokenSalt . $engineClientSecret); if (!$isAllowedToken) { $result->addError(new Error('Invalid client credentials')); } return $result; } private function run() : Json { $result = $this->verifyRequest(); if (!$result->isSuccess()) { return $this->buildErrorResponse( $result->getErrorCollection()->current() ); } $this->eventManager->send( new Event('seo', 'OnCatalogWebhook', ['payload' => $this->request->toArray(),]) ); return $this->buildResponse(); } public function handle(): void { $response = $this->run(); $this->application->end(200, $response); } private function buildErrorResponse(Error $error): Json { return new Json([ 'error' => [ 'message' => $error->getMessage(), 'code' => $error->getCode(), ], 'data' => [], ]); } private function buildResponse(): Json { return new Json([ 'error' => false, 'data' => [ 'status' => 'ok' ], ]); } }