Your IP : 172.28.240.42


Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/socialservices/classes/general/
Upload File :
Current File : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/socialservices/classes/general/vkontakte.php

<?
IncludeModuleLangFile(__FILE__);

class CSocServVKontakte extends CSocServAuth
{
	const ID = "VKontakte";
	
	public function GetSettings()
	{
		return array(
			array("vkontakte_appid", GetMessage("socserv_vk_id"), "", Array("text", 40)),
			array("vkontakte_appsecret", GetMessage("socserv_vk_key"), "", Array("text", 40)),
			array("note"=>GetMessage("socserv_vk_sett_note")),
		);
	}

	public function GetFormHtml($arParams)
	{
		$aRemove = array("logout", "auth_service_error", "auth_service_id");
		$url_err = $GLOBALS['APPLICATION']->GetCurPageParam('auth_service_id='.self::ID.'&auth_service_error=1', $aRemove);
		$url_ok = $GLOBALS['APPLICATION']->GetCurPageParam('', $aRemove);

		$script = '
<script type="text/javascript" src="http://vkontakte.ru/js/api/openapi.js"></script>
<script type="text/javascript">
BX.ready(function(){VK.init({apiId: \''.CUtil::JSEscape(self::GetOption("vkontakte_appid")).'\'});});

function BxVKAuthInfo(response) 
{
	var url_err = \''.CUtil::JSEscape($url_err).'\';
	if(response.session) 
	{
		var url_post = \''.CUtil::JSEscape($arParams["~AUTH_URL"]).'\';
		var url_ok = \''.CUtil::JSEscape($url_ok).'\';
		var data = {
			"auth_service_id": "'.self::ID.'",
			"vk_session": response.session
		};
		BX.ajax.post(url_post, data, function(res){window.location = (res == "OK"? url_ok : url_err);});
	} 
	else 
	{
		window.location = url_err;
	}
}
</script>
';
		CUtil::InitJSCore(array("ajax"));
		$GLOBALS['APPLICATION']->AddHeadString($script, true);

		$s = '
<a href="javascript:void(0)" onclick="VK.Auth.login(BxVKAuthInfo);" class="bx-ss-button vkontakte-button"></a><span class="bx-spacer"></span><span>'.GetMessage("socserv_vk_note").'</span>';
		return $s;
	}
	
	public function Authorize()
	{
		$GLOBALS["APPLICATION"]->RestartBuffer();
		
		if(isset($_REQUEST["vk_session"]["user"]["id"]))
		{
			if(self::CheckUserData($_REQUEST["vk_session"]["sig"]))
			{
				CUtil::decodeURIComponent($_REQUEST);

				$u_id = $_REQUEST["vk_session"]["user"]["id"];
				$arFields = array(
					'EXTERNAL_AUTH_ID' => self::ID,
					'XML_ID' => $u_id,
					'LOGIN' => "id".$u_id,
					'NAME'=> $_REQUEST["vk_session"]["user"]["first_name"],
					'LAST_NAME'=> $_REQUEST["vk_session"]["user"]["last_name"],
				);
				
				if($this->AuthorizeUser($arFields))
					die("OK");
			}
		}
		die("FAILURE");
	}
	
	protected function CheckUserData($control_sign)
	{
		$APP_ID = self::GetOption("vkontakte_appid");
		$APP_SECRET = self::GetOption("vkontakte_appsecret");

		$app_cookie = $_COOKIE['vk_app_'.$APP_ID];
		if($app_cookie == '') 
			return false;

		$session = array();
		parse_str($app_cookie, $session);

		static $valid_keys = array('expire'=>1, 'mid'=>1, 'secret'=>1, 'sid'=>1, 'sig'=>1);
		foreach($valid_keys as $key=>$v) 
			if(!isset($session[$key])) 
				return false;
    	
    	ksort($session);

		$sign = '';
		foreach($session as $key=>$value) 
			if($key <> 'sig' && array_key_exists($key, $valid_keys)) 
				$sign .= ($key.'='.$value);

		$sign .= $APP_SECRET;
		$sign = md5($sign);

		if($control_sign === $sign && $control_sign === $session['sig'] && $session['expire'] > time()) 
			return true;

  		return false;
	}
}

?>