]> git.mxchange.org Git - friendica-addons.git/blobdiff - twitter/vendor/abraham/twitteroauth/src/Request.php
Merge branch '3.6-rc'
[friendica-addons.git] / twitter / vendor / abraham / twitteroauth / src / Request.php
diff --git a/twitter/vendor/abraham/twitteroauth/src/Request.php b/twitter/vendor/abraham/twitteroauth/src/Request.php
new file mode 100644 (file)
index 0000000..a60c23d
--- /dev/null
@@ -0,0 +1,254 @@
+<?php
+/**
+ * The MIT License
+ * Copyright (c) 2007 Andy Smith
+ */
+namespace Abraham\TwitterOAuth;
+
+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" => Request::$version,
+            "oauth_nonce" => Request::generateNonce(),
+            "oauth_timestamp" => time(),
+            "oauth_consumer_key" => $consumer->key
+        ];
+        if (null !== $token) {
+            $defaults['oauth_token'] = $token->key;
+        }
+
+        $parameters = array_merge($defaults, $parameters);
+
+        return new Request($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;
+
+        // Remove oauth_signature if present
+        // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
+        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());
+    }
+}