Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 02441da
Showing
4 changed files
with
224 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
.DS_Store | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
<?php | ||
/** | ||
* Google strategy for Opauth | ||
* based on https://developers.google.com/accounts/docs/OAuth2 | ||
* | ||
* More information on Opauth: http://opauth.org | ||
* | ||
* @copyright Copyright © 2012 U-Zyn Chua (http://uzyn.com) | ||
* @link http://opauth.org | ||
* @package Opauth.GoogleStrategy | ||
* @license MIT License | ||
*/ | ||
|
||
/** | ||
* Google strategy for Opauth | ||
* based on https://developers.google.com/accounts/docs/OAuth2 | ||
* | ||
* @package Opauth.Google | ||
*/ | ||
class GoogleStrategy extends OpauthStrategy{ | ||
|
||
/** | ||
* Compulsory config keys, listed as unassociative arrays | ||
*/ | ||
public $expects = array('client_id', 'client_secret'); | ||
|
||
/** | ||
* Optional config keys, without predefining any default values. | ||
*/ | ||
public $optionals = array('redirect_uri', 'scope', 'state', 'access_type', 'approval_prompt'); | ||
|
||
/** | ||
* Optional config keys with respective default values, listed as associative arrays | ||
* eg. array('scope' => 'email'); | ||
*/ | ||
public $defaults = array( | ||
'redirect_uri' => '{complete_url_to_strategy}oauth2callback', | ||
'scope' => 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email' | ||
); | ||
|
||
/** | ||
* Auth request | ||
*/ | ||
public function request(){ | ||
$url = 'https://accounts.google.com/o/oauth2/auth'; | ||
$params = array( | ||
'client_id' => $this->strategy['client_id'], | ||
'redirect_uri' => $this->strategy['redirect_uri'], | ||
'response_type' => 'code', | ||
'scope' => $this->strategy['scope'] | ||
); | ||
|
||
foreach ($this->optionals as $key){ | ||
if (!empty($this->strategy[$key])) $params[$key] = $this->strategy[$key]; | ||
} | ||
|
||
$this->clientGet($url, $params); | ||
} | ||
|
||
/** | ||
* Internal callback, after OAuth | ||
*/ | ||
public function oauth2callback(){ | ||
if (array_key_exists('code', $_GET) && !empty($_GET['code'])){ | ||
$code = $_GET['code']; | ||
$url = 'https://accounts.google.com/o/oauth2/token'; | ||
$params = array( | ||
'code' => $code, | ||
'client_id' => $this->strategy['client_id'], | ||
'client_secret' => $this->strategy['client_secret'], | ||
'redirect_uri' => $this->strategy['redirect_uri'], | ||
'grant_type' => 'authorization_code' | ||
); | ||
$response = $this->serverPost($url, $params, null, $headers); | ||
|
||
$results = json_decode($response); | ||
|
||
if (!empty($results) && !empty($results->access_token)){ | ||
$userinfo = $this->userinfo($results->access_token); | ||
|
||
$this->auth = array( | ||
'provider' => 'Google', | ||
'uid' => $userinfo->id, | ||
'info' => array( | ||
'name' => $userinfo->name, | ||
'email' => $userinfo->email, | ||
'first_name' => $userinfo->given_name, | ||
'last_name' => $userinfo->family_name, | ||
'image' => $userinfo->picture | ||
), | ||
'credentials' => array( | ||
'token' => $results->access_token, | ||
'expires' => date('c', time() + $results->expires_in) | ||
), | ||
'raw' => $userinfo | ||
); | ||
|
||
if (!empty($userinfo->link)) $this->auth['info']['urls']['google'] = $userinfo->link; | ||
|
||
$this->callback(); | ||
} | ||
else{ | ||
$error = array( | ||
'provider' => 'Google', | ||
'code' => 'access_token_error', | ||
'message' => 'Failed when attempting to obtain access token', | ||
'raw' => array( | ||
'response' => $response, | ||
'headers' => $headers | ||
) | ||
); | ||
|
||
$this->errorCallback($error); | ||
} | ||
} | ||
else{ | ||
$error = array( | ||
'provider' => 'Google', | ||
'code' => 'oauth2callback_error', | ||
'raw' => $_GET | ||
); | ||
|
||
$this->errorCallback($error); | ||
} | ||
} | ||
|
||
/** | ||
* Queries Google API for user info | ||
* | ||
* @param string $access_token | ||
* @return array Parsed JSON results | ||
*/ | ||
private function userinfo($access_token){ | ||
$userinfo = $this->serverGet('https://www.googleapis.com/oauth2/v1/userinfo', array('access_token' => $access_token), null, $headers); | ||
if (!empty($userinfo)){ | ||
return json_decode($userinfo); | ||
} | ||
else{ | ||
$error = array( | ||
'provider' => 'Google', | ||
'code' => 'userinfo_error', | ||
'message' => 'Failed when attempting to query for user information', | ||
'raw' => array( | ||
'response' => $userinfo, | ||
'headers' => $headers | ||
) | ||
); | ||
|
||
$this->errorCallback($error); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
Opauth-GitHub | ||
============= | ||
[Opauth][1] strategy for GitHub authentication. | ||
|
||
Implemented based on http://developer.github.com/v3/oauth/ using OAuth2. | ||
|
||
Opauth is a multi-provider authentication framework for PHP. | ||
|
||
Getting started | ||
---------------- | ||
1. Install Opauth-GitHub: | ||
```bash | ||
cd path_to_opauth/Strategy | ||
git clone git://github.com/uzyn/opauth-github.git GitHub | ||
``` | ||
|
||
2. Register a GitHub application at https://github.com/settings/applications/new | ||
- Enter URL as your application URL (this can be outside of Opauth) | ||
- Callback URL: enter `http://path_to_opauth/github/oauth2callback` | ||
|
||
3. Configure Opauth-GitHub strategy with `client_id` and `client_secret`. | ||
|
||
4. Direct user to `http://path_to_opauth/github` to authenticate | ||
|
||
|
||
Strategy configuration | ||
---------------------- | ||
|
||
Required parameters: | ||
|
||
```php | ||
<?php | ||
'GitHub' => array( | ||
'client_id' => 'YOUR CLIENT ID', | ||
'client_secret' => 'YOUR CLIENT SECRET' | ||
) | ||
``` | ||
|
||
Optional parameters: | ||
`scope`, `state` | ||
|
||
License | ||
--------- | ||
Opauth-GitHub is MIT Licensed | ||
Copyright © 2012 U-Zyn Chua (http://uzyn.com) | ||
|
||
[1]: https://github.com/uzyn/opauth |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"name": "opauth/github", | ||
"description": "GitHub authentication strategy for Opauth", | ||
"keywords": ["authentication","auth","github"], | ||
"homepage": "http://opauth.org", | ||
"license": "MIT", | ||
"authors": [ | ||
{ | ||
"name": "U-Zyn Chua", | ||
"email": "chua@uzyn.com", | ||
"homepage": "http://uzyn.com" | ||
} | ||
], | ||
"require": { | ||
"php": ">=5.2.0", | ||
"opauth/opauth": ">=0.4.0" | ||
}, | ||
"autoload": { | ||
"psr-0": { | ||
"": "." | ||
} | ||
} | ||
} |