OAuth v2 class
Class declared in MODPATH/user/classes/oauth2.php on line 3.
Normalize all request parameters into a string.
$query = OAuth::normalize_params($params);
This method implements OAuth 1.0 Spec 9.1.1.
array
$params
= NULL - Request parametersstringpublic static function normalize_params(array $params = NULL)
{
if ( ! $params)
{
// Nothing to do
return '';
}
// Encode the parameter keys and values
$keys = OAuth2::urlencode(array_keys($params));
$values = OAuth2::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."
$value = natsort($value);
foreach ($value as $duplicate)
{
$query[] = $name.'='.$duplicate;
}
}
else
{
$query[] = $name.'='.$value;
}
}
return implode('&', $query);
}
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');
string
$params
required - Parameter stringarraypublic 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);
//list($name, $value) = preg_split('#=|:#', $param, 2);
// Decode the name and value
$name = OAuth2::urldecode($name);
$value = OAuth2::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;
}
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.
string
$url
required - URL to parsearray - (clean_url, 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 = OAuth2::parse_params($query);
}
else
{
// No parameters are present
$params = array();
}
return array($url, $params);
}
$name
$name
required - Provider namearray
$options
= NULL - Provider optionsOAuth2_Providerpublic function provider($name, array $options = NULL)
{
return OAuth2_Provider::factory($name, $options);
}
Returns the output of a remote URL. Any curl option 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),
));
string
$url
required - Remote URLarray
$options
= NULL - Curl optionsstringpublic 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 OAuth2_Exception('Error fetching remote :url [ status :code ] :error',
array(':url' => $url, ':code' => $code, ':error' => $error));
}
return $response;
}
Get request object
string
$type
required - Request type (access, token etc)string
$method
required - Request method (POST, GET)string
$url
required - URLarray
$options
= NULL - Request paramsOAuth2_Requestpublic function request($type, $method, $url, array $options = NULL)
{
return OAuth2_Request::factory($type, $method, $url, $options);
}
$name
$name
required - Token typearray
$options
= NULL - Token optionsOAuth2_Tokenpublic function token($name, array $options = NULL)
{
return OAuth2_Token::factory($name, $options);
}
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.
mixed
$input
required - Input string or arraymixedpublic 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);
}
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.
mixed
$input
required - Input string or arraymixedpublic static function urlencode($input)
{
if (is_array($input))
{
// Encode the values of the array
return array_map(array('OAuth2', '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;
}