Skip to content
Snippets Groups Projects
Unverified Commit aa8fa58f authored by Tim van Dijen's avatar Tim van Dijen Committed by GitHub
Browse files

PSR-2; no functional changes

parent 4dc98dfb
No related branches found
No related tags found
No related merge requests found
...@@ -11,170 +11,191 @@ require_once(dirname(dirname(__FILE__)) . '/libextinc/OAuth.php'); ...@@ -11,170 +11,191 @@ require_once(dirname(dirname(__FILE__)) . '/libextinc/OAuth.php');
* @author Mark Dobrinic, <mdobrinic@cozmanova.com>, Cozmanova bv * @author Mark Dobrinic, <mdobrinic@cozmanova.com>, Cozmanova bv
* @package SimpleSAMLphp * @package SimpleSAMLphp
*/ */
class sspmod_oauth_OAuthStore extends OAuthDataStore { class sspmod_oauth_OAuthStore extends OAuthDataStore
{
private $store; private $store;
private $config; private $config;
private $defaultversion = '1.0'; private $defaultversion = '1.0';
protected $_store_tables = array( protected $_store_tables = array(
'consumers' => 'consumer = array with consumer attributes', 'consumers' => 'consumer = array with consumer attributes',
'nonce' => 'nonce+consumer_key = -boolean-', 'nonce' => 'nonce+consumer_key = -boolean-',
'requesttorequest' => 'requestToken.key = array(version,callback,consumerKey,)', 'requesttorequest' => 'requestToken.key = array(version,callback,consumerKey,)',
'authorized' => 'requestToken.key, verifier = array(authenticated-user-attributes)', 'authorized' => 'requestToken.key, verifier = array(authenticated-user-attributes)',
'access' => 'accessToken.key+consumerKey = accesstoken', 'access' => 'accessToken.key+consumerKey = accesstoken',
'request' => 'requestToken.key+consumerKey = requesttoken', 'request' => 'requestToken.key+consumerKey = requesttoken',
); );
function __construct() { public function __construct()
$this->store = new sspmod_core_Storage_SQLPermanentStorage('oauth'); {
$this->config = SimpleSAML_Configuration::getOptionalConfig('module_oauth.php'); $this->store = new sspmod_core_Storage_SQLPermanentStorage('oauth');
$this->config = SimpleSAML_Configuration::getOptionalConfig('module_oauth.php');
} }
/** /**
* Attach the data to the token, and establish the Callback URL and verifier * Attach the data to the token, and establish the Callback URL and verifier
* @param $requestTokenKey RequestToken that was authorized * @param $requestTokenKey RequestToken that was authorized
* @param $data Data that is authorized and to be attached to the requestToken * @param $data Data that is authorized and to be attached to the requestToken
* @return array(string:url, string:verifier) ; empty verifier for 1.0-response * @return array(string:url, string:verifier) ; empty verifier for 1.0-response
*/ */
public function authorize($requestTokenKey, $data) { public function authorize($requestTokenKey, $data)
$url = null; {
$url = null;
// See whether to remember values from the original requestToken request:
$request_attributes = $this->store->get('requesttorequest', $requestTokenKey, ''); // must be there .. // See whether to remember values from the original requestToken request:
if ($request_attributes['value']) { $request_attributes = $this->store->get('requesttorequest', $requestTokenKey, '');
// establish callback to use // must be there ..
if ($request_attributes['value']['callback']) { if ($request_attributes['value']) {
$url = $request_attributes['value']['callback']; // establish callback to use
} if ($request_attributes['value']['callback']) {
} $url = $request_attributes['value']['callback'];
}
}
// Is there a callback registered? This is leading, even over a supplied oauth_callback-parameter
$oConsumer = $this->lookup_consumer($request_attributes['value']['consumerKey']);
// Is there a callback registered? This is leading, even over a supplied oauth_callback-parameter
if ($oConsumer && ($oConsumer->callback_url)) $url = $oConsumer->callback_url; $oConsumer = $this->lookup_consumer($request_attributes['value']['consumerKey']);
$verifier = SimpleSAML\Utils\Random::generateID(); if ($oConsumer && ($oConsumer->callback_url)) {
$url = \SimpleSAML\Utils\HTTP::addURLParameters($url, array("oauth_verifier"=>$verifier)); $url = $oConsumer->callback_url;
}
$this->store->set('authorized', $requestTokenKey, $verifier, $data, $this->config->getValue('requestTokenDuration', 60*30) );
$verifier = SimpleSAML\Utils\Random::generateID();
return array($url, $verifier); $url = \SimpleSAML\Utils\HTTP::addURLParameters($url, array("oauth_verifier"=>$verifier));
}
$this->store->set('authorized', $requestTokenKey, $verifier, $data, $this->config->getValue('requestTokenDuration', 60*30) );
/**
* Perform lookup whether a given token exists in the list of authorized tokens; if a verifier is return array($url, $verifier);
* passed as well, the verifier *must* match the verifier that was registered with the token<br/>
* Note that an accessToken should never be stored with a verifier
* @param $requestToken
* @param $verifier
* @return unknown_type
*/
public function isAuthorized($requestToken, $verifier='') {
SimpleSAML\Logger::info('OAuth isAuthorized(' . $requestToken . ')');
return $this->store->exists('authorized', $requestToken, $verifier);
}
public function getAuthorizedData($token, $verifier = '') {
SimpleSAML\Logger::info('OAuth getAuthorizedData(' . $token . ')');
$data = $this->store->get('authorized', $token, $verifier);
return $data['value'];
}
public function moveAuthorizedData($requestToken, $verifier, $accessTokenKey) {
SimpleSAML\Logger::info('OAuth moveAuthorizedData(' . $requestToken . ', ' . $accessTokenKey . ')');
// Retrieve authorizedData from authorized.requestToken (with provider verifier)
$authorizedData = $this->getAuthorizedData($requestToken, $verifier);
// Remove the requesttoken+verifier from authorized store
$this->store->remove('authorized', $requestToken, $verifier);
// Add accesstoken with authorizedData to authorized store (with empty verifier)
// accessTokenKey+consumer => accessToken is already registered in 'access'-table
$this->store->set('authorized', $accessTokenKey, '', $authorizedData, $this->config->getValue('accessTokenDuration', 60*60*24));
}
public function lookup_consumer($consumer_key) {
SimpleSAML\Logger::info('OAuth lookup_consumer(' . $consumer_key . ')');
if (! $this->store->exists('consumers', $consumer_key, '')) return NULL;
$consumer = $this->store->get('consumers', $consumer_key, '');
$callback = NULL;
if ($consumer['value']['callback_url']) $callback = $consumer['value']['callback_url'];
if ($consumer['value']['RSAcertificate']) {
return new OAuthConsumer($consumer['value']['key'], $consumer['value']['RSAcertificate'], $callback);
} else {
return new OAuthConsumer($consumer['value']['key'], $consumer['value']['secret'], $callback);
}
} }
function lookup_token($consumer, $tokenType = 'default', $token) { /**
SimpleSAML\Logger::info('OAuth lookup_token(' . $consumer->key . ', ' . $tokenType. ',' . $token . ')'); * Perform lookup whether a given token exists in the list of authorized tokens; if a verifier is
$data = $this->store->get($tokenType, $token, $consumer->key); * passed as well, the verifier *must* match the verifier that was registered with the token<br/>
if ($data == NULL) throw new Exception('Could not find token'); * Note that an accessToken should never be stored with a verifier
return $data['value']; * @param $requestToken
* @param $verifier
* @return unknown_type
*/
public function isAuthorized($requestToken, $verifier = '')
{
SimpleSAML\Logger::info('OAuth isAuthorized(' . $requestToken . ')');
return $this->store->exists('authorized', $requestToken, $verifier);
} }
function lookup_nonce($consumer, $token, $nonce, $timestamp) { public function getAuthorizedData($token, $verifier = '')
SimpleSAML\Logger::info('OAuth lookup_nonce(' . $consumer . ', ' . $token. ',' . $nonce . ')'); {
if ($this->store->exists('nonce', $nonce, $consumer->key)) return TRUE; SimpleSAML\Logger::info('OAuth getAuthorizedData(' . $token . ')');
$this->store->set('nonce', $nonce, $consumer->key, TRUE, $this->config->getValue('nonceCache', 60*60*24*14)); $data = $this->store->get('authorized', $token, $verifier);
return FALSE; return $data['value'];
} }
function new_request_token($consumer, $callback = null, $version = null) { public function moveAuthorizedData($requestToken, $verifier, $accessTokenKey)
SimpleSAML\Logger::info('OAuth new_request_token(' . $consumer . ')'); {
SimpleSAML\Logger::info('OAuth moveAuthorizedData(' . $requestToken . ', ' . $accessTokenKey . ')');
$lifetime = $this->config->getValue('requestTokenDuration', 60*30);
// Retrieve authorizedData from authorized.requestToken (with provider verifier)
$token = new OAuthToken(SimpleSAML\Utils\Random::generateID(), SimpleSAML\Utils\Random::generateID()); $authorizedData = $this->getAuthorizedData($requestToken, $verifier);
$token->callback = $callback; // OAuth1.0-RevA
$this->store->set('request', $token->key, $consumer->key, $token, $lifetime); // Remove the requesttoken+verifier from authorized store
$this->store->remove('authorized', $requestToken, $verifier);
// also store in requestToken->key => array('callback'=>CallbackURL, 'version'=>oauth_version
$request_attributes = array( // Add accesstoken with authorizedData to authorized store (with empty verifier)
'callback' => $callback, // accessTokenKey+consumer => accessToken is already registered in 'access'-table
'version' => ($version?$version:$this->defaultversion), $this->store->set('authorized', $accessTokenKey, '', $authorizedData, $this->config->getValue('accessTokenDuration', 60*60*24));
'consumerKey' => $consumer->key, }
);
$this->store->set('requesttorequest', $token->key, '', $request_attributes, $lifetime); public function lookup_consumer($consumer_key)
{
// also store in requestToken->key => Consumer->key (enables consumer-lookup during reqToken-authorization stage) SimpleSAML\Logger::info('OAuth lookup_consumer(' . $consumer_key . ')');
$this->store->set('requesttoconsumer', $token->key, '', $consumer->key, $lifetime); if (!$this->store->exists('consumers', $consumer_key, '')) {
return null;
}
$consumer = $this->store->get('consumers', $consumer_key, '');
$callback = null;
if ($consumer['value']['callback_url']) {
$callback = $consumer['value']['callback_url'];
}
if ($consumer['value']['RSAcertificate']) {
return new OAuthConsumer($consumer['value']['key'], $consumer['value']['RSAcertificate'], $callback);
} else {
return new OAuthConsumer($consumer['value']['key'], $consumer['value']['secret'], $callback);
}
}
function lookup_token($consumer, $tokenType = 'default', $token)
{
SimpleSAML\Logger::info('OAuth lookup_token(' . $consumer->key . ', ' . $tokenType. ',' . $token . ')');
$data = $this->store->get($tokenType, $token, $consumer->key);
if ($data == null) {
throw new Exception('Could not find token');
}
return $data['value'];
}
function lookup_nonce($consumer, $token, $nonce, $timestamp)
{
SimpleSAML\Logger::info('OAuth lookup_nonce(' . $consumer . ', ' . $token. ',' . $nonce . ')');
if ($this->store->exists('nonce', $nonce, $consumer->key)) {
return true;
}
$this->store->set('nonce', $nonce, $consumer->key, TRUE, $this->config->getValue('nonceCache', 60*60*24*14));
return false;
}
function new_request_token($consumer, $callback = null, $version = null)
{
SimpleSAML\Logger::info('OAuth new_request_token(' . $consumer . ')');
$lifetime = $this->config->getValue('requestTokenDuration', 60*30);
$token = new OAuthToken(SimpleSAML\Utils\Random::generateID(), SimpleSAML\Utils\Random::generateID());
$token->callback = $callback; // OAuth1.0-RevA
$this->store->set('request', $token->key, $consumer->key, $token, $lifetime);
// also store in requestToken->key => array('callback'=>CallbackURL, 'version'=>oauth_version
$request_attributes = array(
'callback' => $callback,
'version' => ($version?$version:$this->defaultversion),
'consumerKey' => $consumer->key,
);
$this->store->set('requesttorequest', $token->key, '', $request_attributes, $lifetime);
// also store in requestToken->key => Consumer->key (enables consumer-lookup during reqToken-authorization stage)
$this->store->set('requesttoconsumer', $token->key, '', $consumer->key, $lifetime);
return $token; return $token;
} }
function new_access_token($requestToken, $consumer, $verifier = null) { function new_access_token($requestToken, $consumer, $verifier = null)
SimpleSAML\Logger::info('OAuth new_access_token(' . $requestToken . ',' . $consumer . ')'); {
$accesstoken = new OAuthToken(SimpleSAML\Utils\Random::generateID(), SimpleSAML\Utils\Random::generateID()); SimpleSAML\Logger::info('OAuth new_access_token(' . $requestToken . ',' . $consumer . ')');
$this->store->set('access', $accesstoken->key, $consumer->key, $accesstoken, $this->config->getValue('accessTokenDuration', 60*60*24) ); $accesstoken = new OAuthToken(SimpleSAML\Utils\Random::generateID(), SimpleSAML\Utils\Random::generateID());
$this->store->set('access', $accesstoken->key, $consumer->key, $accesstoken, $this->config->getValue('accessTokenDuration', 60*60*24) );
return $accesstoken; return $accesstoken;
} }
/** /**
* Return OAuthConsumer-instance that a given requestToken was issued to * Return OAuthConsumer-instance that a given requestToken was issued to
* @param $requestTokenKey * @param $requestTokenKey
* @return unknown_type * @return unknown_type
*/ */
public function lookup_consumer_by_requestToken($requestTokenKey) { public function lookup_consumer_by_requestToken($requestTokenKey)
SimpleSAML\Logger::info('OAuth lookup_consumer_by_requestToken(' . $requestTokenKey . ')'); {
if (! $this->store->exists('requesttorequest', $requestTokenKey, '')) return NULL; SimpleSAML\Logger::info('OAuth lookup_consumer_by_requestToken(' . $requestTokenKey . ')');
if (!$this->store->exists('requesttorequest', $requestTokenKey, '')) {
$request = $this->store->get('requesttorequest', $requestTokenKey, ''); return null;
$consumerKey = $request['value']['consumerKey']; }
if (! $consumerKey) {
return NULL;
}
$consumer = $this->store->get('consumers', $consumerKey['value'], '');
return $consumer['value'];
}
$request = $this->store->get('requesttorequest', $requestTokenKey, '');
$consumerKey = $request['value']['consumerKey'];
if (!$consumerKey) {
return null;
}
$consumer = $this->store->get('consumers', $consumerKey['value'], '');
return $consumer['value'];
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment