1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
mailru.php
См. документацию.
1<?
3
5{
6 const ID = "MyMailRu";
7
8 public function GetSettings()
9 {
10 return array(
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)),
14 array("note"=>GetMessage("socserv_mailru_sett_note")." ".GetMessage("socserv_mailru_opt_note")),
15 );
16 }
17
18 public function GetFormHtml($arParams)
19 {
20 $url = $this->getUrl();
21 if($arParams["FOR_INTRANET"])
22 return array("ON_CLICK" => 'onclick="BX.util.popup(\''.htmlspecialcharsbx(CUtil::JSEscape($url)).'\', 580, 400)"');
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>';
24 }
25
26 public function GetOnClickJs()
27 {
28 $url = $this->getUrl();
29 return "BX.util.popup('".CUtil::JSEscape($url)."', 580, 400)";
30 }
31
32 public function getUrl()
33 {
34 $appID = trim(self::GetOption("mailru_id"));
35 $appSecret = trim(self::GetOption("mailru_secret_key"));
36
37 $gAuth = new CMailRuOAuthInterface($appID, $appSecret);
38
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")));
41
42 return $gAuth->GetAuthUrl($redirect_uri, $state);
43 }
44
45 public function Authorize()
46 {
47 $GLOBALS["APPLICATION"]->RestartBuffer();
48
49 $bSuccess = 1;
50 $bProcessState = false;
51
52 if((isset($_REQUEST["code"]) && $_REQUEST["code"] <> '') && CSocServAuthManager::CheckUniqueKey())
53 {
54 $bProcessState = true;
55
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"));
59
60 $gAuth = new CMailRuOAuthInterface($appID, $appSecret, $_REQUEST["code"]);
61
62 if($gAuth->GetAccessToken($redirect_uri) !== false)
63 {
64 $arMRUser = $gAuth->GetCurrentUser();
65
66 if(is_array($arMRUser) && ($arMRUser['0']['uid'] <> ''))
67 {
68 $email = $first_name = $last_name = $gender = "";
69 if($arMRUser['0']['first_name'] <> '')
70 {
71 $first_name = $arMRUser['0']['first_name'];
72 }
73 if($arMRUser['0']['last_name'] <> '')
74 {
75 $last_name = $arMRUser['0']['last_name'];
76 }
77 if($arMRUser['0']['email'] <> '')
78 {
79 $email = $arMRUser['0']['email'];
80 }
81 if(isset($arMRUser['0']['sex']) && $arMRUser['0']['sex'] != '')
82 {
83 if ($arMRUser['0']['sex'] == '0')
84 $gender = 'M';
85 elseif ($arMRUser['0']['sex'] == '1')
86 $gender = 'F';
87 }
88
89 $arFields = array(
90 'EXTERNAL_AUTH_ID' => self::ID,
91 'XML_ID' => $arMRUser['0']['uid'],
92 'LOGIN' => "MM_".$email,
93 'NAME'=> $first_name,
94 'EMAIL'=> $email,
95 'LAST_NAME'=> $last_name,
96 'PERSONAL_GENDER' => $gender,
97 );
98
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'];
106 if(SITE_ID <> '')
107 $arFields["SITE_ID"] = SITE_ID;
108 $bSuccess = $this->AuthorizeUser($arFields);
109 }
110 }
111 }
112
113 if(!$bProcessState)
114 {
115 unset($_REQUEST["state"]);
116 }
117
118 $url = ($GLOBALS["APPLICATION"]->GetCurDir() == "/login/") ? "" : $GLOBALS["APPLICATION"]->GetCurDir();
119 if(isset($_REQUEST["state"]))
120 {
121 $arState = array();
122 parse_str($_REQUEST["state"], $arState);
123
124 if(isset($arState['backurl']))
125 $url = parse_url($arState['backurl'], PHP_URL_PATH);
126 }
127
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);
131
132 echo '
133<script>
134if(window.opener)
135 window.opener.location = \''.CUtil::JSEscape($url).'\';
136window.close();
137</script>
138';
139 CMain::FinalActions();
140 }
141}
142
143class CMailRuOAuthInterface
144{
145 const AUTH_URL = "https://connect.mail.ru/oauth/authorize";
146 const TOKEN_URL = "https://connect.mail.ru/oauth/token";
147 const CONTACTS_URL = "http://www.appsmail.ru/platform/api";
148
149 protected $appID;
150 protected $appSecret;
151 protected $code = false;
152 protected $access_token = false;
153 protected $userID = false;
154
155 public function __construct($appID, $appSecret, $code=false)
156 {
157 $this->httpTimeout = SOCSERV_DEFAULT_HTTP_TIMEOUT;
158 $this->appID = $appID;
159 $this->appSecret = $appSecret;
160 $this->code = $code;
161 }
162
163 public function GetAuthUrl($redirect_uri, $state='')
164 {
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):'');
170 }
171
172 public function GetAccessToken($redirect_uri)
173 {
174 if($this->code === false)
175 return false;
176
177 $result = CHTTP::sPostHeader(self::TOKEN_URL, array(
178 "client_id"=>$this->appID,
179 "client_secret"=>$this->appSecret,
180 "code"=>$this->code,
181 "redirect_uri"=>$redirect_uri,
182 "grant_type"=>"authorization_code",
183 ), array(), $this->httpTimeout);
184
185 $arResult = CUtil::JsObjectToPhp($result);
186
187 if((isset($arResult["access_token"]) && $arResult["access_token"] <> '') && isset($arResult["x_mailru_vid"]) && $arResult["x_mailru_vid"] <> '')
188 {
189 $this->access_token = $arResult["access_token"];
190 $this->userID = $arResult["x_mailru_vid"];
191 $_SESSION["OAUTH_DATA"] = array("OATOKEN" => $this->access_token);
192
193 return true;
194 }
195 return false;
196 }
197
198 public function GetCurrentUser()
199 {
200 if($this->access_token === false)
201 return 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);
204
205 return CUtil::JsObjectToPhp($result);
206 }
207}
208?>
$arParams
Определения access_dialog.php:21
$arResult
Определения generate_coupon.php:16
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
Определения change_password.php:57
static sGetHeader($url, $arHeader=array(), $httpTimeout=0)
Определения http.php:444
static sPostHeader($url, $arPostData, $arHeader=array(), $http_timeout=0)
Определения http.php:465
$appSecret
Определения mailru.php:150
const CONTACTS_URL
Определения mailru.php:147
const TOKEN_URL
Определения mailru.php:146
GetAccessToken($redirect_uri)
Определения mailru.php:172
GetCurrentUser()
Определения mailru.php:198
$code
Определения mailru.php:151
GetAuthUrl($redirect_uri, $state='')
Определения mailru.php:163
__construct($appID, $appSecret, $code=false)
Определения mailru.php:155
$access_token
Определения mailru.php:152
$appID
Определения mailru.php:149
$userID
Определения mailru.php:153
Определения authmanager.php:985
Определения mailru.php:5
const ID
Определения mailru.php:6
GetSettings()
Определения mailru.php:8
getUrl()
Определения mailru.php:32
GetFormHtml($arParams)
Определения mailru.php:18
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$sign
Определения payment.php:69
const SOCSERV_DEFAULT_HTTP_TIMEOUT
Определения include.php:5
const SITE_ID
Определения sonet_set_content_view.php:12
$url
Определения iframe.php:7