public function Authorize($identity=false, $var=false) { if($var === false) $var = 'OPENID_IDENTITY_OPENID'; $step = TrCOpenIDClient::GetOpenIDAuthStep($var); if($step > 0) { $obOpenID = new TrCOpenIDClient(); if($step == 2) { return $obOpenID->Authorize(); } elseif($step == 1) { if($identity === false) $identity = $_POST['OPENID_IDENTITY_OPENID']; $return_to = TrCSocServUtil::GetCurUrl("auth_service_id=".urlencode($_REQUEST["auth_service_id"])); if($url = $obOpenID->GetRedirectUrl($identity, $return_to)) LocalRedirect($url, true); else return false; } } return false; }
public function Authorize() { $GLOBALS["APPLICATION"]->RestartBuffer(); $bSuccess = false; if(isset($_REQUEST["code"]) && $_REQUEST["code"] <> '') { $redirect_uri = TrCSocServUtil::ServerName()."/bitrix/tools/oauth/google.php"; $appID = self::GetOption("google_appid"); $appSecret = self::GetOption("google_appsecret"); $gAuth = new TrCGoogleOAuthInterface($appID, $appSecret, $_REQUEST["code"]); if($gAuth->GetAccessToken($redirect_uri) !== false) { $arGoogleUser = $gAuth->GetCurrentUser(); if($arGoogleUser['feed']['author']['0']['email']['$t'] <> '') { $first_name = $last_name = ""; if($arGoogleUser['feed']['author']['0']['name']['$t'] <> '') { $aName = explode(" ", $arGoogleUser['feed']['author']['0']['name']['$t']); $first_name = $aName[0]; if(isset($aName[1])) $last_name = $aName[1]; } $email = $arGoogleUser['feed']['author']['0']['email']['$t']; $arFields = array( 'EXTERNAL_AUTH_ID' => self::ID, 'XML_ID' => $email, 'LOGIN' => $email, 'EMAIL' => $email, 'NAME'=> $first_name, 'LAST_NAME'=> $last_name, ); $bSuccess = $this->AuthorizeUser($arFields); } } } $url = '/auth/'; if(isset($_REQUEST["state"])) { $arState = array(); parse_str($_REQUEST["state"], $arState); if(isset($arState['backurl'])) $url = $arState['backurl']; } if(!$bSuccess) $url .= (strpos($url, '?') === false? '?':'&').'auth_service_id='.self::ID.'&auth_service_error=1'; echo ' <script type="text/javascript"> if(window.opener) window.opener.location = \''.CUtil::JSEscape($url).'\'; window.close(); </script> '; die(); }