Вход Регистрация
Файл: Source/auth/Social/Protocol/Model/OAuth2.php
Строк: 203
<?php
class Social_Protocol_Model_OAuth2 extends Social_Protocol_Model_Base {
    public 
$scope "";

    function 
errorMessageByStatus$code null ) {
        
$http_status_codes = array(
            
200 => "OK: Success!",
            
304 => "Not Modified: There was no new data to return.",
            
400 => "Bad Request: The request was invalid.",
            
401 => "Unauthorized.",
            
403 => "Forbidden: The request is understood, but it has been refused.",
            
404 => "Not Found: The URI requested is invalid or the resource requested does not exists.",
            
406 => "Not Acceptable.",
            
500 => "Internal Server Error: Something is broken.",
            
502 => "Bad Gateway.",
            
503 => "Service Unavailable."
        
);

        if( ! 
$code && $this->api )
            
$code $this->api->http_code;

        if( isset( 
$http_status_codes$code ] ) )
            return 
$code " " $http_status_codes$code ];
    }

    function 
init() {
        if ( ! 
$this->config["keys"]["key"] || ! $this->config["keys"]["secret"] ){
            throw new 
Social_Exception"Application key and secret needed to connect to {$this->network_name}}.");
        }

        if( isset( 
$this->config["scope"] ) && ! empty( $this->config["scope"] ) ){
            
$this->scope $this->config["scope"];
        }

        require_once 
Social_Auth::$config["sdk_path"] . "OAuth/OAuth2Client.php";

        
$this->api = new OAuth2Client$this->config["keys"]["key"], $this->config["keys"]["secret"], $this->client );

        if( 
$this->getToken"access_token" ) ){
            
$this->api->access_token $this->getToken"access_token" );
            
$this->api->refresh_token $this->getToken"refresh_token" );
            
$this->api->access_token_expires_in $this->getToken"expires_in" );
            
$this->api->access_token_expires_at $this->getToken"expires_at" );
        }
    }

    function 
startLogin() {
        
Social_Auth::redirect$this->api->authorizeUrl( array( "scope" => $this->scope ) ) );
    }

    function 
finishLogin() {
        
$error = (array_key_exists('error',$_REQUEST))?$_REQUEST['error']:"";

        if ( 
$error ){
            throw new 
Social_Exception"Authentication failed! {$this->network_name} returned an error: $error");
        }

        
$code = (array_key_exists('code',$_REQUEST))?$_REQUEST['code']:"";

        try{
            
$this->api->authenticate$code );
        }
        catch( 
Exception $e ){
            throw new 
Social_Exception"User profile request failed! {$this->network_name} returned an error: $e");
        }

        if ( ! 
$this->api->access_token ){
            throw new 
Social_Exception"Authentication failed! {$this->network_name} returned an invalid access token.");
        }

        
$this->setToken"access_token" $this->api->access_token  );
        
$this->setToken"refresh_token"$this->api->refresh_token );
        
$this->setToken"expires_in"   $this->api->access_token_expires_in );
        
$this->setToken"expires_at"   $this->api->access_token_expires_at );

        
$this->connectUser();
    }

    function 
refreshToken()
    {
        if( 
$this->api->access_token ){

            if( 
$this->api->refresh_token && $this->api->access_token_expires_at ){

                if( 
$this->api->access_token_expires_at <= time() ){
                    
$response $this->api->refreshToken( array( "refresh_token" => $this->api->refresh_token ) );

                    if( ! isset( 
$response->access_token ) || ! $response->access_token ){
                        
// set the user as disconnected at this point and throw an exception
                        
$this->connectUser();

                        throw new 
Social_Exception"Invalid response on new access token request. " . (string) $response->error );
                    }

                    
$this->api->access_token $response->access_token;

                    if( isset( 
$response->refresh_token ) )
                        
$this->api->refresh_token $response->refresh_token;

                    if( isset( 
$response->expires_in ) ){
                        
$this->api->access_token_expires_in $response->expires_in;

                        
$this->api->access_token_expires_at time() + $response->expires_in;
                    }
                }
            }

            
$this->setToken"access_token" $this->api->access_token  );
            
$this->setToken"refresh_token"$this->api->refresh_token );
            
$this->setToken"expires_in"   $this->api->access_token_expires_in );
            
$this->setToken"expires_at"   $this->api->access_token_expires_at );
        }
    }

    function 
getUserProfile() {
        
Social_Logger::error"Social_Auth do not provide users contacts list for {$this->network_name}." );

        throw new 
Social_Exception"This feature has not been implemented" );
    }

    function 
getUserActivity() {
        
Social_Logger::error"Social_Auth do not provide users activity for {$this->network_name}." );

        throw new 
Social_Exception"This feature has not been implemented" );
    }

    function 
getUserContacts() {
        
Social_Logger::error"Social_Auth do not provide users contacts for {$this->network_name}." );

        throw new 
Social_Exception"This feature has not been implemented" );
    }
}
Онлайн: 1
Реклама