Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| <?php | |
| /** | |
| * The MIT License | |
| * Copyright (c) 2007 Andy Smith. | |
| */ | |
| namespace Hborras\TwitterAdsSDK; | |
| class Request | |
| { | |
| protected $parameters; | |
| protected $httpMethod; | |
| protected $httpUrl; | |
| public static $version = '1.0'; | |
| /** | |
| * Constructor. | |
| * | |
| * @param string $httpMethod | |
| * @param string $httpUrl | |
| * @param array|null $parameters | |
| */ | |
| public function __construct($httpMethod, $httpUrl, array $parameters = []) | |
| { | |
| $parameters = array_merge(Util::parseParameters(parse_url($httpUrl, PHP_URL_QUERY)), $parameters); | |
| $this->parameters = $parameters; | |
| $this->httpMethod = $httpMethod; | |
| $this->httpUrl = $httpUrl; | |
| } | |
| /** | |
| * pretty much a helper function to set up the request. | |
| * | |
| * @param Consumer $consumer | |
| * @param Token $token | |
| * @param string $httpMethod | |
| * @param string $httpUrl | |
| * @param array $parameters | |
| * | |
| * @return Request | |
| */ | |
| public static function fromConsumerAndToken( | |
| Consumer $consumer, | |
| Token $token = null, | |
| $httpMethod, | |
| $httpUrl, | |
| array $parameters = [] | |
| ) { | |
| $defaults = [ | |
| 'oauth_version' => self::$version, | |
| 'oauth_nonce' => self::generateNonce(), | |
| 'oauth_timestamp' => time(), | |
| 'oauth_consumer_key' => $consumer->key | |
| ]; | |
| if (null !== $token) { | |
| $defaults['oauth_token'] = $token->key; | |
| } | |
| if (isset($parameters['batch'])) { | |
| $parameters = array_merge($defaults, ['oauth_body_hash' => base64_encode(sha1($parameters['batch'], true))]); | |
| } elseif (isset($parameters['raw'])) { | |
| $parameters = array_merge($defaults, ['oauth_body_hash' => base64_encode(sha1($parameters['raw'], true))]); | |
| } elseif (empty($parameters)) { | |
| $parameters = array_merge($defaults, ['oauth_body_hash' => base64_encode(sha1('', true))]); | |
| } else { | |
| $parameters = array_merge($defaults, $parameters); | |
| } | |
| return new self($httpMethod, $httpUrl, $parameters); | |
| } | |
| /** | |
| * @param string $name | |
| * @param string $value | |
| */ | |
| public function setParameter($name, $value) | |
| { | |
| $this->parameters[$name] = $value; | |
| } | |
| /** | |
| * @param $name | |
| * | |
| * @return string|null | |
| */ | |
| public function getParameter($name) | |
| { | |
| return isset($this->parameters[$name]) ? $this->parameters[$name] : null; | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getParameters() | |
| { | |
| return $this->parameters; | |
| } | |
| /** | |
| * @param $name | |
| */ | |
| public function removeParameter($name) | |
| { | |
| unset($this->parameters[$name]); | |
| } | |
| /** | |
| * The request parameters, sorted and concatenated into a normalized string. | |
| * | |
| * @return string | |
| */ | |
| public function getSignableParameters() | |
| { | |
| // Grab all parameters | |
| $params = $this->parameters; | |
| if (isset($params['oauth_signature'])) { | |
| unset($params['oauth_signature']); | |
| } | |
| return Util::buildHttpQuery($params); | |
| } | |
| /** | |
| * Returns the base string of this request. | |
| * | |
| * The base string defined as the method, the url | |
| * and the parameters (normalized), each urlencoded | |
| * and the concated with &. | |
| * | |
| * @return string | |
| */ | |
| public function getSignatureBaseString() | |
| { | |
| $parts = [ | |
| $this->getNormalizedHttpMethod(), | |
| $this->getNormalizedHttpUrl(), | |
| $this->getSignableParameters(), | |
| ]; | |
| $parts = Util::urlencodeRfc3986($parts); | |
| return implode('&', $parts); | |
| } | |
| /** | |
| * Returns the HTTP Method in uppercase. | |
| * | |
| * @return string | |
| */ | |
| public function getNormalizedHttpMethod() | |
| { | |
| return strtoupper($this->httpMethod); | |
| } | |
| /** | |
| * parses the url and rebuilds it to be | |
| * scheme://host/path. | |
| * | |
| * @return string | |
| */ | |
| public function getNormalizedHttpUrl() | |
| { | |
| $parts = parse_url($this->httpUrl); | |
| $scheme = $parts['scheme']; | |
| $host = strtolower($parts['host']); | |
| $path = $parts['path']; | |
| return "$scheme://$host$path"; | |
| } | |
| /** | |
| * Builds a url usable for a GET request. | |
| * | |
| * @return string | |
| */ | |
| public function toUrl() | |
| { | |
| $postData = $this->toPostdata(); | |
| $out = $this->getNormalizedHttpUrl(); | |
| if ($postData) { | |
| $out .= '?' . $postData; | |
| } | |
| return $out; | |
| } | |
| /** | |
| * Builds the data one would send in a POST request. | |
| * | |
| * @return string | |
| */ | |
| public function toPostdata() | |
| { | |
| return Util::buildHttpQuery($this->parameters); | |
| } | |
| /** | |
| * Builds the Authorization: header. | |
| * | |
| * @return string | |
| * | |
| * @throws TwitterOAuthException | |
| */ | |
| public function toHeader() | |
| { | |
| $first = true; | |
| $out = 'Authorization: OAuth'; | |
| foreach ($this->parameters as $k => $v) { | |
| if (substr($k, 0, 5) != 'oauth') { | |
| continue; | |
| } | |
| if (is_array($v)) { | |
| throw new TwitterOAuthException('Arrays not supported in headers'); | |
| } | |
| $out .= ($first) ? ' ' : ', '; | |
| $out .= Util::urlencodeRfc3986($k) . '="' . Util::urlencodeRfc3986($v) . '"'; | |
| $first = false; | |
| } | |
| return $out; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function __toString() | |
| { | |
| return $this->toUrl(); | |
| } | |
| /** | |
| * @param SignatureMethod $signatureMethod | |
| * @param Consumer $consumer | |
| * @param Token $token | |
| */ | |
| public function signRequest(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null) | |
| { | |
| $this->setParameter('oauth_signature_method', $signatureMethod->getName()); | |
| $signature = $this->buildSignature($signatureMethod, $consumer, $token); | |
| $this->setParameter('oauth_signature', $signature); | |
| } | |
| /** | |
| * @param SignatureMethod $signatureMethod | |
| * @param Consumer $consumer | |
| * @param Token $token | |
| * | |
| * @return string | |
| */ | |
| public function buildSignature(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null) | |
| { | |
| return $signatureMethod->buildSignature($this, $consumer, $token); | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public static function generateNonce() | |
| { | |
| return md5(microtime() . mt_rand()); | |
| } | |
| } |