Skip to content

Commit

Permalink
Merge branch 'google-plus'
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigoprimo committed Sep 18, 2014
2 parents dc405d7 + c5e0635 commit 71d1b42
Show file tree
Hide file tree
Showing 98 changed files with 129,951 additions and 4 deletions.
32 changes: 31 additions & 1 deletion admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ function sc_register_social_connect_settings() {
register_setting( 'social-connect-settings-group', 'social_connect_twitter_consumer_key' );
register_setting( 'social-connect-settings-group', 'social_connect_twitter_consumer_secret' );

register_setting( 'social-connect-settings-group', 'social_connect_google_plus_enabled' );
register_setting( 'social-connect-settings-group', 'social_connect_google_plus_client_id' );
register_setting( 'social-connect-settings-group', 'social_connect_google_plus_client_secret' );

register_setting( 'social-connect-settings-group', 'social_connect_google_enabled' );
register_setting( 'social-connect-settings-group', 'social_connect_yahoo_enabled' );
register_setting( 'social-connect-settings-group', 'social_connect_wordpress_enabled' );
Expand Down Expand Up @@ -81,11 +85,37 @@ function sc_render_social_connect_settings() {
</tr>
</table>

<h3><?php _e('Google+ Settings', 'social_connect'); ?></h3>
<p><?php _e('To offer login via Google+, you need to register your site as a project on Google Developers Console and get a <strong>Client ID</strong> and a <strong>Client Secret</strong>.', 'social_connect'); ?></p>
<p><?php printf(__('Already registered? Find your keys in your <a target="_blank" href="%1$s">Google+ Project List</a>', 'social_connect'), 'https://console.developers.google.com/project'); ?></p>
<p><?php printf(__('Need to register? <a href="%1$s">Create a project</a>, enable Google+ API and create a new Client ID with the details below:', 'social_connect'), 'https://console.developers.google.com/project'); ?></p>
<ol>
<li><?php _e('Application Type: <strong>Web Application</strong>', 'social_connect'); ?></li>
<li><?php _e('Authorized JavaScript origins: <strong>&lt;YOUR SITE DOMAIN&gt;</strong>', 'social_connect'); ?></li>
<li><?php printf(__('Authorized redirect URI: <strong>%1$s</strong>', 'social_connect'), SOCIAL_CONNECT_GOOGLE_PLUS_REDIRECT_URL); ?></li>
</ol>
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e('Enable?', 'social_connect'); ?></th>
<td>
<input type="checkbox" name="social_connect_google_plus_enabled" value="1" <?php checked(get_option('social_connect_google_plus_enabled' ), 1 ); ?> /><br/>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Client ID', 'social_connect'); ?></th>
<td><input type="text" name="social_connect_google_plus_client_id" value="<?php echo get_option('social_connect_google_plus_client_id' ); ?>" /></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Client Secret', 'social_connect'); ?></th>
<td><input type="text" name="social_connect_google_plus_client_secret" value="<?php echo get_option('social_connect_google_plus_client_secret' ); ?>" /></td>
</tr>
</table>

<h3><?php _e('OpenID Providers', 'social_connect'); ?></h3>
<p><?php _e('Choose the OpenID providers your visitors can use to register, comment and login.', 'social_connect'); ?></p>
<table class="form-table">
<tr valign="top">
<th scope="row">Google</th>
<th scope="row"><?php printf(__('Google (<a href="%1$s">deprecated</a>)', 'social_connect'), 'https://developers.google.com/+/api/auth-migration'); ?></th>
<td>
<input type="checkbox" name="social_connect_google_enabled" value="1" <?php checked(get_option('social_connect_google_enabled', 1 ), 1 ); ?> />
</td>
Expand Down
1 change: 1 addition & 0 deletions constants.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
define( 'SOCIAL_CONNECT_PLUGIN_URL', plugins_url() . '/' . basename( dirname( __FILE__ )));
}

define( 'SOCIAL_CONNECT_GOOGLE_PLUS_REDIRECT_URL', home_url( 'index.php?social-connect=google-plus-callback' ) );
41 changes: 41 additions & 0 deletions google-plus/Google/Auth/Abstract.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
/*
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require_once "Google/Http/Request.php";

/**
* Abstract class for the Authentication in the API client
* @author Chris Chabot <[email protected]>
*
*/
abstract class Google_Auth_Abstract
{
/**
* An utility function that first calls $this->auth->sign($request) and then
* executes makeRequest() on that signed request. Used for when a request
* should be authenticated
* @param Google_Http_Request $request
* @return Google_Http_Request $request
*/
abstract public function authenticatedRequest(Google_Http_Request $request);

abstract public function authenticate($code);
abstract public function sign(Google_Http_Request $request);
abstract public function createAuthUrl($scope);

abstract public function refreshToken($refreshToken);
abstract public function revokeToken();
}
133 changes: 133 additions & 0 deletions google-plus/Google/Auth/AssertionCredentials.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
<?php
/*
* Copyright 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

require_once "Google/Auth/OAuth2.php";
require_once "Google/Signer/P12.php";
require_once "Google/Utils.php";

/**
* Credentials object used for OAuth 2.0 Signed JWT assertion grants.
*
* @author Chirag Shah <[email protected]>
*/
class Google_Auth_AssertionCredentials
{
const MAX_TOKEN_LIFETIME_SECS = 3600;

public $serviceAccountName;
public $scopes;
public $privateKey;
public $privateKeyPassword;
public $assertionType;
public $sub;
/**
* @deprecated
* @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
*/
public $prn;
private $useCache;

/**
* @param $serviceAccountName
* @param $scopes array List of scopes
* @param $privateKey
* @param string $privateKeyPassword
* @param string $assertionType
* @param bool|string $sub The email address of the user for which the
* application is requesting delegated access.
* @param bool useCache Whether to generate a cache key and allow
* automatic caching of the generated token.
*/
public function __construct(
$serviceAccountName,
$scopes,
$privateKey,
$privateKeyPassword = 'notasecret',
$assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
$sub = false,
$useCache = true
) {
$this->serviceAccountName = $serviceAccountName;
$this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
$this->privateKey = $privateKey;
$this->privateKeyPassword = $privateKeyPassword;
$this->assertionType = $assertionType;
$this->sub = $sub;
$this->prn = $sub;
$this->useCache = $useCache;
}

/**
* Generate a unique key to represent this credential.
* @return string
*/
public function getCacheKey()
{
if (!$this->useCache) {
return false;
}
$h = $this->sub;
$h .= $this->assertionType;
$h .= $this->privateKey;
$h .= $this->scopes;
$h .= $this->serviceAccountName;
return md5($h);
}

public function generateAssertion()
{
$now = time();

$jwtParams = array(
'aud' => Google_Auth_OAuth2::OAUTH2_TOKEN_URI,
'scope' => $this->scopes,
'iat' => $now,
'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
'iss' => $this->serviceAccountName,
);

if ($this->sub !== false) {
$jwtParams['sub'] = $this->sub;
} else if ($this->prn !== false) {
$jwtParams['prn'] = $this->prn;
}

return $this->makeSignedJwt($jwtParams);
}

/**
* Creates a signed JWT.
* @param array $payload
* @return string The signed JWT.
*/
private function makeSignedJwt($payload)
{
$header = array('typ' => 'JWT', 'alg' => 'RS256');

$segments = array(
Google_Utils::urlSafeB64Encode(json_encode($header)),
Google_Utils::urlSafeB64Encode(json_encode($payload))
);

$signingInput = implode('.', $segments);
$signer = new Google_Signer_P12($this->privateKey, $this->privateKeyPassword);
$signature = $signer->sign($signingInput);
$segments[] = Google_Utils::urlSafeB64Encode($signature);

return implode(".", $segments);
}
}
22 changes: 22 additions & 0 deletions google-plus/Google/Auth/Exception.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

require_once "Google/Exception.php";

class Google_Auth_Exception extends Google_Exception
{
}
69 changes: 69 additions & 0 deletions google-plus/Google/Auth/LoginTicket.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

require_once "Google/Auth/Exception.php";

/**
* Class to hold information about an authenticated login.
*
* @author Brian Eaton <[email protected]>
*/
class Google_Auth_LoginTicket
{
const USER_ATTR = "sub";

// Information from id token envelope.
private $envelope;

// Information from id token payload.
private $payload;

/**
* Creates a user based on the supplied token.
*
* @param string $envelope Header from a verified authentication token.
* @param string $payload Information from a verified authentication token.
*/
public function __construct($envelope, $payload)
{
$this->envelope = $envelope;
$this->payload = $payload;
}

/**
* Returns the numeric identifier for the user.
* @throws Google_Auth_Exception
* @return
*/
public function getUserId()
{
if (array_key_exists(self::USER_ATTR, $this->payload)) {
return $this->payload[self::USER_ATTR];
}
throw new Google_Auth_Exception("No user_id in token");
}

/**
* Returns attributes from the login ticket. This can contain
* various information about the user session.
* @return array
*/
public function getAttributes()
{
return array("envelope" => $this->envelope, "payload" => $this->payload);
}
}
Loading

0 comments on commit 71d1b42

Please sign in to comment.