summaryrefslogtreecommitdiffstats
path: root/vendor/maxmind/web-service-common
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2024-05-27 13:08:29 +0200
committerAnton Luka Šijanec <anton@sijanec.eu>2024-05-27 13:08:29 +0200
commit75160b12821f7f4299cce7f0b69c83c1502ae071 (patch)
tree27e25e4ccaef45f0c58b22831164050d1af1d4db /vendor/maxmind/web-service-common
parentprvi-commit (diff)
download1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.gz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.bz2
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.lz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.xz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.zst
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.zip
Diffstat (limited to 'vendor/maxmind/web-service-common')
-rw-r--r--vendor/maxmind/web-service-common/CHANGELOG.md20
-rw-r--r--vendor/maxmind/web-service-common/README.md2
-rw-r--r--vendor/maxmind/web-service-common/composer.json9
-rw-r--r--vendor/maxmind/web-service-common/dev-bin/release.sh116
-rw-r--r--vendor/maxmind/web-service-common/phpstan.neon7
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php2
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/HttpException.php14
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php2
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php2
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php16
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php2
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php2
-rw-r--r--vendor/maxmind/web-service-common/src/Exception/WebServiceException.php2
-rw-r--r--vendor/maxmind/web-service-common/src/WebService/Client.php180
-rw-r--r--vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php76
-rw-r--r--vendor/maxmind/web-service-common/src/WebService/Http/Request.php20
-rw-r--r--vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php15
17 files changed, 289 insertions, 198 deletions
diff --git a/vendor/maxmind/web-service-common/CHANGELOG.md b/vendor/maxmind/web-service-common/CHANGELOG.md
index 6aaa749..1f1b9a5 100644
--- a/vendor/maxmind/web-service-common/CHANGELOG.md
+++ b/vendor/maxmind/web-service-common/CHANGELOG.md
@@ -1,6 +1,26 @@
CHANGELOG
=========
+0.9.0 (2022-03-28)
+------------------
+
+* Improved internal type hint usage.
+
+0.8.1 (2020-11-02)
+------------------
+
+* We now correctly handle responses without a `Content-Type` header. In 0.8.0,
+ such responses could lead to a type error. In particular, this affected the
+ minFraud Report Transaction endpoint, which returns a response with no
+ content. Reported by Dmitry Malashko. GitHub #99 on
+ `maxmind/minfraud-api-php`.
+
+0.8.0 (2020-10-01)
+------------------
+
+* PHP 7.2 or greater is now required.
+* Added additional type hints.
+
0.7.0 (2020-05-06)
------------------
diff --git a/vendor/maxmind/web-service-common/README.md b/vendor/maxmind/web-service-common/README.md
index e3c64d3..c253a89 100644
--- a/vendor/maxmind/web-service-common/README.md
+++ b/vendor/maxmind/web-service-common/README.md
@@ -5,7 +5,7 @@ shared code between MaxMind's various web service client APIs.
## Requirements ##
-The library requires PHP 5.6 or greater.
+The library requires PHP 7.2 or greater.
There are several other dependencies as defined in the `composer.json` file.
diff --git a/vendor/maxmind/web-service-common/composer.json b/vendor/maxmind/web-service-common/composer.json
index 6d1bbe4..14800df 100644
--- a/vendor/maxmind/web-service-common/composer.json
+++ b/vendor/maxmind/web-service-common/composer.json
@@ -12,15 +12,16 @@
}
],
"require": {
- "php": ">=5.6",
+ "php": ">=7.2",
"composer/ca-bundle": "^1.0.3",
"ext-curl": "*",
"ext-json": "*"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "2.*",
- "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0",
- "squizlabs/php_codesniffer": "3.*"
+ "friendsofphp/php-cs-fixer": "3.*",
+ "phpunit/phpunit": "^8.0 || ^9.0",
+ "squizlabs/php_codesniffer": "3.*",
+ "phpstan/phpstan": "*"
},
"autoload": {
"psr-4": {
diff --git a/vendor/maxmind/web-service-common/dev-bin/release.sh b/vendor/maxmind/web-service-common/dev-bin/release.sh
index a5de030..0eee51c 100644
--- a/vendor/maxmind/web-service-common/dev-bin/release.sh
+++ b/vendor/maxmind/web-service-common/dev-bin/release.sh
@@ -1,60 +1,56 @@
-#!/bin/bash
-
-set -eu -o pipefail
-
-
-changelog=$(cat CHANGELOG.md)
-
-regex='
-([0-9]+\.[0-9]+\.[0-9]+) \(([0-9]{4}-[0-9]{2}-[0-9]{2})\)
--*
-
-((.|
-)*)
-'
-
-if [[ ! $changelog =~ $regex ]]; then
- echo "Could not find date line in change log!"
- exit 1
-fi
-
-version="${BASH_REMATCH[1]}"
-date="${BASH_REMATCH[2]}"
-notes="$(echo "${BASH_REMATCH[3]}" | sed -n -E '/^[0-9]+\.[0-9]+\.[0-9]+/,$!p')"
-
-if [[ "$date" != $(date +"%Y-%m-%d") ]]; then
- echo "$date is not today!"
- exit 1
-fi
-
-tag="v$version"
-
-if [ -n "$(git status --porcelain)" ]; then
- echo ". is not clean." >&2
- exit 1
-fi
-
-php composer.phar self-update
-php composer.phar update
-
-./vendor/bin/phpunit
-
-echo "Release notes for $tag:"
-echo "$notes"
-
-read -e -p "Commit changes and push to origin? " should_push
-
-if [ "$should_push" != "y" ]; then
- echo "Aborting"
- exit 1
-fi
-
-git push
-
-message="$version
-
-$notes"
-
-hub release create -m "$message" "$tag"
-
-git push --tags
+#!/bin/bash
+
+set -eu -o pipefail
+
+
+changelog=$(cat CHANGELOG.md)
+
+regex='
+([0-9]+\.[0-9]+\.[0-9]+) \(([0-9]{4}-[0-9]{2}-[0-9]{2})\)
+-*
+
+((.|
+)*)
+'
+
+if [[ ! $changelog =~ $regex ]]; then
+ echo "Could not find date line in change log!"
+ exit 1
+fi
+
+version="${BASH_REMATCH[1]}"
+date="${BASH_REMATCH[2]}"
+notes="$(echo "${BASH_REMATCH[3]}" | sed -n -E '/^[0-9]+\.[0-9]+\.[0-9]+/,$!p')"
+
+if [[ "$date" != $(date +"%Y-%m-%d") ]]; then
+ echo "$date is not today!"
+ exit 1
+fi
+
+tag="v$version"
+
+if [ -n "$(git status --porcelain)" ]; then
+ echo ". is not clean." >&2
+ exit 1
+fi
+
+php composer.phar self-update
+php composer.phar update
+
+./vendor/bin/phpunit
+
+echo "Release notes for $tag:"
+echo "$notes"
+
+read -e -p "Commit changes and push to origin? " should_push
+
+if [ "$should_push" != "y" ]; then
+ echo "Aborting"
+ exit 1
+fi
+
+git push
+
+gh release create --target "$(git branch --show-current)" -t "$version" -n "$notes" "$tag"
+
+git push --tags
diff --git a/vendor/maxmind/web-service-common/phpstan.neon b/vendor/maxmind/web-service-common/phpstan.neon
new file mode 100644
index 0000000..2d35ad9
--- /dev/null
+++ b/vendor/maxmind/web-service-common/phpstan.neon
@@ -0,0 +1,7 @@
+parameters:
+ level: 6
+ paths:
+ - src
+ - tests
+ checkMissingIterableValueType: false
+
diff --git a/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php b/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php
index 54258ca..5843a6d 100644
--- a/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
/**
diff --git a/vendor/maxmind/web-service-common/src/Exception/HttpException.php b/vendor/maxmind/web-service-common/src/Exception/HttpException.php
index 990ee79..698f83e 100644
--- a/vendor/maxmind/web-service-common/src/Exception/HttpException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/HttpException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
/**
@@ -9,6 +11,8 @@ class HttpException extends WebServiceException
{
/**
* The URI queried.
+ *
+ * @var string
*/
private $uri;
@@ -19,21 +23,21 @@ class HttpException extends WebServiceException
* @param \Exception $previous the previous exception, if any
*/
public function __construct(
- $message,
- $httpStatus,
- $uri,
+ string $message,
+ int $httpStatus,
+ string $uri,
\Exception $previous = null
) {
$this->uri = $uri;
parent::__construct($message, $httpStatus, $previous);
}
- public function getUri()
+ public function getUri(): string
{
return $this->uri;
}
- public function getStatusCode()
+ public function getStatusCode(): int
{
return $this->getCode();
}
diff --git a/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php b/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php
index 4d6b3be..4639a3e 100644
--- a/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
/**
diff --git a/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php b/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php
index 091829a..6764bef 100644
--- a/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
/**
diff --git a/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php b/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php
index c9168ef..70a17cb 100644
--- a/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
/**
@@ -9,28 +11,30 @@ class InvalidRequestException extends HttpException
{
/**
* The code returned by the MaxMind web service.
+ *
+ * @var string
*/
private $error;
/**
* @param string $message the exception message
- * @param int $error the error code returned by the MaxMind web service
+ * @param string $error the error code returned by the MaxMind web service
* @param int $httpStatus the HTTP status code of the response
* @param string $uri the URI queries
* @param \Exception $previous the previous exception, if any
*/
public function __construct(
- $message,
- $error,
- $httpStatus,
- $uri,
+ string $message,
+ string $error,
+ int $httpStatus,
+ string $uri,
\Exception $previous = null
) {
$this->error = $error;
parent::__construct($message, $httpStatus, $uri, $previous);
}
- public function getErrorCode()
+ public function getErrorCode(): string
{
return $this->error;
}
diff --git a/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php b/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php
index 1a743a1..3bd2ce9 100644
--- a/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
class IpAddressNotFoundException extends InvalidRequestException
diff --git a/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php b/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php
index 48c7a66..cd20202 100644
--- a/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
/**
diff --git a/vendor/maxmind/web-service-common/src/Exception/WebServiceException.php b/vendor/maxmind/web-service-common/src/Exception/WebServiceException.php
index e227810..704e63c 100644
--- a/vendor/maxmind/web-service-common/src/Exception/WebServiceException.php
+++ b/vendor/maxmind/web-service-common/src/Exception/WebServiceException.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\Exception;
/**
diff --git a/vendor/maxmind/web-service-common/src/WebService/Client.php b/vendor/maxmind/web-service-common/src/WebService/Client.php
index 98e6e3b..1c02a6c 100644
--- a/vendor/maxmind/web-service-common/src/WebService/Client.php
+++ b/vendor/maxmind/web-service-common/src/WebService/Client.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\WebService;
use Composer\CaBundle\CaBundle;
@@ -22,16 +24,56 @@ use MaxMind\WebService\Http\RequestFactory;
*/
class Client
{
- const VERSION = '0.2.0';
+ public const VERSION = '0.2.0';
+ /**
+ * @var string|null
+ */
private $caBundle;
+
+ /**
+ * @var float|null
+ */
private $connectTimeout;
+
+ /**
+ * @var string
+ */
private $host = 'api.maxmind.com';
+
+ /**
+ * @var bool
+ */
+ private $useHttps = true;
+
+ /**
+ * @var RequestFactory
+ */
private $httpRequestFactory;
+
+ /**
+ * @var string
+ */
private $licenseKey;
+
+ /**
+ * @var string|null
+ */
private $proxy;
+
+ /**
+ * @var float|null
+ */
private $timeout;
+
+ /**
+ * @var string
+ */
private $userAgentPrefix;
+
+ /**
+ * @var int
+ */
private $accountId;
/**
@@ -39,6 +81,7 @@ class Client
* @param string $licenseKey your MaxMind license key
* @param array $options an array of options. Possible keys:
* * `host` - The host to use when connecting to the web service.
+ * * `useHttps` - A boolean flag for sending the request via https.(True by default)
* * `userAgent` - The prefix of the User-Agent to use in the request.
* * `caBundle` - The bundle of CA root certificates to use in the request.
* * `connectTimeout` - The connect timeout to use for the request.
@@ -47,9 +90,9 @@ class Client
* username, and password, e.g., `http://username:password@127.0.0.1:10`.
*/
public function __construct(
- $accountId,
- $licenseKey,
- $options = []
+ int $accountId,
+ string $licenseKey,
+ array $options = []
) {
$this->accountId = $accountId;
$this->licenseKey = $licenseKey;
@@ -61,6 +104,9 @@ class Client
if (isset($options['host'])) {
$this->host = $options['host'];
}
+ if (isset($options['useHttps'])) {
+ $this->useHttps = $options['useHttps'];
+ }
if (isset($options['userAgent'])) {
$this->userAgentPrefix = $options['userAgent'] . ' ';
}
@@ -96,9 +142,9 @@ class Client
* @throws WebServiceException when some other error occurs. This also
* serves as the base class for the above exceptions.
*
- * @return array The decoded content of a successful response
+ * @return array|null The decoded content of a successful response
*/
- public function post($service, $path, $input)
+ public function post(string $service, string $path, array $input): ?array
{
$requestBody = json_encode($input);
if ($requestBody === false) {
@@ -113,7 +159,7 @@ class Client
['Content-Type: application/json']
);
- list($statusCode, $contentType, $responseBody) = $request->post($requestBody);
+ [$statusCode, $contentType, $responseBody] = $request->post($requestBody);
return $this->handleResponse(
$statusCode,
@@ -124,11 +170,13 @@ class Client
);
}
- public function get($service, $path)
+ public function get(string $service, string $path): ?array
{
- $request = $this->createRequest($path);
+ $request = $this->createRequest(
+ $path
+ );
- list($statusCode, $contentType, $responseBody) = $request->get();
+ [$statusCode, $contentType, $responseBody] = $request->get();
return $this->handleResponse(
$statusCode,
@@ -139,15 +187,15 @@ class Client
);
}
- private function userAgent()
+ private function userAgent(): string
{
$curlVersion = curl_version();
- return $this->userAgentPrefix . 'MaxMind-WS-API/' . self::VERSION . ' PHP/' . PHP_VERSION .
+ return $this->userAgentPrefix . 'MaxMind-WS-API/' . self::VERSION . ' PHP/' . \PHP_VERSION .
' curl/' . $curlVersion['version'];
}
- private function createRequest($path, $headers = [])
+ private function createRequest(string $path, array $headers = []): Http\Request
{
array_push(
$headers,
@@ -170,11 +218,11 @@ class Client
}
/**
- * @param int $statusCode the HTTP status code of the response
- * @param string $contentType the Content-Type of the response
- * @param string $responseBody the response body
- * @param string $service the name of the service
- * @param string $path the path used in the request
+ * @param int $statusCode the HTTP status code of the response
+ * @param string|null $contentType the Content-Type of the response
+ * @param string|null $responseBody the response body
+ * @param string $service the name of the service
+ * @param string $path the path used in the request
*
* @throws AuthenticationException when there is an issue authenticating the
* request
@@ -185,15 +233,15 @@ class Client
* @throws WebServiceException when some other error occurs. This also
* serves as the base class for the above exceptions
*
- * @return array The decoded content of a successful response
+ * @return array|null The decoded content of a successful response
*/
private function handleResponse(
- $statusCode,
- $contentType,
- $responseBody,
- $service,
- $path
- ) {
+ int $statusCode,
+ ?string $contentType,
+ ?string $responseBody,
+ string $service,
+ string $path
+ ): ?array {
if ($statusCode >= 400 && $statusCode <= 499) {
$this->handle4xx($statusCode, $contentType, $responseBody, $service, $path);
} elseif ($statusCode >= 500) {
@@ -208,20 +256,26 @@ class Client
/**
* @return string describing the JSON error
*/
- private function jsonErrorDescription()
+ private function jsonErrorDescription(): string
{
$errno = json_last_error();
+
switch ($errno) {
- case JSON_ERROR_DEPTH:
+ case \JSON_ERROR_DEPTH:
return 'The maximum stack depth has been exceeded.';
- case JSON_ERROR_STATE_MISMATCH:
+
+ case \JSON_ERROR_STATE_MISMATCH:
return 'Invalid or malformed JSON.';
- case JSON_ERROR_CTRL_CHAR:
+
+ case \JSON_ERROR_CTRL_CHAR:
return 'Control character error.';
- case JSON_ERROR_SYNTAX:
+
+ case \JSON_ERROR_SYNTAX:
return 'Syntax error.';
- case JSON_ERROR_UTF8:
+
+ case \JSON_ERROR_UTF8:
return 'Malformed UTF-8 characters.';
+
default:
return "Other JSON error ($errno).";
}
@@ -232,17 +286,17 @@ class Client
*
* @return string the constructed URL
*/
- private function urlFor($path)
+ private function urlFor(string $path): string
{
- return 'https://' . $this->host . $path;
+ return ($this->useHttps ? 'https://' : 'http://') . $this->host . $path;
}
/**
- * @param int $statusCode the HTTP status code
- * @param string $contentType the response content-type
- * @param string $body the response body
- * @param string $service the service name
- * @param string $path the path used in the request
+ * @param int $statusCode the HTTP status code
+ * @param string|null $contentType the response content-type
+ * @param string|null $body the response body
+ * @param string $service the service name
+ * @param string $path the path used in the request
*
* @throws AuthenticationException
* @throws HttpException
@@ -250,20 +304,20 @@ class Client
* @throws InvalidRequestException
*/
private function handle4xx(
- $statusCode,
- $contentType,
- $body,
- $service,
- $path
- ) {
- if (\strlen($body) === 0) {
+ int $statusCode,
+ ?string $contentType,
+ ?string $body,
+ string $service,
+ string $path
+ ): void {
+ if ($body === null || $body === '') {
throw new HttpException(
"Received a $statusCode error for $service with no body",
$statusCode,
$this->urlFor($path)
);
}
- if (!strstr($contentType, 'json')) {
+ if ($contentType === null || !strstr($contentType, 'json')) {
throw new HttpException(
"Received a $statusCode error for $service with " .
'the following body: ' . $body,
@@ -311,11 +365,11 @@ class Client
* @throws InsufficientFundsException
*/
private function handleWebServiceError(
- $message,
- $code,
- $statusCode,
- $path
- ) {
+ string $message,
+ string $code,
+ int $statusCode,
+ string $path
+ ): void {
switch ($code) {
case 'IP_ADDRESS_NOT_FOUND':
case 'IP_ADDRESS_RESERVED':
@@ -325,6 +379,7 @@ class Client
$statusCode,
$this->urlFor($path)
);
+
case 'ACCOUNT_ID_REQUIRED':
case 'ACCOUNT_ID_UNKNOWN':
case 'AUTHORIZATION_INVALID':
@@ -337,6 +392,7 @@ class Client
$statusCode,
$this->urlFor($path)
);
+
case 'OUT_OF_QUERIES':
case 'INSUFFICIENT_FUNDS':
throw new InsufficientFundsException(
@@ -345,6 +401,7 @@ class Client
$statusCode,
$this->urlFor($path)
);
+
case 'PERMISSION_REQUIRED':
throw new PermissionRequiredException(
$message,
@@ -352,6 +409,7 @@ class Client
$statusCode,
$this->urlFor($path)
);
+
default:
throw new InvalidRequestException(
$message,
@@ -369,7 +427,7 @@ class Client
*
* @throws HttpException
*/
- private function handle5xx($statusCode, $service, $path)
+ private function handle5xx(int $statusCode, string $service, string $path): void
{
throw new HttpException(
"Received a server error ($statusCode) for $service",
@@ -385,7 +443,7 @@ class Client
*
* @throws HttpException
*/
- private function handleUnexpectedStatus($statusCode, $service, $path)
+ private function handleUnexpectedStatus(int $statusCode, string $service, string $path): void
{
throw new HttpException(
'Received an unexpected HTTP status ' .
@@ -396,22 +454,22 @@ class Client
}
/**
- * @param int $statusCode the HTTP status code
- * @param string $body the successful request body
- * @param string $service the service name
+ * @param int $statusCode the HTTP status code
+ * @param string|null $body the successful request body
+ * @param string $service the service name
*
* @throws WebServiceException if a response body is included but not
* expected, or is not expected but not
* included, or is expected and included
* but cannot be decoded as JSON
*
- * @return array the decoded request body
+ * @return array|null the decoded request body
*/
- private function handleSuccess($statusCode, $body, $service)
+ private function handleSuccess(int $statusCode, ?string $body, string $service): ?array
{
// A 204 should have no response body
if ($statusCode === 204) {
- if (\strlen($body) !== 0) {
+ if ($body !== null && $body !== '') {
throw new WebServiceException(
"Received a 204 response for $service along with an " .
"unexpected HTTP body: $body"
@@ -422,7 +480,7 @@ class Client
}
// A 200 should have a valid JSON body
- if (\strlen($body) === 0) {
+ if ($body === null || $body === '') {
throw new WebServiceException(
"Received a 200 response for $service but did not " .
'receive a HTTP body.'
@@ -441,7 +499,7 @@ class Client
return $decodedContent;
}
- private function getCaBundle()
+ private function getCaBundle(): ?string
{
$curlVersion = curl_version();
diff --git a/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php b/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php
index 501b2af..4b9a70b 100644
--- a/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php
+++ b/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\WebService\Http;
use MaxMind\Exception\HttpException;
@@ -12,7 +14,7 @@ use MaxMind\Exception\HttpException;
class CurlRequest implements Request
{
/**
- * @var resource
+ * @var \CurlHandle
*/
private $ch;
@@ -26,11 +28,7 @@ class CurlRequest implements Request
*/
private $options;
- /**
- * @param string $url
- * @param array $options
- */
- public function __construct($url, $options)
+ public function __construct(string $url, array $options)
{
$this->url = $url;
$this->options = $options;
@@ -38,69 +36,65 @@ class CurlRequest implements Request
}
/**
- * @param string $body
- *
* @throws HttpException
- *
- * @return array
*/
- public function post($body)
+ public function post(string $body): array
{
$curl = $this->createCurl();
- curl_setopt($curl, CURLOPT_POST, true);
- curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
+ curl_setopt($curl, \CURLOPT_POST, true);
+ curl_setopt($curl, \CURLOPT_POSTFIELDS, $body);
return $this->execute($curl);
}
- public function get()
+ public function get(): array
{
$curl = $this->createCurl();
- curl_setopt($curl, CURLOPT_HTTPGET, true);
+ curl_setopt($curl, \CURLOPT_HTTPGET, true);
return $this->execute($curl);
}
/**
- * @return resource
+ * @return \CurlHandle
*/
private function createCurl()
{
curl_reset($this->ch);
$opts = [];
- $opts[CURLOPT_URL] = $this->url;
+ $opts[\CURLOPT_URL] = $this->url;
if (!empty($this->options['caBundle'])) {
- $opts[CURLOPT_CAINFO] = $this->options['caBundle'];
+ $opts[\CURLOPT_CAINFO] = $this->options['caBundle'];
}
- $opts[CURLOPT_ENCODING] = '';
- $opts[CURLOPT_SSL_VERIFYHOST] = 2;
- $opts[CURLOPT_FOLLOWLOCATION] = false;
- $opts[CURLOPT_SSL_VERIFYPEER] = true;
- $opts[CURLOPT_RETURNTRANSFER] = true;
+ $opts[\CURLOPT_ENCODING] = '';
+ $opts[\CURLOPT_SSL_VERIFYHOST] = 2;
+ $opts[\CURLOPT_FOLLOWLOCATION] = false;
+ $opts[\CURLOPT_SSL_VERIFYPEER] = true;
+ $opts[\CURLOPT_RETURNTRANSFER] = true;
- $opts[CURLOPT_HTTPHEADER] = $this->options['headers'];
- $opts[CURLOPT_USERAGENT] = $this->options['userAgent'];
- $opts[CURLOPT_PROXY] = $this->options['proxy'];
+ $opts[\CURLOPT_HTTPHEADER] = $this->options['headers'];
+ $opts[\CURLOPT_USERAGENT] = $this->options['userAgent'];
+ $opts[\CURLOPT_PROXY] = $this->options['proxy'];
// The defined()s are here as the *_MS opts are not available on older
// cURL versions
$connectTimeout = $this->options['connectTimeout'];
if (\defined('CURLOPT_CONNECTTIMEOUT_MS')) {
- $opts[CURLOPT_CONNECTTIMEOUT_MS] = ceil($connectTimeout * 1000);
+ $opts[\CURLOPT_CONNECTTIMEOUT_MS] = ceil($connectTimeout * 1000);
} else {
- $opts[CURLOPT_CONNECTTIMEOUT] = ceil($connectTimeout);
+ $opts[\CURLOPT_CONNECTTIMEOUT] = ceil($connectTimeout);
}
$timeout = $this->options['timeout'];
if (\defined('CURLOPT_TIMEOUT_MS')) {
- $opts[CURLOPT_TIMEOUT_MS] = ceil($timeout * 1000);
+ $opts[\CURLOPT_TIMEOUT_MS] = ceil($timeout * 1000);
} else {
- $opts[CURLOPT_TIMEOUT] = ceil($timeout);
+ $opts[\CURLOPT_TIMEOUT] = ceil($timeout);
}
curl_setopt_array($this->ch, $opts);
@@ -109,13 +103,11 @@ class CurlRequest implements Request
}
/**
- * @param resource $curl
+ * @param \CurlHandle $curl
*
* @throws HttpException
- *
- * @return array
*/
- private function execute($curl)
+ private function execute($curl): array
{
$body = curl_exec($curl);
if ($errno = curl_errno($curl)) {
@@ -128,9 +120,17 @@ class CurlRequest implements Request
);
}
- $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
- $contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
-
- return [$statusCode, $contentType, $body];
+ $statusCode = curl_getinfo($curl, \CURLINFO_HTTP_CODE);
+ $contentType = curl_getinfo($curl, \CURLINFO_CONTENT_TYPE);
+
+ return [
+ $statusCode,
+ // The PHP docs say "Content-Type: of the requested document. NULL
+ // indicates server did not send valid Content-Type: header" for
+ // CURLINFO_CONTENT_TYPE. However, it will return FALSE if no header
+ // is set. To keep our types simple, we return null in this case.
+ ($contentType === false ? null : $contentType),
+ $body,
+ ];
}
}
diff --git a/vendor/maxmind/web-service-common/src/WebService/Http/Request.php b/vendor/maxmind/web-service-common/src/WebService/Http/Request.php
index 283e05c..6f5a5ab 100644
--- a/vendor/maxmind/web-service-common/src/WebService/Http/Request.php
+++ b/vendor/maxmind/web-service-common/src/WebService/Http/Request.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\WebService\Http;
/**
@@ -9,21 +11,9 @@ namespace MaxMind\WebService\Http;
*/
interface Request
{
- /**
- * @param string $url
- * @param array $options
- */
- public function __construct($url, $options);
+ public function __construct(string $url, array $options);
- /**
- * @param string $body
- *
- * @return mixed
- */
- public function post($body);
+ public function post(string $body): array;
- /**
- * @return mixed
- */
- public function get();
+ public function get(): array;
}
diff --git a/vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php b/vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php
index 54e6d54..4bc460a 100644
--- a/vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php
+++ b/vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
namespace MaxMind\WebService\Http;
/**
@@ -14,7 +16,7 @@ class RequestFactory
* done the connection is kept alive, SSL resumption can be used
* etcetera.
*
- * @var resource
+ * @var \CurlHandle|null
*/
private $ch;
@@ -25,6 +27,9 @@ class RequestFactory
}
}
+ /**
+ * @return \CurlHandle
+ */
private function getCurlHandle()
{
if (empty($this->ch)) {
@@ -34,13 +39,7 @@ class RequestFactory
return $this->ch;
}
- /**
- * @param string $url
- * @param array $options
- *
- * @return Request
- */
- public function request($url, $options)
+ public function request(string $url, array $options): Request
{
$options['curlHandle'] = $this->getCurlHandle();