From d1d9cf9ad0fcac083e4c24aa009850e43e83cf24 Mon Sep 17 00:00:00 2001 From: kristuff Date: Mon, 6 Dec 2021 21:40:39 +0100 Subject: [PATCH 1/5] v0.9.14 **Changes** - **New**: the `ApiHandler` (and `QuietApiHandler`) constructor takes now a **timeout** in third parameter. The timeout is expressed in **milliseconds** . The timeout will apply to all API request methods (will raise exception if reached out). Default is **0** (no timeout). - Formatting --- README.md | 2 +- lib/ApiBase.php | 13 +++--- lib/ApiHandler.php | 65 ++++++++++++++++++++++-------- lib/ApiResponse.php | 13 +++--- lib/CurlTrait.php | 13 +++--- lib/InvalidPermissionException.php | 13 +++--- lib/QuietApiHandler.php | 13 +++--- 7 files changed, 80 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index a924182..451e100 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Deploy with composer: ```json ... "require": { - "kristuff/abuseipdb": "^0.9.13-stable" + "kristuff/abuseipdb": "^0.9.14-stable" }, ``` diff --git a/lib/ApiBase.php b/lib/ApiBase.php index 30f5002..238237a 100644 --- a/lib/ApiBase.php +++ b/lib/ApiBase.php @@ -1,12 +1,11 @@ @@ -14,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.13 + * @version 0.9.14 * @copyright 2020-2021 Kristuff */ diff --git a/lib/ApiHandler.php b/lib/ApiHandler.php index 69255ef..b878010 100644 --- a/lib/ApiHandler.php +++ b/lib/ApiHandler.php @@ -1,12 +1,11 @@ @@ -14,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.13 + * @version 0.9.14 * @copyright 2020-2021 Kristuff */ @@ -35,7 +34,7 @@ class ApiHandler extends ApiBase /** * @var string */ - const VERSION = 'v0.9.13'; + const VERSION = 'v0.9.14'; /** * The ips to remove from report messages @@ -46,18 +45,31 @@ class ApiHandler extends ApiBase */ protected $selfIps = []; + /** + * The maximum number of milliseconds to allow cURL functions to execute. If libcurl is + * built to use the standard system name resolver, that portion of the connect will still + * use full-second resolution for timeouts with a minimum timeout allowed of one second. + * + * @access protected + * @var int + */ + protected $timeout = 0; + /** * Constructor * * @access public * @param string $apiKey The AbuseIPDB api key * @param array $myIps The Ips/domain name you don't want to display in report messages + * @param int $timeout The maximum number of milliseconds to allow internal cURL functions + * to execute. Default is 0, no timeout * */ - public function __construct(string $apiKey, array $myIps = []) + public function __construct(string $apiKey, array $myIps = [], int $timeout = 0) { $this->aipdbApiKey = $apiKey; $this->selfIps = $myIps; + $this->timeout = $timeout; } /** @@ -72,6 +84,7 @@ class ApiHandler extends ApiBase return array( 'apiKey' => $this->aipdbApiKey, 'selfIps' => $this->selfIps, + 'timeout' => $this->timeout, ); } @@ -160,6 +173,7 @@ class ApiHandler extends ApiBase * @return ApiResponse * @throws \RuntimeException * @throws \InvalidArgumentException + * @throws InvalidPermissionException */ public function bulkReport(string $filePath): ApiResponse { @@ -356,9 +370,10 @@ class ApiHandler extends ApiBase */ protected function apiRequest(string $path, array $data, string $method = 'GET', string $csvFilePath = ''): ApiResponse { - // set api url - $url = $this->aipdbApiEndpoint . $path; - + $curlErrorNumber = -1; // will be used later to check curl execution + $curlErrorMessage = ''; + $url = $this->aipdbApiEndpoint . $path; // api url + // set the wanted format, JSON (required to prevent having full html page on error) // and the AbuseIPDB API Key as a header $headers = [ @@ -386,17 +401,35 @@ class ApiHandler extends ApiBase $url .= '?' . http_build_query($data); } - // set the url to call + // set url and options $this->setCurlOption($ch, CURLOPT_URL, $url); $this->setCurlOption($ch, CURLOPT_RETURNTRANSFER, 1); $this->setCurlOption($ch, CURLOPT_HTTPHEADER, $headers); - + + /** + * set timeout + * + * @see https://curl.se/libcurl/c/CURLOPT_TIMEOUT_MS.html + * @see https://curl.se/libcurl/c/CURLOPT_CONNECTTIMEOUT_MS.html + * If libcurl is built to use the standard system name resolver, that portion of the transfer + * will still use full-second resolution for timeouts with a minimum timeout allowed of one second. + * In unix-like systems, this might cause signals to be used unless CURLOPT_NOSIGNAL is set. + */ + $this->setCurlOption($ch, CURLOPT_NOSIGNAL, 1); + $this->setCurlOption($ch, CURLOPT_TIMEOUT_MS, $this->timeout); + // execute curl call $result = curl_exec($ch); - + $curlErrorNumber = curl_errno($ch); + $curlErrorMessage = curl_error($ch); + // close connection curl_close($ch); - + + if ($curlErrorNumber !== 0){ + throw new \RuntimeException($curlErrorMessage); + } + return new ApiResponse($result !== false ? $result : ''); } diff --git a/lib/ApiResponse.php b/lib/ApiResponse.php index c5e7210..d4abd1b 100644 --- a/lib/ApiResponse.php +++ b/lib/ApiResponse.php @@ -1,12 +1,11 @@ @@ -14,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.13 + * @version 0.9.14 * @copyright 2020-2021 Kristuff */ diff --git a/lib/CurlTrait.php b/lib/CurlTrait.php index 3effad8..cbacf0f 100644 --- a/lib/CurlTrait.php +++ b/lib/CurlTrait.php @@ -1,12 +1,11 @@ @@ -14,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.13 + * @version 0.9.14 * @copyright 2020-2021 Kristuff */ diff --git a/lib/InvalidPermissionException.php b/lib/InvalidPermissionException.php index 57e4a14..14e34aa 100644 --- a/lib/InvalidPermissionException.php +++ b/lib/InvalidPermissionException.php @@ -1,12 +1,11 @@ @@ -14,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.13 + * @version 0.9.14 * @copyright 2020-2021 Kristuff */ diff --git a/lib/QuietApiHandler.php b/lib/QuietApiHandler.php index d06d835..2c69d81 100644 --- a/lib/QuietApiHandler.php +++ b/lib/QuietApiHandler.php @@ -1,12 +1,11 @@ @@ -14,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.13 + * @version 0.9.14 * @copyright 2020-2021 Kristuff */ From dc30007818db41e37c587225e74ae87bf3e1bf1b Mon Sep 17 00:00:00 2001 From: kristuff Date: Wed, 8 Dec 2021 20:42:33 +0100 Subject: [PATCH 2/5] v0.9.15 **Changes** - **New** `ApiHandler::setTimeout(int $timeout)` method allows to change default timeout before any API request. Timeout is expressed in milliseconds. Overwrites the value passed in constructor, useful when performing multiple queries with same handler but different timeout. --- README.md | 5 +++-- lib/ApiBase.php | 2 +- lib/ApiHandler.php | 19 +++++++++++++++++-- lib/ApiResponse.php | 2 +- lib/CurlTrait.php | 2 +- lib/InvalidPermissionException.php | 2 +- lib/QuietApiHandler.php | 2 +- 7 files changed, 25 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 451e100..411be3d 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ Features - Single IP report request **✓** - Bulk report request (send `csv` file) **✓** - Clear IP address request (remove your own reports) **✓** -- Auto cleaning report comments from sensitive data (email, custom ip/domain names list) **✓** +- Auto cleaning report comments from sensitive data (email, custom ip/domain names list) **✓** +- Define timeout for cURL internal requests **✓** Requirements ------------ @@ -32,7 +33,7 @@ Deploy with composer: ```json ... "require": { - "kristuff/abuseipdb": "^0.9.14-stable" + "kristuff/abuseipdb": "^0.9.15-stable" }, ``` diff --git a/lib/ApiBase.php b/lib/ApiBase.php index 238237a..78c83eb 100644 --- a/lib/ApiBase.php +++ b/lib/ApiBase.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.14 + * @version 0.9.15 * @copyright 2020-2021 Kristuff */ diff --git a/lib/ApiHandler.php b/lib/ApiHandler.php index b878010..a6326c2 100644 --- a/lib/ApiHandler.php +++ b/lib/ApiHandler.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.14 + * @version 0.9.15 * @copyright 2020-2021 Kristuff */ @@ -34,7 +34,7 @@ class ApiHandler extends ApiBase /** * @var string */ - const VERSION = 'v0.9.14'; + const VERSION = 'v0.9.15'; /** * The ips to remove from report messages @@ -72,6 +72,21 @@ class ApiHandler extends ApiBase $this->timeout = $timeout; } + /** + * Sets the cURL timeout (apply then to any API request). Overwrites the value passed in + * constructor, useful when performing multiple queries with same handler but different timeout. + * + * @access public + * @param int $timeout The maximum number of milliseconds to allow internal cURL functions + * to execute. + * + * @return void + */ + public function setTimeout(int $timeout): void + { + $this->timeout = $timeout; + } + /** * Get the current configuration in a indexed array * diff --git a/lib/ApiResponse.php b/lib/ApiResponse.php index d4abd1b..8b184f0 100644 --- a/lib/ApiResponse.php +++ b/lib/ApiResponse.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.14 + * @version 0.9.15 * @copyright 2020-2021 Kristuff */ diff --git a/lib/CurlTrait.php b/lib/CurlTrait.php index cbacf0f..abce7bd 100644 --- a/lib/CurlTrait.php +++ b/lib/CurlTrait.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.14 + * @version 0.9.15 * @copyright 2020-2021 Kristuff */ diff --git a/lib/InvalidPermissionException.php b/lib/InvalidPermissionException.php index 14e34aa..f0b6acb 100644 --- a/lib/InvalidPermissionException.php +++ b/lib/InvalidPermissionException.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.14 + * @version 0.9.15 * @copyright 2020-2021 Kristuff */ diff --git a/lib/QuietApiHandler.php b/lib/QuietApiHandler.php index 2c69d81..650df31 100644 --- a/lib/QuietApiHandler.php +++ b/lib/QuietApiHandler.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.14 + * @version 0.9.15 * @copyright 2020-2021 Kristuff */ From 5639f1813a7be889c9028f722e9fe252bac34df1 Mon Sep 17 00:00:00 2001 From: kristuff Date: Wed, 26 Jan 2022 22:24:24 +0100 Subject: [PATCH 3/5] v1.0 --- LICENSE | 2 +- README.md | 4 ++-- lib/ApiBase.php | 4 ++-- lib/ApiHandler.php | 6 +++--- lib/ApiResponse.php | 4 ++-- lib/CurlTrait.php | 4 ++-- lib/InvalidPermissionException.php | 4 ++-- lib/QuietApiHandler.php | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/LICENSE b/LICENSE index 007d465..933b544 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020-2021 kristuff +Copyright (c) 2020-2022 kristuff Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 411be3d..0a12038 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Deploy with composer: ```json ... "require": { - "kristuff/abuseipdb": "^0.9.15-stable" + "kristuff/abuseipdb": "^1.0-stable" }, ``` @@ -50,7 +50,7 @@ License The MIT License (MIT) -Copyright (c) 2020-2021 Kristuff +Copyright (c) 2020-2022 Kristuff Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/lib/ApiBase.php b/lib/ApiBase.php index 78c83eb..e48440b 100644 --- a/lib/ApiBase.php +++ b/lib/ApiBase.php @@ -13,8 +13,8 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.15 - * @copyright 2020-2021 Kristuff + * @version 1.0 + * @copyright 2020-2022 Kristuff */ namespace Kristuff\AbuseIPDB; diff --git a/lib/ApiHandler.php b/lib/ApiHandler.php index a6326c2..9549260 100644 --- a/lib/ApiHandler.php +++ b/lib/ApiHandler.php @@ -13,8 +13,8 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.15 - * @copyright 2020-2021 Kristuff + * @version 1.0 + * @copyright 2020-2022 Kristuff */ namespace Kristuff\AbuseIPDB; @@ -34,7 +34,7 @@ class ApiHandler extends ApiBase /** * @var string */ - const VERSION = 'v0.9.15'; + const VERSION = 'v1.0'; /** * The ips to remove from report messages diff --git a/lib/ApiResponse.php b/lib/ApiResponse.php index 8b184f0..92f866a 100644 --- a/lib/ApiResponse.php +++ b/lib/ApiResponse.php @@ -13,8 +13,8 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.15 - * @copyright 2020-2021 Kristuff + * @version 1.0 + * @copyright 2020-2022 Kristuff */ namespace Kristuff\AbuseIPDB; diff --git a/lib/CurlTrait.php b/lib/CurlTrait.php index abce7bd..ee71cf0 100644 --- a/lib/CurlTrait.php +++ b/lib/CurlTrait.php @@ -13,8 +13,8 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.15 - * @copyright 2020-2021 Kristuff + * @version 1.0 + * @copyright 2020-2022 Kristuff */ namespace Kristuff\AbuseIPDB; diff --git a/lib/InvalidPermissionException.php b/lib/InvalidPermissionException.php index f0b6acb..dcc6157 100644 --- a/lib/InvalidPermissionException.php +++ b/lib/InvalidPermissionException.php @@ -13,8 +13,8 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.15 - * @copyright 2020-2021 Kristuff + * @version 1.0 + * @copyright 2020-2022 Kristuff */ namespace Kristuff\AbuseIPDB; diff --git a/lib/QuietApiHandler.php b/lib/QuietApiHandler.php index 650df31..a272d58 100644 --- a/lib/QuietApiHandler.php +++ b/lib/QuietApiHandler.php @@ -13,8 +13,8 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 0.9.15 - * @copyright 2020-2021 Kristuff + * @version 1.0 + * @copyright 2020-2022 Kristuff */ namespace Kristuff\AbuseIPDB; From af62240932bc54461702f96146a1e5feb77493f0 Mon Sep 17 00:00:00 2001 From: kristuff Date: Thu, 6 Oct 2022 00:14:00 +0200 Subject: [PATCH 4/5] Update email pattern in `cleanMessage()` method Update email pattern to handle local addresses without TLD and to allow using the caracter `@` in custom message. Close #4 --- lib/ApiHandler.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ApiHandler.php b/lib/ApiHandler.php index 9549260..a096706 100644 --- a/lib/ApiHandler.php +++ b/lib/ApiHandler.php @@ -469,8 +469,8 @@ class ApiHandler extends ApiBase } // If we're reporting spam, further munge any email addresses in the report - $emailPattern = "/[^@\s]*@[^@\s]*\.[^@\s]*/"; - $message = preg_replace($emailPattern, "*", $message); + $emailPattern = "/\b[A-Z0-9!#$%&'*`\/?^{|}~=+_.-]+@[A-Z0-9.-]+\b/i"; + $message = preg_replace($emailPattern, "*", $message); // Make sure message is less 1024 chars return substr($message, 0, 1024); From d7b635875a27efe72967ae031dcc8f79b8aa42d5 Mon Sep 17 00:00:00 2001 From: kristuff Date: Thu, 6 Oct 2022 00:16:16 +0200 Subject: [PATCH 5/5] v1.1 - Fixed: Update email pattern in `cleanMessage()` method to handle local addresses without TLD and to allow using the caracter `@` in custom message. Close #4 --- README.md | 2 +- lib/ApiBase.php | 2 +- lib/ApiHandler.php | 4 ++-- lib/ApiResponse.php | 2 +- lib/CurlTrait.php | 2 +- lib/InvalidPermissionException.php | 2 +- lib/QuietApiHandler.php | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0a12038..d7946f1 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Deploy with composer: ```json ... "require": { - "kristuff/abuseipdb": "^1.0-stable" + "kristuff/abuseipdb": "^1.1-stable" }, ``` diff --git a/lib/ApiBase.php b/lib/ApiBase.php index e48440b..9adf14c 100644 --- a/lib/ApiBase.php +++ b/lib/ApiBase.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 1.0 + * @version 1.1 * @copyright 2020-2022 Kristuff */ diff --git a/lib/ApiHandler.php b/lib/ApiHandler.php index a096706..2cee02c 100644 --- a/lib/ApiHandler.php +++ b/lib/ApiHandler.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 1.0 + * @version 1.1 * @copyright 2020-2022 Kristuff */ @@ -34,7 +34,7 @@ class ApiHandler extends ApiBase /** * @var string */ - const VERSION = 'v1.0'; + const VERSION = 'v1.1'; /** * The ips to remove from report messages diff --git a/lib/ApiResponse.php b/lib/ApiResponse.php index 92f866a..3e451f0 100644 --- a/lib/ApiResponse.php +++ b/lib/ApiResponse.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 1.0 + * @version 1.1 * @copyright 2020-2022 Kristuff */ diff --git a/lib/CurlTrait.php b/lib/CurlTrait.php index ee71cf0..667fdda 100644 --- a/lib/CurlTrait.php +++ b/lib/CurlTrait.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 1.0 + * @version 1.1 * @copyright 2020-2022 Kristuff */ diff --git a/lib/InvalidPermissionException.php b/lib/InvalidPermissionException.php index dcc6157..8ec9bc1 100644 --- a/lib/InvalidPermissionException.php +++ b/lib/InvalidPermissionException.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 1.0 + * @version 1.1 * @copyright 2020-2022 Kristuff */ diff --git a/lib/QuietApiHandler.php b/lib/QuietApiHandler.php index a272d58..632b140 100644 --- a/lib/QuietApiHandler.php +++ b/lib/QuietApiHandler.php @@ -13,7 +13,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * - * @version 1.0 + * @version 1.1 * @copyright 2020-2022 Kristuff */