• Модуль: pull
  • Путь к файлу: ~/bitrix/modules/pull/lib/config.php
  • Класс: BitrixPullConfig
  • Вызов: Config::get
static function get(array $params = [])
{
	if (!CPullOptions::GetQueueServerStatus())
		return false;

	$userId = (int)($params['USER_ID'] ?? 0);
	if (isset($params['CHANNEL']) && !($params['CHANNEL'] instanceof BitrixPullModelChannel))
	{
		throw new ArgumentException('$params["CHANNEL"] should be instance of BitrixPullModelChannel');
	}

	if ($userId === 0 && !isset($params['CHANNEL']))
	{
		global $USER;
		$userId = (int)$USER->GetID();
		if ($userId === 0)
		{
			return false;
		}
	}

	$params['CACHE'] = (bool)($params['CACHE'] ?? true);
	$params['REOPEN'] = (bool)($params['REOPEN'] ?? false);

	$cache = $params['CACHE'] !== false;
	$reopen = $params['REOPEN'] !== false;

	if ($userId !== 0)
	{
		if (CPullOptions::GetQueueServerVersion() < 5)
		{
			$privateChannelType = $params['CUSTOM_TYPE'] ?? CPullChannel::TYPE_PRIVATE;
			$privateChannel = CPullChannel::Get($userId, $cache, $reopen, $privateChannelType);
		}
		$sharedChannelType = $params['CUSTOM_TYPE'] ?? CPullChannel::TYPE_SHARED;
		$sharedChannel = CPullChannel::GetShared($cache, $reopen, $sharedChannelType);
	}
	else // isset($params['CHANNEL'])
	{
		$privateChannel = [
			'CHANNEL_ID' => $params['CHANNEL']->getPrivateId(),
			'CHANNEL_PUBLIC_ID' => $params['CHANNEL']->getPublicId(),
			'CHANNEL_DT' => $params['CHANNEL']->getDateCreate()->getTimestamp(),
			'CHANNEL_DT_END' => $params['CHANNEL']->getDateCreate()->getTimestamp() + static::ONE_YEAR,
		];
		$sharedChannel = null;
	}

	$domain = defined('BX24_HOST_NAME')? BX24_HOST_NAME: $_SERVER['SERVER_NAME'];

	$isSharedMode = CPullOptions::IsServerShared();
	$serverConfig = [
		'VERSION' => $isSharedMode ? BitrixPullSharedServerConfig::getServerVersion(): CPullOptions::GetQueueServerVersion(),
		'SERVER_ENABLED' => CPullOptions::GetQueueServerStatus(),
		'MODE' => CPullOptions::GetQueueServerMode(),
		'LONG_POLLING' => $isSharedMode ? BitrixPullSharedServerConfig::getLongPollingUrl(): CPullOptions::GetListenUrl(),
		'LONG_POOLING_SECURE' => $isSharedMode ? BitrixPullSharedServerConfig::getLongPollingUrl() : CPullOptions::GetListenSecureUrl(),
		'WEBSOCKET_ENABLED' => $isSharedMode ? true : CPullOptions::GetWebSocket(),
		'WEBSOCKET' => $isSharedMode ? BitrixPullSharedServerConfig::getWebSocketUrl() : CPullOptions::GetWebSocketUrl(),
		'WEBSOCKET_SECURE' => $isSharedMode ? BitrixPullSharedServerConfig::getWebSocketUrl() : CPullOptions::GetWebSocketSecureUrl(),
		'PUBLISH_ENABLED' => $isSharedMode ? true : CPullOptions::GetPublishWebEnabled(),
		'PUBLISH' => $isSharedMode ? BitrixPullSharedServerConfig::getWebPublishUrl() : CPullOptions::GetPublishWebUrl(),
		'PUBLISH_SECURE' => $isSharedMode ? BitrixPullSharedServerConfig::getWebPublishUrl() : CPullOptions::GetPublishWebSecureUrl(),
		'CONFIG_TIMESTAMP' => CPullOptions::GetConfigTimestamp(),
	];
	foreach ($serverConfig as $key => $value)
	{
		if(is_string($value) && mb_strpos($value, '#DOMAIN#') !== false)
		{
			$serverConfig[$key] = str_replace('#DOMAIN#', $domain, $value);
		}
	}
	$config['SERVER'] = $serverConfig;
	if($isSharedMode)
	{
		$config['CLIENT_ID'] = Client::getPublicLicenseCode();
	}

	$config['API'] = Array(
		'REVISION_WEB' => PULL_REVISION_WEB,
		'REVISION_MOBILE' => PULL_REVISION_MOBILE,
	);

	$config['CHANNELS'] = [];
	if ($sharedChannel)
	{
		$config['CHANNELS']['SHARED'] = [
			'ID' => CPullChannel::SignChannel($sharedChannel["CHANNEL_ID"]),
			'START' => $sharedChannel['CHANNEL_DT'],
			'END' => $sharedChannel['CHANNEL_DT']+CPullChannel::CHANNEL_TTL,
		];
	}
	if ($privateChannel)
	{
		if (CPullOptions::GetQueueServerVersion() > 3)
		{
			$privateId = $privateChannel['CHANNEL_PUBLIC_ID']
				? "{$privateChannel['CHANNEL_ID']}:{$privateChannel['CHANNEL_PUBLIC_ID']}"
				: $privateChannel['CHANNEL_ID']
			;
			$privateId = CPullChannel::SignChannel($privateId);

			$publicId = CPullChannel::SignPublicChannel($privateChannel['CHANNEL_PUBLIC_ID']);
		}
		else
		{
			$privateId = CPullChannel::SignChannel($privateChannel['CHANNEL_ID']);
			$publicId = '';
		}

		$config['CHANNELS']['PRIVATE'] = [
			'ID' => $privateId,
			'PUBLIC_ID' => $publicId,
			'START' => $privateChannel['CHANNEL_DT'],
			'END' => $privateChannel['CHANNEL_DT_END'] ?? $privateChannel['CHANNEL_DT']+CPullChannel::CHANNEL_TTL,
		];
	}

	$params['JSON'] = (bool)($params['JSON'] ?? false);

	$config['PUBLIC_CHANNELS'] = BitrixPullChannel::getPublicIds(['JSON' => $params['JSON']]);
	if (CPullOptions::GetQueueServerVersion() >= 5)
	{
		$channelsForToken = [];
		if ($sharedChannel)
		{
			$channelsForToken[] = $sharedChannel['CHANNEL_ID'];
		}
		if ($privateChannel)
		{
			$channelsForToken[] = $privateChannel['CHANNEL_ID'];
		}
		$config['JWT'] = BitrixPullAuthJwt::create($channelsForToken, $userId);
	}

	if ($params['JSON'])
	{
		$result['server'] = array_change_key_case($config['SERVER'], CASE_LOWER);
		$result['api'] = array_change_key_case($config['API'], CASE_LOWER);

		foreach ($config['CHANNELS'] as $type => $channel)
		{
			$type = mb_strtolower($type);
			$result['channels'][$type] = array_change_key_case($channel, CASE_LOWER);
			$result['channels'][$type]['type'] = $type;
			$result['channels'][$type]['start'] = date('c', $channel['START']);
			$result['channels'][$type]['end'] = date('c', $channel['END']);
		}

		if($isSharedMode)
		{
			$result['clientId'] = $config['CLIENT_ID'];
		}
		if (isset($config['JWT']))
		{
			$result['jwt'] = $config['JWT'];
		}

		$result['publicChannels'] = $config['PUBLIC_CHANNELS'];

		$config = $result;
	}

	return $config;

}