Вход Регистрация
Файл: IPBMafia.ru_IPB_3.4.6_Final_Rus _Nulled/board/upload/ips_kernel/facebook/facebookoauth.php
Строк: 172
<?php

/**
 * Simple oAuth wrapper for Facebook
 * Designed to stream line log in  and token exchange
 * By Matt Mecham (Invision Power Services, Inc)
 * http://www.invisionpower.com
 * April 2010
 *
 * Version 0.1
 */

class FacebookOAuth
{
    
/**
     * Facebook Application ID
     * @var        int
     * @access    protected
     */
    
protected $_appId;
     
     
/**
      * Facebook Application Secret 
      * @var    string
      * @access    protected
      */
    
protected $_appSecret;
     
    
/**
     * Call back URL
     * URL to redirect oAuth requests to after processing at Facebook
     * @var    string
     * @access    protected
     */
    
protected $_callBackUrl;
    
    
/**
     * Permissions scope
     * Array containing required permissions
     * @var        array
     * @access    protected
     */
    
protected $_permsScope = array();
    
    
/**
     * Form Factor
     * @link http://developers.facebook.com/docs/authentication/
     * @var        string
     * @access    protected
     */
    
protected $_formFactor '';
    
    
/**
     * Last http code (200, 403, etc)
     * @var    string
     * @access    public
     */
    
public $httpCode;
    
    
/**
     * Last API call
     * @var    string
     * @access    public
     */
    
public $lastApiCall;
    
    
/**
     * Timeout
     * @var    int
     * @access    public
     */
    
public $timeout 30;
    
    
/**
     * Connect timeout
     * @var    int
     * @access    public
     */
    
public $connectTimeout 30
    
    
/**
     * SSL verify peer
     * @var    string
     * @access    public
     */
    
public $sslVerifyPeer FALSE;
  
    
/**
     * Constant for authorize URL
     */
    
const AUTHORIZE_URL 'https://graph.facebook.com/oauth/authorize';
     
    
/**
     * Constant for access token
     */
    
const ACCESS_TOKEN_URL 'https://graph.facebook.com/oauth/access_token';
     
    
/**
     * Constructor
     *
     * @access    public
     * @param    int        application id
     * @param    string    application secret
     * @param    string    callback URL
     * @param    string    Form factor
     * @param    array    Array of permissions array( 'email', 'publish_stream' ), etc
     */
    
public function __construct$appId$appSecret$callBackUrl$permsScope$formFactor='page' )
     {
         
$this->_appId       $appId;
         
$this->_appSecret   $appSecret;
         
         
$this->setCallBackUrl$callBackUrl );
         
$this->setPermissionsScope$permsScope );
         
$this->setFormFactor$formFactor );
     }
     
    
/**
     * Set FormFactor
     * Although we require this in the contructor, the calling class may wish
     * to change it to add other parameters
     *
     * @access    public
     * @param    string
     */
    
public function setFormFactor$formFactor )
    {
        if ( 
$formFactor )
        {
             
$this->_formFactor $formFactor;
         }
    }
    
    
/**
     * Set Call back URL
     * Although we require this in the contructor, the calling class may wish
     * to change it to add other parameters
     *
     * @access    public
     * @param    string
     */
    
public function setCallBackUrl$url )
    {
        if ( 
$url )
        {
             
$this->_callBackUrl $url;
         }
    }
    
    
/**
     * Set Permissions required for auth token
     * Although we require this in the contructor, the calling class may wish
     * to change it to add other parameters
     *
     * @access    public
     * @param    string
     */
    
public function setPermissionsScope$permsScope )
    {
        if ( 
is_array$permsScope ) )
        {
             
$this->_permsScope $permsScope;
         }
         else if ( 
strstr$permsScope',' ) )
         {
             
$this->_permsScope explode','str_replace' '''$permsScope ) );
         }
    }
          
    
/**
     * Get Authorize URL
     * Returns a full authorize URL
     *
     * @access    public
     * @return    string        URL
     */
    
public function getAuthorizeUrl()
    {
        
$_e = ( count$this->_permsScope ) ) ? '&scope=' implode','$this->_permsScope ) : '';
        
$_f = ( $this->_formFactor ) ? '&display=' $this->_formFactor '';
        
         return 
self::AUTHORIZE_URL '?client_id=' $this->_appId '&redirect_uri=' urlencode$this->_callBackUrl ) . $_e $_f;
    }
    
    
/**
     * Authorize
     * Accepts a code, uses CURL to return a final access token
     *
     * @access    public
     * @param    string        Code from authorize
     * @return    mixed        Access token or JSON error
     */
    
public function getAccessToken$code )
    {
         
$url self::ACCESS_TOKEN_URL '?client_id=' $this->_appId '&redirect_uri=' urlencode$this->_callBackUrl ) . '&client_secret=' $this->_appSecret '&code=' rawurlencode$code );
         
         
/* Send it and hope to receive access_token=blah */
         
$result $this->_send$url'GET' );
         
         
$params null;
         
        
parse_str($result$params);

         if ( 
$params['access_token'] )
         {
             return 
$params['access_token'];
         }
         else
         {
             
/* Likely to be an error in json */
             
return json_decode$result );
         }
    }
    
    
/**
     * Make an HTTP request
      *
      * @param        protected
      * @param        string        URL
      * @param        string        Method (post or get)
      * @param        array        Post data to send
     * @return API results
    */
    
protected function _send($url$method='POST'$postfields=NULL)
    {
        
/* Compress post fields */
        
if ( is_array$postfields ) AND count$postfields ) )
        {
            
$_postfields $postfields;
            
$postfields  '';
            
            foreach( 
$_postfields as $k => $v )
            {
                
$postfields .= $k '=' $v '&';
            }
            
            
$postfields trim$postfields'&' );
        }
        
        
/* Attempt CURL */
        
if ( function_exists'curl_init' ) AND function_exists("curl_exec") )
        {
            
$ci curl_init();
            
/* Curl settings */
            
curl_setopt$ciCURLOPT_CONNECTTIMEOUT$this->connectTimeout );
            
curl_setopt$ciCURLOPT_TIMEOUT$this->timeout );
            
curl_setopt$ciCURLOPT_RETURNTRANSFERTRUE );
            
curl_setopt$ciCURLOPT_HTTPHEADER, array('Expect:') );
            
curl_setopt$ciCURLOPT_SSL_VERIFYPEER$this->sslVerifyPeer );
        
            switch (
$method)
            {
                case 
'POST':
                    
curl_setopt($ciCURLOPT_POSTTRUE);
                    if ( ! empty( 
$postfields) )
                    {
                          
curl_setopt($ciCURLOPT_POSTFIELDS$postfields);
                       }
                break;
                case 
'DELETE':
                     
curl_setopt($ciCURLOPT_CUSTOMREQUEST'DELETE');
                    if ( ! empty( 
$postfields ) )
                    {
                        
$url "{$url}?{$postfields}";
                    }
                break;
            }
        
            
curl_setopt$ciCURLOPT_URL$url );
            
$response          curl_exec$ci );
            
$this->httpCode    curl_getinfo$ciCURLINFO_HTTP_CODE );
            
$this->lastApiCall $url;
            
curl_close ($ci);
            
            if( 
$response )
            {
                return 
$response;
            }
        }

        
$url_parts = @parse_url($url);
        
        if ( ! 
$postfields )
        {
            
$postfields str_replace'&amp;''&'$url_parts['query'] );
        }
        
        
/* Use SSL rather than https */
        
$url_parts['scheme'] = ( $url_parts['scheme'] == 'https' ) ? 'ssl' $url_parts['scheme'];
        
        
$host $url_parts['scheme'] . '://' $url_parts['host'];
         
$port = ( isset($url_parts['port']) ) ? $url_parts['port'] : ( $url_parts['scheme'] == 'https' || $url_parts['scheme'] == 'ssl' 443 80 );
         
         if ( !empty( 
$url_parts["path"] ) )
        {
            
$path $url_parts["path"];
        }
        else
        {
            
$path "/";
        }
        
        
$header  "POST {$path} HTTP/1.0rn";
        
$header .= "Host: " str_replace( array( 'http://''https://''ssl://' ), ''$host ) . "rn";
        
$header .= "Content-Type: application/x-www-form-urlencodedrn";
        
$header .= "Content-Length: " strlen($postfields) . "rnrn";
        
        if ( 
$fp fsockopen$host$port$errno$errstr$this->timeout ) )
        {
            
socket_set_timeout($fp$this->timeout);
            
            
fwrite($fp$header $postfields);
            
            while( ! 
feof($fp) && ! $status['timed_out'] )        
            {
                  
$data .= fgets ($fp,8192);
                  
$status  stream_get_meta_data($fp);
            }
            
            
fclose($fp);
         }        
        
        
/* Strip headers HTTP/1.1 ### ABCD */
        
$this->httpCode     substr$data9);
        
$this->lastApiCall $url;
        
        
/* Chuncked? */
        
        
$_chunked    false;
        
        if( 
preg_match"/Transfer-Encoding:s*chunked/i"$data ) )
        {
            
$_chunked    true;
        }
        
        
$tmp    explode("rnrn"$data2);
        
$data    trim($tmp[1]);
        
        if( 
$_chunked )
        {
            
$lines    explode"n"$data );
            
array_pop($lines);
            
array_shift($lines);
            
$data    implode"n"$lines );
        }
        
        return 
$data;
    }


}
Онлайн: 0
Реклама