privateKey = $privateKey; $this->publicKey = $publicKey; } protected function fetch_public_cert(&$request) { return $this->publicKey; } protected function fetch_private_cert(&$request) { return $this->privateKey; } } class ShindigOAuth { public static $VERSION_1_0 = "1.0"; public static $ENCODING = "UTF-8"; public static $FORM_ENCODED = "application/x-www-form-urlencoded"; public static $OAUTH_CONSUMER_KEY = "oauth_consumer_key"; public static $OAUTH_TOKEN = "oauth_token"; public static $OAUTH_TOKEN_SECRET = "oauth_token_secret"; public static $OAUTH_SIGNATURE_METHOD = "oauth_signature_method"; public static $OAUTH_SIGNATURE = "oauth_signature"; public static $OAUTH_TIMESTAMP = "oauth_timestamp"; public static $OAUTH_NONCE = "oauth_nonce"; public static $OAUTH_VERIFIER = "oauth_verifier"; public static $OAUTH_VERSION = "oauth_version"; public static $HMAC_SHA1 = "HMAC_SHA1"; public static $RSA_SHA1 = "RSA_SHA1"; public static $BEGIN_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----"; public static $END_PRIVATE_KEY = "-----END PRIVATE KEY-----"; public static $OAUTH_PROBLEM = "oauth_problem"; } class ShindigOAuthRequest extends OAuthRequest { /** * Needed so that OAuthFetcher works with the correct type of requests. */ public function __construct(OAuthRequest $request) { $this->parameters = $request->parameters; $this->http_url = $request->http_url; $this->http_method = $request->http_method; } /** * Needed so that OAuthFetcher works with the correct type of requests. * @return ShindigOAuthRequest */ public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { return new ShindigOAuthRequest(OAuthRequest::from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters)); } /** * Needed so that OAuthFetcher works with the correct type of requests. * @return ShindigOAuthRequest */ public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { return new ShindigOAuthRequest(OAuthRequest::from_request($http_method, $http_url, $parameters)); } /** * Needed in OAuthFetcher.php */ public function set_parameters($params) { return $this->parameters = $params; } /** * Needed in OAuthFetcher.php */ public function requireParameters($names) { $present = $this->parameters; $absent = array(); foreach ($names as $required) { if (! in_array($required, $present)) { $absent[] = $required; } } if (count($absent) == 0) { throw new ShindigOAuthProblemException("oauth_parameters_absent: " . ShindigOAuthUtil::urlencodeRFC3986($absent)); } } /** * Needed in OAuthFetcher.php */ public function get_url() { return $this->http_url; } /** * Needed in SigningFetcher.php */ public static function generate_nonce() { $mt = microtime(); $rand = mt_rand(); return md5($mt . $rand); // md5s look nicer than numbers } /** * Needed for from_consumer_and_token */ private static function generate_timestamp() { return time(); } } class ShindigOAuthUtil extends OAuthUtil { public static $AUTH_SCHEME = "OAuth"; private static $AUTHORIZATION = "\ *[a-zA-Z0-9*]\ +(.*)"; private static $NVP = "(\\S*)\\s*\\=\\s*\"([^\"]*)\""; /** * Needed in OAuthFetcher.php */ public static function getPostBodyString(Array $params) { $result = ''; $first = true; foreach ($params as $key => $val) { if ($first) { $first = false; } else { $result .= '&'; } $result .= ShindigOAuthUtil::urlencode_rfc3986($key) . "=" . ShindigOAuthUtil::urlencode_rfc3986($val); } return $result; } /** * Needed in OAuthFetcher.php * Return true if the given Content-Type header means FORM_ENCODED. */ public static function isFormEncoded($contentType) { if (! isset($contentType)) { return false; } $semi = strpos($contentType, ";"); if ($semi != false) { $contentType = substr($contentType, 0, $semi); } return strtolower(ShindigOAuth::$FORM_ENCODED) == strtolower(trim($contentType)); } /** * Needed in OAuthFetcher.php */ public static function addParameters($url, $oauthParams) { $url .= strchr($url, '?') === false ? '?' : '&'; foreach ($oauthParams as $key => $value) { $url .= ShindigOAuthUtil::urlencode_rfc3986($key)."=".ShindigOAuthUtil::urlencode_rfc3986($value)."&"; } return $url; } /** * Needed in OAuthFetcher.php */ public static function decodeForm($form) { $parameters = array(); $explodedForm = explode("&", $form); foreach ($explodedForm as $params) { $value = explode("=", $params); if (! empty($value[0]) && ! empty($value[1])) { $parameters[ShindigOAuthUtil::urldecode_rfc3986($value[0])] = ShindigOAuthUtil::urldecode_rfc3986($value[1]); } } return $parameters; } /** * Needed in OAuthFetcher.php * * Parse the parameters from an OAuth Authorization or WWW-Authenticate * header. The realm is included as a parameter. If the given header doesn't * start with "OAuth ", return an empty list. */ public static function decodeAuthorization($authorization) { $into = array(); if ($authorization != null) { $m = ereg(ShindigOAuthUtil::$AUTHORIZATION, $authorization); if ($m !== false) { if (strpos($authorization, ShindigOAuthUtil::$AUTH_SCHEME) == 0) { $authorization = str_replace("OAuth ", "", $authorization); $authParams = explode(", ", $authorization); foreach ($authParams as $params) { $m = ereg(ShindigOAuthUtil::$NVP, $params); if ($m == 1) { $keyValue = explode("=", $params); $name = ShindigOAuthUtil::urlencode_rfc3986($keyValue[0]); $value = ShindigOAuthUtil::urlencode_rfc3986(str_replace("\"", "", $keyValue[1])); $into[$name] = $value; } } } } } return $into; } }