PATH:
home
/
letacommog
/
newrdv1
/
wp-content
/
plugins
/
wordpress-social-login
/
hybridauth
/
Hybrid
/
Providers
<?php /*! * HybridAuth * http://hybridauth.sourceforge.net | http://github.com/hybridauth/hybridauth * (c) 2009-2014, HybridAuth authors | http://hybridauth.sourceforge.net/licenses.html */ /** * Hybrid_Providers_Google provider adapter based on OAuth2 protocol * * http://hybridauth.sourceforge.net/userguide/IDProvider_info_Google.html */ class Hybrid_Providers_Google extends Hybrid_Provider_Model_OAuth2 { // > more infos on google APIs: http://developer.google.com (official site) // or here: http://discovery-check.appspot.com/ (unofficial but up to date) // default permissions public $scope = "profile https://www.googleapis.com/auth/plus.profile.emails.read"; /** * IDp wrappers initializer */ function initialize() { parent::initialize(); // Provider api end-points $this->api->api_base_url = "https://www.googleapis.com/plus/v1/"; $this->api->authorize_url = "https://accounts.google.com/o/oauth2/auth"; $this->api->token_url = "https://accounts.google.com/o/oauth2/token"; $this->api->token_info_url = "https://www.googleapis.com/oauth2/v2/tokeninfo"; // Override the redirect uri when it's set in the config parameters. This way we prevent // redirect uri mismatches when authenticating with Google. if( isset( $this->config['redirect_uri'] ) && ! empty( $this->config['redirect_uri'] ) ){ $this->api->redirect_uri = $this->config['redirect_uri']; } } /** * begin login step */ function loginBegin() { $parameters = array("scope" => $this->scope, "access_type" => "offline"); $optionals = array("scope", "access_type", "redirect_uri", "approval_prompt", "hd", "state"); foreach ($optionals as $parameter){ if( isset( $this->config[$parameter] ) && ! empty( $this->config[$parameter] ) ){ $parameters[$parameter] = $this->config[$parameter]; } if( isset( $this->config["scope"] ) && ! empty( $this->config["scope"] ) ){ $this->scope = $this->config["scope"]; } } if( isset( $this->config[ 'force' ] ) && $this->config[ 'force' ] === true ){ $parameters[ 'approval_prompt' ] = 'force'; } Hybrid_Auth::redirect( $this->api->authorizeUrl( $parameters ) ); } /** * load the user profile from the IDp api client */ function getUserProfile() { // refresh tokens if needed $this->refreshToken(); $response = $this->api->api( "https://www.googleapis.com/plus/v1/people/me" ); if ( ! isset( $response->id ) || isset( $response->error ) ){ throw new Exception( "User profile request failed! {$this->providerId} returned an invalid response.", 6 ); } $this->user->profile->identifier = (property_exists($response,'id'))?$response->id:((property_exists($response,'id'))?$response->id:""); $this->user->profile->firstName = (property_exists($response,'name'))?$response->name->givenName:""; $this->user->profile->lastName = (property_exists($response,'name'))?$response->name->familyName:""; $this->user->profile->displayName = (property_exists($response,'displayName'))?$response->displayName:""; $this->user->profile->photoURL = (property_exists($response,'image'))?((property_exists($response->image,'url'))?substr($response->image->url, 0, -2)."200":''):''; $this->user->profile->profileURL = (property_exists($response,'url'))?$response->url:""; $this->user->profile->description = (property_exists($response,'aboutMe'))?$response->aboutMe:""; $this->user->profile->gender = (property_exists($response,'gender'))?$response->gender:""; $this->user->profile->language = (property_exists($response,'locale'))?$response->locale:''; $this->user->profile->email = (property_exists($response,'email'))?$response->email:''; if (property_exists($response, 'emails')) { if (count($response->emails) == 1) { $this->user->profile->email = $response->emails[0]->value; } else { foreach ($response->emails as $email) { if ($email->type == 'account') { $this->user->profile->email = $email->value; break; } } } } $this->user->profile->emailVerified = $this->user->profile->email; $this->user->profile->phone = (property_exists($response,'phone'))?$response->phone:""; $this->user->profile->country = (property_exists($response,'country'))?$response->country:""; $this->user->profile->region = (property_exists($response,'region'))?$response->region:""; $this->user->profile->zip = (property_exists($response,'zip'))?$response->zip:""; if( property_exists($response,'placesLived') ){ $this->user->profile->city = ""; $this->user->profile->address = ""; foreach($response->placesLived as $c){ if(property_exists($c,'primary')){ if($c->primary == true){ $this->user->profile->address = $c->value; $this->user->profile->city = $c->value; break; } }else{ if(property_exists($c,'value')){ $this->user->profile->address = $c->value; $this->user->profile->city = $c->value; } } } } // google API returns multiple urls, but a "website" only if it is verified // see http://support.google.com/plus/answer/1713826?hl=en if( property_exists($response,'urls') ){ foreach($response->urls as $u){ if(property_exists($u, 'primary') && $u->primary == true) $this->user->profile->webSiteURL = $u->value; } } else { $this->user->profile->webSiteURL = ''; } // google API returns age ranges or min. age only (with plus.login scope) if( property_exists($response,'ageRange') ){ if( property_exists($response->ageRange,'min') && property_exists($response->ageRange,'max') ){ $this->user->profile->age = $response->ageRange->min.' - '.$response->ageRange->max; } else { $this->user->profile->age = '> '.$response->ageRange->min; } } else { $this->user->profile->age = ''; } // google API returns birthdays only if a user set 'show in my account' if( property_exists($response,'birthday') ){ list($birthday_year, $birthday_month, $birthday_day) = explode( '-', $response->birthday ); $this->user->profile->birthDay = (int) $birthday_day; $this->user->profile->birthMonth = (int) $birthday_month; $this->user->profile->birthYear = (int) $birthday_year; } else { $this->user->profile->birthDay=0;$this->user->profile->birthMonth=0;$this->user->profile->birthYear=0; } return $this->user->profile; } /** * load the user (Gmail and google plus) contacts * ..toComplete */ function getUserContacts() { // refresh tokens if needed $this->refreshToken(); $contacts = array(); if( ! isset( $this->config['contacts_param'] ) ){ $this->config['contacts_param'] = array( "max-results" => 500 ); } $response = $this->api->api( "https://www.google.com/m8/feeds/contacts/default/full?" . http_build_query( array_merge( array('alt' => 'json', 'v' => '3.0'), $this->config['contacts_param'] ) ) ); if( ! $response ){ return ARRAY(); } if (isset($response->feed->entry)) { foreach( $response->feed->entry as $idx => $entry ){ $uc = new Hybrid_User_Contact(); $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($entry,'link') ){ /** * sign links with access_token */ if(is_array($entry->link)){ foreach($entry->link as $l){ if( property_exists($l,'gd$etag') && $l->type=="image/*"){ $uc->photoURL = $this->addUrlParam($l->href, array('access_token' => $this->api->access_token)); } else if($l->type=="self"){ $uc->profileURL = $this->addUrlParam($l->href, array('access_token' => $this->api->access_token)); } } } } else { $uc->profileURL = ''; } 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; } /** * Add to the $url new parameters * @param string $url * @param array $params * @return string */ function addUrlParam($url, array $params) { $query = parse_url($url, PHP_URL_QUERY); // Returns the URL string with new parameters if( $query ) { $url .= '&' . http_build_query( $params ); } else { $url .= '?' . http_build_query( $params ); } return $url; } }
[+]
..
[-] GitHub.php
[edit]
[-] OpenID.php
[edit]
[-] Skyrock.php
[edit]
[-] PixelPin.php
[edit]
[-] Mailru.php
[edit]
[-] TwitchTV.php
[edit]
[-] Mixi.php
[edit]
[-] Disqus.php
[edit]
[-] Facebook.php
[edit]
[-] Steam.php
[edit]
[-] Reddit.php
[edit]
[-] Instagram.php
[edit]
[-] AOL.php
[edit]
[-] Dribbble.php
[edit]
[-] Latch.php
[edit]
[-] Goodreads.php
[edit]
[-] LinkedIn.php
[edit]
[-] Stackoverflow.php
[edit]
[-] Vkontakte.php
[edit]
[-] Live.php
[edit]
[-] LastFM.php
[edit]
[-] Tumblr.php
[edit]
[-] Yahoo.php
[edit]
[-] Yandex.php
[edit]
[-] px500.php
[edit]
[-] Google.php
[edit]
[-] Odnoklassniki.php
[edit]
[-] Foursquare.php
[edit]
[-] WordPress.php
[edit]
[-] Twitter.php
[edit]