Enabled OAuth/OAuth2 logins
This commit is contained in:
parent
7dd64e68bf
commit
d4a2ace403
@ -4,7 +4,7 @@
|
||||
* OSB Auth driver.
|
||||
*
|
||||
* @package OSB
|
||||
* @category Helpers
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
|
@ -18,7 +18,7 @@ class Model_Export extends ORM_OSB {
|
||||
protected $_form = array('id'=>'id','value'=>'name');
|
||||
|
||||
/**
|
||||
* Return the object of the product plugin
|
||||
* Return the object of the export plugin
|
||||
*/
|
||||
public function plugin(Model_Export_Module $emo,$type='') {
|
||||
$c = Kohana::classname('Export_Plugin_'.$this->plugin);
|
||||
|
@ -9,133 +9,6 @@
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Auth_Facebook extends Auth_ORM {
|
||||
// Our Facebook config data
|
||||
private $config;
|
||||
private $data;
|
||||
// Our Facebook Object
|
||||
private $fb;
|
||||
private $me;
|
||||
// Our OAuth Object
|
||||
private $oo;
|
||||
// Facebook UID
|
||||
private $uid;
|
||||
|
||||
/**
|
||||
* Perform the login processing
|
||||
*
|
||||
* We ignore password, since it is required in the parent(), we dont need it in Oauth
|
||||
*/
|
||||
protected function _login($user,$password,$remember) {
|
||||
$this->complete_login($user);
|
||||
|
||||
if ($remember) {
|
||||
$aoo = ORM::factory('Account_Oauth',array('account_id'=>$user->id));
|
||||
|
||||
// Record our user in the DB
|
||||
$aoo->account_id = $user->id;
|
||||
$aoo->oauth_id = $this->oo->id;
|
||||
$aoo->userid = $remember->user_id();
|
||||
|
||||
switch ($this->oo->name) {
|
||||
case 'facebook':
|
||||
$aoo->oauth_data = $remember->fb->getAccessToken();
|
||||
break;
|
||||
}
|
||||
|
||||
return $aoo->save();
|
||||
}
|
||||
}
|
||||
public function __construct(Model_Oauth $oo) {
|
||||
include Kohana::find_file('vendor', 'facebook');
|
||||
$this->oo = $oo;
|
||||
|
||||
// Load configuration "config/facebook"
|
||||
$this->config = Kohana::$config->load('facebook');
|
||||
|
||||
parent::__construct((array)Kohana::$config->load('auth'));
|
||||
|
||||
// Create new Facebook object
|
||||
$this->fb = new Facebook(array(
|
||||
'appId' => $oo->app_id,
|
||||
'secret' => $oo->secret,
|
||||
'cookie' => $this->config->cookie,
|
||||
'session_type' => $this->config->session_type,
|
||||
));
|
||||
|
||||
try {
|
||||
$this->me = $this->fb->api('/' . $this->fb->getUser(), 'GET');
|
||||
|
||||
} catch (FacebookApiException $e) {
|
||||
// Do nothing.
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns user data, default in case of failure.
|
||||
*
|
||||
* @param $key
|
||||
* @param null $default
|
||||
* @return mixed
|
||||
* @throws FacebookApiException
|
||||
*/
|
||||
public function get($key,$default=NULL) {
|
||||
if (! $uid = $this->user_id()) {
|
||||
$this->login_url();
|
||||
|
||||
throw new FacebookApiException('User is not logged in.');
|
||||
}
|
||||
|
||||
if (empty($this->data))
|
||||
$this->data = $this->fb->api(array(
|
||||
'method' => 'fql.query',
|
||||
'query' => sprintf('SELECT %s FROM user WHERE uid = %s',$this->config_fields,$uid),
|
||||
));
|
||||
|
||||
return (! empty($this->data[0][$key])) ? $this->data[0][$key] : $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is user currently logged into facebook?
|
||||
*/
|
||||
public function logged_in($role=NULL,$debug=NULL) {
|
||||
return $this->fb->getUser() ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a login url, based on scope, redirect_uri and display.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function login_url() {
|
||||
return urldecode($this->fb->getLoginUrl(array(
|
||||
'scope' => $this->config->scope,
|
||||
'redirect_uri' => $this->config->redirect_uri,
|
||||
'display' => $this->config->display,
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a logout url based on next.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function logout_url() {
|
||||
return urldecode($this->fb->getLogoutUrl(array('next'=>$this->config->next)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return user id if success, otherwise FALSE.
|
||||
*/
|
||||
public function user_id() {
|
||||
if ($this->logged_in()) {
|
||||
$this->uid = $this->fb->getUser();
|
||||
|
||||
return $this->uid;
|
||||
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
class Auth_Facebook extends Auth_ORM_External_OAuth2 {
|
||||
}
|
||||
?>
|
||||
|
121
modules/oauth/classes/Auth/Facebook_Connect.php
Normal file
121
modules/oauth/classes/Auth/Facebook_Connect.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides Authentication using Facebook
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Auth_Facebook extends Auth_ORM_External {
|
||||
// Our Facebook config data
|
||||
private $config;
|
||||
private $data;
|
||||
private $me;
|
||||
// Facebook UID
|
||||
private $uid;
|
||||
|
||||
public function __construct(Model_Oauth $oo) {
|
||||
// If our user refused, then no point continuing
|
||||
if ($problem = Arr::get($_REQUEST,'error'))
|
||||
switch ($problem) {
|
||||
case 'access_denied':
|
||||
HTTP::redirect('login');
|
||||
|
||||
default:
|
||||
throw HTTP_Exception::factory(501,'Unknown OAuth Problem :problem',array(':problem'=>$problem));
|
||||
}
|
||||
|
||||
parent::__construct($oo);
|
||||
|
||||
include Kohana::find_file('vendor', 'facebook');
|
||||
|
||||
// Load configuration "config/facebook"
|
||||
$this->config = Kohana::$config->load('facebook');
|
||||
|
||||
// Create new Facebook object
|
||||
$this->ao = new Facebook(array(
|
||||
'appId' => $oo->app_id,
|
||||
'secret' => $oo->secret,
|
||||
'cookie' => $this->config->cookie,
|
||||
'session_type' => $this->config->session_type,
|
||||
));
|
||||
|
||||
try {
|
||||
$this->me = $this->ao->api('/' . $this->ao->getUser(), 'GET');
|
||||
|
||||
} catch (FacebookApiException $e) {
|
||||
// Do nothing.
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns user data, default in case of failure.
|
||||
*
|
||||
* @param $key
|
||||
* @param null $default
|
||||
* @return mixed
|
||||
* @throws FacebookApiException
|
||||
*/
|
||||
public function get($key,$default=NULL) {
|
||||
if (! $uid = $this->user_id()) {
|
||||
$this->login_url();
|
||||
|
||||
throw new FacebookApiException('User is not logged in.');
|
||||
}
|
||||
|
||||
if (empty($this->data))
|
||||
$this->data = $this->ao->api(array(
|
||||
'method' => 'fql.query',
|
||||
'query' => sprintf('SELECT %s FROM user WHERE uid = %s',$this->config_fields,$uid),
|
||||
));
|
||||
|
||||
return (! empty($this->data[0][$key])) ? $this->data[0][$key] : $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is user currently logged into facebook?
|
||||
*/
|
||||
public function logged_in($role=NULL,$debug=NULL) {
|
||||
return $this->ao->getUser() ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a login url, based on scope, redirect_uri and display.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function login_url() {
|
||||
return urldecode($this->ao->getLoginUrl(array(
|
||||
'scope' => $this->config->scope,
|
||||
'redirect_uri' => $this->config->redirect_uri,
|
||||
'display' => $this->config->display,
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a logout url based on next.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function logout_url() {
|
||||
return urldecode($this->ao->getLogoutUrl(array('next'=>$this->config->next)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return user id if success, otherwise FALSE.
|
||||
*/
|
||||
public function user_id() {
|
||||
if ($this->logged_in()) {
|
||||
$this->uid = $this->ao->getUser();
|
||||
|
||||
return $this->uid;
|
||||
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
14
modules/oauth/classes/Auth/Google.php
Normal file
14
modules/oauth/classes/Auth/Google.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides Authentication using Google
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Auth_Google extends Auth_ORM_External_OAuth2 {
|
||||
}
|
||||
?>
|
14
modules/oauth/classes/Auth/Linkedin.php
Normal file
14
modules/oauth/classes/Auth/Linkedin.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides Authentication using Google
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Auth_Linkedin extends Auth_ORM_External_OAuth {
|
||||
}
|
||||
?>
|
50
modules/oauth/classes/Auth/ORM/External.php
Normal file
50
modules/oauth/classes/Auth/ORM/External.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class extends Auth_ORM to enable external authentication
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Auth_ORM_External extends Auth_ORM {
|
||||
// Our Authentication Object
|
||||
protected $ao;
|
||||
// Our OAuth Model Object
|
||||
protected $oo;
|
||||
|
||||
public function __construct(Model_Oauth $oo) {
|
||||
parent::__construct((array)Kohana::$config->load('auth'));
|
||||
|
||||
$this->oo = $oo;
|
||||
}
|
||||
|
||||
protected function _login($user,$password,$remember) {
|
||||
$this->complete_login($user);
|
||||
|
||||
if ($remember) {
|
||||
$aoo = $this->oo->account_oauth->where('account_id','=',$user->id)->find();
|
||||
|
||||
// Record our user in the DB
|
||||
$aoo->account_id = $user->id;
|
||||
$aoo->oauth_id = $this->oo->id;
|
||||
$aoo->userid = $remember->user_id();
|
||||
|
||||
if ($user instanceof Auth_ORM_External_OAuth2 OR $user instanceof Auth_ORM_External_OAuth)
|
||||
$aoo->oauth_data = array(
|
||||
'token'=>$remember->token,
|
||||
);
|
||||
elseif ($user instanceof Auth_ORM_External)
|
||||
$aoo->oauth_data = array(
|
||||
'token'=>$remember->ao->getAccessToken(),
|
||||
);
|
||||
|
||||
return $aoo->save();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
?>
|
97
modules/oauth/classes/Auth/ORM/External/OAuth.php
vendored
Normal file
97
modules/oauth/classes/Auth/ORM/External/OAuth.php
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class extends Auth_ORM to enable external authentication
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Auth_ORM_External_OAuth extends Auth_ORM_External {
|
||||
// OAuth Objects
|
||||
protected $consumer;
|
||||
protected $provider;
|
||||
protected $token;
|
||||
|
||||
public function __construct(Model_Oauth $oo) {
|
||||
// If our user refused, then no point continuing
|
||||
if ($problem = Arr::get($_REQUEST,'oauth_problem'))
|
||||
switch ($problem) {
|
||||
case 'user_refused':
|
||||
HTTP::redirect('login');
|
||||
default:
|
||||
throw HTTP_Exception::factory(501,'Unknown OAuth Problem :problem',array(':problem'=>$problem));
|
||||
}
|
||||
|
||||
parent::__construct($oo);
|
||||
|
||||
// Load the provider
|
||||
$this->provider = OAuth_Provider::factory($this->oo->name);
|
||||
|
||||
// Load the consumer for this provider
|
||||
$this->consumer = OAuth_Consumer::factory(array(
|
||||
'key'=>$this->oo->app_id,
|
||||
'secret'=>$this->oo->secret,
|
||||
));
|
||||
}
|
||||
|
||||
protected function _login($user,$password,$remember) {
|
||||
// During login, we dont need to keep out token anymore
|
||||
Session::instance()->delete('oauth.token');
|
||||
|
||||
return parent::_login($user,$password,$remember);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is user currently log in??
|
||||
* If we have a valid token, then we are.
|
||||
*/
|
||||
public function logged_in($role=NULL,$debug=NULL) {
|
||||
// Attempt to complete signin
|
||||
if ($verifier = Arr::get($_REQUEST,'oauth_verifier')) {
|
||||
// Restart the login process
|
||||
if (! $token = Session::instance()->get_once('oauth.request') OR $token->token !== Arr::get($_REQUEST,'oauth_token'))
|
||||
return FALSE;
|
||||
|
||||
// Store the verifier in the token
|
||||
$token->verifier($verifier);
|
||||
|
||||
// Exchange the request token for an access token
|
||||
$this->token = $this->provider->access_token($this->consumer,$token);
|
||||
|
||||
// Store the access token
|
||||
Session::instance()->set('oauth.token',$this->token);
|
||||
|
||||
// Otherwise try and get our token from our session.
|
||||
} else {
|
||||
$this->token = Session::instance()->get('oauth.token');
|
||||
}
|
||||
|
||||
// @todo We need to check that the token is still valid.
|
||||
return $this->token ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Our URL that starts the login process
|
||||
*/
|
||||
public function login_url() {
|
||||
// Add the callback URL to the consumer
|
||||
$this->consumer->callback(URL::site('oauth/login/'.$this->oo->name,TRUE));
|
||||
|
||||
// Get a request token for the consumer
|
||||
$token = $this->provider->request_token($this->consumer);
|
||||
|
||||
// Store the token
|
||||
Session::instance()->set('oauth.request',$token);
|
||||
|
||||
// Get the login URL from the provider
|
||||
return $this->provider->authorize_url($token);
|
||||
}
|
||||
|
||||
public function user_id() {
|
||||
return $this->provider->user_details($this->consumer,$this->token)->id();
|
||||
}
|
||||
}
|
||||
?>
|
86
modules/oauth/classes/Auth/ORM/External/OAuth2.php
vendored
Normal file
86
modules/oauth/classes/Auth/ORM/External/OAuth2.php
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class extends Auth_ORM to enable external authentication
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Auth_ORM_External_OAuth2 extends Auth_ORM_External {
|
||||
// OAuth Objects
|
||||
protected $client;
|
||||
protected $provider;
|
||||
protected $token;
|
||||
|
||||
public function __construct(Model_Oauth $oo) {
|
||||
// If our user refused, then no point continuing
|
||||
if ($problem = Arr::get($_REQUEST,'error'))
|
||||
switch ($problem) {
|
||||
case 'access_denied':
|
||||
HTTP::redirect('login');
|
||||
|
||||
default:
|
||||
throw HTTP_Exception::factory(501,'Unknown OAuth Problem :problem',array(':problem'=>$problem));
|
||||
}
|
||||
|
||||
parent::__construct($oo);
|
||||
|
||||
// Load the provider
|
||||
$this->provider = OAuth2_Provider::factory($this->oo->name);
|
||||
|
||||
// Load the client for this provider
|
||||
$this->client = OAuth2_Client::factory(array(
|
||||
'id'=>$this->oo->app_id,
|
||||
'secret'=>$this->oo->secret,
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Is user currently log in??
|
||||
* If we have a valid token, then we are.
|
||||
*/
|
||||
public function logged_in($role=NULL,$debug=NULL) {
|
||||
// Attempt to complete signin
|
||||
if ($code = Arr::get($_REQUEST,'code')) {
|
||||
$state = Arr::get($_REQUEST,'state');
|
||||
if (! $state OR $state != Session::instance()->get_once('oauth.state'))
|
||||
return FALSE;
|
||||
|
||||
// Add the callback URL to the consumer
|
||||
$this->client->callback(URL::site('oauth/login/'.$this->oo->name,TRUE));
|
||||
|
||||
// Exchange the authorization code for an access token
|
||||
$this->token = $this->provider->access_token($this->client,$code);
|
||||
Session::instance()->set('oauth.token',$this->token);
|
||||
|
||||
// Otherwise try and get our token from our session.
|
||||
} else {
|
||||
$this->token = Session::instance()->get_once('oauth.token');
|
||||
}
|
||||
|
||||
// @todo We need to check that the token is still valid.
|
||||
return $this->token ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Our URL that starts the login process
|
||||
*/
|
||||
public function login_url() {
|
||||
$state = sha1($this->oo->name.time());
|
||||
Session::instance()->set('oauth.state',$state);
|
||||
|
||||
// Add the callback URL to the consumer
|
||||
$this->client->callback(URL::site('oauth/login/'.$this->oo->name,TRUE));
|
||||
|
||||
// Get the login URL from the provider
|
||||
return $this->provider->authorize_url($this->client,array('state'=>$state));
|
||||
}
|
||||
|
||||
public function user_id() {
|
||||
return $this->provider->user_details($this->client,array('access_token'=>$this->token))->id();
|
||||
}
|
||||
}
|
||||
?>
|
@ -21,26 +21,12 @@ class Controller_Oauth extends Controller_TemplateDefault {
|
||||
if (! $oo->loaded() OR ! $oo->status)
|
||||
HTTP::redirect('login');
|
||||
|
||||
$auth = NULL;
|
||||
|
||||
if ($oo->name == 'facebook') {
|
||||
// User Denied a Facebook authorisation, so we'll go back to login
|
||||
// We wouldnt normally get here, since we are doing JS authentication
|
||||
if ($this->request->query('error') AND $this->request->query('error_reason') == 'user_denied')
|
||||
HTTP::redirect('login');
|
||||
|
||||
$auth = Auth::instance($oo);
|
||||
|
||||
// If we are not logged in, do the facebook stuff.
|
||||
// We wouldnt normally get here, since we are doing JS authentication
|
||||
if (! $auth->logged_in())
|
||||
HTTP::redirect($auth->login_url());
|
||||
|
||||
// Here we must be logged in to Facebook
|
||||
// @todo Only use verified accounts - is this applicable?
|
||||
|
||||
$aoo = $oo->account_oauth->where('userid','=',$auth->user_id())->find();
|
||||
}
|
||||
|
||||
// If we have an ID, we have been linked, redirect to login
|
||||
if ($aoo->loaded() AND $auth->login($aoo->account,$auth->user_id(),$auth))
|
||||
|
278
modules/oauth/classes/Kohana/OAuth.php
Normal file
278
modules/oauth/classes/Kohana/OAuth.php
Normal file
@ -0,0 +1,278 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Library
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Base
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
abstract class Kohana_OAuth {
|
||||
|
||||
/**
|
||||
* @var string OAuth complaince version
|
||||
*/
|
||||
public static $version = '1.0';
|
||||
|
||||
/**
|
||||
* Returns the output of a remote URL. Any [curl option](http://php.net/curl_setopt)
|
||||
* may be used.
|
||||
*
|
||||
* // Do a simple GET request
|
||||
* $data = Remote::get($url);
|
||||
*
|
||||
* // Do a POST request
|
||||
* $data = Remote::get($url, array(
|
||||
* CURLOPT_POST => TRUE,
|
||||
* CURLOPT_POSTFIELDS => http_build_query($array),
|
||||
* ));
|
||||
*
|
||||
* @param string remote URL
|
||||
* @param array curl options
|
||||
* @return string
|
||||
* @throws Kohana_Exception
|
||||
*/
|
||||
public static function remote($url, array $options = NULL)
|
||||
{
|
||||
// The transfer must always be returned
|
||||
$options[CURLOPT_RETURNTRANSFER] = TRUE;
|
||||
|
||||
// Open a new remote connection
|
||||
$remote = curl_init($url);
|
||||
|
||||
// Set connection options
|
||||
if ( ! curl_setopt_array($remote, $options))
|
||||
{
|
||||
throw new Kohana_Exception('Failed to set CURL options, check CURL documentation: :url',
|
||||
array(':url' => 'http://php.net/curl_setopt_array'));
|
||||
}
|
||||
|
||||
// Get the response
|
||||
$response = curl_exec($remote);
|
||||
|
||||
// Get the response information
|
||||
$code = curl_getinfo($remote, CURLINFO_HTTP_CODE);
|
||||
|
||||
if ($code AND $code < 200 OR $code > 299)
|
||||
{
|
||||
$error = $response;
|
||||
}
|
||||
elseif ($response === FALSE)
|
||||
{
|
||||
$error = curl_error($remote);
|
||||
}
|
||||
|
||||
// Close the connection
|
||||
curl_close($remote);
|
||||
|
||||
if (isset($error))
|
||||
{
|
||||
throw new Kohana_OAuth_Request_Exception('Error fetching remote :url [ status :code ] :error',
|
||||
array(':url' => $url, ':code' => $code, ':error' => $error),
|
||||
$code,
|
||||
$response);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
/**
|
||||
* RFC3986 compatible version of urlencode. Passing an array will encode
|
||||
* all of the values in the array. Array keys will not be encoded.
|
||||
*
|
||||
* $input = OAuth::urlencode($input);
|
||||
*
|
||||
* Multi-dimensional arrays are not allowed!
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 5.1](http://oauth.net/core/1.0/#rfc.section.5.1).
|
||||
*
|
||||
* @param mixed input string or array
|
||||
* @return mixed
|
||||
*/
|
||||
public static function urlencode($input)
|
||||
{
|
||||
if (is_array($input))
|
||||
{
|
||||
// Encode the values of the array
|
||||
return array_map(array('OAuth', 'urlencode'), $input);
|
||||
}
|
||||
|
||||
// Encode the input
|
||||
$input = rawurlencode($input);
|
||||
|
||||
if (version_compare(PHP_VERSION, '<', '5.3'))
|
||||
{
|
||||
// rawurlencode() is RFC3986 compliant in PHP 5.3
|
||||
// the only difference is the encoding of tilde
|
||||
$input = str_replace('%7E', '~', $input);
|
||||
}
|
||||
|
||||
return $input;
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC3986 complaint version of urldecode. Passing an array will decode
|
||||
* all of the values in the array. Array keys will not be encoded.
|
||||
*
|
||||
* $input = OAuth::urldecode($input);
|
||||
*
|
||||
* Multi-dimensional arrays are not allowed!
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 5.1](http://oauth.net/core/1.0/#rfc.section.5.1).
|
||||
*
|
||||
* @param mixed input string or array
|
||||
* @return mixed
|
||||
*/
|
||||
public static function urldecode($input)
|
||||
{
|
||||
if (is_array($input))
|
||||
{
|
||||
// Decode the values of the array
|
||||
return array_map(array('OAuth', 'urldecode'), $input);
|
||||
}
|
||||
|
||||
// Decode the input
|
||||
return rawurldecode($input);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize all request parameters into a string.
|
||||
*
|
||||
* $query = OAuth::normalize_params($params);
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 9.1.1](http://oauth.net/core/1.0/#rfc.section.9.1.1).
|
||||
*
|
||||
* @param array request parameters
|
||||
* @return string
|
||||
* @uses OAuth::urlencode
|
||||
*/
|
||||
public static function normalize_params(array $params = NULL)
|
||||
{
|
||||
if ( ! $params)
|
||||
{
|
||||
// Nothing to do
|
||||
return '';
|
||||
}
|
||||
|
||||
// Encode the parameter keys and values
|
||||
$keys = OAuth::urlencode(array_keys($params));
|
||||
$values = OAuth::urlencode(array_values($params));
|
||||
|
||||
// Recombine the parameters
|
||||
$params = array_combine($keys, $values);
|
||||
|
||||
// OAuth Spec 9.1.1 (1)
|
||||
// "Parameters are sorted by name, using lexicographical byte value ordering."
|
||||
uksort($params, 'strcmp');
|
||||
|
||||
// Create a new query string
|
||||
$query = array();
|
||||
|
||||
foreach ($params as $name => $value)
|
||||
{
|
||||
if (is_array($value))
|
||||
{
|
||||
// OAuth Spec 9.1.1 (1)
|
||||
// "If two or more parameters share the same name, they are sorted by their value."
|
||||
natsort($value);
|
||||
|
||||
foreach ($value as $duplicate)
|
||||
{
|
||||
$query[] = $name.'='.$duplicate;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$query[] = $name.'='.$value;
|
||||
}
|
||||
}
|
||||
|
||||
return implode('&', $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the query string out of the URL and return it as parameters.
|
||||
* All GET parameters must be removed from the request URL when building
|
||||
* the base string and added to the request parameters.
|
||||
*
|
||||
* // parsed parameters: array('oauth_key' => 'abcdef123456789')
|
||||
* list($url, $params) = OAuth::parse_url('http://example.com/oauth/access?oauth_key=abcdef123456789');
|
||||
*
|
||||
* [!!] This implements [OAuth Spec 9.1.1](http://oauth.net/core/1.0/#rfc.section.9.1.1).
|
||||
*
|
||||
* @param string URL to parse
|
||||
* @return array (clean_url, params)
|
||||
* @uses OAuth::parse_params
|
||||
*/
|
||||
public static function parse_url($url)
|
||||
{
|
||||
if ($query = parse_url($url, PHP_URL_QUERY))
|
||||
{
|
||||
// Remove the query string from the URL
|
||||
list($url) = explode('?', $url, 2);
|
||||
|
||||
// Parse the query string as request parameters
|
||||
$params = OAuth::parse_params($query);
|
||||
}
|
||||
else
|
||||
{
|
||||
// No parameters are present
|
||||
$params = array();
|
||||
}
|
||||
|
||||
return array($url, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the parameters in a string and return an array. Duplicates are
|
||||
* converted into indexed arrays.
|
||||
*
|
||||
* // Parsed: array('a' => '1', 'b' => '2', 'c' => '3')
|
||||
* $params = OAuth::parse_params('a=1,b=2,c=3');
|
||||
*
|
||||
* // Parsed: array('a' => array('1', '2'), 'c' => '3')
|
||||
* $params = OAuth::parse_params('a=1,a=2,c=3');
|
||||
*
|
||||
* @param string parameter string
|
||||
* @return array
|
||||
*/
|
||||
public static function parse_params($params)
|
||||
{
|
||||
// Split the parameters by &
|
||||
$params = explode('&', trim($params));
|
||||
|
||||
// Create an array of parsed parameters
|
||||
$parsed = array();
|
||||
|
||||
foreach ($params as $param)
|
||||
{
|
||||
// Split the parameter into name and value
|
||||
list($name, $value) = explode('=', $param, 2);
|
||||
|
||||
// Decode the name and value
|
||||
$name = OAuth::urldecode($name);
|
||||
$value = OAuth::urldecode($value);
|
||||
|
||||
if (isset($parsed[$name]))
|
||||
{
|
||||
if ( ! is_array($parsed[$name]))
|
||||
{
|
||||
// Convert the parameter to an array
|
||||
$parsed[$name] = array($parsed[$name]);
|
||||
}
|
||||
|
||||
// Add a new duplicate parameter
|
||||
$parsed[$name][] = $value;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add a new parameter
|
||||
$parsed[$name] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $parsed;
|
||||
}
|
||||
|
||||
} // End OAuth
|
85
modules/oauth/classes/Kohana/OAuth/API.php
Normal file
85
modules/oauth/classes/Kohana/OAuth/API.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth API
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth_API {
|
||||
/**
|
||||
* @var string profile data
|
||||
*/
|
||||
protected $profile;
|
||||
|
||||
/**
|
||||
* Create a new API object.
|
||||
*
|
||||
* $API = OAuth_API::factory($name);
|
||||
*
|
||||
* @param string API type
|
||||
* @param array API options
|
||||
* @return OAuth_API
|
||||
*/
|
||||
public static function factory(OAuth_Provider $provider, $name, array $options = NULL)
|
||||
{
|
||||
$class = 'OAuth_API_'.ucfirst($name).'_'.ucfirst($provider->name);
|
||||
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var string required parameters
|
||||
*/
|
||||
protected $required = array(
|
||||
'profile',
|
||||
);
|
||||
|
||||
/**
|
||||
* Sets the API data.
|
||||
*
|
||||
* @param array API options
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(array $options = NULL)
|
||||
{
|
||||
foreach ($this->required as $key)
|
||||
{
|
||||
if ( ! isset($options[$key]))
|
||||
{
|
||||
throw new Kohana_OAuth_Exception('Required option not passed: :option',
|
||||
array(':option' => $key));
|
||||
}
|
||||
|
||||
$this->$key = $options[$key];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the API details
|
||||
* $secret = $api->id;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the API key.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return (string) $this->profile;
|
||||
}
|
||||
|
||||
} // End OAuth_API
|
17
modules/oauth/classes/Kohana/OAuth/API/Profile/Linkedin.php
Normal file
17
modules/oauth/classes/Kohana/OAuth/API/Profile/Linkedin.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Profile for Linkedin
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Kohana_OAuth_API_Profile_Linkedin extends OAuth_API {
|
||||
public function id() {
|
||||
return $this->profile->id;
|
||||
}
|
||||
}
|
||||
?>
|
109
modules/oauth/classes/Kohana/OAuth/Consumer.php
Normal file
109
modules/oauth/classes/Kohana/OAuth/Consumer.php
Normal file
@ -0,0 +1,109 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Consumer
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Base
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Consumer {
|
||||
|
||||
/**
|
||||
* Create a new consumer object.
|
||||
*
|
||||
* $consumer = OAuth_Consumer::factory($options);
|
||||
*
|
||||
* @param array consumer options, key and secret are required
|
||||
* @return OAuth_Consumer
|
||||
*/
|
||||
public static function factory(array $options = NULL)
|
||||
{
|
||||
return new OAuth_Consumer($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var string consumer key
|
||||
*/
|
||||
protected $key;
|
||||
|
||||
/**
|
||||
* @var string consumer secret
|
||||
*/
|
||||
protected $secret;
|
||||
|
||||
/**
|
||||
* @var string callback URL for OAuth authorization completion
|
||||
*/
|
||||
protected $callback;
|
||||
|
||||
/**
|
||||
* @var string optional realm for the OAuth request
|
||||
*/
|
||||
protected $realm;
|
||||
|
||||
/**
|
||||
* Sets the consumer key and secret.
|
||||
*
|
||||
* @param array consumer options, key and secret are required
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(array $options = NULL)
|
||||
{
|
||||
if ( ! isset($options['key']))
|
||||
{
|
||||
throw new Kohana_OAuth_Exception('Required option not passed: :option',
|
||||
array(':option' => 'key'));
|
||||
}
|
||||
|
||||
if ( ! isset($options['secret']))
|
||||
{
|
||||
throw new Kohana_OAuth_Exception('Required option not passed: :option',
|
||||
array(':option' => 'secret'));
|
||||
}
|
||||
|
||||
$this->key = $options['key'];
|
||||
|
||||
$this->secret = $options['secret'];
|
||||
|
||||
if (isset($options['callback']))
|
||||
{
|
||||
$this->callback = $options['callback'];
|
||||
}
|
||||
|
||||
if (isset($options['realm']))
|
||||
{
|
||||
$this->realm = $options['realm'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the consumer key
|
||||
* $key = $consumer->key;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the consumer callback.
|
||||
*
|
||||
* @param string new consumer callback
|
||||
* @return $this
|
||||
*/
|
||||
public function callback($callback)
|
||||
{
|
||||
$this->callback = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
} // End OAuth_Consumer
|
12
modules/oauth/classes/Kohana/OAuth/Exception.php
Normal file
12
modules/oauth/classes/Kohana/OAuth/Exception.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Exception
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Exceptions
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Exception extends Kohana_Exception { }
|
253
modules/oauth/classes/Kohana/OAuth/Provider.php
Normal file
253
modules/oauth/classes/Kohana/OAuth/Provider.php
Normal file
@ -0,0 +1,253 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Provider
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Provider
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @since 3.0.7
|
||||
*/
|
||||
abstract class Kohana_OAuth_Provider {
|
||||
|
||||
/**
|
||||
* Create a new provider.
|
||||
*
|
||||
* // Load the Twitter provider
|
||||
* $provider = OAuth_Provider::factory('twitter');
|
||||
*
|
||||
* @param string provider name
|
||||
* @param array provider options
|
||||
* @return OAuth_Provider
|
||||
*/
|
||||
public static function factory($name, array $options = NULL)
|
||||
{
|
||||
$class = 'OAuth_Provider_'.ucfirst($name);
|
||||
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var string provider name
|
||||
*/
|
||||
public $name;
|
||||
|
||||
/**
|
||||
* @var array additional request parameters to be used for remote requests
|
||||
*/
|
||||
protected $params = array();
|
||||
|
||||
/**
|
||||
* @var string Our API Items that we want to access
|
||||
*/
|
||||
protected $scope = '';
|
||||
|
||||
/**
|
||||
* Overloads default class properties from the options.
|
||||
*
|
||||
* Any of the provider options can be set here:
|
||||
*
|
||||
* Type | Option | Description | Default Value
|
||||
* ----------|---------------|------------------------------------------------|-----------------
|
||||
* mixed | signature | Signature method name or object | provider default
|
||||
*
|
||||
* @param array provider options
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(array $options = NULL)
|
||||
{
|
||||
if (isset($options['signature']))
|
||||
{
|
||||
// Set the signature method name or object
|
||||
$this->signature = $options['signature'];
|
||||
}
|
||||
|
||||
if ( ! is_object($this->signature))
|
||||
{
|
||||
// Convert the signature name into an object
|
||||
$this->signature = OAuth_Signature::factory($this->signature);
|
||||
}
|
||||
|
||||
if ( ! $this->name)
|
||||
{
|
||||
// Attempt to guess the name from the class name
|
||||
$this->name = strtolower(substr(get_class($this), strlen('OAuth_Provider_')));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the provider signature
|
||||
* $signature = $provider->signature;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the request token URL for the provider.
|
||||
*
|
||||
* $url = $provider->url_request_token();
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract public function url_request_token();
|
||||
|
||||
/**
|
||||
* Returns the authorization URL for the provider.
|
||||
*
|
||||
* $url = $provider->url_authorize();
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract public function url_authorize();
|
||||
|
||||
/**
|
||||
* Returns the access token endpoint for the provider.
|
||||
*
|
||||
* $url = $provider->url_access_token();
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
abstract public function url_access_token();
|
||||
|
||||
/**
|
||||
* Ask for a request token from the OAuth provider.
|
||||
*
|
||||
* $token = $provider->request_token($consumer);
|
||||
*
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param array additional request parameters
|
||||
* @return OAuth_Token_Request
|
||||
* @uses OAuth_Request_Token
|
||||
*/
|
||||
public function request_token(OAuth_Consumer $consumer, array $params = NULL)
|
||||
{
|
||||
// Create a new GET request for a request token with the required parameters
|
||||
$request = OAuth_Request::factory('token', 'GET', $this->url_request_token(), array(
|
||||
'realm' => $consumer->realm,
|
||||
'oauth_consumer_key' => $consumer->key,
|
||||
'oauth_callback' => $consumer->callback,
|
||||
));
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Load user parameters
|
||||
$request->params($params);
|
||||
}
|
||||
|
||||
// Sign the request using only the consumer, no token is available yet
|
||||
$request->sign($this->signature, $consumer);
|
||||
|
||||
// Create a response from the request
|
||||
$response = $request->execute();
|
||||
|
||||
// Store this token somewhere useful
|
||||
return OAuth_Token::factory('request', array(
|
||||
'token' => $response->param('oauth_token'),
|
||||
'secret' => $response->param('oauth_token_secret'),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the authorization URL for the request token.
|
||||
*
|
||||
* $this->request->redirect($provider->authorize_url($token));
|
||||
*
|
||||
* @param OAuth_Token_Request token
|
||||
* @param array additional request parameters
|
||||
* @return string
|
||||
*/
|
||||
public function authorize_url(OAuth_Token_Request $token, array $params = NULL)
|
||||
{
|
||||
// Create a new GET request for a request token with the required parameters
|
||||
$request = OAuth_Request::factory('authorize', 'GET', $this->url_authorize(), array(
|
||||
'oauth_token' => $token->token,
|
||||
'scope' => $this->scope,
|
||||
));
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Load user parameters
|
||||
$request->params($params);
|
||||
}
|
||||
|
||||
return $request->as_url();
|
||||
}
|
||||
|
||||
/**
|
||||
* Exchange the request token for an access token.
|
||||
*
|
||||
* $token = $provider->access_token($consumer, $token);
|
||||
*
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param OAuth_Token_Request token
|
||||
* @param array additional request parameters
|
||||
* @return OAuth_Token_Access
|
||||
*/
|
||||
public function access_token(OAuth_Consumer $consumer, OAuth_Token_Request $token, array $params = NULL)
|
||||
{
|
||||
// Create a new GET request for a request token with the required parameters
|
||||
$request = OAuth_Request::factory('access', 'GET', $this->url_access_token(), array(
|
||||
'realm' => $consumer->realm,
|
||||
'oauth_consumer_key' => $consumer->key,
|
||||
'oauth_token' => $token->token,
|
||||
'oauth_verifier' => $token->verifier,
|
||||
));
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Load user parameters
|
||||
$request->params($params);
|
||||
}
|
||||
|
||||
// Sign the request using only the consumer, no token is available yet
|
||||
$request->sign($this->signature, $consumer, $token);
|
||||
|
||||
// Create a response from the request
|
||||
$response = $request->execute();
|
||||
|
||||
// Store this token somewhere useful
|
||||
return OAuth_Token::factory('access', array(
|
||||
'token' => $response->param('oauth_token'),
|
||||
'secret' => $response->param('oauth_token_secret'),
|
||||
));
|
||||
}
|
||||
|
||||
public function user_details(OAuth_Consumer $consumer, OAuth_Token $token, array $params = NULL)
|
||||
{
|
||||
// Create a new GET request for a request token with the required parameters
|
||||
$request = OAuth_Request::factory('resource', 'GET', $this->url_user_details(), array(
|
||||
'oauth_consumer_key' => $consumer->key,
|
||||
'oauth_token' => $token->token,
|
||||
));
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Load user parameters
|
||||
$request->params($params);
|
||||
}
|
||||
|
||||
// Sign the request using only the consumer, no token is available yet
|
||||
$request->sign($this->signature, $consumer, $token);
|
||||
|
||||
// Create a response from the request
|
||||
$response = $request->execute();
|
||||
|
||||
// Store these user details useful
|
||||
return OAuth_API::factory($this, 'profile', array(
|
||||
'provider' => $this->name,
|
||||
'profile' => json_decode($response),
|
||||
));
|
||||
}
|
||||
|
||||
} // End OAuth_Signature
|
78
modules/oauth/classes/Kohana/OAuth/Provider/Linkedin.php
Normal file
78
modules/oauth/classes/Kohana/OAuth/Provider/Linkedin.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
/**
|
||||
* OAuth Linkedin Provider
|
||||
*
|
||||
* Documents for implementing Linkedin OAuth can be found at
|
||||
* <http://developer.linkedin.com/docs/DOC-1251>.
|
||||
*
|
||||
* [!!] This class does not implement the Linkedin API. It is only an
|
||||
* implementation of standard OAuth with Linkedin as the service provider.
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Provider
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Provider_Linkedin extends OAuth_Provider {
|
||||
|
||||
/**
|
||||
* @var string Provider name
|
||||
*/
|
||||
public $name = 'linkedin';
|
||||
|
||||
/**
|
||||
* @var string Signature
|
||||
*/
|
||||
protected $signature = 'HMAC-SHA1';
|
||||
|
||||
/**
|
||||
* @var string Our API Items that we want to access
|
||||
*/
|
||||
protected $scope = 'r_basicprofile+r_emailaddress';
|
||||
|
||||
/**
|
||||
* Request token URL
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function url_request_token()
|
||||
{
|
||||
return 'https://api.linkedin.com/uas/oauth/requestToken';
|
||||
}
|
||||
|
||||
/**
|
||||
* Authorize URL
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function url_authorize()
|
||||
{
|
||||
return 'https://api.linkedin.com/uas/oauth/authorize';
|
||||
}
|
||||
|
||||
/**
|
||||
* Access token URL
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function url_access_token()
|
||||
{
|
||||
return 'https://api.linkedin.com/uas/oauth/accessToken';
|
||||
}
|
||||
|
||||
/**
|
||||
* Access to Profile Details URL
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function url_user_details()
|
||||
{
|
||||
return 'https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address)?format=json';
|
||||
}
|
||||
|
||||
} // End Kohana_OAuth_Provider_Linkedin
|
541
modules/oauth/classes/Kohana/OAuth/Request.php
Normal file
541
modules/oauth/classes/Kohana/OAuth/Request.php
Normal file
@ -0,0 +1,541 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Request
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Request
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Request {
|
||||
|
||||
/**
|
||||
* Create a new request object.
|
||||
*
|
||||
* $request = OAuth_Request::factory('token', 'http://example.com/oauth/request_token');
|
||||
*
|
||||
* @param string request type
|
||||
* @param string request URL
|
||||
* @param string request method
|
||||
* @param array request parameters
|
||||
* @return OAuth_Request
|
||||
*/
|
||||
public static function factory($type, $method, $url = NULL, array $params = NULL)
|
||||
{
|
||||
$class = 'OAuth_Request_'.ucfirst($type);
|
||||
|
||||
return new $class($method, $url, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var integer connection timeout
|
||||
*/
|
||||
public $timeout = 10;
|
||||
|
||||
/**
|
||||
* @var boolean send Authorization header?
|
||||
*/
|
||||
public $send_header = TRUE;
|
||||
|
||||
/**
|
||||
* @var string request type name: token, authorize, access, resource
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* @var string request method: GET, POST, etc
|
||||
*/
|
||||
protected $method = 'GET';
|
||||
|
||||
/**
|
||||
* @var string request URL
|
||||
*/
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* @var string request body
|
||||
*/
|
||||
protected $body;
|
||||
|
||||
/**
|
||||
* @var string OAuth parameters matching regex
|
||||
*/
|
||||
protected $auth_params = '/^oauth_/';
|
||||
|
||||
/**
|
||||
* @var array request parameters
|
||||
*/
|
||||
protected $params = array();
|
||||
|
||||
/**
|
||||
* @var array upload parameters
|
||||
*/
|
||||
protected $upload = array();
|
||||
|
||||
/**
|
||||
* @var array required parameters
|
||||
*/
|
||||
protected $required = array();
|
||||
|
||||
/**
|
||||
* Set the request URL, method, and parameters.
|
||||
*
|
||||
* @param string request method
|
||||
* @param string request URL
|
||||
* @param array request parameters
|
||||
* @uses OAuth::parse_url
|
||||
*/
|
||||
public function __construct($method, $url, array $params = NULL)
|
||||
{
|
||||
if ($method)
|
||||
{
|
||||
// Set the request method
|
||||
$this->method = strtoupper($method);
|
||||
}
|
||||
|
||||
// Separate the URL and query string, which will be used as additional
|
||||
// default parameters
|
||||
list ($url, $default) = OAuth::parse_url($url);
|
||||
|
||||
// Set the request URL
|
||||
$this->url = $url;
|
||||
|
||||
if ($default)
|
||||
{
|
||||
// Set the default parameters
|
||||
$this->params($default);
|
||||
}
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Set the request parameters
|
||||
$this->params($params);
|
||||
}
|
||||
|
||||
if ($this->required('oauth_version') AND ! isset($this->params['oauth_version']))
|
||||
{
|
||||
// Set the version of this request
|
||||
$this->params['oauth_version'] = OAuth::$version;
|
||||
}
|
||||
|
||||
if ($this->required('oauth_timestamp') AND ! isset($this->params['oauth_timestamp']))
|
||||
{
|
||||
// Set the timestamp of this request
|
||||
$this->params['oauth_timestamp'] = $this->timestamp();
|
||||
}
|
||||
|
||||
if ($this->required('oauth_nonce') AND ! isset($this->params['oauth_nonce']))
|
||||
{
|
||||
// Set the unique nonce of this request
|
||||
$this->params['oauth_nonce'] = $this->nonce();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the request parameters
|
||||
* $params = $request->params;
|
||||
*
|
||||
* // Get the request URL
|
||||
* $url = $request->url;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the UNIX timestamp for a request.
|
||||
*
|
||||
* $time = $request->timestamp();
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 8](http://oauth.net/core/1.0/#rfc.section.8).
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function timestamp()
|
||||
{
|
||||
return time();
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the nonce for a request.
|
||||
*
|
||||
* $nonce = $request->nonce();
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 8](http://oauth.net/core/1.0/#rfc.section.8).
|
||||
*
|
||||
* @return string
|
||||
* @uses Text::random
|
||||
*/
|
||||
public function nonce()
|
||||
{
|
||||
return Text::random('alnum', 40);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the base signature string for a request.
|
||||
*
|
||||
* $base = $request->base_string();
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec A5.1](http://oauth.net/core/1.0/#rfc.section.A.5.1).
|
||||
*
|
||||
* @param OAuth_Request request to sign
|
||||
* @return string
|
||||
* @uses OAuth::urlencode
|
||||
* @uses OAuth::normalize_params
|
||||
*/
|
||||
public function base_string()
|
||||
{
|
||||
$url = $this->url;
|
||||
|
||||
// Get the request parameters
|
||||
$params = array_diff_key($this->params, $this->upload);
|
||||
|
||||
// "oauth_signature" is never included in the base string!
|
||||
unset($params['oauth_signature']);
|
||||
|
||||
// method & url & sorted-parameters
|
||||
return implode('&', array(
|
||||
$this->method,
|
||||
OAuth::urlencode($url),
|
||||
OAuth::urlencode(OAuth::normalize_params($params)),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Parameter getter and setter. Setting the value to `NULL` will remove it.
|
||||
*
|
||||
* // Set the "oauth_consumer_key" to a new value
|
||||
* $request->param('oauth_consumer_key', $key);
|
||||
*
|
||||
* // Get the "oauth_consumer_key" value
|
||||
* $key = $request->param('oauth_consumer_key');
|
||||
*
|
||||
* @param string parameter name
|
||||
* @param mixed parameter value
|
||||
* @param boolean allow duplicates?
|
||||
* @return mixed when getting
|
||||
* @return $this when setting
|
||||
* @uses Arr::get
|
||||
*/
|
||||
public function param($name, $value = NULL, $duplicate = FALSE)
|
||||
{
|
||||
if ($value === NULL)
|
||||
{
|
||||
// Get the parameter
|
||||
return Arr::get($this->params, $name);
|
||||
}
|
||||
|
||||
if (isset($this->params[$name]) AND $duplicate)
|
||||
{
|
||||
if ( ! is_array($this->params[$name]))
|
||||
{
|
||||
// Convert the parameter into an array
|
||||
$this->params[$name] = array($this->params[$name]);
|
||||
}
|
||||
|
||||
// Add the duplicate value
|
||||
$this->params[$name][] = $value;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the parameter value
|
||||
$this->params[$name] = $value;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set multiple parameters.
|
||||
*
|
||||
* $request->params($params);
|
||||
*
|
||||
* @param array parameters
|
||||
* @param boolean allow duplicates?
|
||||
* @return $this
|
||||
* @uses OAuth_Request::param
|
||||
*/
|
||||
public function params(array $params, $duplicate = FALSE)
|
||||
{
|
||||
foreach ($params as $name => $value)
|
||||
{
|
||||
$this->param($name, $value, $duplicate);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function body($body)
|
||||
{
|
||||
$this->body = $body;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload getter and setter. Setting the value to `NULL` will remove it.
|
||||
*
|
||||
* // Set the "image" file path for uploading
|
||||
* $request->upload('image', $file_path);
|
||||
*
|
||||
* // Get the "image" file path
|
||||
* $key = $request->param('oauth_consumer_key');
|
||||
*
|
||||
* @param string upload name
|
||||
* @param mixed upload file path
|
||||
* @return mixed when getting
|
||||
* @return $this when setting
|
||||
* @uses OAuth_Request::param
|
||||
*/
|
||||
public function upload($name, $value = NULL)
|
||||
{
|
||||
if ($value !== NULL)
|
||||
{
|
||||
// This is an upload parameter
|
||||
$this->upload[$name] = TRUE;
|
||||
|
||||
// Get the mime type of the image
|
||||
$mime = File::mime($value);
|
||||
|
||||
// Format the image path for CURL
|
||||
$value = "@{$value};type={$mime}";
|
||||
}
|
||||
|
||||
return $this->param($name, $value, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get and set required parameters.
|
||||
*
|
||||
* $request->required($field, $value);
|
||||
*
|
||||
* @param string parameter name
|
||||
* @param boolean field value
|
||||
* @return boolean when getting
|
||||
* @return $this when setting
|
||||
*/
|
||||
public function required($param, $value = NULL)
|
||||
{
|
||||
if ($value === NULL)
|
||||
{
|
||||
// Get the current status
|
||||
return ! empty($this->required[$param]);
|
||||
}
|
||||
|
||||
// Change the requirement value
|
||||
$this->required[$param] = (boolean) $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the request parameters into an `Authorization` header.
|
||||
*
|
||||
* $header = $request->as_header();
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 5.4.1](http://oauth.net/core/1.0/#rfc.section.5.4.1).
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function as_header()
|
||||
{
|
||||
$header = array();
|
||||
|
||||
// Check for the existance of "realm"
|
||||
if(array_key_exists('realm', $this->params) and ! empty($this->params['realm']))
|
||||
{
|
||||
// OAuth Spec 5.4.1
|
||||
// "Parameter names and values are encoded per Parameter Encoding [RFC 3986]."
|
||||
$header[] = OAuth::urlencode('realm').'="'.OAuth::urlencode($this->params['realm']).'"';
|
||||
}
|
||||
|
||||
foreach ($this->params as $name => $value)
|
||||
{
|
||||
if (strpos($name, 'oauth_') === 0)
|
||||
{
|
||||
// OAuth Spec 5.4.1
|
||||
// "Parameter names and values are encoded per Parameter Encoding [RFC 3986]."
|
||||
$header[] = OAuth::urlencode($name).'="'.OAuth::urlencode($value).'"';
|
||||
}
|
||||
}
|
||||
|
||||
return $header ? 'OAuth '.implode(', ', $header) : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the request parameters into a query string, suitable for GET and
|
||||
* POST requests.
|
||||
*
|
||||
* $query = $request->as_query();
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 5.2 (2,3)](http://oauth.net/core/1.0/#rfc.section.5.2).
|
||||
*
|
||||
* @param boolean include oauth parameters?
|
||||
* @param boolean return a normalized string?
|
||||
* @return string
|
||||
*/
|
||||
public function as_query($include_oauth = NULL, $as_string = TRUE)
|
||||
{
|
||||
if ($include_oauth === NULL)
|
||||
{
|
||||
// If we are sending a header, OAuth parameters should not be
|
||||
// included in the query string.
|
||||
$include_oauth = ! $this->send_header;
|
||||
}
|
||||
|
||||
if ($include_oauth)
|
||||
{
|
||||
$params = $this->params;
|
||||
}
|
||||
else
|
||||
{
|
||||
$params = array();
|
||||
foreach ($this->params as $name => $value)
|
||||
{
|
||||
if ( ! preg_match($this->auth_params, $name))
|
||||
{
|
||||
// This is not an OAuth parameter
|
||||
$params[$name] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $as_string ? OAuth::normalize_params($params) : $params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the entire request URL with the parameters as a GET string.
|
||||
*
|
||||
* $url = $request->as_url();
|
||||
*
|
||||
* @return string
|
||||
* @uses OAuth_Request::as_query
|
||||
*/
|
||||
public function as_url()
|
||||
{
|
||||
return $this->url.'?'.$this->as_query(TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign the request, setting the `oauth_signature_method` and `oauth_signature`.
|
||||
*
|
||||
* @param OAuth_Signature signature
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param OAuth_Token token
|
||||
* @return $this
|
||||
* @uses OAuth_Signature::sign
|
||||
*/
|
||||
public function sign(OAuth_Signature $signature, OAuth_Consumer $consumer, OAuth_Token $token = NULL)
|
||||
{
|
||||
// Create a new signature class from the method
|
||||
$this->param('oauth_signature_method', $signature->name);
|
||||
|
||||
// Sign the request using the consumer and token
|
||||
$this->param('oauth_signature', $signature->sign($this, $consumer, $token));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that all required request parameters have been set. Throws an
|
||||
* exception if any parameters are missing.
|
||||
*
|
||||
* try
|
||||
* {
|
||||
* $request->check();
|
||||
* }
|
||||
* catch (OAuth_Exception $e)
|
||||
* {
|
||||
* // Request has missing parameters
|
||||
* }
|
||||
*
|
||||
* @return TRUE
|
||||
* @throws Kohana_OAuth_Exception
|
||||
*/
|
||||
public function check()
|
||||
{
|
||||
foreach ($this->required as $param => $required)
|
||||
{
|
||||
if ($required AND ! isset($this->params[$param]))
|
||||
{
|
||||
throw new Kohana_OAuth_Exception('Request to :url requires missing parameter ":param"', array(
|
||||
':url' => $this->url,
|
||||
':param' => $param,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the request and return a response.
|
||||
*
|
||||
* @param array additional cURL options
|
||||
* @return string request response body
|
||||
* @uses OAuth_Request::check
|
||||
* @uses Arr::get
|
||||
* @uses Remote::get
|
||||
*/
|
||||
public function execute(array $options = NULL)
|
||||
{
|
||||
// Check that all required fields are set
|
||||
$this->check();
|
||||
|
||||
// Get the URL of the request
|
||||
$url = $this->url;
|
||||
|
||||
if ($query = $this->as_query())
|
||||
{
|
||||
// Append the parameters to the query string
|
||||
$url = "{$url}?{$query}";
|
||||
}
|
||||
|
||||
if ( ! isset($options[CURLOPT_CONNECTTIMEOUT]))
|
||||
{
|
||||
// Use the request default timeout
|
||||
$options[CURLOPT_CONNECTTIMEOUT] = $this->timeout;
|
||||
}
|
||||
|
||||
if ($this->send_header AND $header = $this->as_header())
|
||||
{
|
||||
// Store the new headers
|
||||
$options[CURLOPT_HTTPHEADER][] = 'Authorization: '.$header;
|
||||
}
|
||||
|
||||
// Set the request method for this request
|
||||
$options[CURLOPT_CUSTOMREQUEST] = $this->method;
|
||||
|
||||
if ($this->body)
|
||||
{
|
||||
$options[CURLOPT_POSTFIELDS] = $this->body;
|
||||
}
|
||||
elseif ($this->method === 'POST')
|
||||
{
|
||||
if ($post = $this->as_query(empty($header), empty($this->upload)))
|
||||
{
|
||||
// Attach the post fields to the request
|
||||
$options[CURLOPT_POSTFIELDS] = $post;
|
||||
}
|
||||
}
|
||||
|
||||
if (! is_null($this->body))
|
||||
{
|
||||
$options[CURLOPT_HTTPHEADER][] = 'Content-Length: '.strlen($this->body);
|
||||
}
|
||||
|
||||
return OAuth::remote($url, $options);
|
||||
}
|
||||
|
||||
} // End OAuth_Request
|
32
modules/oauth/classes/Kohana/OAuth/Request/Access.php
Normal file
32
modules/oauth/classes/Kohana/OAuth/Request/Access.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Access Request
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Request
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Request_Access extends OAuth_Request {
|
||||
|
||||
protected $name = 'access';
|
||||
|
||||
protected $required = array(
|
||||
'oauth_consumer_key' => TRUE,
|
||||
'oauth_token' => TRUE,
|
||||
'oauth_signature_method' => TRUE,
|
||||
'oauth_signature' => TRUE,
|
||||
'oauth_timestamp' => TRUE,
|
||||
'oauth_nonce' => TRUE,
|
||||
'oauth_verifier' => TRUE,
|
||||
'oauth_version' => TRUE,
|
||||
);
|
||||
|
||||
public function execute(array $options = NULL)
|
||||
{
|
||||
return OAuth_Response::factory(parent::execute($options));
|
||||
}
|
||||
|
||||
} // End OAuth_Request_Access
|
26
modules/oauth/classes/Kohana/OAuth/Request/Authorize.php
Normal file
26
modules/oauth/classes/Kohana/OAuth/Request/Authorize.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Authorization Request
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Request
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Request_Authorize extends OAuth_Request {
|
||||
|
||||
protected $name = 'request';
|
||||
|
||||
// http://oauth.net/core/1.0/#rfc.section.6.2.1
|
||||
protected $required = array(
|
||||
'oauth_token' => TRUE,
|
||||
);
|
||||
|
||||
public function execute(array $options = NULL)
|
||||
{
|
||||
return Request::current()->redirect($this->as_url());
|
||||
}
|
||||
|
||||
} // End OAuth_Request_Authorize
|
27
modules/oauth/classes/Kohana/OAuth/Request/Exception.php
Normal file
27
modules/oauth/classes/Kohana/OAuth/Request/Exception.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class Kohana_OAuth_Request_Exception extends Kohana_OAuth_Exception {
|
||||
|
||||
/**
|
||||
* @var string response body
|
||||
*/
|
||||
protected $body;
|
||||
|
||||
public function __construct($message, array $variables = NULL, $code = 0, $body = NULL)
|
||||
{
|
||||
$this->body = $body;
|
||||
|
||||
return parent::__construct($message, $variables, $code);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response body.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBody()
|
||||
{
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
}
|
27
modules/oauth/classes/Kohana/OAuth/Request/Resource.php
Normal file
27
modules/oauth/classes/Kohana/OAuth/Request/Resource.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Resource Request
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Request
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Request_Resource extends OAuth_Request {
|
||||
|
||||
protected $name = 'resource';
|
||||
|
||||
// http://oauth.net/core/1.0/#rfc.section.7
|
||||
protected $required = array(
|
||||
'oauth_consumer_key' => TRUE,
|
||||
'oauth_token' => TRUE,
|
||||
'oauth_signature_method' => TRUE,
|
||||
'oauth_signature' => TRUE,
|
||||
'oauth_timestamp' => TRUE,
|
||||
'oauth_nonce' => TRUE,
|
||||
'oauth_version' => TRUE,
|
||||
);
|
||||
|
||||
} // End OAuth_Request_Resource
|
32
modules/oauth/classes/Kohana/OAuth/Request/Token.php
Normal file
32
modules/oauth/classes/Kohana/OAuth/Request/Token.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
/**
|
||||
* OAuth Token Request
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Request
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Request_Token extends OAuth_Request {
|
||||
|
||||
protected $name = 'request';
|
||||
|
||||
// http://oauth.net/core/1.0/#rfc.section.6.3.1
|
||||
protected $required = array(
|
||||
'oauth_callback' => TRUE,
|
||||
'oauth_consumer_key' => TRUE,
|
||||
'oauth_signature_method' => TRUE,
|
||||
'oauth_signature' => TRUE,
|
||||
'oauth_timestamp' => TRUE,
|
||||
'oauth_nonce' => TRUE,
|
||||
'oauth_version' => TRUE,
|
||||
);
|
||||
|
||||
public function execute(array $options = NULL)
|
||||
{
|
||||
return OAuth_Response::factory(parent::execute($options));
|
||||
}
|
||||
|
||||
} // End OAuth_Request_Token
|
65
modules/oauth/classes/Kohana/OAuth/Response.php
Normal file
65
modules/oauth/classes/Kohana/OAuth/Response.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Response
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Base
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Response {
|
||||
|
||||
public static function factory($body)
|
||||
{
|
||||
return new OAuth_Response($body);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var array response parameters
|
||||
*/
|
||||
protected $params = array();
|
||||
|
||||
public function __construct($body = NULL)
|
||||
{
|
||||
if ($body)
|
||||
{
|
||||
if ($params = json_decode($body, TRUE))
|
||||
{
|
||||
// its a JSON string
|
||||
$this->params = $params;
|
||||
}
|
||||
else
|
||||
{
|
||||
// parse as GET string
|
||||
$this->params = OAuth::parse_params($body);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the response parameters
|
||||
* $params = $response->params;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
public function param($name, $default = NULL)
|
||||
{
|
||||
return Arr::get($this->params, $name, $default);
|
||||
}
|
||||
|
||||
public function params()
|
||||
{
|
||||
return $this->params;
|
||||
}
|
||||
|
||||
} // End OAuth_Response
|
77
modules/oauth/classes/Kohana/OAuth/Signature.php
Normal file
77
modules/oauth/classes/Kohana/OAuth/Signature.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Signature
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Signature
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
abstract class Kohana_OAuth_Signature {
|
||||
|
||||
/**
|
||||
* Create a new signature object by name.
|
||||
*
|
||||
* $signature = OAuth_Signature::factory('HMAC-SHA1');
|
||||
*
|
||||
* @param string signature name: HMAC-SHA1, PLAINTEXT, etc
|
||||
* @param array signature options
|
||||
* @return OAuth_Signature
|
||||
*/
|
||||
public static function factory($name, array $options = NULL)
|
||||
{
|
||||
// Create the class name as a base of this class
|
||||
$class = 'OAuth_Signature_'.str_replace('-', '_', $name);
|
||||
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var string signature name: HMAC-SHA1, PLAINTEXT, etc
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variables.
|
||||
*
|
||||
* $name = $signature->name;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a signing key from a consumer and token.
|
||||
*
|
||||
* $key = $signature->key($consumer, $token);
|
||||
*
|
||||
* [!!] This method implements the signing key of [OAuth 1.0 Spec 9](http://oauth.net/core/1.0/#rfc.section.9).
|
||||
*
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param OAuth_Token token
|
||||
* @return string
|
||||
* @uses OAuth::urlencode
|
||||
*/
|
||||
public function key(OAuth_Consumer $consumer, OAuth_Token $token = NULL)
|
||||
{
|
||||
$key = OAuth::urlencode($consumer->secret).'&';
|
||||
|
||||
if ($token)
|
||||
{
|
||||
$key .= OAuth::urlencode($token->secret);
|
||||
}
|
||||
|
||||
return $key;
|
||||
}
|
||||
|
||||
abstract public function sign(OAuth_Request $request, OAuth_Consumer $consumer, OAuth_Token $token = NULL);
|
||||
|
||||
abstract public function verify($signature, OAuth_Request $request, OAuth_Consumer $consumer, OAuth_Token $token = NULL);
|
||||
|
||||
} // End OAuth_Signature
|
68
modules/oauth/classes/Kohana/OAuth/Signature/HMAC/SHA1.php
Normal file
68
modules/oauth/classes/Kohana/OAuth/Signature/HMAC/SHA1.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
/**
|
||||
* The HMAC-SHA1 signature provides secure signing using the HMAC-SHA1
|
||||
* algorithm as defined by [RFC2104](http://tools.ietf.org/html/rfc2104).
|
||||
* It uses [OAuth_Request::base_string] as the text and [OAuth_Signature::key]
|
||||
* as the signing key.
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Signature
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Signature_HMAC_SHA1 extends OAuth_Signature {
|
||||
|
||||
protected $name = 'HMAC-SHA1';
|
||||
|
||||
/**
|
||||
* Generate a signed hash of the base string using the consumer and token
|
||||
* as the signing key.
|
||||
*
|
||||
* $sig = $signature->sign($request, $consumer, $token);
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 9.2.1](http://oauth.net/core/1.0/#rfc.section.9.2.1).
|
||||
*
|
||||
* @param OAuth_Request request
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param OAuth_Token token
|
||||
* @return string
|
||||
* @uses OAuth_Signature::key
|
||||
* @uses OAuth_Request::base_string
|
||||
*/
|
||||
public function sign(OAuth_Request $request, OAuth_Consumer $consumer, OAuth_Token $token = NULL)
|
||||
{
|
||||
// Get the signing key
|
||||
$key = $this->key($consumer, $token);
|
||||
|
||||
// Get the base string for the signature
|
||||
$base_string = $request->base_string();
|
||||
|
||||
// Sign the base string using the key
|
||||
return base64_encode(hash_hmac('sha1', $base_string, $key, TRUE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify a HMAC-SHA1 signature.
|
||||
*
|
||||
* if ( ! $signature->verify($signature, $request, $consumer, $token))
|
||||
* {
|
||||
* throw new Kohana_OAuth_Exception('Failed to verify signature');
|
||||
* }
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 9.2.2](http://oauth.net/core/1.0/#rfc.section.9.2.2).
|
||||
*
|
||||
* @param string signature to verify
|
||||
* @param OAuth_Request request
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param OAuth_Token token
|
||||
* @return boolean
|
||||
* @uses OAuth_Signature_HMAC_SHA1::sign
|
||||
*/
|
||||
public function verify($signature, OAuth_Request $request, OAuth_Consumer $consumer, OAuth_Token $token = NULL)
|
||||
{
|
||||
return $signature === $this->sign($request, $consumer, $token);
|
||||
}
|
||||
|
||||
} // End OAuth_Signature_HMAC_SHA1
|
57
modules/oauth/classes/Kohana/OAuth/Signature/Plaintext.php
Normal file
57
modules/oauth/classes/Kohana/OAuth/Signature/Plaintext.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
/**
|
||||
* The PLAINTEXT signature does not provide any security protection and should
|
||||
* only be used over a secure channel such as HTTPS.
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Signature
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Signature_PLAINTEXT extends OAuth_Signature {
|
||||
|
||||
protected $name = 'PLAINTEXT';
|
||||
|
||||
/**
|
||||
* Generate a plaintext signature for the request _without_ the base string.
|
||||
*
|
||||
* $sig = $signature->sign($request, $consumer, $token);
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 9.4.1](http://oauth.net/core/1.0/#rfc.section.9.4.1).
|
||||
*
|
||||
* @param OAuth_Request request
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param OAuth_Token token
|
||||
* @return $this
|
||||
*/
|
||||
public function sign(OAuth_Request $request, OAuth_Consumer $consumer, OAuth_Token $token = NULL)
|
||||
{
|
||||
// Use the signing key as the signature
|
||||
return $this->key($consumer, $token);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify a plaintext signature.
|
||||
*
|
||||
* if ( ! $signature->verify($signature, $request, $consumer, $token))
|
||||
* {
|
||||
* throw new Kohana_OAuth_Exception('Failed to verify signature');
|
||||
* }
|
||||
*
|
||||
* [!!] This method implements [OAuth 1.0 Spec 9.4.2](http://oauth.net/core/1.0/#rfc.section.9.4.2).
|
||||
*
|
||||
* @param string signature to verify
|
||||
* @param OAuth_Request request
|
||||
* @param OAuth_Consumer consumer
|
||||
* @param OAuth_Token token
|
||||
* @return boolean
|
||||
* @uses OAuth_Signature_PLAINTEXT::sign
|
||||
*/
|
||||
public function verify($signature, OAuth_Request $request, OAuth_Consumer $consumer, OAuth_Token $token = NULL)
|
||||
{
|
||||
return $signature === $this->key($consumer, $token);
|
||||
}
|
||||
|
||||
} // End OAuth_Signature_PLAINTEXT
|
94
modules/oauth/classes/Kohana/OAuth/Token.php
Normal file
94
modules/oauth/classes/Kohana/OAuth/Token.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Token
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Token
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @since 3.0.7
|
||||
*/
|
||||
abstract class Kohana_OAuth_Token {
|
||||
|
||||
/**
|
||||
* Create a new token object.
|
||||
*
|
||||
* $token = OAuth_Token::factory($name);
|
||||
*
|
||||
* @param string token type
|
||||
* @param array token options
|
||||
* @return OAuth_Token
|
||||
*/
|
||||
public static function factory($name, array $options = NULL)
|
||||
{
|
||||
$class = 'OAuth_Token_'.ucfirst($name);
|
||||
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var string token type name: request, access
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* @var string token key
|
||||
*/
|
||||
protected $token;
|
||||
|
||||
/**
|
||||
* @var string required parameters
|
||||
*/
|
||||
protected $required = array(
|
||||
'token',
|
||||
);
|
||||
|
||||
/**
|
||||
* Sets the token and secret values.
|
||||
*
|
||||
* @param array token options
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(array $options = NULL)
|
||||
{
|
||||
foreach ($this->required as $key)
|
||||
{
|
||||
if ( ! isset($options[$key]))
|
||||
{
|
||||
throw new Kohana_OAuth_Exception('Required option not passed: :option',
|
||||
array(':option' => $key));
|
||||
}
|
||||
|
||||
$this->$key = $options[$key];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the token secret
|
||||
* $secret = $token->secret;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the token key.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return (string) $this->token;
|
||||
}
|
||||
|
||||
} // End OAuth_Token
|
26
modules/oauth/classes/Kohana/OAuth/Token/Access.php
Normal file
26
modules/oauth/classes/Kohana/OAuth/Token/Access.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
/**
|
||||
* OAuth Access Token
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Token
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Token_Access extends OAuth_Token {
|
||||
|
||||
protected $name = 'access';
|
||||
|
||||
/**
|
||||
* @var string token secret
|
||||
*/
|
||||
protected $secret;
|
||||
|
||||
protected $required = array(
|
||||
'token',
|
||||
'secret',
|
||||
);
|
||||
|
||||
} // End OAuth_Token_Access
|
46
modules/oauth/classes/Kohana/OAuth/Token/Request.php
Normal file
46
modules/oauth/classes/Kohana/OAuth/Token/Request.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
/**
|
||||
* OAuth Request Token
|
||||
*
|
||||
* @package Kohana/OAuth
|
||||
* @category Token
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth_Token_Request extends OAuth_Token {
|
||||
|
||||
protected $name = 'request';
|
||||
|
||||
/**
|
||||
* @var string token secret
|
||||
*/
|
||||
protected $secret;
|
||||
|
||||
/**
|
||||
* @var string request token verifier
|
||||
*/
|
||||
protected $verifier;
|
||||
|
||||
protected $required = array(
|
||||
'token',
|
||||
'secret',
|
||||
);
|
||||
|
||||
/**
|
||||
* Change the token verifier.
|
||||
*
|
||||
* $token->verifier($key);
|
||||
*
|
||||
* @param string new verifier
|
||||
* @return $this
|
||||
*/
|
||||
public function verifier($verifier)
|
||||
{
|
||||
$this->verifier = $verifier;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
} // End OAuth_Token_Request
|
48
modules/oauth/classes/Kohana/OAuth2.php
Normal file
48
modules/oauth/classes/Kohana/OAuth2.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth v2 class
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @category Base
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @since 3.0.7
|
||||
*/
|
||||
abstract class Kohana_OAuth2 extends OAuth {
|
||||
|
||||
/**
|
||||
* Get request object
|
||||
*
|
||||
* @param string Request type (access, token etc)
|
||||
* @param string Request method (POST, GET)
|
||||
* @param string URL
|
||||
* @param array Request params
|
||||
* @return OAuth2_Request
|
||||
*/
|
||||
public function request($type, $method, $url, array $options = NULL)
|
||||
{
|
||||
return OAuth2_Request::factory($type, $method, $url, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $name Provider name
|
||||
* @param array Provider options
|
||||
* @return OAuth2_Provider
|
||||
*/
|
||||
public function provider($name, array $options = NULL)
|
||||
{
|
||||
return OAuth2_Provider::factory($name, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $name Token type
|
||||
* @param array Token options
|
||||
* @return OAuth2_Token
|
||||
*/
|
||||
public function token($name, array $options = NULL)
|
||||
{
|
||||
return OAuth2_Token::factory($name, $options);
|
||||
}
|
||||
|
||||
}
|
30
modules/oauth/classes/Kohana/OAuth2/API.php
Normal file
30
modules/oauth/classes/Kohana/OAuth2/API.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth API
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth2_API {
|
||||
/**
|
||||
* Create a new API object.
|
||||
*
|
||||
* $API = OAuth2_API::factory($name);
|
||||
*
|
||||
* @param string API type
|
||||
* @param array API options
|
||||
* @return OAuth2_API
|
||||
*/
|
||||
public static function factory(OAuth2_Provider $provider, $name, array $options = NULL)
|
||||
{
|
||||
$class = 'OAuth2_API_'.ucfirst($name).'_'.ucfirst($provider->name);
|
||||
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
} // End OAuth2_API
|
||||
?>
|
17
modules/oauth/classes/Kohana/OAuth2/API/Profile/Facebook.php
Normal file
17
modules/oauth/classes/Kohana/OAuth2/API/Profile/Facebook.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Profile for Facebook
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Kohana_OAuth2_API_Profile_Facebook extends OAuth_API {
|
||||
public function id() {
|
||||
return $this->profile->id;
|
||||
}
|
||||
}
|
||||
?>
|
17
modules/oauth/classes/Kohana/OAuth2/API/Profile/Google.php
Normal file
17
modules/oauth/classes/Kohana/OAuth2/API/Profile/Google.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Profile for Google
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Classes
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Kohana_OAuth2_API_Profile_Google extends OAuth_API {
|
||||
public function id() {
|
||||
return $this->profile->id;
|
||||
}
|
||||
}
|
||||
?>
|
98
modules/oauth/classes/Kohana/OAuth2/Client.php
Normal file
98
modules/oauth/classes/Kohana/OAuth2/Client.php
Normal file
@ -0,0 +1,98 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Client
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Kohana_OAuth2_Client {
|
||||
|
||||
/**
|
||||
* Create a new consumer object.
|
||||
*
|
||||
* $consumer = OAuth2_Client::factory($options);
|
||||
*
|
||||
* @param array consumer options, key and secret are required
|
||||
* @return OAuth_Consumer
|
||||
*/
|
||||
public static function factory(array $options = NULL)
|
||||
{
|
||||
return new OAuth2_Client($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var string client id
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* @var string client secret
|
||||
*/
|
||||
protected $secret;
|
||||
|
||||
/**
|
||||
* @var string callback URL for OAuth authorization completion
|
||||
*/
|
||||
protected $callback;
|
||||
|
||||
/**
|
||||
* Sets the consumer key and secret.
|
||||
*
|
||||
* @param array consumer options, key and secret are required
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(array $options = NULL)
|
||||
{
|
||||
if ( ! isset($options['id']))
|
||||
{
|
||||
throw new Kohana_OAuth_Exception('Required option not passed: :option',
|
||||
array(':option' => 'id'));
|
||||
}
|
||||
|
||||
if ( ! isset($options['secret']))
|
||||
{
|
||||
throw new Kohana_OAuth_Exception('Required option not passed: :option',
|
||||
array(':option' => 'secret'));
|
||||
}
|
||||
|
||||
$this->id = $options['id'];
|
||||
|
||||
$this->secret = $options['secret'];
|
||||
|
||||
if (isset($options['callback']))
|
||||
{
|
||||
$this->callback = $options['callback'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the client key
|
||||
* $key = $client->key;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the client callback.
|
||||
*
|
||||
* @param string new consumer callback
|
||||
* @return $this
|
||||
*/
|
||||
public function callback($callback)
|
||||
{
|
||||
$this->callback = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
127
modules/oauth/classes/Kohana/OAuth2/Provider.php
Normal file
127
modules/oauth/classes/Kohana/OAuth2/Provider.php
Normal file
@ -0,0 +1,127 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Provider
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth2_Provider {
|
||||
private $response;
|
||||
|
||||
public static function factory($name, array $options = NULL)
|
||||
{
|
||||
$class = 'OAuth2_Provider_'.ucfirst($name);
|
||||
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the value of any protected class variable.
|
||||
*
|
||||
* // Get the provider signature
|
||||
* $signature = $provider->signature;
|
||||
*
|
||||
* @param string variable name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
abstract public function url_authorize();
|
||||
|
||||
abstract public function url_access_token();
|
||||
|
||||
public $name;
|
||||
|
||||
protected $scope;
|
||||
|
||||
public function url_refresh_token()
|
||||
{
|
||||
// By default its the same as access token URL
|
||||
return $this->url_access_token();
|
||||
}
|
||||
|
||||
public function authorize_url(OAuth2_Client $client, array $params = NULL)
|
||||
{
|
||||
// Create a new GET request for a request token with the required parameters
|
||||
$request = OAuth2_Request::factory('authorize', 'GET', $this->url_authorize(), array(
|
||||
'response_type' => 'code',
|
||||
'client_id' => $client->id,
|
||||
'redirect_uri' => $client->callback,
|
||||
'scope' => $this->scope,
|
||||
));
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Load user parameters
|
||||
$request->params($params);
|
||||
}
|
||||
|
||||
return $request->as_url();
|
||||
}
|
||||
|
||||
public function access_token(OAuth2_Client $client, $code, array $params = NULL)
|
||||
{
|
||||
$request = OAuth2_Request::factory('token', 'POST', $this->url_access_token(), array(
|
||||
'grant_type' => 'authorization_code',
|
||||
'code' => $code,
|
||||
'client_id' => $client->id,
|
||||
'client_secret' => $client->secret,
|
||||
));
|
||||
|
||||
if ($client->callback)
|
||||
{
|
||||
$request->param('redirect_uri', $client->callback);
|
||||
}
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Load user parameters
|
||||
$request->params($params);
|
||||
}
|
||||
|
||||
$response = $request->execute();
|
||||
|
||||
return OAuth2_Token::factory('access', array(
|
||||
'token' => $response->param('access_token')
|
||||
));
|
||||
}
|
||||
|
||||
public function user_details(OAuth2_Client $client, array $params = NULL) {
|
||||
$request = OAuth2_Request::factory('resource', 'GET', $this->url_user_details(), array(
|
||||
));
|
||||
|
||||
if ($params)
|
||||
{
|
||||
// Load user parameters
|
||||
$request->params($params);
|
||||
}
|
||||
|
||||
// Create a response from the request
|
||||
$response = $request->execute();
|
||||
|
||||
// Store these user details useful
|
||||
return OAuth2_API::factory($this, 'profile', array(
|
||||
'provider' => $this->name,
|
||||
'profile' => json_decode($response),
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute an OAuth2 request, apply any provider-specfic options to the request.
|
||||
*
|
||||
* @param object request object
|
||||
* @param array request options
|
||||
* @return mixed
|
||||
*/
|
||||
public function execute(OAuth2_Request $request, array $options = NULL)
|
||||
{
|
||||
return $request->execute($options);
|
||||
}
|
||||
|
||||
}
|
32
modules/oauth/classes/Kohana/OAuth2/Provider/Facebook.php
Normal file
32
modules/oauth/classes/Kohana/OAuth2/Provider/Facebook.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth Facebook Provider
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @category Provider
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth2_Provider_Facebook extends OAuth2_Provider {
|
||||
|
||||
public $name = 'facebook';
|
||||
|
||||
protected $scope = 'email';
|
||||
|
||||
public function url_authorize()
|
||||
{
|
||||
return 'https://www.facebook.com/dialog/oauth';
|
||||
}
|
||||
|
||||
public function url_access_token()
|
||||
{
|
||||
return 'https://graph.facebook.com/oauth/access_token';
|
||||
}
|
||||
|
||||
public function url_user_details()
|
||||
{
|
||||
return 'https://graph.facebook.com/me';
|
||||
}
|
||||
|
||||
} // End OAuth_Provider_Facebook
|
44
modules/oauth/classes/Kohana/OAuth2/Provider/Google.php
Normal file
44
modules/oauth/classes/Kohana/OAuth2/Provider/Google.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
/**
|
||||
* OAuth Google Provider
|
||||
*
|
||||
* Documents for implementing Google OAuth can be found at
|
||||
* <http://code.google.com/apis/accounts/docs/OAuth.html>.
|
||||
* Individual Google APIs have separate documentation. A complete list is
|
||||
* available at <http://code.google.com/more/>.
|
||||
*
|
||||
* [!!] This class does not implement any Google API. It is only an
|
||||
* implementation of standard OAuth with Google as the service provider.
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @category Provider
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @since 3.0.7
|
||||
*/
|
||||
class Kohana_OAuth2_Provider_Google extends OAuth2_Provider {
|
||||
|
||||
public $name = 'google';
|
||||
|
||||
protected $scope = 'openid email';
|
||||
|
||||
public function url_authorize()
|
||||
{
|
||||
return 'https://accounts.google.com/o/oauth2/auth';
|
||||
}
|
||||
|
||||
public function url_access_token()
|
||||
{
|
||||
return 'https://accounts.google.com/o/oauth2/token';
|
||||
}
|
||||
|
||||
public function url_user_details()
|
||||
{
|
||||
return 'https://www.googleapis.com/oauth2/v2/userinfo';
|
||||
}
|
||||
|
||||
} // End OAuth_Provider_Google
|
67
modules/oauth/classes/Kohana/OAuth2/Request.php
Normal file
67
modules/oauth/classes/Kohana/OAuth2/Request.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
/**
|
||||
* OAuth v2 Request
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @category Request
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2010 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @since 3.0.7
|
||||
*/
|
||||
abstract class Kohana_OAuth2_Request extends OAuth_Request {
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @param string $type
|
||||
* @param string $method
|
||||
* @param string $url
|
||||
* @param array $params
|
||||
* @return OAuth2_Request
|
||||
*/
|
||||
public static function factory($type, $method, $url = NULL, array $params = NULL)
|
||||
{
|
||||
$class = 'OAuth2_Request_'.ucfirst($type);
|
||||
|
||||
return new $class($method, $url, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var boolean send Authorization header?
|
||||
*/
|
||||
public $send_header = TRUE;
|
||||
|
||||
protected $auth_params = '/^access_token$/';
|
||||
|
||||
/**
|
||||
* Convert the request parameters into an `Authorization` header.
|
||||
*
|
||||
* $header = $request->as_header();
|
||||
*
|
||||
* [!!] This method implements [OAuth 2.0 v22 Spec 7.1](http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-7.1).
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function as_header()
|
||||
{
|
||||
if ($access = Arr::get($this->params, 'access_token'))
|
||||
{
|
||||
if (is_string($this->send_header))
|
||||
{
|
||||
$header = $this->send_header;
|
||||
}
|
||||
else
|
||||
{
|
||||
$header = 'Bearer';
|
||||
}
|
||||
|
||||
$access = $header.' '.$access;
|
||||
}
|
||||
|
||||
return $access ? $access : NULL;
|
||||
}
|
||||
|
||||
}
|
20
modules/oauth/classes/Kohana/OAuth2/Request/Authorize.php
Normal file
20
modules/oauth/classes/Kohana/OAuth2/Request/Authorize.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Request Authorize
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth2_Request_Authorize extends OAuth2_Request {
|
||||
|
||||
protected $name = 'authorize';
|
||||
|
||||
public function execute(array $options = NULL)
|
||||
{
|
||||
return Request::current()->redirect($this->as_url());
|
||||
}
|
||||
|
||||
}
|
19
modules/oauth/classes/Kohana/OAuth2/Request/Resource.php
Normal file
19
modules/oauth/classes/Kohana/OAuth2/Request/Resource.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Request Resource
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth2_Request_Resource extends OAuth2_Request {
|
||||
|
||||
protected $name = 'resource';
|
||||
protected $auth_params = '/^(access_token|redirect_uri)/';
|
||||
|
||||
public $send_header = 'OAuth';
|
||||
public $body = '';
|
||||
|
||||
}
|
22
modules/oauth/classes/Kohana/OAuth2/Request/Token.php
Normal file
22
modules/oauth/classes/Kohana/OAuth2/Request/Token.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Request Token
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth2_Request_Token extends OAuth2_Request {
|
||||
|
||||
protected $auth_params = '/^(grant_type|code|client_id|client_secret|redirect_uri)$/';
|
||||
|
||||
protected $name = 'token';
|
||||
|
||||
public function execute(array $options = NULL)
|
||||
{
|
||||
return OAuth_Response::factory(parent::execute($options));
|
||||
}
|
||||
|
||||
}
|
29
modules/oauth/classes/Kohana/OAuth2/Token.php
Normal file
29
modules/oauth/classes/Kohana/OAuth2/Token.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* OAuth Provider
|
||||
*
|
||||
* @package Kohana/OAuth2
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Kohana_OAuth2_Token extends OAuth_Token {
|
||||
|
||||
/**
|
||||
* Create a new token object.
|
||||
*
|
||||
* $token = OAuth2_Token::factory($name);
|
||||
*
|
||||
* @param string token type
|
||||
* @param array token options
|
||||
* @return OAuth2_Token
|
||||
*/
|
||||
public static function factory($name, array $options = NULL)
|
||||
{
|
||||
$class = 'OAuth2_Token_'.ucfirst($name);
|
||||
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
}
|
7
modules/oauth/classes/Kohana/OAuth2/Token/Access.php
Normal file
7
modules/oauth/classes/Kohana/OAuth2/Token/Access.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
abstract class Kohana_OAuth2_Token_Access extends OAuth2_Token {
|
||||
|
||||
protected $name = 'access';
|
||||
|
||||
}
|
@ -19,7 +19,7 @@ class Model_Oauth extends ORM_OSB {
|
||||
* Return the object of the OAuth plugin
|
||||
*/
|
||||
public function plugin($type='') {
|
||||
$c = Kohana::classname('Oauth_Plugin_'.$this->name);
|
||||
$c = 'OAuth_Plugin_'.ucfirst($this->name);
|
||||
|
||||
if (! $this->name OR ! class_exists($c))
|
||||
return NULL;
|
||||
|
3
modules/oauth/classes/OAuth.php
Normal file
3
modules/oauth/classes/OAuth.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth extends Kohana_OAuth { }
|
3
modules/oauth/classes/OAuth/API.php
Normal file
3
modules/oauth/classes/OAuth/API.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
abstract class OAuth_API extends Kohana_OAuth_API {}
|
3
modules/oauth/classes/OAuth/API/Profile/Linkedin.php
Normal file
3
modules/oauth/classes/OAuth/API/Profile/Linkedin.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_API_Profile_Linkedin extends Kohana_OAuth_API_Profile_Linkedin {}
|
3
modules/oauth/classes/OAuth/Consumer.php
Normal file
3
modules/oauth/classes/OAuth/Consumer.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Consumer extends Kohana_OAuth_Consumer { }
|
@ -9,8 +9,8 @@
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
abstract class Oauth_Plugin {
|
||||
protected $oo; // Our Oauth Object
|
||||
abstract class OAuth_Plugin {
|
||||
protected $oo; // Our OAuth Object
|
||||
|
||||
public function __construct(Model_Oauth $oo) {
|
||||
$this->oo = $oo;
|
@ -10,7 +10,7 @@
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
|
||||
class Oauth_Plugin_Facebook extends Oauth_Plugin {
|
||||
class OAuth_Plugin_Facebook extends OAuth_Plugin {
|
||||
public function html() {
|
||||
// @todo Needs to work with https
|
||||
Script::factory()
|
||||
@ -34,7 +34,7 @@ $(document).ready(function(){
|
||||
//FB.getLoginStatus(checkLoginStatus);
|
||||
}
|
||||
|
||||
$(".fb-login").click(function() {
|
||||
$(".btn-facebook").click(function() {
|
||||
FB.login(checkLoginStatus, {scope:"email"});
|
||||
|
||||
// We stop the click, but pick up the href in the javascript
|
17
modules/oauth/classes/OAuth/Plugin/Google.php
Normal file
17
modules/oauth/classes/OAuth/Plugin/Google.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides Facebook Authentication
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Plugins
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
|
||||
class OAuth_Plugin_Google extends OAuth_Plugin {
|
||||
public function html() {
|
||||
}
|
||||
}
|
||||
?>
|
17
modules/oauth/classes/OAuth/Plugin/Linkedin.php
Normal file
17
modules/oauth/classes/OAuth/Plugin/Linkedin.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides Facebook Authentication
|
||||
*
|
||||
* @package OAuth
|
||||
* @category Plugins
|
||||
* @author Deon George
|
||||
* @copyright (c) 2009-2013 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
|
||||
class OAuth_Plugin_Linkedin extends OAuth_Plugin {
|
||||
public function html() {
|
||||
}
|
||||
}
|
||||
?>
|
3
modules/oauth/classes/OAuth/Provider.php
Normal file
3
modules/oauth/classes/OAuth/Provider.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
abstract class OAuth_Provider extends Kohana_OAuth_Provider { }
|
3
modules/oauth/classes/OAuth/Provider/Linkedin.php
Normal file
3
modules/oauth/classes/OAuth/Provider/Linkedin.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Provider_Linkedin extends Kohana_OAuth_Provider_Linkedin { }
|
3
modules/oauth/classes/OAuth/Request.php
Normal file
3
modules/oauth/classes/OAuth/Request.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
abstract class OAuth_Request extends Kohana_OAuth_Request { }
|
3
modules/oauth/classes/OAuth/Request/Access.php
Normal file
3
modules/oauth/classes/OAuth/Request/Access.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Request_Access extends Kohana_OAuth_Request_Access { }
|
3
modules/oauth/classes/OAuth/Request/Authorize.php
Normal file
3
modules/oauth/classes/OAuth/Request/Authorize.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Request_Authorize extends Kohana_OAuth_Request_Authorize { }
|
3
modules/oauth/classes/OAuth/Request/Resource.php
Normal file
3
modules/oauth/classes/OAuth/Request/Resource.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Request_Resource extends Kohana_OAuth_Request_Resource { }
|
3
modules/oauth/classes/OAuth/Request/Token.php
Normal file
3
modules/oauth/classes/OAuth/Request/Token.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Request_Token extends Kohana_OAuth_Request_Token { }
|
3
modules/oauth/classes/OAuth/Response.php
Normal file
3
modules/oauth/classes/OAuth/Response.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Response extends Kohana_OAuth_Response { }
|
3
modules/oauth/classes/OAuth/Signature.php
Normal file
3
modules/oauth/classes/OAuth/Signature.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
abstract class OAuth_Signature extends Kohana_OAuth_Signature { }
|
3
modules/oauth/classes/OAuth/Signature/HMAC/SHA1.php
Normal file
3
modules/oauth/classes/OAuth/Signature/HMAC/SHA1.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Signature_HMAC_SHA1 extends Kohana_OAuth_Signature_HMAC_SHA1 { }
|
3
modules/oauth/classes/OAuth/Signature/Plaintext.php
Normal file
3
modules/oauth/classes/OAuth/Signature/Plaintext.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Signature_PLAINTEXT extends Kohana_OAuth_Signature_PLAINTEXT { }
|
3
modules/oauth/classes/OAuth/Token.php
Normal file
3
modules/oauth/classes/OAuth/Token.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
abstract class OAuth_Token extends Kohana_OAuth_Token { }
|
3
modules/oauth/classes/OAuth/Token/Access.php
Normal file
3
modules/oauth/classes/OAuth/Token/Access.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Token_Access extends Kohana_OAuth_Token_Access { }
|
3
modules/oauth/classes/OAuth/Token/Request.php
Normal file
3
modules/oauth/classes/OAuth/Token/Request.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth_Token_Request extends Kohana_OAuth_Token_Request { }
|
3
modules/oauth/classes/OAuth2.php
Normal file
3
modules/oauth/classes/OAuth2.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
class OAuth2 extends Kohana_OAuth2 {}
|
3
modules/oauth/classes/OAuth2/API.php
Normal file
3
modules/oauth/classes/OAuth2/API.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
abstract class OAuth2_API extends Kohana_OAuth2_API {}
|
3
modules/oauth/classes/OAuth2/API/Profile/Facebook.php
Normal file
3
modules/oauth/classes/OAuth2/API/Profile/Facebook.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth2_API_Profile_Facebook extends Kohana_OAuth2_API_Profile_Facebook {}
|
3
modules/oauth/classes/OAuth2/API/Profile/Google.php
Normal file
3
modules/oauth/classes/OAuth2/API/Profile/Google.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth2_API_Profile_Google extends Kohana_OAuth2_API_Profile_Google {}
|
3
modules/oauth/classes/OAuth2/Client.php
Normal file
3
modules/oauth/classes/OAuth2/Client.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') or die('No direct script access.');
|
||||
|
||||
class OAuth2_Client extends Kohana_OAuth2_Client {}
|
3
modules/oauth/classes/OAuth2/Provider.php
Normal file
3
modules/oauth/classes/OAuth2/Provider.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
abstract class OAuth2_Provider extends Kohana_OAuth2_Provider {}
|
3
modules/oauth/classes/OAuth2/Provider/Facebook.php
Normal file
3
modules/oauth/classes/OAuth2/Provider/Facebook.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
class OAuth2_Provider_Facebook extends Kohana_OAuth2_Provider_Facebook {}
|
3
modules/oauth/classes/OAuth2/Provider/Google.php
Normal file
3
modules/oauth/classes/OAuth2/Provider/Google.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
class OAuth2_Provider_Google extends Kohana_OAuth2_Provider_Google {}
|
3
modules/oauth/classes/OAuth2/Request.php
Normal file
3
modules/oauth/classes/OAuth2/Request.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
abstract class OAuth2_Request extends Kohana_OAuth2_Request {}
|
3
modules/oauth/classes/OAuth2/Request/Authorize.php
Normal file
3
modules/oauth/classes/OAuth2/Request/Authorize.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
class OAuth2_Request_Authorize extends Kohana_OAuth2_Request_Authorize {}
|
3
modules/oauth/classes/OAuth2/Request/Resource.php
Normal file
3
modules/oauth/classes/OAuth2/Request/Resource.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
class OAuth2_Request_Resource extends Kohana_OAuth2_Request_Resource {}
|
3
modules/oauth/classes/OAuth2/Request/Token.php
Normal file
3
modules/oauth/classes/OAuth2/Request/Token.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
class OAuth2_Request_Token extends Kohana_OAuth2_Request_Token {}
|
3
modules/oauth/classes/OAuth2/Token.php
Normal file
3
modules/oauth/classes/OAuth2/Token.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
abstract class OAuth2_Token extends Kohana_OAuth2_Token {}
|
3
modules/oauth/classes/OAuth2/Token/Access.php
Normal file
3
modules/oauth/classes/OAuth2/Token/Access.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
|
||||
class OAuth2_Token_Access extends Kohana_OAuth2_Token_Access {}
|
@ -1,7 +1,7 @@
|
||||
// Check the result of the user status and display login button if necessary
|
||||
function checkLoginStatus(response) {
|
||||
if (response && response.status == "connected") {
|
||||
window.parent.location.href = $(".fb-login").attr('href');
|
||||
window.parent.location.href = $(".btn-facebook").attr('href');
|
||||
|
||||
} else if (response && response.status === "not_authorized") {
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user