11 array(
"mailru_id",
GetMessage(
"socserv_mailru_id"),
"", Array(
"text", 40)),
12 array(
"mailru_private_key",
GetMessage(
"socserv_mailru_key"),
"", Array(
"text", 40)),
13 array(
"mailru_secret_key",
GetMessage(
"socserv_mailru_secret"),
"", Array(
"text", 40)),
23 return '<a href="javascript:void(0)
" onclick="BX.util.popup(\
''.
htmlspecialcharsbx(CUtil::JSEscape(
$url)).
'\', 580, 400)
" class="bx-ss-button mymailru-button
"></a><span class="bx-spacer
"></span><span>'.GetMessage("socserv_mailru_note
").'</span>';
26 public function GetOnClickJs()
28 $url = $this->getUrl();
29 return "BX.util.popup(
'".CUtil::JSEscape($url)."', 580, 400)
";
32 public function getUrl()
34 $appID = trim(self::GetOption("mailru_id
"));
35 $appSecret = trim(self::GetOption("mailru_secret_key
"));
37 $gAuth = new CMailRuOAuthInterface($appID, $appSecret);
39 $redirect_uri = CSocServUtil::GetCurUrl('auth_service_id='.self::ID);
40 $state = 'site_id='.SITE_ID.'&backurl='.($GLOBALS["APPLICATION
"]->GetCurPageParam('check_key='.\CSocServAuthManager::getUniqueKey(), array("logout
", "auth_service_error
", "auth_service_id
", "backurl
")));
42 return $gAuth->GetAuthUrl($redirect_uri, $state);
45 public function Authorize()
47 $GLOBALS["APPLICATION
"]->RestartBuffer();
50 $bProcessState = false;
52 if((isset($_REQUEST["code
"]) && $_REQUEST["code
"] <> '') && CSocServAuthManager::CheckUniqueKey())
54 $bProcessState = true;
56 $redirect_uri = CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code
", "state
", "check_key
", "backurl
"));
57 $appID = trim(self::GetOption("mailru_id
"));
58 $appSecret = trim(self::GetOption("mailru_secret_key
"));
60 $gAuth = new CMailRuOAuthInterface($appID, $appSecret, $_REQUEST["code
"]);
62 if($gAuth->GetAccessToken($redirect_uri) !== false)
64 $arMRUser = $gAuth->GetCurrentUser();
66 if(is_array($arMRUser) && ($arMRUser['0']['uid'] <> ''))
68 $email = $first_name = $last_name = $gender = "";
69 if($arMRUser['0']['first_name'] <> '')
71 $first_name = $arMRUser['0']['first_name'];
73 if($arMRUser['0']['last_name'] <> '')
75 $last_name = $arMRUser['0']['last_name'];
77 if($arMRUser['0']['email'] <> '')
79 $email = $arMRUser['0']['email'];
81 if(isset($arMRUser['0']['sex']) && $arMRUser['0']['sex'] != '')
83 if ($arMRUser['0']['sex'] == '0')
85 elseif ($arMRUser['0']['sex'] == '1')
90 'EXTERNAL_AUTH_ID' => self::ID,
91 'XML_ID' => $arMRUser['0']['uid'],
92 'LOGIN' => "MM_
".$email,
95 'LAST_NAME'=> $last_name,
96 'PERSONAL_GENDER' => $gender,
99 if(isset($arMRUser['0']['birthday']))
100 if ($date = MakeTimeStamp($arMRUser['0']['birthday'], "DD.MM.YYYY
"))
101 $arFields["PERSONAL_BIRTHDAY
"] = ConvertTimeStamp($date);
102 if(isset($arMRUser['0']['pic_190']) && self::CheckPhotoURI($arMRUser['0']['pic_190']))
103 if ($arPic = CFile::MakeFileArray($arMRUser['0']['pic_190'].'?name=/'.md5($arMRUser['0']['pic_190']).'.jpg'))
104 $arFields["PERSONAL_PHOTO
"] = $arPic;
105 $arFields["PERSONAL_WWW
"] = $arMRUser['0']['link'];
107 $arFields["SITE_ID"] = SITE_ID;
108 $bSuccess = $this->AuthorizeUser($arFields);
115 unset($_REQUEST["state
"]);
118 $url = ($GLOBALS["APPLICATION
"]->GetCurDir() == "/login/
") ? "" : $GLOBALS["APPLICATION
"]->GetCurDir();
119 if(isset($_REQUEST["state
"]))
122 parse_str($_REQUEST["state
"], $arState);
124 if(isset($arState['backurl']))
125 $url = parse_url($arState['backurl'], PHP_URL_PATH);
128 $aRemove = array("logout
", "auth_service_error
", "auth_service_id
", "code
", "error_reason
", "error
", "error_description
", "check_key
");
129 if($bSuccess !== true)
130 $url = $GLOBALS['APPLICATION']->GetCurPageParam(('auth_service_id='.self::ID.'&auth_service_error='.$bSuccess), $aRemove);
135 window.opener.location = \''.CUtil::JSEscape($url).'\';
139 CMain::FinalActions();
143class CMailRuOAuthInterface
145 const AUTH_URL = "https:
146 const TOKEN_URL =
"https://connect.mail.ru/oauth/token";
165 return self::AUTH_URL.
166 "?client_id=".urlencode($this->appID).
167 "&redirect_uri=".$redirect_uri.
168 "&response_type=code".
169 ($state <>
''?
'&state='.urlencode($state):
'');
174 if($this->code ===
false)
178 "client_id"=>$this->appID,
179 "client_secret"=>$this->appSecret,
181 "redirect_uri"=>$redirect_uri,
182 "grant_type"=>
"authorization_code",
183 ),
array(), $this->httpTimeout);
189 $this->access_token =
$arResult[
"access_token"];
190 $this->userID =
$arResult[
"x_mailru_vid"];
191 $_SESSION[
"OAUTH_DATA"] =
array(
"OATOKEN" => $this->access_token);
200 if($this->access_token ===
false)
202 $sign=md5(
"app_id=".$this->appID.
"method=users.getInfosecure=1session_key=".$this->access_token.$this->appSecret);
203 $result =
CHTTP::sGetHeader(self::CONTACTS_URL.
'?method=users.getInfo&secure=1&app_id='.$this->appID.
'&session_key='.urlencode($this->access_token).
'&sig='.
$sign,
array(), $this->httpTimeout);
205 return CUtil::JsObjectToPhp(
$result);
change_password_forgot_link login popup forget pas AUTH_GOTO_FORGOT_FORM login btn wrap change_password_button login popup link login popup return auth javascript
static sGetHeader($url, $arHeader=array(), $httpTimeout=0)
static sPostHeader($url, $arPostData, $arHeader=array(), $http_timeout=0)
GetAccessToken($redirect_uri)
GetAuthUrl($redirect_uri, $state='')
__construct($appID, $appSecret, $code=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
const SOCSERV_DEFAULT_HTTP_TIMEOUT