Вход Регистрация
Файл: Space race/classes/integration/hybridauth/Hybrid/Provider_Model_OpenID.php
Строк: 233
<?php
/**
* HybridAuth
* http://hybridauth.sourceforge.net | http://github.com/hybridauth/hybridauth
* (c) 2009-2014, HybridAuth authors | http://hybridauth.sourceforge.net/licenses.html
*/

/**
 * To implement an OpenID based service provider, Hybrid_Provider_Model_OpenID
 * can be used to save the hassle of the authentication flow.
 *
 * Each class that inherit from Hybrid_Provider_Model_OAuth2 have only to define
 * the provider identifier : <code>public $openidIdentifier = ""; </code>
 *
 * Hybrid_Provider_Model_OpenID use LightOpenID lib which can be found on
 * Hybrid/thirdparty/OpenID/LightOpenID.php
 */
class Hybrid_Provider_Model_OpenID extends Hybrid_Provider_Model
{
    
/**
     * Openid provider identifier
     * @var string
     */
    
public $openidIdentifier "";

    
// --------------------------------------------------------------------

    /**
    * adapter initializer
    */
    
function initialize()
    {
        if( isset( 
$this->params["openid_identifier"] ) ){
            
$this->openidIdentifier $this->params["openid_identifier"];
        }

        
// include LightOpenID lib
        
require_once Hybrid_Auth::$config["path_libraries"] . "OpenID/LightOpenID.php";

        
// An error was occurring when proxy wasn't set. Not sure where proxy was meant to be set/initialized.
        
Hybrid_Auth::$config['proxy'] = isset(Hybrid_Auth::$config['proxy'])?Hybrid_Auth::$config['proxy']:'';

        
$hostPort parse_urlHybrid_Auth::$config["base_url"], PHP_URL_PORT);
        
$hostUrl parse_urlHybrid_Auth::$config["base_url"], PHP_URL_HOST);

        
// Check for port on url
        
if($hostPort) {
            
$hostUrl .= ':'.$hostPort;
        }

        
$this->api = new LightOpenID$hostUrlHybrid_Auth::$config["proxy"] );
    }

    
// --------------------------------------------------------------------

    /**
    * begin login step
    */
    
function loginBegin()
    {
        if( empty( 
$this->openidIdentifier ) ){
            throw new 
Exception"OpenID adapter require the identity provider identifier 'openid_identifier' as an extra parameter.");
        }

        
$this->api->identity  $this->openidIdentifier;
        
$this->api->returnUrl $this->endpoint;
        
$this->api->required  = ARRAY(
            
'namePerson/first'       ,
            
'namePerson/last'        ,
            
'namePerson/friendly'    ,
            
'namePerson'             ,

            
'contact/email'          ,

            
'birthDate'              ,
            
'birthDate/birthDay'     ,
            
'birthDate/birthMonth'   ,
            
'birthDate/birthYear'    ,

            
'person/gender'          ,
            
'pref/language'          ,

            
'contact/postalCode/home',
            
'contact/city/home'      ,
            
'contact/country/home'   ,

            
'media/image/default'    ,
        );

        
# redirect the user to the provider authentication url
        
Hybrid_Auth::redirect$this->api->authUrl() );
    }

    
// --------------------------------------------------------------------

    /**
    * finish login step
    */
    
function loginFinish()
    {
        
# if user don't grant access of their data to your site, halt with an Exception
        
if( $this->api->mode == 'cancel'){
            throw new 
Exception"Authentication failed! User has canceled authentication!");
        }

        
# if something goes wrong
        
if( ! $this->api->validate() ){
            throw new 
Exception"Authentication failed. Invalid request received!");
        }

        
# fetch received user data
        
$response $this->api->getAttributes();

        
# store the user profile
        
$this->user->profile->identifier  $this->api->identity;

        
$this->user->profile->firstName   = (array_key_exists("namePerson/first",$response))?$response["namePerson/first"]:"";
        
$this->user->profile->lastName    = (array_key_exists("namePerson/last",$response))?$response["namePerson/last"]:"";
        
$this->user->profile->displayName = (array_key_exists("namePerson",$response))?$response["namePerson"]:"";
        
$this->user->profile->email       = (array_key_exists("contact/email",$response))?$response["contact/email"]:"";
        
$this->user->profile->language    = (array_key_exists("pref/language",$response))?$response["pref/language"]:"";
        
$this->user->profile->country     = (array_key_exists("contact/country/home",$response))?$response["contact/country/home"]:"";
        
$this->user->profile->zip         = (array_key_exists("contact/postalCode/home",$response))?$response["contact/postalCode/home"]:"";
        
$this->user->profile->gender      = (array_key_exists("person/gender",$response))?$response["person/gender"]:"";
        
$this->user->profile->photoURL    = (array_key_exists("media/image/default",$response))?$response["media/image/default"]:"";

        
$this->user->profile->birthDay    = (array_key_exists("birthDate/birthDay",$response))?$response["birthDate/birthDay"]:"";
        
$this->user->profile->birthMonth  = (array_key_exists("birthDate/birthMonth",$response))?$response["birthDate/birthMonth"]:"";
        
$this->user->profile->birthYear   = (array_key_exists("birthDate/birthDate",$response))?$response["birthDate/birthDate"]:"";

        if( isset( 
$response['namePerson/friendly'] ) && ! empty( $response['namePerson/friendly'] ) && ! $this->user->profile->displayName ) {
            
$this->user->profile->displayName $response["namePerson/friendly"];
        }

        if( isset( 
$response['birthDate'] ) && ! empty( $response['birthDate'] ) && ! $this->user->profile->birthDay ) {
            list( 
$birthday_year$birthday_month$birthday_day ) = $response['birthDate'];

            
$this->user->profile->birthDay      = (int) $birthday_day;
            
$this->user->profile->birthMonth    = (int) $birthday_month;
            
$this->user->profile->birthYear     = (int) $birthday_year;
        }

        if( ! 
$this->user->profile->displayName ){
            
$this->user->profile->displayName trim$this->user->profile->firstName " " $this->user->profile->lastName );
        }

        if( 
$this->user->profile->gender == "f" ){
            
$this->user->profile->gender "female";
        }

        if( 
$this->user->profile->gender == "m" ){
            
$this->user->profile->gender "male";
        }

        
// set user as logged in
        
$this->setUserConnected();

        
// with openid providers we get the user profile only once, so store it
        
Hybrid_Auth::storage()->set"hauth_session.{$this->providerId}.user"$this->user );
    }

    
// --------------------------------------------------------------------

    /**
    * load the user profile from the IDp api client
    */
    
function getUserProfile()
    {
        
// try to get the user profile from stored data
        
$this->user Hybrid_Auth::storage()->get"hauth_session.{$this->providerId}.user" ) ;

        
// if not found
        
if ( ! is_object$this->user ) ){
            throw new 
Exception"User profile request failed! User is not connected to {$this->providerId} or his session has expired.");
        }

        return 
$this->user->profile;
    }
}
Онлайн: 2
Реклама