Beispiel #1
0
 /**
  * {@inheritDoc}
  */
 public function buildSignature(Request $request, Consumer $consumer, Token $token = null)
 {
     $signatureBase = $request->getSignatureBaseString();
     $parts = [$consumer->secret, null !== $token ? $token->secret : ""];
     $parts = Util::urlencodeRfc3986($parts);
     $key = implode('&', $parts);
     return base64_encode(hash_hmac('sha1', $signatureBase, $key, true));
 }
Beispiel #2
0
 /**
  * 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;
 }
Beispiel #3
0
 /**
  * Generates the basic string serialization of a token that a server
  * would respond to request_token and access_token calls with
  *
  * @return string
  */
 public function __toString()
 {
     return sprintf("oauth_token=%s&oauth_token_secret=%s", Util::urlencodeRfc3986($this->key), Util::urlencodeRfc3986($this->secret));
 }
Beispiel #4
0
 /**
  * Make an HTTP request
  *
  * @param string $url
  * @param string $method
  * @param string $authorization
  * @param array $postfields
  *
  * @return string
  * @throws TwitterOAuthException
  */
 private function request($url, $method, $authorization, $postfields)
 {
     /* Curl settings */
     $options = [CURLOPT_CAINFO => __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem', CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout, CURLOPT_HEADER => true, CURLOPT_HTTPHEADER => ['Accept: application/json', $authorization, 'Expect:'], CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->timeout, CURLOPT_URL => $url, CURLOPT_USERAGENT => $this->userAgent, CURLOPT_ENCODING => 'gzip'];
     if (!empty($this->proxy)) {
         $options[CURLOPT_PROXY] = $this->proxy['CURLOPT_PROXY'];
         $options[CURLOPT_PROXYUSERPWD] = $this->proxy['CURLOPT_PROXYUSERPWD'];
         $options[CURLOPT_PROXYPORT] = $this->proxy['CURLOPT_PROXYPORT'];
         $options[CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
         $options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP;
     }
     switch ($method) {
         case 'GET':
             break;
         case 'POST':
             $options[CURLOPT_POST] = true;
             $options[CURLOPT_POSTFIELDS] = Util::buildHttpQuery($postfields);
             break;
         case 'DELETE':
             $options[CURLOPT_CUSTOMREQUEST] = 'DELETE';
             break;
         case 'PUT':
             $options[CURLOPT_CUSTOMREQUEST] = 'PUT';
             break;
     }
     if (in_array($method, ['GET', 'PUT', 'DELETE']) && !empty($postfields)) {
         $options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields);
     }
     $curlHandle = curl_init();
     curl_setopt_array($curlHandle, $options);
     $response = curl_exec($curlHandle);
     // Throw exceptions on cURL errors.
     if (curl_errno($curlHandle) > 0) {
         throw new TwitterOAuthException(curl_error($curlHandle), curl_errno($curlHandle));
     }
     $this->response->setHttpCode(curl_getinfo($curlHandle, CURLINFO_HTTP_CODE));
     $parts = explode("\r\n\r\n", $response);
     $responseBody = array_pop($parts);
     $responseHeader = array_pop($parts);
     $this->response->setHeaders($this->parseHeaders($responseHeader));
     curl_close($curlHandle);
     return $responseBody;
 }