diff options
author | Morris Jobke <hey@morrisjobke.de> | 2019-04-18 14:58:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-18 14:58:52 +0200 |
commit | e55e425a5922c013fb4ad222eca78f9995484328 (patch) | |
tree | eb59e75c58f6173669a3b0fc7fafcc1b6392581d /lib | |
parent | 16b8017fc906f7a3cf105304f6abdc0e2443a078 (diff) | |
parent | 6c156d81edc98580ceca9d17c4ea37fc7fdc0226 (diff) | |
download | nextcloud-server-e55e425a5922c013fb4ad222eca78f9995484328.tar.gz nextcloud-server-e55e425a5922c013fb4ad222eca78f9995484328.zip |
Merge pull request #14363 from nextcloud/debt/cleanup-httpservice
Set User-Agent as header without middleware
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Http/Client/Client.php | 98 | ||||
-rw-r--r-- | lib/private/Http/Client/ClientService.php | 3 |
2 files changed, 38 insertions, 63 deletions
diff --git a/lib/private/Http/Client/Client.php b/lib/private/Http/Client/Client.php index 03b09bf54b7..ad51feca0be 100644 --- a/lib/private/Http/Client/Client.php +++ b/lib/private/Http/Client/Client.php @@ -25,13 +25,11 @@ declare(strict_types=1); namespace OC\Http\Client; use GuzzleHttp\Client as GuzzleClient; -use GuzzleHttp\HandlerStack; -use GuzzleHttp\Middleware; +use GuzzleHttp\RequestOptions; use OCP\Http\Client\IClient; use OCP\Http\Client\IResponse; use OCP\ICertificateManager; use OCP\IConfig; -use Psr\Http\Message\RequestInterface; /** * Class Client @@ -45,9 +43,6 @@ class Client implements IClient { private $config; /** @var ICertificateManager */ private $certificateManager; - private $configured = false; - /** @var HandlerStack */ - private $stack; /** * @param IConfig $config @@ -57,74 +52,62 @@ class Client implements IClient { public function __construct( IConfig $config, ICertificateManager $certificateManager, - GuzzleClient $client, - HandlerStack $stack + GuzzleClient $client ) { $this->config = $config; $this->client = $client; - $this->stack = $stack; $this->certificateManager = $certificateManager; } - /** - * Sets the default options to the client - */ - private function setDefaultOptions() { - if ($this->configured) { - return; - } - $this->configured = true; + private function buildRequestOptions(array $options): array { + $defaults = [ + RequestOptions::PROXY => $this->getProxyUri(), + RequestOptions::VERIFY => $this->getCertBundle(), + ]; - $this->stack->push(Middleware::mapRequest(function (RequestInterface $request) { - return $request - ->withHeader('User-Agent', 'Nextcloud Server Crawler'); - })); - } + $options = array_merge($defaults, $options); - private function getRequestOptions() { - $options = [ - 'verify' => $this->getCertBundle(), - ]; - $proxyUri = $this->getProxyUri(); - if ($proxyUri !== '') { - $options['proxy'] = $proxyUri; + if (!isset($options[RequestOptions::HEADERS]['User-Agent'])) { + $options[RequestOptions::HEADERS]['User-Agent'] = 'Nextcloud Server Crawler'; } + return $options; } - private function getCertBundle() { + private function getCertBundle(): string { if ($this->certificateManager->listCertificates() !== []) { return $this->certificateManager->getAbsoluteBundlePath(); - } else { - // If the instance is not yet setup we need to use the static path as - // $this->certificateManager->getAbsoluteBundlePath() tries to instantiiate - // a view - if ($this->config->getSystemValue('installed', false)) { - return $this->certificateManager->getAbsoluteBundlePath(null); - } else { - return \OC::$SERVERROOT . '/resources/config/ca-bundle.crt'; - } } + + // If the instance is not yet setup we need to use the static path as + // $this->certificateManager->getAbsoluteBundlePath() tries to instantiiate + // a view + if ($this->config->getSystemValue('installed', false)) { + return $this->certificateManager->getAbsoluteBundlePath(null); + } + + return \OC::$SERVERROOT . '/resources/config/ca-bundle.crt'; } /** * Get the proxy URI * - * @return string + * @return string|null */ - private function getProxyUri(): string { + private function getProxyUri(): ?string { $proxyHost = $this->config->getSystemValue('proxy', null); - $proxyUserPwd = $this->config->getSystemValue('proxyuserpwd', null); - $proxyUri = ''; - if ($proxyUserPwd !== null) { - $proxyUri .= $proxyUserPwd . '@'; + if ($proxyHost === null) { + return null; } - if ($proxyHost !== null) { - $proxyUri .= $proxyHost; + + $proxyUserPwd = $this->config->getSystemValue('proxyuserpwd', null); + + if ($proxyUserPwd === null) { + return $proxyHost; } - return $proxyUri; + return $proxyUserPwd . '@' . $proxyHost; } /** @@ -157,8 +140,7 @@ class Client implements IClient { * @throws \Exception If the request could not get completed */ public function get(string $uri, array $options = []): IResponse { - $this->setDefaultOptions(); - $response = $this->client->request('get', $uri, array_merge($this->getRequestOptions(), $options)); + $response = $this->client->request('get', $uri, $this->buildRequestOptions($options)); $isStream = isset($options['stream']) && $options['stream']; return new Response($response, $isStream); } @@ -188,8 +170,7 @@ class Client implements IClient { * @throws \Exception If the request could not get completed */ public function head(string $uri, array $options = []): IResponse { - $this->setDefaultOptions(); - $response = $this->client->request('head', $uri, array_merge($this->getRequestOptions(), $options)); + $response = $this->client->request('head', $uri, $this->buildRequestOptions($options)); return new Response($response); } @@ -223,12 +204,11 @@ class Client implements IClient { * @throws \Exception If the request could not get completed */ public function post(string $uri, array $options = []): IResponse { - $this->setDefaultOptions(); if (isset($options['body']) && is_array($options['body'])) { $options['form_params'] = $options['body']; unset($options['body']); } - $response = $this->client->request('post', $uri, array_merge($this->getRequestOptions(), $options)); + $response = $this->client->request('post', $uri, $this->buildRequestOptions($options)); return new Response($response); } @@ -262,8 +242,7 @@ class Client implements IClient { * @throws \Exception If the request could not get completed */ public function put(string $uri, array $options = []): IResponse { - $this->setDefaultOptions(); - $response = $this->client->request('put', $uri, array_merge($this->getRequestOptions(), $options)); + $response = $this->client->request('put', $uri, $this->buildRequestOptions($options)); return new Response($response); } @@ -297,12 +276,10 @@ class Client implements IClient { * @throws \Exception If the request could not get completed */ public function delete(string $uri, array $options = []): IResponse { - $this->setDefaultOptions(); - $response = $this->client->request('delete', $uri, array_merge($this->getRequestOptions(), $options)); + $response = $this->client->request('delete', $uri, $this->buildRequestOptions($options)); return new Response($response); } - /** * Sends a options request * @@ -333,8 +310,7 @@ class Client implements IClient { * @throws \Exception If the request could not get completed */ public function options(string $uri, array $options = []): IResponse { - $this->setDefaultOptions(); - $response = $this->client->request('options', $uri, array_merge($this->getRequestOptions(), $options)); + $response = $this->client->request('options', $uri, $this->buildRequestOptions($options)); return new Response($response); } } diff --git a/lib/private/Http/Client/ClientService.php b/lib/private/Http/Client/ClientService.php index fa8544f07a5..1df54010a2d 100644 --- a/lib/private/Http/Client/ClientService.php +++ b/lib/private/Http/Client/ClientService.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace OC\Http\Client; use GuzzleHttp\Client as GuzzleClient; -use GuzzleHttp\HandlerStack; use OCP\Http\Client\IClient; use OCP\Http\Client\IClientService; use OCP\ICertificateManager; @@ -55,6 +54,6 @@ class ClientService implements IClientService { * @return Client */ public function newClient(): IClient { - return new Client($this->config, $this->certificateManager, new GuzzleClient(), HandlerStack::create()); + return new Client($this->config, $this->certificateManager, new GuzzleClient()); } } |