- Модуль: 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;
}