Вход Регистрация
Файл: Source/auth/Social/Adapter.php
Строк: 217
<?php
/**
 * Social_Adapter is an adapter for social networks in one place
 *
 * @author Hüseyin BABAL
 */

class Social_Adapter {

    
/* Network name (facebook, twitter, etc...) */
    
public $network_name = null;

    
// Configs belong to provided network
    
public $config = null;

    
// Network extra params
    
public $params = null;

    
// Network class
    
public $network_class = null ;

    
// Adapter instance
    
public $adapter = null ;

    function 
factory( $network_name, $params = null ) {
        
Social_Logger::info( "###Social_Adapter::factory( $network_name )" );
        
$this->params = $params;
        
$this->network_name = strtolower($network_name);
        
$this->config = $this->getNetworkConfigs( $this->network_name );

        if( ! 
$this->network_name ){
            throw new 
Social_Exception( "Network provider: $network_name not found!", 1 );
        }

        if( ! 
$this->config ){
            throw new 
Social_Exception( "Couldn't found config of $this->network_name", 1 );
        }

        if( ! 
$this->config["enabled"] ){
            throw new 
Social_Exception( "'{$this->network_name}' is not enabled.", 1 );
        }


        require_once 
Social_Auth::$config["network_path"] . ucfirst( $this->network_name ) . ".php" ;

        
$this->network_class = "Social_Network_" . $this->network_name;

        
$this->adapter = new $this->network_class( $this->network_name, $this->config, $this->params );

        return 
$this;
    }

    function 
getNetworkConfigs( $network_name ) {
        foreach( 
Social_Auth::$config["networks"] as $network => $params ){
            if( 
strtolower( $network ) == strtolower( $network_name ) ){
                return 
$params;
            }
        }
        return 
null;
    }

    function 
goToCallbackPage() {
        
$callback_url = Social_Auth::session()->get( "sa_session.{$this->network_name}.sa_callback" );
        
// Flush session
        
Social_Auth::session()->deleteByKey( "sa_session.{$this->network_name}.sa_callback" );
        
Social_Auth::session()->deleteByKey( "sa_session.{$this->network_name}.sa_client" );
        
Social_Auth::session()->deleteByKey( "sa_session.{$this->network_name}.network_params" );
        
Social_Auth::redirect( $callback_url );
    }

    function 
login() {
        
Social_Logger::info( "###Social_Adapter::login( {$this->network_name} ) " );

        if( ! 
$this->adapter ){
            throw new 
Social_Exception( "Social_Adapter::login() cannot be used directly" );
        }

        foreach( 
Social_Auth::$config["networks"] as $network => $params ){
            
Social_Auth::session()->deleteByKey( "sa_session.{$network}.sa_callback"    );
            
Social_Auth::session()->deleteByKey( "sa_session.{$network}.sa_client"     );
            
Social_Auth::session()->deleteByKey( "sa_session.{$network}.network_params" );
        }

        
$this->logout();

        
$social_auth_base_url = Social_Auth::$config["base_url"];

        
$this->params["sa_token"] = session_id();

        
$this->params["sa_time"]  = time();

        
$this->params["sa_login"] = $social_auth_base_url . ( strpos( $social_auth_base_url, '?' ) ? '&' : '?' ) . "sa_login={$this->network_name}&sa_time={$this->params["sa_time"]}";

        
$this->params["sa_login_finish"]  = $social_auth_base_url . ( strpos( $social_auth_base_url, '?' ) ? '&' : '?' ) . "sa_login_finish={$this->network_name}";

        
Social_Auth::session()->set( "sa_session.{$this->network_name}.sa_callback", $this->params["sa_callback_url"] );
        
Social_Auth::session()->set( "sa_session.{$this->network_name}.sa_client", $this->params["sa_login_finish"] );
        
Social_Auth::session()->set( "sa_session.{$this->network_name}.network_params", $this->params );

        
Social_Auth::session()->set( "sa_config", Social_Auth::$config );

        
Social_Logger::debug( "Social_Adapter::login( {$this->network_name} ), redirecting sa_login url." );
        
Social_Auth::redirect( $this->params["sa_login"] );
    }

    function 
logout() {
        
$this->adapter->logout();
    }

    public function 
__call( $name, $arguments ) {
        
Social_Logger::info( "###Social_Adapter::$name(), Network: {$this->network_name}" );

        if ( ! 
$this->isUserConnected() ){
            throw new 
Social_Exception( "User not logged in to network:  {$this->network_name}");
        }

        if ( ! 
method_exists( $this->adapter, $name ) ){
            throw new 
Social_Exception( "_call undefined function Social_Network_{$this->network_name}::$name()" );
        }
        if( 
count( $arguments ) ){
            return 
$this->adapter->$name( $arguments[0] );
        }
        else{
            return 
$this->adapter->$name();
        }
    }

    public function 
isUserConnected() {
        return 
$this->adapter->isUserConnected();
    }
}
Онлайн: 0
Реклама