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/messageservice/lib/Providers/Edna/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/messageservice/lib/Providers/Edna/Registrar.php
<?php

namespace Bitrix\MessageService\Providers\Edna;

use Bitrix\Main\Error;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Result;
use Bitrix\MessageService\Providers\Constants\InternalOption;
use Bitrix\MessageService\Providers\Edna\EdnaRu;
use Bitrix\MessageService\Providers;
use Bitrix\MessageService\Providers\Edna;
use Bitrix\MessageService\Sender\Traits\RussianProvider;

abstract class Registrar extends Providers\Base\Registrar implements Providers\SupportChecker
{

	use RussianProvider { RussianProvider::isSupported as isRussianRegion; }

	protected EdnaRu $utils;
	protected string $channelType = '';

	abstract protected function getCallbackTypeList(): array;

	public function __construct(string $providerId, Providers\OptionManager $optionManager, EdnaRu $utils)
	{
		parent::__construct($providerId, $optionManager);

		$this->utils = $utils;
	}

	public function isRegistered(): bool
	{
		return
			!is_null($this->optionManager->getOption(InternalOption::API_KEY))
			&& !is_null($this->optionManager->getOption(InternalOption::SENDER_ID));
	}

	public function register(array $fields): Result
	{
		if (isset($fields['subject_id']))
		{
			$fields[InternalOption::SENDER_ID] = $fields['subject_id'];
		}

		if (!isset($fields[InternalOption::API_KEY], $fields[InternalOption::SENDER_ID]))
		{
			return (new Result())->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_EDNARU_EMPTY_REQUIRED_FIELDS')));
		}
		$this->optionManager->setOption(InternalOption::API_KEY, (string)$fields[InternalOption::API_KEY]);

		$subjectIdList = [];
		foreach (explode(';', (string)$fields[InternalOption::SENDER_ID]) as $senderId)
		{
			$senderId = trim($senderId);
			if ($senderId !== '')
			{
				$subjectIdList[] = (int)$senderId;
			}
		}
		if (!$this->utils->checkActiveChannelBySubjectIdList($subjectIdList, $this->channelType))
		{
			$this->optionManager->clearOptions();

			return (new Result())->addError(new Error(Loc::getMessage('MESSAGESERVICE_EDNARU_INACTIVE_CHANNEL_ERROR')));
		}

		foreach ($subjectIdList as $subjectId)
		{
			$setCallbackResult = $this->utils->setCallback(
				$this->getCallbackUrl(),
				$this->getCallbackTypeList(),
				$subjectId
			);
			if (!$setCallbackResult->isSuccess())
			{
				$this->optionManager->clearOptions();

				$errorData = $setCallbackResult->getData();

				if (isset($errorData['detail']))
				{
					return (new Result())->addError(new Error($errorData['detail']));
				}

				return $setCallbackResult;
			}
		}

		$this->optionManager->setOption(InternalOption::SENDER_ID, $subjectIdList);
		$this->optionManager->setOption(InternalOption::MIGRATED_TO_STANDART_SETTING_NAMES, 'Y');

		return new Result();
	}

	/**
	 * @return array{api_key: string, sender_id: array}
	 */
	public function getOwnerInfo(): array
	{
		return [
			InternalOption::API_KEY => $this->optionManager->getOption(InternalOption::API_KEY),
			InternalOption::SENDER_ID => $this->optionManager->getOption(InternalOption::SENDER_ID),
		];
	}

	public function isSupported(): bool
	{
		return self::isRussianRegion();
	}

	public function canUse(): bool
	{
		return ($this->isRegistered() && $this->isConfirmed());
	}

	public function getExternalManageUrl(): string
	{
		if (RegionHelper::isInternational())
		{
			return 'https://app.edna.io/';
		}

		return 'https://app.edna.ru/';
	}

	public function resetCallback(): Result
	{
		\Bitrix\MessageService\Providers\Edna\WhatsApp\Utils::cleanTemplatesCache();

		if (!$this->isRegistered())
		{
			return (new Result())->addError(new Error('It is impossible to reinstall the callback url because the provider is not registered'));
		}

		$fields = $this->getOwnerInfo();

		$subjectIdList = [];
		foreach (explode(';', (string)$fields[InternalOption::SENDER_ID][0]) as $senderId)
		{
			$senderId = trim($senderId);
			if ($senderId !== '')
			{
				$subjectIdList[] = (int)$senderId;
			}
		}

		if (!$this->utils->checkActiveChannelBySubjectIdList($subjectIdList, $this->channelType))
		{
			return (new Result())->addError(new Error(Loc::getMessage('MESSAGESERVICE_EDNARU_INACTIVE_CHANNEL_ERROR')));
		}

		foreach ($subjectIdList as $subjectId)
		{
			$setCallbackResult = $this->utils->setCallback(
				$this->getCallbackUrl(),
				$this->getCallbackTypeList(),
				$subjectId
			);
			if (!$setCallbackResult->isSuccess())
			{
				$errorData = $setCallbackResult->getData();

				if (isset($errorData['detail']))
				{
					return (new Result())->addError(new Error($errorData['detail']));
				}

				return $setCallbackResult;
			}
		}

		return new Result();
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit