getMessage( 'socserv_mailru2_sett_note_2', array( '#URL#' => $this->getEntityOAuth()->getRedirectUri(), '#MAIL_URL#' => \CHttp::urn2uri('/bitrix/tools/mail_oauth.php'), ) ), ), ); } /** * @param string|bool $code = false * @return CMailRu2Interface */ public function getEntityOAuth($code = false) { if (!$this->entityOAuth) { $this->entityOAuth = new CMailRu2Interface(); } if ($code !== false) { $this->entityOAuth->setCode($code); } return $this->entityOAuth; } public function GetFormHtml($arParams) { $url = $this->getUrl($arParams); $phrase = ($arParams["FOR_INTRANET"]) ? GetMessage("socserv_mailru2_note_intranet") : GetMessage("socserv_mailru2_note"); return $arParams["FOR_INTRANET"] ? array("ON_CLICK" => 'onclick="BX.util.popup(\'' . htmlspecialcharsbx(CUtil::JSEscape($url)) . '\', 460, 420)"') : '' . $phrase . ''; } public function GetOnClickJs($arParams) { $url = $this->getUrl($arParams); return "BX.util.popup('" . CUtil::JSEscape($url) . "', 460, 420)"; } public function getUrl($arParams) { global $APPLICATION; if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME')) { $redirect_uri = static::CONTROLLER_URL . "/redirect.php"; $state = $this->getEntityOAuth()->GetRedirectURI() . "?check_key=" . \CSocServAuthManager::getUniqueKey() . "&state="; $backurl = $APPLICATION->GetCurPageParam('', array("logout", "auth_service_error", "auth_service_id", "backurl")); $state .= urlencode("state=" . urlencode("backurl=" . urlencode($backurl) . (isset($arParams['BACKURL']) ? '&redirect_url=' . urlencode($arParams['BACKURL']) : ''))); } else { $state = 'site_id=' . SITE_ID . '&backurl=' . urlencode($APPLICATION->GetCurPageParam('check_key=' . \CSocServAuthManager::getUniqueKey(), array("logout", "auth_service_error", "auth_service_id", "backurl"))) . (isset($arParams['BACKURL']) ? '&redirect_url=' . urlencode($arParams['BACKURL']) : ''); $redirect_uri = $this->getEntityOAuth()->GetRedirectURI(); } return $this->getEntityOAuth()->GetAuthUrl($redirect_uri, $state); } public function addScope($scope) { return $this->getEntityOAuth()->addScope($scope); } public function prepareUser($arUser, $short = false) { $entityOAuth = $this->getEntityOAuth(); $arFields = array( 'EXTERNAL_AUTH_ID' => self::ID, 'XML_ID' => $arUser["email"], 'LOGIN' => $arUser["email"], 'EMAIL' => $arUser["email"], 'NAME' => $arUser["first_name"], 'LAST_NAME' => $arUser["last_name"], 'OATOKEN' => $entityOAuth->getToken(), 'OATOKEN_EXPIRES' => $entityOAuth->getAccessTokenExpires(), ); if (!$short && isset($arUser['image'])) { $picture_url = $arUser['image']; $temp_path = CFile::GetTempName('', 'picture.jpg'); $ob = new HttpClient(array( "redirect" => true )); $ob->download($picture_url, $temp_path); $arPic = CFile::MakeFileArray($temp_path); if ($arPic) { $arFields["PERSONAL_PHOTO"] = $arPic; } } if (isset($arUser['birthday'])) { if ($date = MakeTimeStamp($arUser['birthday'], "MM/DD/YYYY")) { $arFields["PERSONAL_BIRTHDAY"] = ConvertTimeStamp($date); } } if (isset($arUser['gender']) && $arUser['gender'] != '') { if ($arUser['gender'] == 'm') { $arFields["PERSONAL_GENDER"] = 'M'; } elseif ($arUser['gender'] == 'f') { $arFields["PERSONAL_GENDER"] = 'F'; } } if (SITE_ID <> '') { $arFields["SITE_ID"] = SITE_ID; } return $arFields; } public function Authorize() { global $APPLICATION; $APPLICATION->RestartBuffer(); $authError = SOCSERV_AUTHORISATION_ERROR; if ( isset($_REQUEST["code"]) && $_REQUEST["code"] <> '' && CSocServAuthManager::CheckUniqueKey() ) { if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME')) { $redirect_uri = static::CONTROLLER_URL . "/redirect.php"; } else { $redirect_uri = $this->getEntityOAuth()->GetRedirectURI(); } $entityOAuth = $this->getEntityOAuth($_REQUEST['code']); if ($entityOAuth->GetAccessToken($redirect_uri) !== false) { $arUser = $entityOAuth->GetCurrentUser(); if (is_array($arUser) && isset($arUser["email"])) { $arFields = $this->prepareUser($arUser); $authError = $this->AuthorizeUser($arFields); } } } $bSuccess = $authError === true; $url = ($APPLICATION->GetCurDir() == "/login/") ? "" : $APPLICATION->GetCurDir(); $aRemove = array("logout", "auth_service_error", "auth_service_id", "code", "error_reason", "error", "error_description", "check_key", "current_fieldset"); if (isset($_REQUEST["state"]) && $bSuccess) { $arState = array(); parse_str($_REQUEST["state"], $arState); if (isset($arState['backurl']) || isset($arState['redirect_url'])) { $url = !empty($arState['redirect_url']) ? $arState['redirect_url'] : $arState['backurl']; if (mb_substr($url, 0, 1) !== "#") { $parseUrl = parse_url($url); $urlPath = $parseUrl["path"]; $arUrlQuery = explode('&', $parseUrl["query"]); foreach ($arUrlQuery as $key => $value) { foreach ($aRemove as $param) { if (mb_strpos($value, $param."=") === 0) { unset($arUrlQuery[$key]); break; } } } $url = (!empty($arUrlQuery)) ? $urlPath . '?' . implode("&", $arUrlQuery) : $urlPath; } } } if ($authError === SOCSERV_REGISTRATION_DENY) { $url = (preg_match("/\?/", $url)) ? $url . '&' : $url . '?'; $url .= 'auth_service_id=' . self::ID . '&auth_service_error=' . $authError; } elseif ($bSuccess !== true) { $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); } if (CModule::IncludeModule("socialnetwork") && mb_strpos($url, "current_fieldset=") === false) { $url .= ((mb_strpos($url, "?") === false) ? '?' : '&') . "current_fieldset=SOCSERV"; } ?>