Skip to content
Snippets Groups Projects
Unverified Commit d79b51e5 authored by Tim van Dijen's avatar Tim van Dijen Committed by GitHub
Browse files
parent 9d33e884
No related branches found
No related tags found
No related merge requests found
...@@ -21,14 +21,17 @@ if (!class_exists('OAuthConsumer')) { ...@@ -21,14 +21,17 @@ if (!class_exists('OAuthConsumer')) {
class OAuthConsumer { class OAuthConsumer {
public $key; public $key;
public $secret; public $secret;
public $callback_url;
function __construct($key, $secret, $callback_url=NULL) { public function __construct($key, $secret, $callback_url=null)
{
$this->key = $key; $this->key = $key;
$this->secret = $secret; $this->secret = $secret;
$this->callback_url = $callback_url; $this->callback_url = $callback_url;
} }
function __toString() { public function __toString()
{
return "OAuthConsumer[key=$this->key,secret=$this->secret]"; return "OAuthConsumer[key=$this->key,secret=$this->secret]";
} }
} }
...@@ -43,7 +46,8 @@ class OAuthToken { ...@@ -43,7 +46,8 @@ class OAuthToken {
* key = the token * key = the token
* secret = the token secret * secret = the token secret
*/ */
function __construct($key, $secret) { public function __construct($key, $secret)
{
$this->key = $key; $this->key = $key;
$this->secret = $secret; $this->secret = $secret;
} }
...@@ -52,7 +56,8 @@ class OAuthToken { ...@@ -52,7 +56,8 @@ class OAuthToken {
* generates the basic string serialization of a token that a server * generates the basic string serialization of a token that a server
* would respond to request_token and access_token calls with * would respond to request_token and access_token calls with
*/ */
function to_string() { public function to_string()
{
return "oauth_token=" . return "oauth_token=" .
OAuthUtil::urlencode_rfc3986($this->key) . OAuthUtil::urlencode_rfc3986($this->key) .
"&oauth_token_secret=" . "&oauth_token_secret=" .
...@@ -69,7 +74,8 @@ class OAuthToken { ...@@ -69,7 +74,8 @@ class OAuthToken {
* A class for implementing a Signature Method * A class for implementing a Signature Method
* See section 9 ("Signing Requests") in the spec * See section 9 ("Signing Requests") in the spec
*/ */
abstract class OAuthSignatureMethod { abstract class OAuthSignatureMethod
{
/** /**
* Needs to return the name of the Signature Method (ie HMAC-SHA1) * Needs to return the name of the Signature Method (ie HMAC-SHA1)
* @return string * @return string
...@@ -96,7 +102,8 @@ abstract class OAuthSignatureMethod { ...@@ -96,7 +102,8 @@ abstract class OAuthSignatureMethod {
* @param string $signature * @param string $signature
* @return bool * @return bool
*/ */
public function check_signature($request, $consumer, $token, $signature) { public function check_signature($request, $consumer, $token, $signature)
{
$built = $this->build_signature($request, $consumer, $token); $built = $this->build_signature($request, $consumer, $token);
// Check for zero length, although unlikely here // Check for zero length, although unlikely here
...@@ -125,12 +132,15 @@ abstract class OAuthSignatureMethod { ...@@ -125,12 +132,15 @@ abstract class OAuthSignatureMethod {
* character (ASCII code 38) even if empty. * character (ASCII code 38) even if empty.
* - Chapter 9.2 ("HMAC-SHA1") * - Chapter 9.2 ("HMAC-SHA1")
*/ */
class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod
function get_name() { {
function get_name()
{
return "HMAC-SHA1"; return "HMAC-SHA1";
} }
public function build_signature($request, $consumer, $token) { public function build_signature($request, $consumer, $token)
{
$base_string = $request->get_signature_base_string(); $base_string = $request->get_signature_base_string();
$request->base_string = $base_string; $request->base_string = $base_string;
...@@ -151,8 +161,10 @@ class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { ...@@ -151,8 +161,10 @@ class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
* over a secure channel such as HTTPS. It does not use the Signature Base String. * over a secure channel such as HTTPS. It does not use the Signature Base String.
* - Chapter 9.4 ("PLAINTEXT") * - Chapter 9.4 ("PLAINTEXT")
*/ */
class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod
public function get_name() { {
public function get_name()
{
return "PLAINTEXT"; return "PLAINTEXT";
} }
...@@ -165,7 +177,8 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { ...@@ -165,7 +177,8 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
* Please note that the second encoding MUST NOT happen in the SignatureMethod, as * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
* OAuthRequest handles this! * OAuthRequest handles this!
*/ */
public function build_signature($request, $consumer, $token) { public function build_signature($request, $consumer, $token)
{
$key_parts = array( $key_parts = array(
$consumer->secret, $consumer->secret,
($token) ? $token->secret : "" ($token) ? $token->secret : ""
...@@ -187,8 +200,10 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { ...@@ -187,8 +200,10 @@ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
* specification. * specification.
* - Chapter 9.3 ("RSA-SHA1") * - Chapter 9.3 ("RSA-SHA1")
*/ */
abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod
public function get_name() { {
public function get_name()
{
return "RSA-SHA1"; return "RSA-SHA1";
} }
...@@ -206,7 +221,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { ...@@ -206,7 +221,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
// Either way should return a string representation of the certificate // Either way should return a string representation of the certificate
protected abstract function fetch_private_cert(&$request); protected abstract function fetch_private_cert(&$request);
public function build_signature($request, $consumer, $token) { public function build_signature($request, $consumer, $token)
{
$base_string = $request->get_signature_base_string(); $base_string = $request->get_signature_base_string();
$request->base_string = $base_string; $request->base_string = $base_string;
...@@ -217,7 +233,7 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { ...@@ -217,7 +233,7 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
$privatekeyid = openssl_get_privatekey($cert); $privatekeyid = openssl_get_privatekey($cert);
// Sign using the key // Sign using the key
$ok = openssl_sign($base_string, $signature, $privatekeyid); openssl_sign($base_string, $signature, $privatekeyid);
// Release the key resource // Release the key resource
openssl_free_key($privatekeyid); openssl_free_key($privatekeyid);
...@@ -225,7 +241,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { ...@@ -225,7 +241,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
return base64_encode($signature); return base64_encode($signature);
} }
public function check_signature($request, $consumer, $token, $signature) { public function check_signature($request, $consumer, $token, $signature)
{
$decoded_sig = base64_decode($signature); $decoded_sig = base64_decode($signature);
$base_string = $request->get_signature_base_string(); $base_string = $request->get_signature_base_string();
...@@ -246,7 +263,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { ...@@ -246,7 +263,8 @@ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
} }
} }
class OAuthRequest { class OAuthRequest
{
protected $parameters; protected $parameters;
protected $http_method; protected $http_method;
protected $http_url; protected $http_url;
...@@ -255,9 +273,10 @@ class OAuthRequest { ...@@ -255,9 +273,10 @@ class OAuthRequest {
public static $version = '1.0'; public static $version = '1.0';
public static $POST_INPUT = 'php://input'; public static $POST_INPUT = 'php://input';
function __construct($http_method, $http_url, $parameters=NULL) { function __construct($http_method, $http_url, $parameters=null)
{
$parameters = ($parameters) ? $parameters : array(); $parameters = ($parameters) ? $parameters : array();
$parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); $parameters = array_merge(OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
$this->parameters = $parameters; $this->parameters = $parameters;
$this->http_method = $http_method; $this->http_method = $http_method;
$this->http_url = $http_url; $this->http_url = $http_url;
...@@ -267,7 +286,8 @@ class OAuthRequest { ...@@ -267,7 +286,8 @@ class OAuthRequest {
/** /**
* attempt to build up a request from what was passed to the server * attempt to build up a request from what was passed to the server
*/ */
public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { public static function from_request($http_method=NULL, $http_url=null, $parameters=null)
{
$scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
? 'http' ? 'http'
: 'https'; : 'https';
...@@ -319,7 +339,8 @@ class OAuthRequest { ...@@ -319,7 +339,8 @@ class OAuthRequest {
/** /**
* pretty much a helper function to set up the request * pretty much a helper function to set up the request
*/ */
public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=null)
{
$parameters = ($parameters) ? $parameters : array(); $parameters = ($parameters) ? $parameters : array();
$defaults = array("oauth_version" => OAuthRequest::$version, $defaults = array("oauth_version" => OAuthRequest::$version,
"oauth_nonce" => OAuthRequest::generate_nonce(), "oauth_nonce" => OAuthRequest::generate_nonce(),
...@@ -333,7 +354,8 @@ class OAuthRequest { ...@@ -333,7 +354,8 @@ class OAuthRequest {
return new OAuthRequest($http_method, $http_url, $parameters); return new OAuthRequest($http_method, $http_url, $parameters);
} }
public function set_parameter($name, $value, $allow_duplicates = true) { public function set_parameter($name, $value, $allow_duplicates = true)
{
if ($allow_duplicates && isset($this->parameters[$name])) { if ($allow_duplicates && isset($this->parameters[$name])) {
// We have already added parameter(s) with this name, so add to the list // We have already added parameter(s) with this name, so add to the list
if (is_scalar($this->parameters[$name])) { if (is_scalar($this->parameters[$name])) {
...@@ -348,15 +370,18 @@ class OAuthRequest { ...@@ -348,15 +370,18 @@ class OAuthRequest {
} }
} }
public function get_parameter($name) { public function get_parameter($name)
{
return isset($this->parameters[$name]) ? $this->parameters[$name] : null; return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
} }
public function get_parameters() { public function get_parameters()
{
return $this->parameters; return $this->parameters;
} }
public function unset_parameter($name) { public function unset_parameter($name)
{
unset($this->parameters[$name]); unset($this->parameters[$name]);
} }
...@@ -364,7 +389,8 @@ class OAuthRequest { ...@@ -364,7 +389,8 @@ class OAuthRequest {
* The request parameters, sorted and concatenated into a normalized string. * The request parameters, sorted and concatenated into a normalized string.
* @return string * @return string
*/ */
public function get_signable_parameters() { public function get_signable_parameters()
{
// Grab all parameters // Grab all parameters
$params = $this->parameters; $params = $this->parameters;
...@@ -384,7 +410,8 @@ class OAuthRequest { ...@@ -384,7 +410,8 @@ class OAuthRequest {
* and the parameters (normalized), each urlencoded * and the parameters (normalized), each urlencoded
* and the concated with &. * and the concated with &.
*/ */
public function get_signature_base_string() { public function get_signature_base_string()
{
$parts = array( $parts = array(
$this->get_normalized_http_method(), $this->get_normalized_http_method(),
$this->get_normalized_http_url(), $this->get_normalized_http_url(),
...@@ -399,7 +426,8 @@ class OAuthRequest { ...@@ -399,7 +426,8 @@ class OAuthRequest {
/** /**
* just uppercases the http method * just uppercases the http method
*/ */
public function get_normalized_http_method() { public function get_normalized_http_method()
{
return strtoupper($this->http_method); return strtoupper($this->http_method);
} }
...@@ -407,7 +435,8 @@ class OAuthRequest { ...@@ -407,7 +435,8 @@ class OAuthRequest {
* parses the url and rebuilds it to be * parses the url and rebuilds it to be
* scheme://host/path * scheme://host/path
*/ */
public function get_normalized_http_url() { public function get_normalized_http_url()
{
$parts = parse_url($this->http_url); $parts = parse_url($this->http_url);
$scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http'; $scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http';
...@@ -425,7 +454,8 @@ class OAuthRequest { ...@@ -425,7 +454,8 @@ class OAuthRequest {
/** /**
* builds a url usable for a GET request * builds a url usable for a GET request
*/ */
public function to_url() { public function to_url()
{
$post_data = $this->to_postdata(); $post_data = $this->to_postdata();
$out = $this->get_normalized_http_url(); $out = $this->get_normalized_http_url();
if ($post_data) { if ($post_data) {
...@@ -437,16 +467,18 @@ class OAuthRequest { ...@@ -437,16 +467,18 @@ class OAuthRequest {
/** /**
* builds the data one would send in a POST request * builds the data one would send in a POST request
*/ */
public function to_postdata() { public function to_postdata()
{
return OAuthUtil::build_http_query($this->parameters); return OAuthUtil::build_http_query($this->parameters);
} }
/** /**
* builds the Authorization: header * builds the Authorization: header
*/ */
public function to_header($realm=null) { public function to_header($realm = null)
{
$first = true; $first = true;
if($realm) { if ($realm) {
$out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
$first = false; $first = false;
} else } else
...@@ -454,7 +486,9 @@ class OAuthRequest { ...@@ -454,7 +486,9 @@ class OAuthRequest {
$total = array(); $total = array();
foreach ($this->parameters as $k => $v) { foreach ($this->parameters as $k => $v) {
if (substr($k, 0, 5) != "oauth") continue; if (substr($k, 0, 5) != "oauth") {
continue;
}
if (is_array($v)) { if (is_array($v)) {
throw new OAuthException('Arrays not supported in headers'); throw new OAuthException('Arrays not supported in headers');
} }
...@@ -468,12 +502,14 @@ class OAuthRequest { ...@@ -468,12 +502,14 @@ class OAuthRequest {
return $out; return $out;
} }
public function __toString() { public function __toString()
{
return $this->to_url(); return $this->to_url();
} }
public function sign_request($signature_method, $consumer, $token) { public function sign_request($signature_method, $consumer, $token)
{
$this->set_parameter( $this->set_parameter(
"oauth_signature_method", "oauth_signature_method",
$signature_method->get_name(), $signature_method->get_name(),
...@@ -483,7 +519,8 @@ class OAuthRequest { ...@@ -483,7 +519,8 @@ class OAuthRequest {
$this->set_parameter("oauth_signature", $signature, false); $this->set_parameter("oauth_signature", $signature, false);
} }
public function build_signature($signature_method, $consumer, $token) { public function build_signature($signature_method, $consumer, $token)
{
$signature = $signature_method->build_signature($this, $consumer, $token); $signature = $signature_method->build_signature($this, $consumer, $token);
return $signature; return $signature;
} }
...@@ -491,14 +528,16 @@ class OAuthRequest { ...@@ -491,14 +528,16 @@ class OAuthRequest {
/** /**
* util function: current timestamp * util function: current timestamp
*/ */
private static function generate_timestamp() { private static function generate_timestamp()
{
return time(); return time();
} }
/** /**
* util function: current nonce * util function: current nonce
*/ */
private static function generate_nonce() { private static function generate_nonce()
{
$mt = microtime(); $mt = microtime();
$rand = mt_rand(); $rand = mt_rand();
...@@ -506,18 +545,21 @@ class OAuthRequest { ...@@ -506,18 +545,21 @@ class OAuthRequest {
} }
} }
class OAuthServer { class OAuthServer
{
protected $timestamp_threshold = 300; // in seconds, five minutes protected $timestamp_threshold = 300; // in seconds, five minutes
protected $version = '1.0'; // hi blaine protected $version = '1.0'; // hi blaine
protected $signature_methods = array(); protected $signature_methods = array();
protected $data_store; protected $data_store;
function __construct($data_store) { function __construct($data_store)
{
$this->data_store = $data_store; $this->data_store = $data_store;
} }
public function add_signature_method($signature_method) { public function add_signature_method($signature_method)
{
$this->signature_methods[$signature_method->get_name()] = $this->signature_methods[$signature_method->get_name()] =
$signature_method; $signature_method;
} }
...@@ -528,7 +570,8 @@ class OAuthServer { ...@@ -528,7 +570,8 @@ class OAuthServer {
* process a request_token request * process a request_token request
* returns the request token on success * returns the request token on success
*/ */
public function fetch_request_token(&$request) { public function fetch_request_token(&$request)
{
$this->get_version($request); $this->get_version($request);
$consumer = $this->get_consumer($request); $consumer = $this->get_consumer($request);
...@@ -549,7 +592,8 @@ class OAuthServer { ...@@ -549,7 +592,8 @@ class OAuthServer {
* process an access_token request * process an access_token request
* returns the access token on success * returns the access token on success
*/ */
public function fetch_access_token(&$request) { public function fetch_access_token(&$request)
{
$this->get_version($request); $this->get_version($request);
$consumer = $this->get_consumer($request); $consumer = $this->get_consumer($request);
...@@ -569,7 +613,8 @@ class OAuthServer { ...@@ -569,7 +613,8 @@ class OAuthServer {
/** /**
* verify an api call, checks all the parameters * verify an api call, checks all the parameters
*/ */
public function verify_request(&$request) { public function verify_request(&$request)
{
$this->get_version($request); $this->get_version($request);
$consumer = $this->get_consumer($request); $consumer = $this->get_consumer($request);
$token = $this->get_token($request, $consumer, "access"); $token = $this->get_token($request, $consumer, "access");
...@@ -581,7 +626,8 @@ class OAuthServer { ...@@ -581,7 +626,8 @@ class OAuthServer {
/** /**
* version 1 * version 1
*/ */
private function get_version(&$request) { private function get_version(&$request)
{
$version = $request->get_parameter("oauth_version"); $version = $request->get_parameter("oauth_version");
if (!$version) { if (!$version) {
// Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
...@@ -597,7 +643,8 @@ class OAuthServer { ...@@ -597,7 +643,8 @@ class OAuthServer {
/** /**
* figure out the signature with some defaults * figure out the signature with some defaults
*/ */
private function get_signature_method($request) { private function get_signature_method($request)
{
$signature_method = $request instanceof OAuthRequest $signature_method = $request instanceof OAuthRequest
? $request->get_parameter("oauth_signature_method") ? $request->get_parameter("oauth_signature_method")
: NULL; : NULL;
...@@ -622,7 +669,8 @@ class OAuthServer { ...@@ -622,7 +669,8 @@ class OAuthServer {
/** /**
* try to find the consumer for the provided request's consumer key * try to find the consumer for the provided request's consumer key
*/ */
private function get_consumer($request) { private function get_consumer($request)
{
$consumer_key = $request instanceof OAuthRequest $consumer_key = $request instanceof OAuthRequest
? $request->get_parameter("oauth_consumer_key") ? $request->get_parameter("oauth_consumer_key")
: NULL; : NULL;
...@@ -642,10 +690,11 @@ class OAuthServer { ...@@ -642,10 +690,11 @@ class OAuthServer {
/** /**
* try to find the token for the provided request's token key * try to find the token for the provided request's token key
*/ */
private function get_token($request, $consumer, $token_type="access") { private function get_token($request, $consumer, $token_type="access")
{
$token_field = $request instanceof OAuthRequest $token_field = $request instanceof OAuthRequest
? $request->get_parameter('oauth_token') ? $request->get_parameter('oauth_token')
: NULL; : null;
if (!empty($token_field)) { if (!empty($token_field)) {
$token = $this->data_store->lookup_token( $token = $this->data_store->lookup_token(
...@@ -665,14 +714,15 @@ class OAuthServer { ...@@ -665,14 +714,15 @@ class OAuthServer {
* all-in-one function to check the signature on a request * all-in-one function to check the signature on a request
* should guess the signature method appropriately * should guess the signature method appropriately
*/ */
private function check_signature($request, $consumer, $token) { private function check_signature($request, $consumer, $token)
{
// this should probably be in a different method // this should probably be in a different method
$timestamp = $request instanceof OAuthRequest $timestamp = $request instanceof OAuthRequest
? $request->get_parameter('oauth_timestamp') ? $request->get_parameter('oauth_timestamp')
: NULL; : null;
$nonce = $request instanceof OAuthRequest $nonce = $request instanceof OAuthRequest
? $request->get_parameter('oauth_nonce') ? $request->get_parameter('oauth_nonce')
: NULL; : null;
$this->check_timestamp($timestamp); $this->check_timestamp($timestamp);
$this->check_nonce($consumer, $token, $nonce, $timestamp); $this->check_nonce($consumer, $token, $nonce, $timestamp);
...@@ -695,11 +745,13 @@ class OAuthServer { ...@@ -695,11 +745,13 @@ class OAuthServer {
/** /**
* check that the timestamp is new enough * check that the timestamp is new enough
*/ */
private function check_timestamp($timestamp) { private function check_timestamp($timestamp)
if( ! $timestamp ) {
if (! $timestamp) {
throw new OAuthException( throw new OAuthException(
'Missing timestamp parameter. The parameter is required' 'Missing timestamp parameter. The parameter is required'
); );
}
// verify that timestamp is recentish // verify that timestamp is recentish
$now = time(); $now = time();
...@@ -713,11 +765,13 @@ class OAuthServer { ...@@ -713,11 +765,13 @@ class OAuthServer {
/** /**
* check that the nonce is not repeated * check that the nonce is not repeated
*/ */
private function check_nonce($consumer, $token, $nonce, $timestamp) { private function check_nonce($consumer, $token, $nonce, $timestamp)
if( ! $nonce ) {
if (! $nonce) {
throw new OAuthException( throw new OAuthException(
'Missing nonce parameter. The parameter is required' 'Missing nonce parameter. The parameter is required'
); );
}
// verify that the nonce is uniqueish // verify that the nonce is uniqueish
$found = $this->data_store->lookup_nonce( $found = $this->data_store->lookup_nonce(
...@@ -730,27 +784,32 @@ class OAuthServer { ...@@ -730,27 +784,32 @@ class OAuthServer {
throw new OAuthException("Nonce already used: $nonce"); throw new OAuthException("Nonce already used: $nonce");
} }
} }
} }
class OAuthDataStore { class OAuthDataStore
function lookup_consumer($consumer_key) { {
function lookup_consumer($consumer_key)
{
// implement me // implement me
} }
function lookup_token($consumer, $token_type, $token) { function lookup_token($consumer, $token_type, $token)
{
// implement me // implement me
} }
function lookup_nonce($consumer, $token, $nonce, $timestamp) { function lookup_nonce($consumer, $token, $nonce, $timestamp)
{
// implement me // implement me
} }
function new_request_token($consumer, $callback = null) { function new_request_token($consumer, $callback = null)
{
// return a new token attached to this consumer // return a new token attached to this consumer
} }
function new_access_token($token, $consumer, $verifier = null) { function new_access_token($token, $consumer, $verifier = null)
{
// return a new access token attached to this consumer // return a new access token attached to this consumer
// for the user associated with this token if the request token // for the user associated with this token if the request token
// is authorized // is authorized
...@@ -759,8 +818,10 @@ class OAuthDataStore { ...@@ -759,8 +818,10 @@ class OAuthDataStore {
} }
class OAuthUtil { class OAuthUtil
public static function urlencode_rfc3986($input) { {
public static function urlencode_rfc3986($input)
{
if (is_array($input)) { if (is_array($input)) {
return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
} else if (is_scalar($input)) { } else if (is_scalar($input)) {
...@@ -778,7 +839,8 @@ class OAuthUtil { ...@@ -778,7 +839,8 @@ class OAuthUtil {
// This decode function isn't taking into consideration the above // This decode function isn't taking into consideration the above
// modifications to the encoding process. However, this method doesn't // modifications to the encoding process. However, this method doesn't
// seem to be used anywhere so leaving it as is. // seem to be used anywhere so leaving it as is.
public static function urldecode_rfc3986($string) { public static function urldecode_rfc3986($string)
{
return urldecode($string); return urldecode($string);
} }
...@@ -787,7 +849,8 @@ class OAuthUtil { ...@@ -787,7 +849,8 @@ class OAuthUtil {
// Can filter out any non-oauth parameters if needed (default behaviour) // Can filter out any non-oauth parameters if needed (default behaviour)
// May 28th, 2010 - method updated to tjerk.meesters for a speed improvement. // May 28th, 2010 - method updated to tjerk.meesters for a speed improvement.
// see http://code.google.com/p/oauth/issues/detail?id=163 // see http://code.google.com/p/oauth/issues/detail?id=163
public static function split_header($header, $only_allow_oauth_parameters = true) { public static function split_header($header, $only_allow_oauth_parameters = true)
{
$params = array(); $params = array();
if (preg_match_all('/('.($only_allow_oauth_parameters ? 'oauth_' : '').'[a-z_-]*)=(:?"([^"]*)"|([^,]*))/', $header, $matches)) { if (preg_match_all('/('.($only_allow_oauth_parameters ? 'oauth_' : '').'[a-z_-]*)=(:?"([^"]*)"|([^,]*))/', $header, $matches)) {
foreach ($matches[1] as $i => $h) { foreach ($matches[1] as $i => $h) {
...@@ -801,7 +864,8 @@ class OAuthUtil { ...@@ -801,7 +864,8 @@ class OAuthUtil {
} }
// helper to try to sort out headers for people who aren't running apache // helper to try to sort out headers for people who aren't running apache
public static function get_headers() { public static function get_headers()
{
if (function_exists('apache_request_headers')) { if (function_exists('apache_request_headers')) {
// we need this to get the actual Authorization: header // we need this to get the actual Authorization: header
// because apache tends to tell us it doesn't exist // because apache tends to tell us it doesn't exist
...@@ -812,7 +876,7 @@ class OAuthUtil { ...@@ -812,7 +876,7 @@ class OAuthUtil {
// returns the headers in the same case as they are in the // returns the headers in the same case as they are in the
// request // request
$out = array(); $out = array();
foreach ($headers AS $key => $value) { foreach ($headers as $key => $value) {
$key = str_replace( $key = str_replace(
" ", " ",
"-", "-",
...@@ -824,10 +888,12 @@ class OAuthUtil { ...@@ -824,10 +888,12 @@ class OAuthUtil {
// otherwise we don't have apache and are just going to have to hope // otherwise we don't have apache and are just going to have to hope
// that $_SERVER actually contains what we need // that $_SERVER actually contains what we need
$out = array(); $out = array();
if( isset($_SERVER['CONTENT_TYPE']) ) if (isset($_SERVER['CONTENT_TYPE'])) {
$out['Content-Type'] = $_SERVER['CONTENT_TYPE']; $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
if( isset($_ENV['CONTENT_TYPE']) ) }
if (isset($_ENV['CONTENT_TYPE'])) {
$out['Content-Type'] = $_ENV['CONTENT_TYPE']; $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
}
foreach ($_SERVER as $key => $value) { foreach ($_SERVER as $key => $value) {
if (substr($key, 0, 5) == "HTTP_") { if (substr($key, 0, 5) == "HTTP_") {
...@@ -853,8 +919,11 @@ class OAuthUtil { ...@@ -853,8 +919,11 @@ class OAuthUtil {
// This function takes a input like a=b&a=c&d=e and returns the parsed // This function takes a input like a=b&a=c&d=e and returns the parsed
// parameters like this // parameters like this
// array('a' => array('b','c'), 'd' => 'e') // array('a' => array('b','c'), 'd' => 'e')
public static function parse_parameters( $input ) { public static function parse_parameters($input)
if (!isset($input) || !$input) return array(); {
if (!isset($input) || !$input) {
return array();
}
$pairs = explode('&', $input); $pairs = explode('&', $input);
...@@ -882,8 +951,11 @@ class OAuthUtil { ...@@ -882,8 +951,11 @@ class OAuthUtil {
return $parsed_parameters; return $parsed_parameters;
} }
public static function build_http_query($params) { public static function build_http_query($params)
if (!$params) return ''; {
if (!$params) {
return '';
}
// Urlencode both keys and values // Urlencode both keys and values
$keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment