22 if(!$this->entityOAuth)
29 $this->entityOAuth->setCode(
$code);
56 return '<a href="javascript:void(0)
" onclick="BX.util.popup(\
''.
htmlspecialcharsbx(CUtil::JSEscape(
$url)).
'\', 680, 600)
" class="bx-ss-button box-button
"></a><span class="bx-spacer
"></span><span>'.$phrase.'</span>';
60 public function GetOnClickJs($arParams)
62 $url = $this->getUrl('opener', null, $arParams);
63 return "BX.util.popup(
'".CUtil::JSEscape($url)."', 680, 600)
";
66 public function getUrl($location = 'opener', $addScope = null, $arParams = array())
70 $this->entityOAuth = $this->getEntityOAuth();
71 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
73 $redirect_uri = static::CONTROLLER_URL."/redirect.php
";
74 $state = CBoxOAuthInterface::GetRedirectURI()."?check_key=
".\CSocServAuthManager::getUniqueKey()."&state=
";
75 $backurl = $APPLICATION->GetCurPageParam('', array("logout
", "auth_service_error
", "auth_service_id
", "backurl
"));
76 $state .= urlencode("state=
".urlencode("backurl=
".urlencode($backurl).'&mode='.$location.(isset($arParams['BACKURL']) ? '&redirect_url='.urlencode($arParams['BACKURL']) : '')));
80 $state = 'site_id='.SITE_ID.'&backurl='.urlencode($APPLICATION->GetCurPageParam('check_key='.\CSocServAuthManager::getUniqueKey(), array("logout
", "auth_service_error
", "auth_service_id
", "backurl
"))).'&mode='.$location.(isset($arParams['BACKURL']) ? '&redirect_url='.urlencode($arParams['BACKURL']) : '');
81 $redirect_uri = CBoxOAuthInterface::GetRedirectURI();
84 return $this->entityOAuth->GetAuthUrl($redirect_uri, $state);
87 public function getStorageToken()
90 $userId = intval($this->userId);
93 $dbSocservUser = \Bitrix\Socialservices\UserTable::getList([
94 'filter' => ['=USER_ID' => $userId, "=EXTERNAL_AUTH_ID
" => static::ID],
95 'select' => ["USER_ID
", "OATOKEN
", "REFRESH_TOKEN
", "OATOKEN_EXPIRES
"]
97 if($arOauth = $dbSocservUser->fetch())
99 $accessToken = $arOauth["OATOKEN
"];
100 $accessTokenExpires = $arOauth["OATOKEN_EXPIRES
"];
102 $entityOauth = $this->getEntityOAuth();
103 $entityOauth->setToken($accessToken);
104 $entityOauth->setAccessTokenExpires($accessTokenExpires);
106 if($entityOauth->checkAccessToken())
110 elseif(isset($arOauth["REFRESH_TOKEN
"]))
112 if($entityOauth->getNewAccessToken($arOauth["REFRESH_TOKEN
"], $arOauth["USER_ID
"],true))
114 return $entityOauth->getToken();
123 public function prepareUser($boxUser, $short = false)
125 $nameDetails = explode(" ", $boxUser['name'], 2);
127 $id = $boxUser['id'];
130 'EXTERNAL_AUTH_ID' => static::ID,
132 'LOGIN' => static::LOGIN_PREFIX.$id,
133 'NAME'=> $nameDetails[0],
134 'LAST_NAME'=> $nameDetails[1],
135 'EMAIL' => $boxUser["login
"],
136 'OATOKEN' => $this->entityOAuth->getToken(),
137 'OATOKEN_EXPIRES' => $this->entityOAuth->getAccessTokenExpires(),
138 'REFRESH_TOKEN' => $this->entityOAuth->getRefreshToken(),
141 if(!$short && !empty($boxUser['avatar_url']))
143 $picture_url = $boxUser['avatar_url'];
144 $temp_path = CFile::GetTempName('', 'picture.jpg');
146 $ob = new HttpClient(array(
149 $ob->download($picture_url, $temp_path);
151 $arPic = CFile::MakeFileArray($temp_path);
154 $arFields["PERSONAL_PHOTO
"] = $arPic;
160 $arFields["SITE_ID"] = SITE_ID;
166 public function Authorize()
169 $APPLICATION->RestartBuffer();
172 $bProcessState = false;
173 $authError = SOCSERV_AUTHORISATION_ERROR;
176 isset($_REQUEST["code
"]) && $_REQUEST["code
"] <> '' && CSocServAuthManager::CheckUniqueKey()
179 $bProcessState = true;
180 $this->entityOAuth = $this->getEntityOAuth($_REQUEST['code']);
182 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
184 $redirect_uri = static::CONTROLLER_URL."/redirect.php
";
188 $redirect_uri = $this->getEntityOAuth()->GetRedirectURI();
191 if($this->entityOAuth->GetAccessToken($redirect_uri) !== false)
194 $boxUser = $this->entityOAuth->GetCurrentUser();
196 if(is_array($boxUser))
198 $arFields = self::prepareUser($boxUser);
199 $authError = $this->AuthorizeUser($arFields);
200 $bSuccess = $authError === true;
205 $url = ($APPLICATION->GetCurDir() == "/login/
") ? "" : $APPLICATION->GetCurDir();
206 $aRemove = array("logout
", "auth_service_error
", "auth_service_id
", "code
", "error_reason
", "error
", "error_description
", "check_key
", "current_fieldset
");
210 unset($_REQUEST["state
"]);
215 if(isset($_REQUEST["state
"]))
218 parse_str($_REQUEST["state
"], $arState);
220 if(isset($arState['backurl']) || isset($arState['redirect_url']))
222 $url = !empty($arState['redirect_url']) ? $arState['redirect_url'] : $arState['backurl'];
223 if(mb_substr($url, 0, 1) !== "#
")
225 $parseUrl = parse_url($url);
227 $urlPath = $parseUrl["path"];
228 $arUrlQuery = explode('&', $parseUrl["query
"]);
230 foreach($arUrlQuery as $key => $value)
232 foreach($aRemove as $param)
234 if(mb_strpos($value, $param."=
") === 0)
236 unset($arUrlQuery[$key]);
242 $url = (!empty($arUrlQuery)) ? $urlPath.'?'.implode("&
", $arUrlQuery) : $urlPath;
250 if(isset($arState['mode']))
252 $mode = $arState['mode'];
256 if($authError === SOCSERV_REGISTRATION_DENY)
258 $url = (preg_match("/\?/
", $url)) ? $url.'&' : $url.'?';
259 $url .= 'auth_service_id='.static::ID.'&auth_service_error='.SOCSERV_REGISTRATION_DENY;
261 elseif($bSuccess !== true)
263 $url = (isset($urlPath)) ? $urlPath.'?auth_service_id='.static::ID.'&auth_service_error='.$authError : $APPLICATION->GetCurPageParam(('auth_service_id='.static::ID.'&auth_service_error='.$authError), $aRemove);
266 if($addParams && CModule::IncludeModule("socialnetwork
") && mb_strpos($url, "current_fieldset=
") === false)
268 $url = (preg_match("/\?/
", $url)) ? $url."¤t_fieldset=SOCSERV
" : $url."?current_fieldset=SOCSERV
";
271 $url = CUtil::JSEscape($url);
275 $location = ($mode == "opener
") ? 'if(window.opener) window.opener.location = \''.$url.'\'; window.close();' : ' window.location = \''.$url.'\';';
280 $location = ($mode == "opener
") ? 'if(window.opener) window.opener.location = window.opener.location.href + \''.$url.'\'; window.close();' : ' window.location = window.location.href + \''.$url.'\';';
291 CMain::FinalActions();
295class CBoxOAuthInterface extends CSocServOAuthTransport
297 const SERVICE_ID = "Box
";
299 const AUTH_URL = "https:
300 const TOKEN_URL =
"https://app.box.com/api/oauth2/token";
323 return \CHTTP::URN2URI(
"/bitrix/tools/oauth/box.php");
328 return static::AUTH_URL.
329 "?client_id=".urlencode($this->appID).
330 "&redirect_uri=".urlencode($redirect_uri).
331 "&response_type=code".
332 ($state <>
'' ?
'&state='.urlencode($state) :
'');
343 $this->access_token = $token[
"OATOKEN"];
344 $this->accessTokenExpires = $token[
"OATOKEN_EXPIRES"];
350 elseif(isset($token[
"REFRESH_TOKEN"]))
362 if($this->code ===
false)
370 "client_id"=>$this->appID,
371 "client_secret"=>$this->appSecret,
372 "redirect_uri"=>$redirect_uri,
373 "grant_type"=>
"authorization_code",
376 $this->oauthResult = Json::decode(
$result);
378 if(isset($this->oauthResult[
"access_token"]) && $this->oauthResult[
"access_token"] <>
'')
380 $this->access_token = $this->oauthResult[
"access_token"];
381 $this->accessTokenExpires = time() + $this->oauthResult[
"expires_in"];
383 if(isset($this->oauthResult[
"refresh_token"]) && $this->oauthResult[
"refresh_token"] <>
'')
385 $this->refresh_token = $this->oauthResult[
"refresh_token"];
388 $_SESSION[
"OAUTH_DATA"] =
array(
389 "OATOKEN" => $this->access_token,
399 if($this->appID ==
false || $this->appSecret ==
false)
404 if($refreshToken ==
false)
406 $refreshToken = $this->refresh_token;
412 'client_id' => $this->appID,
413 'client_secret' => $this->appSecret,
414 'refresh_token' => $refreshToken,
415 'grant_type' =>
'refresh_token',
422 $this->access_token =
$arResult[
"access_token"];
423 $this->accessTokenExpires = time() +
$arResult[
"expires_in"];
424 $this->refresh_token =
$arResult[
"refresh_token"];
428 $dbSocservUser = \Bitrix\Socialservices\UserTable::getList([
436 $arOauth = $dbSocservUser->fetch();
440 \Bitrix\Socialservices\UserTable::update(
441 $arOauth[
"ID"],
array(
442 "OATOKEN" => $this->access_token,
443 "OATOKEN_EXPIRES" => $this->accessTokenExpires,
444 "REFRESH_TOKEN" => $this->refresh_token,
458 if($this->access_token ===
false)
462 $h->setHeader(
"Authorization",
"Bearer ".$this->access_token);
464 $result = $h->get(static::ACCOUNT_URL);
470 $result[
"access_token"] = $this->access_token;
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
__construct($appID=false, $appSecret=false, $code=false)
getNewAccessToken($refreshToken=false, $userId=0, $save=false, $scope=array())
GetAccessToken($redirect_uri)
GetAuthUrl($redirect_uri, $state='')
getEntityOAuth($code=false)
getUrl($location='opener', $addScope=null, $arParams=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)