Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/HybridAuth/Provider/Google.php
Строк: 132
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
*  (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/

namespace HybridauthProvider;

use 
HybridauthAdapterOAuth2;
use 
HybridauthExceptionUnexpectedApiResponseException;
use 
HybridauthData;
use 
HybridauthUser;

/**
 * Google OAuth2 provider adapter.
 *
 * Example:
 *
 *   $config = [
 *       'callback' => HybridauthHttpClientUtil::getCurrentUrl(),
 *       'keys'     => [ 'id' => '', 'secret' => '' ],
 *       'scope'    => 'https://www.googleapis.com/auth/userinfo.profile',
 *
 *        // google's custom auth url params
 *       'authorize_url_parameters' => [
 *              'approval_prompt' => 'force', // to pass only when you need to acquire a new refresh token.
 *              'access_type'     => ..,      // is set to 'offline' by default
 *              'hd'              => ..,
 *              'state'           => ..,
 *              // etc.
 *       ]
 *   ];
 *
 *   $adapter = new HybridauthProviderGoogle( $config );
 *
 *   try {
 *       $adapter->authenticate();
 *
 *       $userProfile = $adapter->getUserProfile();
 *       $tokens = $adapter->getAccessToken();
 *       $contacts = $adapter->getUserContacts(['max-results' => 75]);
 *   }
 *   catch( Exception $e ){
 *       echo $e->getMessage() ;
 *   }
 */
class Google extends OAuth2
{
    
/**
    * {@inheritdoc}
    */
    
public $scope 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email';

    
/**
    * {@inheritdoc}
    */
    
protected $apiBaseUrl 'https://www.googleapis.com/';

    
/**
    * {@inheritdoc}
    */
    
protected $authorizeUrl 'https://accounts.google.com/o/oauth2/auth';

    
/**
    * {@inheritdoc}
    */
    
protected $accessTokenUrl 'https://accounts.google.com/o/oauth2/token';

    
/**
    * {@inheritdoc}
    */
    
protected $apiDocumentation 'https://developers.google.com/identity/protocols/OAuth2';

    
/**
    * {@inheritdoc}
    */
    
protected function initialize()
    {
        
parent::initialize();

        
$this->AuthorizeUrlParameters += [
            
'access_type' => 'offline'
        
];

        
$this->tokenRefreshParameters += [
            
'client_id' => $this->clientId,
            
'client_secret' => $this->clientSecret
        
];
    }

    
/**
    * {@inheritdoc}
    *
    * See: https://developers.google.com/identity/protocols/OpenIDConnect#obtainuserinfo
    */
    
public function getUserProfile()
    {
        
$response $this->apiRequest('oauth2/v3/userinfo');

        
$data = new DataCollection($response);

        if (! 
$data->exists('sub')) {
            throw new 
UnexpectedApiResponseException('Provider API returned an unexpected response.');
        }

        
$userProfile = new UserProfile();

        
$userProfile->identifier  $data->get('sub');
        
$userProfile->firstName   $data->get('given_name');
        
$userProfile->lastName    $data->get('family_name');
        
$userProfile->displayName $data->get('name');
        
$userProfile->photoURL    $data->get('picture');
        
$userProfile->profileURL  $data->get('profile');
        
$userProfile->gender      $data->get('gender');
        
$userProfile->language    $data->get('locale');
        
$userProfile->email       $data->get('email');

        
$userProfile->emailVerified $data->get('email_verified') ? $userProfile->email '';

        if (
$this->config->get('photo_size')) {
            
$userProfile->photoURL .= '?sz=' $this->config->get('photo_size');
        }

        return 
$userProfile;
    }

    
/**
    * {@inheritdoc}
    */
    
public function getUserContacts($parameters = [])
    {
        
$parameters = ['max-results' => 500] + $parameters;

        
// Google Gmail and Android contacts
        
if (false !== strpos($this->scope'/m8/feeds/') || false !== strpos($this->scope'/auth/contacts.readonly')) {
            return 
$this->getGmailContacts($parameters);
        }

        return [];
    }

    
/**
     * Retrieve Gmail contacts
     *
     * @param array $parameters
     *
     * @return array
     *
     * @throws Exception
     */
    
protected function getGmailContacts($parameters = [])
    {
        
$url 'https://www.google.com/m8/feeds/contacts/default/full?'
                    
http_build_query(array_replace([ 'alt' => 'json''v' => '3.0' ], (array)$parameters));

        
$response $this->apiRequest($url);

        if (! 
$response) {
            return [];
        }

        
$contacts = [];

        if (isset(
$response->feed->entry)) {
            foreach (
$response->feed->entry as $idx => $entry) {
                
$uc = new UserContact();

                
$uc->email = isset($entry->{'gd$email'}[0]->address)
                            ? (string) 
$entry->{'gd$email'}[0]->address
                            
'';

                
$uc->displayName = isset($entry->title->{'$t'}) ? (string) $entry->title->{'$t'} : '';
                
$uc->identifier  = ($uc->email != '') ? $uc->email '';
                
$uc->description '';

                if (
property_exists($response'website')) {
                    if (
is_array($response->website)) {
                        foreach (
$response->website as $w) {
                            if (
$w->primary == true) {
                                
$uc->webSiteURL $w->value;
                            }
                        }
                    } else {
                        
$uc->webSiteURL $response->website->value;
                    }
                } else {
                    
$uc->webSiteURL '';
                }

                
$contacts[] = $uc;
            }
        }

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