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