/modules/oauth/classes/kohana/oauth.php
https://github.com/Tidwell/HMXSongs-PHP-API · PHP · 217 lines · 90 code · 26 blank · 101 comment · 8 complexity · c90ca5d0926d8be8d6d6b96f251919ad MD5 · raw file
- <?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';
-
- /**
- * 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."
- $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