mirror of
https://github.com/kristuff/abuseipdb
synced 2025-08-19 21:13:13 -07:00
v0.9.4
**Added** - support for check-block request **changed** - internal refactoring
This commit is contained in:
parent
9034c45536
commit
6140da20ec
4 changed files with 125 additions and 58 deletions
|
@ -10,11 +10,12 @@
|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
- **✓** Single check request
|
- **✓** Single IP check request
|
||||||
|
- **✓** Check IP block request
|
||||||
- **✓** Single report request
|
- **✓** Single report request
|
||||||
- **✓** Auto cleaning report comment from sensitive data
|
- **✓** Auto cleaning report comment from sensitive data
|
||||||
- **✓** Blacklist request
|
- **✓** Blacklist request
|
||||||
- *\[TODO\]* Check block request
|
- *\[TODO\]* clear address block request
|
||||||
- *\[TODO\]* Bulk report request
|
- *\[TODO\]* Bulk report request
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
|
@ -31,7 +32,7 @@ Deploy with composer:
|
||||||
```json
|
```json
|
||||||
...
|
...
|
||||||
"require": {
|
"require": {
|
||||||
"kristuff/abuseipdb": ">=0.9.3-stable"
|
"kristuff/abuseipdb": ">=0.9.4-stable"
|
||||||
},
|
},
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @version 0.9.3
|
* @version 0.9.4
|
||||||
* @copyright 2020-2021 Kristuff
|
* @copyright 2020-2021 Kristuff
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @version 0.9.3
|
* @version 0.9.4
|
||||||
* @copyright 2020-2021 Kristuff
|
* @copyright 2020-2021 Kristuff
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ class ApiHandler extends ApiDefintion
|
||||||
}
|
}
|
||||||
|
|
||||||
// validates categories, clean message
|
// validates categories, clean message
|
||||||
$cats = $this->validateCategories($categories);
|
$cats = $this->validateReportCategories($categories);
|
||||||
$msg = $this->cleanMessage($message);
|
$msg = $this->cleanMessage($message);
|
||||||
|
|
||||||
// report AbuseIPDB request
|
// report AbuseIPDB request
|
||||||
|
@ -189,65 +189,71 @@ class ApiHandler extends ApiDefintion
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the category(ies) given is/are valid
|
* Perform a 'check-block' api request
|
||||||
* Check for shortname or id, and categories that can't be used alone
|
|
||||||
*
|
*
|
||||||
* @access protected
|
*
|
||||||
* @param array $categories The report categories list
|
* Sample json response for 127.0.0.1/24
|
||||||
*
|
*
|
||||||
* @return string Formatted string id list ('18,2,3...')
|
* {
|
||||||
* @throws \InvalidArgumentException
|
* "data": {
|
||||||
|
* "networkAddress": "127.0.0.0",
|
||||||
|
* "netmask": "255.255.255.0",
|
||||||
|
* "minAddress": "127.0.0.1",
|
||||||
|
* "maxAddress": "127.0.0.254",
|
||||||
|
* "numPossibleHosts": 254,
|
||||||
|
* "addressSpaceDesc": "Loopback",
|
||||||
|
* "reportedAddress": [
|
||||||
|
* {
|
||||||
|
* "ipAddress": "127.0.0.1",
|
||||||
|
* "numReports": 631,
|
||||||
|
* "mostRecentReport": "2019-03-21T16:35:16+00:00",
|
||||||
|
* "abuseConfidenceScore": 0,
|
||||||
|
* "countryCode": null
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* "ipAddress": "127.0.0.2",
|
||||||
|
* "numReports": 16,
|
||||||
|
* "mostRecentReport": "2019-03-12T20:31:17+00:00",
|
||||||
|
* "abuseConfidenceScore": 0,
|
||||||
|
* "countryCode": null
|
||||||
|
* },
|
||||||
|
* ...
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param string $network The network to check
|
||||||
|
* @param int $maxAge Max age in days
|
||||||
|
* @param bool $returnArray True to return an indexed array instead of an object. Default is false.
|
||||||
|
*
|
||||||
|
* @return object|array
|
||||||
|
* @throws \InvalidArgumentException when maxAge is less than 1 or greater than 365, or when network value was not set.
|
||||||
*/
|
*/
|
||||||
protected function validateCategories(string $categories)
|
public function checkBlock(string $network = null, int $maxAge = 30, bool $returnArray = false)
|
||||||
{
|
{
|
||||||
// the return categories string
|
// max age must be less or equal to 365
|
||||||
$catsString = '';
|
if ($maxAge > 365 || $maxAge < 1){
|
||||||
|
throw new \InvalidArgumentException('maxAge must be at least 1 and less than 365 (' . $maxAge . ' was given)');
|
||||||
// used when cat that can't be used alone
|
|
||||||
$needAnother = null;
|
|
||||||
|
|
||||||
// parse given categories
|
|
||||||
$cats = explode(',', $categories);
|
|
||||||
|
|
||||||
foreach ($cats as $cat) {
|
|
||||||
|
|
||||||
// get index on our array of categories
|
|
||||||
$catIndex = is_numeric($cat) ? $this->getCategoryIndex($cat, 1) : $this->getCategoryIndex($cat, 0);
|
|
||||||
|
|
||||||
// check if found
|
|
||||||
if ($catIndex === false ){
|
|
||||||
throw new \InvalidArgumentException('Invalid report category was given : ['. $cat . ']');
|
|
||||||
}
|
|
||||||
|
|
||||||
// get Id
|
|
||||||
$catId = $this->aipdbApiCategories[$catIndex][1];
|
|
||||||
|
|
||||||
// need another ?
|
|
||||||
if ($needAnother !== false){
|
|
||||||
|
|
||||||
// is a standalone cat ?
|
|
||||||
if ($this->aipdbApiCategories[$catIndex][3] === false) {
|
|
||||||
$needAnother = true;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// ok, continue with other at least one given
|
|
||||||
// no need to reperform this check
|
|
||||||
$needAnother = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// set or add to cats list
|
|
||||||
$catsString = ($catsString === '') ? $catId : $catsString .','.$catId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($needAnother !== false){
|
// ip must be set
|
||||||
throw new \InvalidArgumentException('Invalid report category paremeter given: some categories can\'t be used alone');
|
if (empty($network)){
|
||||||
|
throw new \InvalidArgumentException('network argument must be set (null given)');
|
||||||
}
|
}
|
||||||
|
|
||||||
// if here that ok
|
// minimal data
|
||||||
return $catsString;
|
$data = [
|
||||||
|
'network' => $network,
|
||||||
|
'maxAgeInDays' => $maxAge,
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->apiRequest('check-block', $data, 'GET', $returnArray) ;
|
||||||
|
|
||||||
|
return json_decode($response, $returnArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a 'check' api request
|
* Perform a 'check' api request
|
||||||
*
|
*
|
||||||
|
@ -329,6 +335,66 @@ class ApiHandler extends ApiDefintion
|
||||||
return json_decode($response, $returnArray);
|
return json_decode($response, $returnArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the category(ies) given is/are valid
|
||||||
|
* Check for shortname or id, and categories that can't be used alone
|
||||||
|
*
|
||||||
|
* @access protected
|
||||||
|
* @param array $categories The report categories list
|
||||||
|
*
|
||||||
|
* @return string Formatted string id list ('18,2,3...')
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
protected function validateReportCategories(string $categories)
|
||||||
|
{
|
||||||
|
// the return categories string
|
||||||
|
$catsString = '';
|
||||||
|
|
||||||
|
// used when cat that can't be used alone
|
||||||
|
$needAnother = null;
|
||||||
|
|
||||||
|
// parse given categories
|
||||||
|
$cats = explode(',', $categories);
|
||||||
|
|
||||||
|
foreach ($cats as $cat) {
|
||||||
|
|
||||||
|
// get index on our array of categories
|
||||||
|
$catIndex = is_numeric($cat) ? $this->getCategoryIndex($cat, 1) : $this->getCategoryIndex($cat, 0);
|
||||||
|
|
||||||
|
// check if found
|
||||||
|
if ($catIndex === false ){
|
||||||
|
throw new \InvalidArgumentException('Invalid report category was given : ['. $cat . ']');
|
||||||
|
}
|
||||||
|
|
||||||
|
// get Id
|
||||||
|
$catId = $this->aipdbApiCategories[$catIndex][1];
|
||||||
|
|
||||||
|
// need another ?
|
||||||
|
if ($needAnother !== false){
|
||||||
|
|
||||||
|
// is a standalone cat ?
|
||||||
|
if ($this->aipdbApiCategories[$catIndex][3] === false) {
|
||||||
|
$needAnother = true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// ok, continue with other at least one given
|
||||||
|
// no need to reperform this check
|
||||||
|
$needAnother = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// set or add to cats list
|
||||||
|
$catsString = ($catsString === '') ? $catId : $catsString .','.$catId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($needAnother !== false){
|
||||||
|
throw new \InvalidArgumentException('Invalid report category paremeter given: some categories can\'t be used alone');
|
||||||
|
}
|
||||||
|
|
||||||
|
// if here that ok
|
||||||
|
return $catsString;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a cURL request
|
* Perform a cURL request
|
||||||
*
|
*
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*
|
*
|
||||||
* @version 0.9.3
|
* @version 0.9.4
|
||||||
* @copyright 2020-2021 Kristuff
|
* @copyright 2020-2021 Kristuff
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue