• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/openid.php
  • Класс: COpenIDClient
  • Вызов: COpenIDClient::GetRedirectUrl
function GetRedirectUrl($identity, $return_to=false)
{
	if (strlen($identity) <= 0)
	{
		$GLOBALS['APPLICATION']->ThrowException(GetMessage('OPENID_CLIENT_EMPTY_IDENTITY'));
		return false;
	}

	if (strlen($identity) > 1024)
		$identity = substr($identity, 0, 1024); // may be 256 ????

	$port = ($_SERVER['SERVER_PORT'] > 0 && $_SERVER['SERVER_PORT'] <> 80? ':'.$_SERVER['SERVER_PORT']:'');

	if ($return_to === false)
		$return_to = 'http://'.$_SERVER['SERVER_NAME'].$port.$GLOBALS['APPLICATION']->GetCurPageParam('', array(), false);

	if (strpos(strtolower($identity), 'http://') === false && strpos(strtolower($identity), 'https://') === false)
		$identity = 'http://' . $identity;

	$_SESSION['BX_OPENID_IDENTITY'] = $identity;

	if ($arOpenidServerTags = $this->GetOpenIDServerTags($identity))
	{
		if (!$this->CheckTrustProviders($arOpenidServerTags['server']))
		{
			$GLOBALS['APPLICATION']->ThrowException(GetMessage('OPENID_CLIENT_CHECK_TRUST_PRIVIDERS_FAULT'));
			return false;
		}

		if (strlen($arOpenidServerTags['delegate']) > 0)
			$identity = $arOpenidServerTags['delegate'];

		$trust_root = COption::GetOptionString('main', 'OPENID_TRUST_ROOT', '', SITE_ID);
		if (strlen($trust_root) <= 0)
			$trust_root = 'http://'.$_SERVER['SERVER_NAME'].$port.'/';

		$url = $arOpenidServerTags['server'] . (strpos($arOpenidServerTags['server'], '?')!==false ? '&' : '?') .
			'openid.mode=checkid_setup' .
			'&openid.return_to=' . urlencode($return_to) .
			'&openid.identity=' . urlencode($identity) .
			'&openid.trust_root=' . urlencode($trust_root);

		$sreg_required = COption::GetOptionString('main', 'OPENID_SREG_REQUIRED', 'email,fullname,gender');
		if (strlen($sreg_required) > 0)
			$url .= '&openid.sreg.required=' . urlencode($sreg_required);

		return $url;
	}
	return false;
}