/** * Add Authorization header to the request. * * @param \Cake\Network\Http\Request $request Request instance. * @param array $credentials Credentials. * @return void * @see http://www.ietf.org/rfc/rfc2617.txt */ public function authentication(Request $request, array $credentials) { if (isset($credentials['encoding']) && $credentials['encoding'] === 'url') { $url = $request->url(); $urlEncoding = $this->_getUrlEncoding($credentials['key'], $credentials['shared_secret'], $url, $credentials['actor']); $request->header('Authorization', $urlEncoding); } else { if (isset($credentials['key'], $credentials['shared_secret'])) { $nonce = $this->_getNonce($credentials['key'], $credentials['shared_secret']); $request->header('Authorization', $nonce); } } }
/** * Proxy Authentication * * @param \Cake\Network\Http\Request $request Request instance. * @param array $credentials Credentials. * @return void * @see http://www.ietf.org/rfc/rfc2617.txt */ public function proxyAuthentication(Request $request, array $credentials) { if (isset($credentials['username'], $credentials['password'])) { $value = $this->_generateHeader($credentials['username'], $credentials['password']); $request->header('Proxy-Authorization', $value); } }
/** * Add Authorization header to the request. * * @param \Cake\Network\Http\Request $request Request instance. * @param array $credentials Credentials. * @return void * @see http://www.ietf.org/rfc/rfc2617.txt */ public function authentication(Request $request, array $credentials) { if (isset($credentials['key'], $credentials['shared_secret'])) { $nonce = $this->_getNonce($credentials['key'], $credentials['shared_secret']); if (!empty($nonce)) { $request->header('Authorization', $nonce); } } }
/** * {@inheritdoc} */ public function sendRequest(RequestInterface $request) { $cakeRequest = new Request(); $cakeRequest->method($request->getMethod()); $cakeRequest->url((string) $request->getUri()); $cakeRequest->version($request->getProtocolVersion()); $cakeRequest->body($request->getBody()->getContents()); foreach ($request->getHeaders() as $header => $values) { $cakeRequest->header($header, $request->getHeaderLine($header)); } if (null === $cakeRequest->header('Content-Type')) { $cakeRequest->header('Content-Type', 'application/x-www-form-urlencoded'); } try { $cakeResponse = $this->client->send($cakeRequest, $this->client->config()); } catch (Exception $exception) { throw new NetworkException('Failed to send request', $request, $exception); } return $this->responseFactory->createResponse($cakeResponse->statusCode(), null, $cakeResponse->headers(), $cakeResponse->body(), $cakeResponse->version()); }
/** * test header method. * * @return void */ public function testHeader() { $request = new Request(); $type = 'application/json'; $result = $request->header('Content-Type', $type); $this->assertSame($result, $request, 'Should return self'); $result = $request->header('content-type'); $this->assertEquals($type, $result, 'lowercase does not work'); $result = $request->header('ConTent-typE'); $this->assertEquals($type, $result, 'Funny casing does not work'); $result = $request->header(['Connection' => 'close', 'user-agent' => 'CakePHP']); $this->assertSame($result, $request, 'Should return self'); $this->assertEquals('close', $request->header('connection')); $this->assertEquals('CakePHP', $request->header('USER-AGENT')); $this->assertNull($request->header('not set')); }
/** * {@inheritdoc} */ protected function sendInternalRequest(InternalRequestInterface $internalRequest) { $request = new Request(); foreach ($this->prepareHeaders($internalRequest) as $name => $value) { $request->header($name, $value); } $request->method($internalRequest->getMethod()); $request->body($this->prepareBody($internalRequest)); $request->url($uri = (string) $internalRequest->getUri()); $request->version($this->getConfiguration()->getProtocolVersion()); try { $response = $this->client->send($request, array('timeout' => $this->getConfiguration()->getTimeout(), 'redirect' => false)); } catch (\Exception $e) { throw HttpAdapterException::cannotFetchUri($uri, $this->getName(), $e->getMessage()); } return $this->getConfiguration()->getMessageFactory()->createResponse((int) $response->statusCode(), $response->version(), $response->headers(), $response->body()); }
/** * Builds the request content based on the request object. * * If the $request->body() is a string, it will be used as is. * Array data will be processed with Cake\Network\Http\FormData * * @param \Cake\Network\Http\Request $request The request being sent. * @param array $options Array of options to use. * @return void */ protected function _buildContent(Request $request, $options) { $content = $request->body(); if (empty($content)) { return; } if (is_string($content)) { $this->_contextOptions['content'] = $content; return; } if (is_array($content)) { $formData = new FormData(); $formData->addMany($content); $type = 'multipart/form-data; boundary="' . $formData->boundary() . '"'; $request->header('Content-Type', $type); $this->_contextOptions['content'] = (string) $formData; return; } $this->_contextOptions['content'] = $content; }
/** * Creates a new request object based on the parameters. * * @param string $method HTTP method name. * @param string $url The url including query string. * @param mixed $data The request body. * @param array $options The options to use. Contains auth, proxy etc. * @return \Cake\Network\Http\Request */ protected function _createRequest($method, $url, $data, $options) { $request = new Request(); $request->method($method)->url($url)->body($data); if (isset($options['type'])) { $request->header($this->_typeHeaders($options['type'])); } if (isset($options['headers'])) { $request->header($options['headers']); } $request->cookie($this->_cookies->get($url)); if (isset($options['cookies'])) { $request->cookie($options['cookies']); } if (isset($options['auth'])) { $this->_addAuthentication($request, $options); } if (isset($options['proxy'])) { $this->_addProxy($request, $options); } return $request; }
/** * Creates a new request object based on the parameters. * * @param string $method HTTP method name. * @param string $url The url including query string. * @param mixed $data The request body. * @param array $options The options to use. Contains auth, proxy etc. * @return \Cake\Network\Http\Request */ protected function _createRequest($method, $url, $data, $options) { $request = new Request(); $request->method($method)->url($url)->body($data); if (isset($options['type'])) { $request->header($this->_typeHeaders($options['type'])); } if (isset($options['headers'])) { $request->header($options['headers']); } if (is_string($data) && !$request->header('content-type')) { $request->header('Content-Type', 'application/x-www-form-urlencoded'); } $request->cookie($this->_cookies->get($url)); if (isset($options['cookies'])) { $request->cookie($options['cookies']); } if (isset($options['auth'])) { $this->_addAuthentication($request, $options); } if (isset($options['proxy'])) { $this->_addProxy($request, $options); } return $request; }
/** * Sorts and normalizes request data and oauthValues * * Section 9.1.1 of Oauth spec. * * - URL encode keys + values. * - Sort keys & values by byte value. * * @param Request $request * @param array $oauthValues * @return string sorted and normalized values */ protected function _normalizedParams($request, $oauthValues) { $query = parse_url($request->url(), PHP_URL_QUERY); parse_str($query, $queryArgs); $post = []; $body = $request->body(); $contentType = $request->header('content-type'); if (is_array($body)) { $post = $body; } $args = array_merge($queryArgs, $oauthValues, $post); uksort($args, 'strcmp'); $pairs = []; foreach ($args as $k => $val) { if (is_array($val)) { sort($val, SORT_STRING); foreach ($val as $nestedVal) { $pairs[] = "{$k}={$nestedVal}"; } } else { $pairs[] = "{$k}={$val}"; } } return implode('&', $pairs); }