3use Bitrix\Bitrix24\Integration\Network\Broadcast;
4use Bitrix\Bitrix24\License;
13Loc::loadMessages(__FILE__);
15if(!defined(
'B24NETWORK_NODE'))
23 elseif(defined(
'B24NETWORK_URL'))
25 define(
'B24NETWORK_NODE', B24NETWORK_URL);
27 elseif (in_array(Application::getInstance()->getLicense()->getRegion(), [
'ru',
'by',
'kz',
'uz']))
29 define(
'B24NETWORK_NODE',
'https://auth2.bitrix24.net');
33 define(
'B24NETWORK_NODE',
'https://www.bitrix24.net');
49 if (!empty($additionalParams))
52 foreach ($additionalParams as
$key => $value)
62 $value = Json::encode($value);
67 $value = (string)$value;
70 $postfix .=
" {$key}[{$value}];";
76 AddMessage2Log(
"SocServBitrix24Net: {$message}",
'socialservices');
82 const ID =
"Bitrix24Net";
90 array(
"bitrix24net_domain", Loc::getMessage(
"socserv_b24net_domain"),
"",
array(
"statictext")),
91 array(
"bitrix24net_id", Loc::getMessage(
"socserv_b24net_id"),
"",
array(
"text", 40)),
92 array(
"bitrix24net_secret", Loc::getMessage(
"socserv_b24net_secret"),
"",
array(
"text", 40)),
107 $phrase = (
$arParams[
"FOR_INTRANET"]) ? Loc::getMessage(
"socserv_b24net_note_intranet") : Loc::getMessage(
"socserv_b24net_note");
111 : '<a href="javascript:void(0)
" onclick="BX.util.popup(\
''.
htmlspecialcharsbx(CUtil::JSEscape(
$url)).
'\', 800, 600)
" class="bx-ss-button bitrix24net-button bitrix24net-button-
'.LANGUAGE_ID.'"></a><span class="bx-spacer
"></span><span>'.$phrase.'</span>';
114 public function GetOnClickJs()
116 $url = $this->getUrl("popup
");
117 return "BX.util.popup(
'".CUtil::JSEscape($url)."', 800, 600)
";
120 public function getEntityOAuth($code = false)
122 if(!$this->entityOAuth)
124 $this->entityOAuth = new CBitrix24NetOAuthInterface();
129 $this->entityOAuth->setCode($code);
132 return $this->entityOAuth;
135 public function getUrl($mode = "page
")
137 $redirectUri = CSocServUtil::GetCurUrl(
138 'auth_service_id='.self::ID,
143 $backUrl = $GLOBALS["APPLICATION
"]->GetCurPageParam(
144 'check_key=' . CSocServAuthManager::GetUniqueKey(),
147 'auth_service_error',
153 \Bitrix\Main\HttpRequest::getSystemParameters(),
158 'check_key' => \CSocServAuthManager::getUniqueKey(),
159 'redirect_url' => $backUrl,
164 $stateFields['admin'] = 1;
168 $stateFields['site_id'] = SITE_ID;
170 $state = StateService::getInstance()->createState($stateFields);
172 return $this->getEntityOAuth()->GetAuthUrl($redirectUri, $state, $mode);
175 public function getInviteUrl($userId, $checkword)
177 return $this->getEntityOAuth()->GetInviteUrl($userId, $checkword);
180 public function addScope($scope)
182 return $this->getEntityOAuth()->addScope($scope);
185 public function Authorize($skipCheck = false)
188 $APPLICATION->RestartBuffer();
190 $bProcessState = false;
191 $authError = SOCSERV_AUTHORISATION_ERROR;
197 (isset($_REQUEST["code
"]) && $_REQUEST["code
"] <> '')
198 && CSocServAuthManager::CheckUniqueKey()
202 $redirect_uri = \CHTTP::URN2URI('/bitrix/tools/oauth/bitrix24net.php');
203 $bProcessState = true;
206 if (isset($_REQUEST["state
"]))
208 $arState = StateService::getInstance()->getPayload((string)$_REQUEST["state
"]);
209 $bAdmin = isset($arState['admin']);
213 $this->checkRestrictions = false;
214 $this->addScope("admin
");
219 $this->getEntityOAuth()->setCode($_REQUEST["code
"]);
222 if (isset($_REQUEST['saml']) && is_string($_REQUEST['saml']))
224 $this->getEntityOAuth()->setSamlEncodedValue($_REQUEST['saml']);
227 if ($this->getEntityOAuth()->GetAccessToken($redirect_uri) !== false)
229 $arB24NetUser = $this->getEntityOAuth()->GetCurrentUser();
235 'EXTERNAL_AUTH_ID' => self::ID,
236 'XML_ID' => $arB24NetUser["ID"],
237 'LOGIN' => isset($arB24NetUser['LOGIN']) ? $arB24NetUser['LOGIN'] : "B24_
".$arB24NetUser["ID"],
238 'NAME' => $arB24NetUser["NAME
"],
239 'LAST_NAME' => $arB24NetUser["LAST_NAME
"],
240 'EMAIL' => $arB24NetUser["EMAIL"],
241 'PERSONAL_WWW' => $arB24NetUser["PROFILE
"],
242 'OATOKEN' => $this->getEntityOAuth()->getToken(),
243 'REFRESH_TOKEN' => $this->getEntityOAuth()->getRefreshToken(),
244 'OATOKEN_EXPIRES' => $this->getEntityOAuth()->getAccessTokenExpires(),
247 foreach(GetModuleEvents("socialservices
", "OnBeforeNetworkUserAuthorize
", true) as $arEvent)
249 if (ExecuteModuleEventEx($arEvent, array(&$arFields, $arB24NetUser, $this)) === false)
251 $authError = SOCSERV_AUTHORISATION_ERROR;
252 $errorMessage = $APPLICATION->GetException();
258 if ($authError === true)
262 $arFields["SITE_ID"] = SITE_ID;
265 $bSaveNetworkAuth = COption::GetOptionString("main
", "allow_external_auth_stored_hash
", "N
") == "Y
";
266 $authError = $this->AuthorizeUser($arFields, $bSaveNetworkAuth);
270 if ($authError !== true && !IsModuleInstalled('bitrix24'))
272 $this->getEntityOAuth()->RevokeAuth();
276 global $CACHE_MANAGER, $USER;
277 $CACHE_MANAGER->Clean("sso_portal_list_
".$USER->GetID());
282 $bSuccess = $authError === true;
286 CSocServAuthManager::SetAuthorizedServiceId(self::ID);
289 // hack to update option used for visualization in module options
290 if ($bSuccess && !self::GetOption("bitrix24net_domain
"))
292 $request = \Bitrix\Main\Context::getCurrent()->getRequest();
293 self::SetOption("bitrix24net_domain
", ($request->isHttps() ? "https:
296 $aRemove = array_merge(
array(
"auth_service_error",
"auth_service_id",
"code",
"error_reason",
"error",
"error_description",
"check_key",
"current_fieldset",
"checkword"), \
Bitrix\Main\HttpRequest::getSystemParameters());
309 $arState = StateService::getInstance()->getPayload((
string)
$_REQUEST[
"state"]) ?? [];
310 if (isset($arState[
'backurl']) || isset($arState[
'redirect_url']))
312 $parseUrl = parse_url(isset($arState[
'redirect_url']) ? $arState[
'redirect_url'] : $arState[
'backurl']);
314 $urlPath = $parseUrl[
"path"];
315 $arUrlQuery = explode(
'&', $parseUrl[
"query"]);
317 foreach($arUrlQuery as
$key => $value)
319 foreach($aRemove as $param)
321 if (mb_strpos($value, $param.
"=") === 0)
323 unset($arUrlQuery[
$key]);
329 $url = (!empty($arUrlQuery)) ? $urlPath.
'?'.implode(
"&", $arUrlQuery) : $urlPath;
332 if (isset($arState[
'mode']))
334 $mode = $arState[
'mode'];
338 if (
$url ==
'' || preg_match(
"'^(http://|https://|ftp://|//)'i",
$url))
340 $url = \CHTTP::URN2URI(
'/');
347 unset($_SESSION[
'B24_NETWORK_REDIRECT_TRY']);
353 if (isset($_SESSION[
'B24_NETWORK_REDIRECT_TRY']))
355 unset($_SESSION[
'B24_NETWORK_REDIRECT_TRY']);
357 $url .= (mb_strpos(
$url,
'?') >= 0 ?
'&' :
'?').
'skip_redirect=1&error_message='.urlencode(
$errorMessage);
360 $_SESSION[
'B24_NETWORK_REDIRECT_TRY'] =
true;
369 $url .=
'auth_service_id='.self::ID.
'&auth_service_error='.$authError;
371 elseif ($bSuccess !==
true)
373 $url = (isset($urlPath)) ? $urlPath.
'?auth_service_id='.self::ID.
'&auth_service_error='.$authError :
$GLOBALS[
'APPLICATION']->GetCurPageParam((
'auth_service_id='.self::
ID.
'&auth_service_error='.$authError), $aRemove);
382 if (CModule::IncludeModule(
"socialnetwork") && mb_strpos(
$url,
"current_fieldset=") ===
false)
384 $url .= ((mb_strpos(
$url,
"?") ===
false) ?
'?' :
'&').
"current_fieldset=SOCSERV";
393 ?
'if(window.opener) window.opener.location = \''.
$url.
'\'; window.close();
'
394 : 'window.location = \
''.$url.
'\';
';
401 CMain::FinalActions();
404 public static function registerSite($domain)
406 if (defined("LICENSE_KEY") && LICENSE_KEY !== "DEMO")
408 $query = new HttpClient();
409 $result = $query->get(static::NETWORK_URL.'/client.php?action=
register&redirect_uri=
'.urlencode($domain.'/bitrix/tools/oauth/bitrix24net.php
').'&key=
'.urlencode(LICENSE_KEY));
416 $arResult = Json::decode($result);
418 catch(\Bitrix\Main\ArgumentException $e)
424 if (is_array($arResult))
430 return array("error" => "Unknown response", "error_details" => $result);
435 return array("error" => "License check failed");
440class CBitrix24NetOAuthInterface
442 const NET_URL = B24NETWORK_NODE;
444 const INVITE_URL = "/invite/";
445 const PASSPORT_URL = "/id/";
446 const AUTH_URL = "/oauth/authorize/";
447 const TOKEN_URL = "/oauth/token/";
450 protected $appSecret;
451 protected $code = false;
452 protected $access_token = false;
453 protected $accessTokenExpires = 0;
454 protected $lastAuth = null;
455 protected $refresh_token = '';
456 protected $httpTimeout;
457 protected string $samlEncodedValue;
458 protected $scope = array(
461 protected ?int $samlStatus;
463 protected $arResult = array();
464 protected $networkNode;
466 public function __construct($appID = false, $appSecret = false, $code = false)
470 $appID = trim(CSocServBitrix24Net::GetOption("bitrix24net_id"));
473 if($appSecret === false)
475 $appSecret = trim(CSocServBitrix24Net::GetOption("bitrix24net_secret"));
478 list($prefix, $suffix) = explode(".", $appID, 2);
480 if($prefix === 'site
')
482 $this->addScope("client");
484 elseif($prefix == 'b24
')
486 $this->addScope('profile
');
489 $this->httpTimeout = SOCSERV_DEFAULT_HTTP_TIMEOUT;
491 $this->appID = $appID;
492 $this->appSecret = $appSecret;
495 $this->networkNode = self::NET_URL;
498 public function getAppID()
503 public function getAppSecret()
505 return $this->appSecret;
508 public function getAccessTokenExpires()
510 return $this->accessTokenExpires;
513 public function setAccessTokenExpires($accessTokenExpires)
515 $this->accessTokenExpires = $accessTokenExpires;
518 public function getToken()
520 return $this->access_token;
523 public function setToken($access_token)
525 $this->access_token = $access_token;
528 public function getRefreshToken()
530 return $this->refresh_token;
533 public function setRefreshToken($refresh_token)
535 $this->refresh_token = $refresh_token;
538 public function setCode($code)
543 public function setScope($scope)
545 $this->scope = $scope;
548 public function getScope()
553 public function addScope($scope)
556 $this->scope = array_merge($this->scope, $scope);
558 $this->scope[] = $scope;
562 public function getScopeEncode()
564 return implode(',
', array_map('urlencode
', array_unique($this->getScope())));
567 public function getSamlEncodedValue(): string
569 return $this->samlEncodedValue;
572 public function setSamlEncodedValue(string $samlEncodedValue): void
574 $this->samlEncodedValue = $samlEncodedValue;
577 public function getResult()
579 return $this->arResult;
582 public function getError()
584 return is_array($this->arResult) && isset($this->arResult['error
'])
585 ? $this->arResult['error
']
589 public function GetAuthUrl($redirect_uri, $state = '', $mode = 'popup
')
591 return $this->networkNode . self::AUTH_URL.
592 "?user_lang=".LANGUAGE_ID.
593 "&client_id=".urlencode($this->appID).
594 "&redirect_uri=".urlencode($redirect_uri).
595 "&scope=".$this->getScopeEncode().
596 "&response_type=code".
598 //($this->refresh_token <> '' ? '' : '&approval_prompt=force
').
599 ($state <> '' ? '&state=
'.urlencode($state) : '');
602 public function getInviteUrl($userId, $checkword)
604 return $this->networkNode . self::INVITE_URL.
605 "?user_lang=".LANGUAGE_ID.
606 "&client_id=".urlencode($this->appID).
607 "&profile_id=".$userId.
608 "&checkword=".$checkword;
611 public function getLastAuth()
613 return $this->lastAuth;
616 public function GetAccessToken($redirect_uri = '')
618 if ($this->code === false)
620 $token = $this->getStorageTokens();
622 // getStorageTokens returns null for unauthorized user
623 if (is_array($token))
625 $this->access_token = $token["OATOKEN"];
626 $this->accessTokenExpires = $token["OATOKEN_EXPIRES"];
629 if ($this->access_token && $this->checkAccessToken())
633 elseif (isset($token["REFRESH_TOKEN"]))
635 if ($this->getNewAccessToken($token["REFRESH_TOKEN"], $token["USER_ID"], true))
644 $http = new HttpClient([
645 'socketTimeout
' => $this->httpTimeout,
646 'streamTimeout
' => $this->httpTimeout,
649 $result = $http->get($this->networkNode . self::TOKEN_URL . '?
' . http_build_query([
650 'code
' => $this->code,
651 'client_id
' => $this->appID,
652 'client_secret
' => $this->appSecret,
653 'redirect_uri
' => $redirect_uri,
654 'scope
' => implode(',
',$this->getScope()),
655 'grant_type
' => 'authorization_code
',
662 throw new \Bitrix\Main\ArgumentException('Empty result
');
665 $arResult = Json::decode($result);
667 catch(\Bitrix\Main\ArgumentException $e)
669 CSocServBitrix24NetLogger::log("GetAccessToken", [
670 'status
' => $http->getStatus(),
671 'error
' => $http->getError(),
672 'response
' => $result,
678 if (isset($arResult["access_token"]) && $arResult["access_token"] <> '')
680 if (isset($arResult["refresh_token"]) && $arResult["refresh_token"] <> '')
682 $this->refresh_token = $arResult["refresh_token"];
685 $this->access_token = $arResult["access_token"];
686 $this->accessTokenExpires = time() + $arResult["expires_in"];
688 $this->lastAuth = $arResult;
696 public function getNewAccessToken($refreshToken = false, $userId = 0, $save = false, $scope = array())
698 if ($this->appID == false || $this->appSecret == false)
703 if ($refreshToken == false)
705 $refreshToken = $this->refresh_token;
710 $this->addScope($scope);
713 $http = new HttpClient(array(
714 'socketTimeout
' => $this->httpTimeout,
715 'streamTimeout
' => $this->httpTimeout,
718 $result = $http->get($this->networkNode . self::TOKEN_URL . '?
' . http_build_query([
719 'client_id
' => $this->appID,
720 'client_secret
' => $this->appSecret,
721 'refresh_token
' => $refreshToken,
722 'scope
' => implode(',
',$this->getScope()),
723 'grant_type
' => 'refresh_token
',
730 throw new \Bitrix\Main\ArgumentException('Empty result
');
733 $arResult = Json::decode($result);
735 catch(\Bitrix\Main\ArgumentException $e)
737 CSocServBitrix24NetLogger::log("GetNewAccessToken", [
738 'status
' => $http->getStatus(),
739 'error
' => $http->getError(),
740 'response
' => $result,
746 if (isset($arResult["access_token"]) && $arResult["access_token"] <> '')
748 $this->access_token = $arResult["access_token"];
749 $this->accessTokenExpires = time() + $arResult["expires_in"];
750 $this->refresh_token = $arResult["refresh_token"];
752 if ($save && intval($userId) > 0)
754 $dbSocservUser = UserTable::getList([
756 "=USER_ID" => intval($userId),
757 "=EXTERNAL_AUTH_ID" => CSocServBitrix24Net::ID
762 $arOauth = $dbSocservUser->fetch();
766 $arOauth["ID"], array(
767 "OATOKEN" => $this->access_token,
768 "OATOKEN_EXPIRES" => $this->accessTokenExpires,
769 "REFRESH_TOKEN" => $this->refresh_token,
781 public function GetCurrentUser()
783 if ($this->access_token)
785 $ob = new CBitrix24NetTransport($this->access_token);
786 $res = $ob->getProfile();
788 if ($res && !isset($res['error
']))
790 return $res['result
'];
797 public function RevokeAuth()
799 if ($this->access_token)
801 $ob = new CBitrix24NetTransport($this->access_token);
802 $ob->call('profile.revoke
');
806 public function UpdateCurrentUser($arFields)
808 if ($this->access_token)
810 $ob = new CBitrix24NetTransport($this->access_token);
811 $res = $ob->updateProfile($arFields);
813 if (!isset($res['error
']))
815 return $res['result
'];
822 private function getStorageTokens()
827 if (is_object($USER) && $USER->IsAuthorized())
829 $dbSocservUser = UserTable::getList([
831 '=USER_ID
' => $USER->GetID(),
832 '=EXTERNAL_AUTH_ID
' => CSocServBitrix24Net::ID
834 'select' => ["USER_ID", "OATOKEN", "OATOKEN_EXPIRES", "REFRESH_TOKEN"]
837 $accessToken = $dbSocservUser->fetch();
842 public function checkAccessToken()
844 return (($this->accessTokenExpires - 30) < time()) ? false : true;
847 public function getNetworkNode(): string
849 return $this->networkNode;
852 public function setNetworkNode(string $hostWithScheme): void
854 $this->networkNode = $hostWithScheme;
857 public function getSamlStatus(): ?int
859 return $this->samlStatus;
866class CBitrix24NetTransport
868 const SERVICE_URL = "/rest/";
870 const METHOD_METHODS = 'methods
';
872 const METHOD_PROFILE = 'profile
';
873 const METHOD_PROFILE_ADD = 'profile.add
';
874 const METHOD_PROFILE_ADD_CHECK = 'profile.add.check
';
875 const METHOD_PROFILE_UPDATE = 'profile.update
';
876 const METHOD_PROFILE_DELETE = 'profile.delete
';
877 const METHOD_PROFILE_CONTACTS = 'profile.contacts
';
878 const METHOD_PROFILE_RESTORE_PASSWORD = 'profile.password.restore
';
879 const METHOD_PROFILE_PUSH_QRCODE_AUTH_TOKEN = 'profile.pushqrcodeauthtoken
';
881 const RESTORE_PASSWORD_METHOD_EMAIL = 'EMAIL';
882 const RESTORE_PASSWORD_METHOD_PHONE = 'PHONE
';
884 const REPONSE_KEY_BROADCAST = "broadcast";
886 protected $access_token = '';
887 protected $httpTimeout = SOCSERV_DEFAULT_HTTP_TIMEOUT;
888 protected $networkNode;
890 public static function init($networkNode = null)
892 $ob = new CBitrix24NetOAuthInterface();
895 $ob->setNetworkNode($networkNode);
897 if($ob->GetAccessToken() !== false)
899 $token = $ob->getToken();
900 $transport = new self($token);
901 $transport->setNetworkNode($ob->getNetworkNode());
909 public function __construct($access_token)
911 $this->access_token = $access_token;
912 $this->networkNode = CBitrix24NetOAuthInterface::NET_URL;
915 public function getNetworkNode(): string
917 return $this->networkNode;
920 public function setNetworkNode(string $hostWithScheme): void
922 $this->networkNode = $hostWithScheme;
925 protected function prepareResponse($result)
929 throw new \Bitrix\Main\ArgumentException('Empty result
');
932 $result = Json::decode($result);
934 if(is_array($result) && isset($result["result"]) && is_array($result["result"]) && array_key_exists(static::REPONSE_KEY_BROADCAST, $result["result"]))
938 if (Loader::includeModule('bitrix24
') && class_exists(Broadcast::class))
940 Broadcast::processBroadcastData($result["result"][static::REPONSE_KEY_BROADCAST]);
946 'error
' => $e->getMessage(),
947 'file
' => "{$e->getFile()}:{$e->getLine()}",
950 unset($result["result"][static::REPONSE_KEY_BROADCAST]);
956 protected function prepareRequest(array $request, $lang = null)
958 if (Loader::includeModule('bitrix24
'))
960 $license = License::getCurrent();
961 $request['license
'] = $license->getCode();
962 $request['license_partner
'] = $license->getPartnerId();
963 if (class_exists(Broadcast::class))
965 $request["broadcast_last_check"] = Broadcast::getLastBroadcastCheck();
969 $request["user_lang"] = $lang ?? LANGUAGE_ID;
970 $request["auth"] = $this->access_token;
975 public function call($methodName, $additionalParams = null, $lang = null)
977 if(!is_array($additionalParams))
979 $additionalParams = [];
982 $request = $this->prepareRequest($additionalParams, $lang);
984 $http = new HttpClient([
985 'socketTimeout
' => $this->httpTimeout,
986 'streamTimeout
' => $this->httpTimeout,
990 $http->setCookies(['USER_LANG
' => $lang]);
992 $result = $http->post(
993 $this->networkNode . self::SERVICE_URL . $methodName,
999 $res = $this->prepareResponse($result);
1001 catch(\Bitrix\Main\ArgumentException $e)
1008 CSocServBitrix24NetLogger::log("CBitrix24NetTransport:call", [
1009 'method
' => $methodName,
1010 'status
' => $http->getStatus(),
1011 'error
' => $http->getError(),
1012 'response
' => $result,
1019 public function batch($actions)
1023 if (is_array($actions))
1025 foreach ($actions as $query_key => $arCmd)
1027 list($cmd, $arParams) = array_values($arCmd);
1028 $arBatch['cmd
'][$query_key] = $cmd.(is_array($arParams) ? '?
'.http_build_query($arParams) : '');
1032 return $this->call(self::METHOD_BATCH, $arBatch);
1035 public function getMethods()
1037 return $this->call(self::METHOD_METHODS);
1040 public function getProfile()
1042 return $this->call(self::METHOD_PROFILE);
1045 public function addProfile($arFields)
1047 return $this->call(self::METHOD_PROFILE_ADD, $arFields);
1050 public function checkProfile($arFields)
1052 return $this->call(self::METHOD_PROFILE_ADD_CHECK, $arFields);
1055 public function updateProfile($arFields)
1057 return $this->call(self::METHOD_PROFILE_UPDATE, $arFields);
1060 public function deleteProfile($ID)
1062 return $this->call(self::METHOD_PROFILE_DELETE, array("ID" => $ID));
1065 public function getProfileContacts($userId)
1067 return $this->call(self::METHOD_PROFILE_CONTACTS, array("USER_ID" => $userId));
1076 public function restoreProfilePassword($userId, $restoreMethod)
1078 return $this->call(self::METHOD_PROFILE_RESTORE_PASSWORD, array("USER_ID" => $userId, 'RESTORE_METHOD
' => $restoreMethod, 'LANGUAGE_ID
' => LANGUAGE_ID));
1086 public function pushQrCodeAuthToken(array $params)
1088 return $this->call(self::METHOD_PROFILE_PUSH_QRCODE_AUTH_TOKEN, $params, LANGUAGE_ID);
1097class CBitrix24NetPortalTransport extends CBitrix24NetTransport
1099 protected $clientId = null;
1100 protected $clientSecret = null;
1102 public static function init($networkNode = null)
1104 $result = parent::init($networkNode);
1108 $interface = new CBitrix24NetOAuthInterface();
1111 $interface->setNetworkNode($networkNode);
1113 if ($interface->getAppID())
1115 $result = new self($interface->getAppID(), $interface->getAppSecret());
1116 $result->setNetworkNode($interface->getNetworkNode());
1123 public function __construct($clientId, $clientSecret)
1125 $this->clientId = $clientId;
1126 $this->clientSecret = $clientSecret;
1128 return parent::__construct('
');
1131 protected function prepareRequest(array $request, $lang = null)
1133 $request = parent::prepareRequest($request, $lang);
1135 $request["client_id"] = $this->clientId;
1136 $request["client_secret"] = $this->clientSecret;
1137 unset($request['auth
']);
if($_SERVER $defaultValue['REQUEST_METHOD']==="GET" &&!empty($RestoreDefaults) && $bizprocPerms==="W" &&check_bitrix_sessid())
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 get($moduleId, $name, $default="", $siteId=false)
static log(string $message, array $additionalParams=[])
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
AddMessage2Log($text, $module='', $traceDepth=6, $showArgs=false)
IsModuleInstalled($module_id)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
const SOCSERV_REGISTRATION_DENY
$GLOBALS['_____370096793']