19 if(!$this->entityOAuth)
26 $this->entityOAuth->setCode(
$code);
53 return '<a href="javascript:void(0)
" onclick="BX.util.popup(\
''.
htmlspecialcharsbx(CUtil::JSEscape(
$url)).
'\', 680, 600)
" class="bx-ss-button dropbox-button
"></a><span class="bx-spacer
"></span><span>'.$phrase.'</span>';
57 public function GetOnClickJs($arParams)
59 $url = static::getUrl('opener', null, $arParams);
60 return "BX.util.popup(
'".CUtil::JSEscape($url)."', 680, 600)
";
64 public function getUrl($location = 'opener', $addScope = null, $arParams = array())
68 $this->entityOAuth = $this->getEntityOAuth();
69 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
71 $redirect_uri = static::CONTROLLER_URL."/redirect.php
";
72 $state = CDropboxOAuthInterface::GetRedirectURI()."?check_key=
".\CSocServAuthManager::getUniqueKey()."&state=
";
73 $backurl = $APPLICATION->GetCurPageParam('', array("logout
", "auth_service_error
", "auth_service_id
", "backurl
"));
75 $stateIntoState = 'mode=' . $location;
76 if (isset($arParams['BACKURL']))
78 $stateIntoState .= '&redirect_url=' . urlencode($arParams['BACKURL']);
82 $stateIntoState .= "&backurl=
" . urlencode($backurl);
84 $state .= urlencode("state=
" . urlencode($stateIntoState));
88 $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']) : '');
89 $redirect_uri = CDropboxOAuthInterface::GetRedirectURI();
92 return $this->entityOAuth->GetAuthUrl($redirect_uri, $state);
95 public function getStorageToken()
98 $userId = intval($this->userId);
101 $dbSocservUser = \Bitrix\Socialservices\UserTable::getList([
102 'filter' => ['=USER_ID' => $userId, "=EXTERNAL_AUTH_ID
" => static::ID],
103 'select' => ["OATOKEN
", "REFRESH_TOKEN
", "OATOKEN_EXPIRES
"]
105 if($arOauth = $dbSocservUser->fetch())
107 $accessToken = $arOauth["OATOKEN
"];
114 public function prepareUser($arDropboxUser, $short = false)
118 if(is_array($arDropboxUser['name']))
120 $first_name = $arDropboxUser['name']['given_name'];
121 $last_name = $arDropboxUser['name']['surname'];
124 $id = $arDropboxUser['uid'];
127 'EXTERNAL_AUTH_ID' => static::ID,
129 'LOGIN' => static::LOGIN_PREFIX.$id,
130 'NAME'=> $first_name,
131 'LAST_NAME'=> $last_name,
132 'EMAIL' => $arDropboxUser["email
"],
133 'OATOKEN' => $this->entityOAuth->getToken(),
134 'OATOKEN_EXPIRES' => $this->entityOAuth->getAccessTokenExpires(),
139 $arFields["SITE_ID"] = SITE_ID;
145 public function Authorize()
148 $APPLICATION->RestartBuffer();
151 $bProcessState = false;
152 $authError = SOCSERV_AUTHORISATION_ERROR;
155 isset($_REQUEST["code
"]) && $_REQUEST["code
"] <> '' && CSocServAuthManager::CheckUniqueKey()
158 $bProcessState = true;
160 $this->entityOAuth = $this->getEntityOAuth($_REQUEST['code']);
162 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
164 $redirect_uri = static::CONTROLLER_URL."/redirect.php
";
168 $redirect_uri = $this->getEntityOAuth()->GetRedirectURI();
171 if($this->entityOAuth->GetAccessToken($redirect_uri) !== false)
173 $arDropboxUser = $this->entityOAuth->GetCurrentUser();
174 if(is_array($arDropboxUser))
176 $arFields = self::prepareUser($arDropboxUser);
177 $authError = $this->AuthorizeUser($arFields);
178 $bSuccess = $authError === true;
183 $url = ($APPLICATION->GetCurDir() == "/login/
") ? "" : $APPLICATION->GetCurDir();
184 $aRemove = array("logout
", "auth_service_error
", "auth_service_id
", "code
", "error_reason
", "error
", "error_description
", "check_key
", "current_fieldset
");
188 unset($_REQUEST["state
"]);
193 if(isset($_REQUEST["state
"]))
196 parse_str($_REQUEST["state
"], $arState);
198 if(isset($arState['backurl']) || isset($arState['redirect_url']))
200 $url = !empty($arState['redirect_url']) ? $arState['redirect_url'] : $arState['backurl'];
201 if(mb_substr($url, 0, 1) !== "#
")
203 $parseUrl = parse_url($url);
205 $urlPath = $parseUrl["path"];
206 $arUrlQuery = explode('&', $parseUrl["query
"]);
208 foreach($arUrlQuery as $key => $value)
210 foreach($aRemove as $param)
212 if(mb_strpos($value, $param."=
") === 0)
214 unset($arUrlQuery[$key]);
220 $url = (!empty($arUrlQuery)) ? $urlPath.'?'.implode("&
", $arUrlQuery) : $urlPath;
228 if(isset($arState['mode']))
230 $mode = $arState['mode'];
234 if($authError === SOCSERV_REGISTRATION_DENY)
236 $url = (preg_match("/\?/
", $url)) ? $url.'&' : $url.'?';
237 $url .= 'auth_service_id='.static::ID.'&auth_service_error='.SOCSERV_REGISTRATION_DENY;
239 elseif($bSuccess !== true)
241 $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);
244 if($addParams && CModule::IncludeModule("socialnetwork
") && mb_strpos($url, "current_fieldset=
") === false)
246 $url = (preg_match("/\?/
", $url)) ? $url."¤t_fieldset=SOCSERV
" : $url."?current_fieldset=SOCSERV
";
249 $url = CUtil::JSEscape($url);
253 $location = ($mode == "opener
") ? 'if(window.opener) window.opener.location = \''.$url.'\'; window.close();' : ' window.location = \''.$url.'\';';
258 $location = ($mode == "opener
") ? 'if(window.opener) window.opener.location = window.opener.location.href + \''.$url.'\'; window.close();' : ' window.location = window.location.href + \''.$url.'\';';
269 CMain::FinalActions();
273class CDropboxOAuthInterface extends CSocServOAuthTransport
275 const SERVICE_ID = "Dropbox
";
277 const AUTH_URL = "https:
278 const TOKEN_URL =
"https://www.dropbox.com/oauth2/token";
280 const ACCOUNT_URL =
"https://api.dropboxapi.com/2/users/get_current_account";
301 return \CHTTP::URN2URI(
"/bitrix/tools/oauth/dropbox.php");
306 return static::AUTH_URL.
307 "?client_id=".urlencode($this->appID).
308 "&redirect_uri=".urlencode($redirect_uri).
309 "&response_type=code".
310 ($state <>
'' ?
'&state='.urlencode($state) :
'');
317 if(is_array($tokens))
319 $this->access_token = $tokens[
"OATOKEN"];
329 if($this->code ===
false)
334 $h = new \Bitrix\Main\Web\HttpClient();
337 "client_id"=>$this->appID,
338 "client_secret"=>$this->appSecret,
339 "redirect_uri"=>$redirect_uri,
340 "grant_type"=>
"authorization_code",
345 if(isset($this->oauthResult[
"access_token"]) && $this->oauthResult[
"access_token"] <>
'')
347 if(isset($this->oauthResult[
"refresh_token"]) && $this->oauthResult[
"refresh_token"] <>
'')
349 $this->refresh_token = $this->oauthResult[
"refresh_token"];
351 $this->access_token = $this->oauthResult[
"access_token"];
353 $_SESSION[
"OAUTH_DATA"] =
array(
354 "OATOKEN" => $this->access_token,
364 if($this->access_token ===
false)
367 $h = new \Bitrix\Main\Web\HttpClient();
368 $h->setHeader(
"Authorization",
"Bearer ".$this->access_token);
369 $h->setHeader(
"Content-Type",
"");
371 $result = $h->post(static::ACCOUNT_URL);
377 $result[
"uid"] = $this->oauthResult[
'uid'];
378 $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)
GetAccessToken($redirect_uri)
GetAuthUrl($redirect_uri, $state='')
getEntityOAuth($code=false)
</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)