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

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

	if (mb_strpos(mb_strtolower($identity), 'http://') === false && mb_strpos(mb_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;
		}

		$protocol = (CMain::IsHTTPS() ? "https" : "http");
		$port = ($_SERVER['SERVER_PORT'] > 0 && $_SERVER['SERVER_PORT'] <> 80 && $_SERVER['SERVER_PORT'] <> 443? ':'.$_SERVER['SERVER_PORT']:'');
		$server_name = $protocol.'://'.$_SERVER['SERVER_NAME'].$port;

		if ($return_to === false)
			$return_to = $server_name.$GLOBALS['APPLICATION']->GetCurPageParam('', array('SEF_APPLICATION_CUR_PAGE_URL'), false);

		$return_to = preg_replace("|amp%3B|", '', $return_to);

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

		$trust_root = $server_name.'/';

		$url = $arOpenidServerTags['server'] . (mb_strpos($arOpenidServerTags['server'], '?') !== false ? '&' : '?').
			'openid.mode=checkid_setup'.
			'&openid.return_to='.urlencode($return_to).
			'&openid.identity='.urlencode($identity).
			'&openid.trust_root='.urlencode($trust_root).
			'&openid.sreg.required=email,fullname'.
			'&openid.sreg.optional=gender,dob,postcode,country,timezone';
		$_SESSION['BX_OPENID_RETURN_TO'] = $return_to;
		return $url;
	}
	return false;
}