diff --git a/src/applications/auth/oauth/provider/PhabricatorOAuthProviderGoogle.php b/src/applications/auth/oauth/provider/PhabricatorOAuthProviderGoogle.php index 6e4cbaced..d88908904 100644 --- a/src/applications/auth/oauth/provider/PhabricatorOAuthProviderGoogle.php +++ b/src/applications/auth/oauth/provider/PhabricatorOAuthProviderGoogle.php @@ -1,128 +1,130 @@ <?php final class PhabricatorOAuthProviderGoogle extends PhabricatorOAuthProvider { private $userData; public function getProviderKey() { return self::PROVIDER_GOOGLE; } public function getProviderName() { return 'Google'; } public function isProviderEnabled() { return PhabricatorEnv::getEnvConfig('google.auth-enabled'); } public function isProviderLinkPermanent() { return PhabricatorEnv::getEnvConfig('google.auth-permanent'); } public function isProviderRegistrationEnabled() { return PhabricatorEnv::getEnvConfig('google.registration-enabled'); } public function getClientID() { return PhabricatorEnv::getEnvConfig('google.application-id'); } public function renderGetClientIDHelp() { return null; } public function getClientSecret() { return PhabricatorEnv::getEnvConfig('google.application-secret'); } public function renderGetClientSecretHelp() { return null; } public function getAuthURI() { return 'https://accounts.google.com/o/oauth2/auth'; } public function getTestURIs() { return array( 'http://www.google.com' ); } public function getTokenURI() { return 'https://accounts.google.com/o/oauth2/token'; } protected function getTokenExpiryKey() { return 'expires_in'; } public function getUserInfoURI() { return 'https://www.googleapis.com/oauth2/v1/userinfo'; } public function getMinimumScope() { $scopes = array( 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', ); return implode(' ', $scopes); } public function setUserData($data) { $data = json_decode($data, true); $this->validateUserData($data); // Guess account name from email address, this is just a hint anyway. $data['account'] = head(explode('@', $data['email'])); $this->userData = $data; return $this; } public function retrieveUserID() { return $this->userData['email']; } public function retrieveUserEmail() { return $this->userData['email']; } public function retrieveUserAccountName() { return $this->userData['account']; } public function retrieveUserProfileImage() { - // No apparent API access to Plus yet. + $uri = idx($this->userData, 'picture'); + if ($uri) { + return HTTPSFuture::loadContent($uri); + } return null; } public function retrieveUserAccountURI() { - // No apparent API access to Plus yet. - return null; + return 'https://plus.google.com/'.$this->userData['id']; } public function retrieveUserRealName() { return $this->userData['name']; } public function getExtraAuthParameters() { return array( 'response_type' => 'code', ); } public function getExtraTokenParameters() { return array( 'grant_type' => 'authorization_code', ); } public function decodeTokenResponse($response) { return json_decode($response, true); } }