Вход Регистрация
Файл: library/XenForo/Helper/Facebook.php
Строк: 171
<?php

/**
 * Helper for Facebook integration.
 *
 * @package XenForo_Facebook
 */
class XenForo_Helper_Facebook
{
    
/**
     * Takes a code (with a redirect URL) and gets an access token.
     *
     * @param string $url
     * @param string $code
     *
     * @return array|false Array of info (may be error); false if Facebook integration not active
     */
    
public static function getAccessToken($url$code)
    {
        
$options XenForo_Application::get('options');

        if (!
$options->facebookAppId)
        {
            return 
false;
        }

        try
        {
            
$client XenForo_Helper_Http::getClient('https://graph.facebook.com/oauth/access_token');
            
$client->setParameterGet(array(
                
'client_id' => $options->facebookAppId,
                
'redirect_uri' => $url,
                
'client_secret' => $options->facebookAppSecret,
                
'code' => $code
            
));

            
$response $client->request('GET');

            
$body $response->getBody();
            if (
preg_match('#^[{[]#'$body))
            {
                
$parts json_decode($bodytrue);
            }
            else
            {
                
$parts XenForo_Application::parseQueryString($body);
            }

            return 
$parts;
        }
        catch (
Zend_Http_Client_Exception $e)
        {
            return 
false;
        }
    }

    public static function 
getAccessTokenFromCode($code$redirectUri false)
    {
        if (!
$redirectUri)
        {
            
$requestPaths XenForo_Application::get('requestPaths');
            
$redirectUri preg_replace('#(&|?)code=[^&]*#'''$requestPaths['fullUri']);
        }
        else
        {
            
// FB does this strange thing with slashes after a ? for some reason
            
$parts explode('?'$redirectUri2);
            if (isset(
$parts[1]))
            {
                
$redirectUri $parts[0] . '?' str_replace('/''%2F'$parts[1]);
            }
        }

        return 
XenForo_Helper_Facebook::getAccessToken($redirectUri$code);
    }

    
/**
     * Gets Facebook user info from the specified place.
     *
     * @param string $accessToken FB access token (from code swap, or given by user); may be empty
     * @param string $path Path to access (defaults to "me")
     *
     * @return array Info; may be error
     */
    
public static function getUserInfo($accessToken$path 'me')
    {
        try
        {
            
$client XenForo_Helper_Http::getClient('https://graph.facebook.com/' $path);
            if (
$accessToken)
            {
                
$client->setParameterGet('access_token'$accessToken);
            }

            
$response $client->request('GET');
            return 
json_decode($response->getBody(), true);
        }
        catch (
Zend_Http_Client_Exception $e)
        {
            return 
false;
        }
    }

    
/**
     * Gets the user picture for the current user.
     *
     * @param string $accessToken FB access token (from code swap, or given by user)
     * @param string $size Size/type of picture. Defaults to large
     *
     * @return string Binary data
     */
    
public static function getUserPicture($accessToken$size 'large')
    {
        try
        {
            
$client XenForo_Helper_Http::getClient('https://graph.facebook.com/me/picture?type=' $size);
            
$client->setParameterGet('access_token'$accessToken);

            
$response $client->request('GET');

            return 
$response->getBody();
        }
        catch (
Zend_Http_Client_Exception $e)
        {
            return 
false;
        }
    }

    
/**
     * Sets the fbUid cookie that is used by the JavaScript.
     *
     * @param integer $fbUid 64-bit int of FB user ID
     */
    
public static function setUidCookie($fbUid)
    {
        
XenForo_Helper_Cookie::setCookie('fbUid'$fbUid14 86400);
    }

    
/**
     * Gets the URL to request Facebook permissions.
     *
     * @param string $redirectUri URL to return to
     * @param string|null $appId Facebook app ID
     * @param string|null $state CSRF Protection
     *
     * @return string
     */
    
public static function getFacebookRequestUrl($redirectUri$appId null$state null)
    {
        
$perms 'email,publish_stream,user_birthday,user_status,user_website,user_location';

        if (!
$appId)
        {
            
$appId XenForo_Application::get('options')->facebookAppId;
        }

        if (!
$state)
        {
            
$state md5(uniqid('xf'true));
        }

        
$session XenForo_Application::getSession();
        
$session->set('fbCsrfState'$state);

        return 
'https://www.facebook.com/dialog/oauth?client_id=' $appId
            
'&scope=' $perms
            
'&state=' $state
            
'&redirect_uri=' urlencode($redirectUri);
    }

    public static function 
getFacebookRequestErrorInfo($result$expectedKey false)
    {
        if (!
$result)
        {
            return new 
XenForo_Phrase('your_server_could_not_connect_to_facebook');
        }
        if (!
is_array($result))
        {
            return new 
XenForo_Phrase('facebook_returned_unknown_error');
        }
        if (!empty(
$result['error']['message']))
        {
            return new 
XenForo_Phrase('facebook_returned_following_error_x', array('error' => $result['error']['message']));
        }
        if (
$expectedKey && !isset($result[$expectedKey]))
        {
            return new 
XenForo_Phrase('facebook_returned_unknown_error');
        }

        return 
false;
    }
}
Онлайн: 3
Реклама