• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/controller/qrcodeauth.php
  • Класс: BitrixMainControllerQrCodeAuth
  • Вызов: QrCodeAuth::pushToken
public function pushToken($siteId, $uniqueId, $channelTag, $redirectUrl = '', $currentUrl = null)
{
	if ($siteId == '' || $uniqueId == '' || $channelTag == '')
	{
		$this->addError(new MainError(Loc::getMessage('qrcodeauth_error_request'), 'ERR_PARAMS'));
		return null;
	}

	$event = new BitrixMainEvent(
		'main',
		'OnPushQrCodeAuthToken',
		[
			'siteId' => $siteId,
			'uniqueId' => $uniqueId,
			'channelTag' => $channelTag,
			'redirectUrl' => $redirectUrl,
		]
	);
	$event->send();

	foreach ($event->getResults() as $eventResult)
	{
		if ($eventResult->getType() === MainEventResult::ERROR)
		{
			$error = $eventResult->getParameters()['error'] ?? null;
			if ($error instanceof MainError)
			{
				$this->addError($error);
			}
			if (is_string($error) && $error !== '')
			{
				$this->addError(new MainError($error, 'ERR_FROM_EVENT'));
			}

			return null;
		}

		return true;
	}

	if ($uniqueId !== static::getUniqueId())
	{
		$this->addError(new MainError(Loc::getMessage('qrcodeauth_error_unique_id'), 'ERR_UNIQUE_ID'));
		return null;
	}

	if (!$this->isAllowed())
	{
		return null;
	}

	$channel = PullModelChannel::createWithTag($channelTag);

	$url = $currentUrl ?? MainContext::getCurrent()->getRequest()->getRequestedPage();

	$token = CUser::GetHitAuthHash($url, false, $siteId);
	if ($token === false)
	{
		$token = CUser::AddHitAuthHash($url, false, $siteId, 60);
	}

	PullEvent::add(
		[$channel],
		[
			'module_id' => 'main',
			'command' => 'qrAuthorize',
			'expiry' => 60,
			'params' => [
				'token' => $token,
				'redirectUrl' => $redirectUrl,
			],
		]
	);

	return true;
}