Merge pull request #30 from cloudflare/waf_railgun

Add Web Application Firewall and Railgun
This commit is contained in:
Junade
2017-10-23 14:21:45 -07:00
committed by GitHub
20 changed files with 1036 additions and 2 deletions

View File

@@ -17,12 +17,12 @@ Each API call is provided via a similarly named function within various classes
- [x] User Administration (partial)
- [x] [Cloudflare IPs](https://www.cloudflare.com/ips/)
- [x] [Page Rules](https://support.cloudflare.com/hc/en-us/articles/200168306-Is-there-a-tutorial-for-Page-Rules-)
- [ ] [Web Application Firewall (WAF)](https://www.cloudflare.com/waf/)
- [x] [Web Application Firewall (WAF)](https://www.cloudflare.com/waf/)
- [ ] Virtual DNS Management
- [ ] Custom hostnames
- [x] Zone Lockdown and User-Agent Block rules
- [ ] Organization Administration
- [ ] [Railgun](https://www.cloudflare.com/railgun/) administration
- [x] [Railgun](https://www.cloudflare.com/railgun/) administration
- [ ] [Keyless SSL](https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/)
- [ ] [Origin CA](https://blog.cloudflare.com/universal-ssl-encryption-all-the-way-to-the-origin-for-free/)

107
src/Endpoints/Railgun.php Normal file
View File

@@ -0,0 +1,107 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 23/10/2017
* Time: 11:15
*/
namespace Cloudflare\API\Endpoints;
use Cloudflare\API\Adapter\Adapter;
class Railgun implements API
{
private $adapter;
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
}
public function create(
string $name
): \stdClass {
$query = [
'name' => $name,
];
$user = $this->adapter->post('railguns', [], $query);
$body = json_decode($user->getBody());
return $body;
}
public function list(
int $page = 1,
int $perPage = 20,
string $direction = ""
): \stdClass {
$query = [
'page' => $page,
'per_page' => $perPage
];
if (!empty($direction)) {
$query['direction'] = $direction;
}
$user = $this->adapter->get('railguns', $query, []);
$body = json_decode($user->getBody());
$result = new \stdClass();
$result->result = $body->result;
$result->result_info = $body->result_info;
return $result;
}
public function get(
string $railID
): \stdClass {
$user = $this->adapter->get('railguns/' . $railID, [], []);
$body = json_decode($user->getBody());
return $body->result;
}
public function getZones(
string $railID
): \stdClass {
$user = $this->adapter->get('railguns/' . $railID . '/zones', [], []);
$body = json_decode($user->getBody());
$result = new \stdClass();
$result->result = $body->result;
$result->result_info = $body->result_info;
return $result;
}
public function update(
string $railID,
bool $status
): \stdClass {
$query = [
'enabled' => $status
];
$user = $this->adapter->patch('railguns/' . $railID, [], $query);
$body = json_decode($user->getBody());
return $body->result;
}
public function delete(
string $railID
): bool {
$user = $this->adapter->delete('railguns/' . $railID, [], []);
$body = json_decode($user->getBody());
if (isset($body->result->id)) {
return true;
}
return false;
}
}

203
src/Endpoints/WAF.php Normal file
View File

@@ -0,0 +1,203 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 23/10/2017
* Time: 11:17
*/
namespace Cloudflare\API\Endpoints;
use Cloudflare\API\Adapter\Adapter;
class WAF implements \Cloudflare\API\Endpoints\API
{
private $adapter;
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
}
public function getPackages(
string $zoneID,
int $page = 1,
int $perPage = 20,
string $order = "",
string $direction = "",
string $match = "all"
): \stdClass {
$query = [
'page' => $page,
'per_page' => $perPage,
'match' => $match
];
if (!empty($order)) {
$query['order'] = $order;
}
if (!empty($direction)) {
$query['direction'] = $direction;
}
$user = $this->adapter->get('zones/' . $zoneID . '/firewall/waf/packages', $query, []);
$body = json_decode($user->getBody());
$result = new \stdClass();
$result->result = $body->result;
$result->result_info = $body->result_info;
return $result;
}
public function getPackageInfo(
string $zoneID,
string $packageID
): \stdClass {
$user = $this->adapter->get('zones/' . $zoneID . '/firewall/waf/packages/' . $packageID, [], []);
$body = json_decode($user->getBody());
return $body->result;
}
public function getRules(
string $zoneID,
string $packageID,
int $page = 1,
int $perPage = 20,
string $order = "",
string $direction = "",
string $match = "all"
): \stdClass {
$query = [
'page' => $page,
'per_page' => $perPage,
'match' => $match
];
if (!empty($order)) {
$query['order'] = $order;
}
if (!empty($direction)) {
$query['direction'] = $direction;
}
$user = $this->adapter->get('zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/rules', $query, []);
$body = json_decode($user->getBody());
$result = new \stdClass();
$result->result = $body->result;
$result->result_info = $body->result_info;
return $result;
}
public function getRuleInfo(
string $zoneID,
string $packageID,
string $ruleID
): \stdClass {
$user = $this->adapter->get(
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/rules/' . $ruleID,
[],
[]
);
$body = json_decode($user->getBody());
return $body->result;
}
public function updateRule(
string $zoneID,
string $packageID,
string $ruleID,
string $status
): \stdClass {
$query = [
'mode' => $status,
];
$user = $this->adapter->patch(
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/rules/' . $ruleID,
[],
$query
);
$body = json_decode($user->getBody());
return $body->result;
}
public function getGroups(
string $zoneID,
string $packageID,
int $page = 1,
int $perPage = 20,
string $order = "",
string $direction = "",
string $match = "all"
): \stdClass {
$query = [
'page' => $page,
'per_page' => $perPage,
'match' => $match
];
if (!empty($order)) {
$query['order'] = $order;
}
if (!empty($direction)) {
$query['direction'] = $direction;
}
$user = $this->adapter->get(
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/groups',
$query,
[]
);
$body = json_decode($user->getBody());
$result = new \stdClass();
$result->result = $body->result;
$result->result_info = $body->result_info;
return $result;
}
public function getGroupInfo(
string $zoneID,
string $packageID,
string $groupID
): \stdClass {
$user = $this->adapter->get(
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/groups/' . $groupID,
[],
[]
);
$body = json_decode($user->getBody());
return $body->result;
}
public function updateGroup(
string $zoneID,
string $packageID,
string $groupID,
string $status
): \stdClass {
$query = [
'mode' => $status
];
$user = $this->adapter->patch(
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/groups/' . $groupID,
[],
$query
);
$body = json_decode($user->getBody());
return $body->result;
}
}

View File

@@ -0,0 +1,153 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 23/10/2017
* Time: 11:20
*/
use Cloudflare\API\Endpoints\Railgun;
class RailgunTest extends TestCase
{
public function testcreate()
{
$details = [
'name' => "My Railgun",
];
$response = $this->getPsr7JsonResponseForFixture('Endpoints/createRailgun.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('post')->willReturn($response);
$mock->expects($this->once())
->method('post')
->with(
$this->equalTo('railguns'),
$this->equalTo([]),
$this->equalTo(['name' => $details['name']])
);
$railgun = new \Cloudflare\API\Endpoints\Railgun($mock);
$result = $railgun->create($details['name']);
$this->assertObjectHasAttribute('result', $result);
foreach ($details as $property => $value) {
$this->assertEquals($result->result->{ $property }, $value);
}
}
public function testlist()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/listRailguns.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('railguns'),
$this->equalTo([
'page' => 1,
'per_page' => 20,
'direction' => 'desc'
]),
$this->equalTo([])
);
$railgun = new \Cloudflare\API\Endpoints\Railgun($mock);
$result = $railgun->list(1, 20, "desc");
$this->assertObjectHasAttribute('result', $result);
$this->assertObjectHasAttribute('result_info', $result);
}
public function testget()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/getRailgun.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('railguns/e928d310693a83094309acf9ead50448'),
$this->equalTo([])
);
$railgun = new \Cloudflare\API\Endpoints\Railgun($mock);
$result = $railgun->get("e928d310693a83094309acf9ead50448");
$this->assertEquals("e928d310693a83094309acf9ead50448", $result->id);
}
public function testgetZones()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/listRailgunZones.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('railguns/e928d310693a83094309acf9ead50448/zones'),
$this->equalTo([]),
$this->equalTo([])
);
$railgun = new \Cloudflare\API\Endpoints\Railgun($mock);
$result = $railgun->getZones("e928d310693a83094309acf9ead50448");
$this->assertObjectHasAttribute('result', $result);
$this->assertObjectHasAttribute('result_info', $result);
}
public function testupdate()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/updateRailgun.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('patch')->willReturn($response);
$details = [
'enabled' => true,
];
$mock->expects($this->once())
->method('patch')
->with(
$this->equalTo('railguns/e928d310693a83094309acf9ead50448'),
$this->equalTo([]),
$this->equalTo($details)
);
$waf = new \Cloudflare\API\Endpoints\Railgun($mock);
$result = $waf->update("e928d310693a83094309acf9ead50448", true);
$this->assertEquals("e928d310693a83094309acf9ead50448", $result->id);
}
public function testdelete()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/deleteRailgun.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('delete')->willReturn($response);
$mock->expects($this->once())
->method('delete')
->with(
$this->equalTo('railguns/e928d310693a83094309acf9ead50448'),
$this->equalTo([]),
$this->equalTo([])
);
$waf = new \Cloudflare\API\Endpoints\Railgun($mock);
$waf->delete("e928d310693a83094309acf9ead50448");
}
}

223
tests/Endpoints/WAFTest.php Normal file
View File

@@ -0,0 +1,223 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 23/10/2017
* Time: 13:34
*/
use Cloudflare\API\Endpoints\WAF;
class WAFTest extends TestCase
{
public function testgetPackages()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/listPackages.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages'),
$this->equalTo([
'page' => 1,
'per_page' => 20,
'match' => 'all',
'order' => 'status',
'direction' => 'desc'
]),
$this->equalTo([])
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->getPackages("023e105f4ecef8ad9ca31a8372d0c353", 1, 20, "status", "desc", "all");
$this->assertObjectHasAttribute('result', $result);
$this->assertObjectHasAttribute('result_info', $result);
$this->assertEquals("a25a9a7e9c00afc1fb2e0245519d725b", $result->result[0]->id);
$this->assertEquals(1, $result->result_info->page);
}
public function testgetPackageInfo()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/getPackageInfo.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages/a25a9a7e9c00afc1fb2e0245519d725b'),
$this->equalTo([])
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->getPackageInfo("023e105f4ecef8ad9ca31a8372d0c353", "a25a9a7e9c00afc1fb2e0245519d725b");
$this->assertEquals("a25a9a7e9c00afc1fb2e0245519d725b", $result->id);
}
public function testgetRules()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/listPackageRules.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages/a25a9a7e9c00afc1fb2e0245519d725b/rules'),
$this->equalTo([
'page' => 1,
'per_page' => 20,
'match' => 'all',
'order' => 'status',
'direction' => 'desc'
]),
$this->equalTo([])
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->getRules("023e105f4ecef8ad9ca31a8372d0c353", "a25a9a7e9c00afc1fb2e0245519d725b", 1, 20, "status", "desc", "all");
$this->assertObjectHasAttribute('result', $result);
$this->assertObjectHasAttribute('result_info', $result);
$this->assertEquals("92f17202ed8bd63d69a66b86a49a8f6b", $result->result[0]->id);
$this->assertEquals(1, $result->result_info->page);
}
public function testgetRuleInfo()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/getPackageRuleInfo.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages/a25a9a7e9c00afc1fb2e0245519d725b/rules/f939de3be84e66e757adcdcb87908023'),
$this->equalTo([])
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->getRuleInfo("023e105f4ecef8ad9ca31a8372d0c353", "a25a9a7e9c00afc1fb2e0245519d725b", "f939de3be84e66e757adcdcb87908023");
$this->assertEquals("f939de3be84e66e757adcdcb87908023", $result->id);
}
public function testupdateRule()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/updatePackageRule.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('patch')->willReturn($response);
$details = [
'mode' => "on",
];
$mock->expects($this->once())
->method('patch')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages/a25a9a7e9c00afc1fb2e0245519d725b/rules/f939de3be84e66e757adcdcb87908023'),
$this->equalTo([]),
$this->equalTo($details)
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->updateRule("023e105f4ecef8ad9ca31a8372d0c353", "a25a9a7e9c00afc1fb2e0245519d725b", "f939de3be84e66e757adcdcb87908023", "on");
$this->assertEquals("f939de3be84e66e757adcdcb87908023", $result->id);
foreach ($details as $property => $value) {
$this->assertEquals($result->{ $property }, $value);
}
}
public function getGroups()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/listPackageGroups.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages/a25a9a7e9c00afc1fb2e0245519d725b/groups'),
$this->equalTo([
'page' => 1,
'per_page' => 20,
'match' => 'all',
'order' => 'status',
'direction' => 'desc'
]),
$this->equalTo([])
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->getGroups("023e105f4ecef8ad9ca31a8372d0c353", "a25a9a7e9c00afc1fb2e0245519d725b", 1, 20, "status", "desc", "all");
$this->assertObjectHasAttribute('result', $result);
$this->assertObjectHasAttribute('result_info', $result);
$this->assertEquals("de677e5818985db1285d0e80225f06e5", $result->result[0]->id);
$this->assertEquals(1, $result->result_info->page);
}
public function testgetGroupInfo()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/getPackageGroupInfo.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages/a25a9a7e9c00afc1fb2e0245519d725b/groups/de677e5818985db1285d0e80225f06e5'),
$this->equalTo([])
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->getGroupInfo("023e105f4ecef8ad9ca31a8372d0c353", "a25a9a7e9c00afc1fb2e0245519d725b", "de677e5818985db1285d0e80225f06e5");
$this->assertEquals("de677e5818985db1285d0e80225f06e5", $result->id);
}
public function testupdateGroup()
{
$response = $this->getPsr7JsonResponseForFixture('Endpoints/updatePackageGroup.json');
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('patch')->willReturn($response);
$details = [
'mode' => "off",
];
$mock->expects($this->once())
->method('patch')
->with(
$this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/firewall/waf/packages/a25a9a7e9c00afc1fb2e0245519d725b/groups/de677e5818985db1285d0e80225f06e5'),
$this->equalTo([]),
$this->equalTo($details)
);
$waf = new \Cloudflare\API\Endpoints\WAF($mock);
$result = $waf->updateGroup("023e105f4ecef8ad9ca31a8372d0c353", "a25a9a7e9c00afc1fb2e0245519d725b", "de677e5818985db1285d0e80225f06e5", "off");
$this->assertEquals("de677e5818985db1285d0e80225f06e5", $result->id);
foreach ($details as $property => $value) {
$this->assertEquals($result->{ $property }, $value);
}
}
}

View File

@@ -0,0 +1,23 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "e928d310693a83094309acf9ead50448",
"name": "My Railgun",
"status": "active",
"enabled": true,
"zones_connected": 2,
"build": "b1234",
"version": "2.1",
"revision": "123",
"activation_key": "e4edc00281cb56ebac22c81be9bac8f3",
"activated_on": "2014-01-02T02:20:00Z",
"created_on": "2014-01-01T05:20:00Z",
"modified_on": "2014-01-01T05:20:00Z"
}
}

View File

@@ -0,0 +1,12 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "e928d310693a83094309acf9ead50448"
}
}

View File

@@ -0,0 +1,22 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "de677e5818985db1285d0e80225f06e5",
"name": "Project Honey Pot",
"description": "Group designed to protect against IP addresses that are a threat and typically used to launch DDoS attacks",
"rules_count": 10,
"modified_rules_count": 2,
"package_id": "a25a9a7e9c00afc1fb2e0245519d725b",
"mode": "on",
"allowed_modes": [
"on",
"off"
]
}
}

View File

@@ -0,0 +1,17 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "a25a9a7e9c00afc1fb2e0245519d725b",
"name": "WordPress rules",
"description": "Common WordPress exploit protections",
"detection_mode": "traditional",
"zone_id": "023e105f4ecef8ad9ca31a8372d0c353",
"status": "active"
}
}

View File

@@ -0,0 +1,24 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "f939de3be84e66e757adcdcb87908023",
"description": "SQL injection prevention for SELECT statements",
"priority": 5,
"group": {
"id": "de677e5818985db1285d0e80225f06e5",
"name": "Project Honey Pot"
},
"package_id": "a25a9a7e9c00afc1fb2e0245519d725b",
"allowed_modes": [
"on",
"off"
],
"mode": "on"
}
}

View File

@@ -0,0 +1,23 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "e928d310693a83094309acf9ead50448",
"name": "My Railgun",
"status": "active",
"enabled": true,
"zones_connected": 2,
"build": "b1234",
"version": "2.1",
"revision": "123",
"activation_key": "e4edc00281cb56ebac22c81be9bac8f3",
"activated_on": "2014-01-02T02:20:00Z",
"created_on": "2014-01-01T05:20:00Z",
"modified_on": "2014-01-01T05:20:00Z"
}
}

View File

@@ -0,0 +1,30 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": [
{
"id": "de677e5818985db1285d0e80225f06e5",
"name": "Project Honey Pot",
"description": "Group designed to protect against IP addresses that are a threat and typically used to launch DDoS attacks",
"rules_count": 10,
"modified_rules_count": 2,
"package_id": "a25a9a7e9c00afc1fb2e0245519d725b",
"mode": "on",
"allowed_modes": [
"on",
"off"
]
}
],
"result_info": {
"page": 1,
"per_page": 20,
"count": 1,
"total_count": 2000
}
}

View File

@@ -0,0 +1,38 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": [
{
"id": "92f17202ed8bd63d69a66b86a49a8f6b",
"notes": "This rule is on because of an event that occured on date X",
"allowed_modes": [
"whitelist",
"block",
"challenge"
],
"mode": "challenge",
"configuration": {
"target": "ip",
"value": "1.2.3.4"
},
"scope": {
"id": "7c5dae5552338874e5053f2534d2767a",
"email": "user@example.com",
"type": "user"
},
"created_on": "2014-01-01T05:20:00.12345Z",
"modified_on": "2014-01-01T05:20:00.12345Z"
}
],
"result_info": {
"page": 1,
"per_page": 20,
"count": 1,
"total_count": 2000
}
}

View File

@@ -0,0 +1,25 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": [
{
"id": "a25a9a7e9c00afc1fb2e0245519d725b",
"name": "WordPress rules",
"description": "Common WordPress exploit protections",
"detection_mode": "traditional",
"zone_id": "023e105f4ecef8ad9ca31a8372d0c353",
"status": "active"
}
],
"result_info": {
"page": 1,
"per_page": 20,
"count": 1,
"total_count": 2000
}
}

View File

@@ -0,0 +1,30 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": [
{
"id": "023e105f4ecef8ad9ca31a8372d0c353",
"name": "example.com",
"development_mode": 7200,
"original_name_servers": [
"ns1.originaldnshost.com",
"ns2.originaldnshost.com"
],
"original_registrar": "GoDaddy",
"original_dnshost": "NameCheap",
"created_on": "2014-01-01T05:20:00.12345Z",
"modified_on": "2014-01-01T05:20:00.12345Z"
}
],
"result_info": {
"page": 1,
"per_page": 20,
"count": 1,
"total_count": 2000
}
}

View File

@@ -0,0 +1,31 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": [
{
"id": "e928d310693a83094309acf9ead50448",
"name": "My Railgun",
"status": "active",
"enabled": true,
"zones_connected": 2,
"build": "b1234",
"version": "2.1",
"revision": "123",
"activation_key": "e4edc00281cb56ebac22c81be9bac8f3",
"activated_on": "2014-01-02T02:20:00Z",
"created_on": "2014-01-01T05:20:00Z",
"modified_on": "2014-01-01T05:20:00Z"
}
],
"result_info": {
"page": 1,
"per_page": 20,
"count": 1,
"total_count": 2000
}
}

View File

@@ -0,0 +1,22 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "de677e5818985db1285d0e80225f06e5",
"name": "Project Honey Pot",
"description": "Group designed to protect against IP addresses that are a threat and typically used to launch DDoS attacks",
"rules_count": 10,
"modified_rules_count": 2,
"package_id": "a25a9a7e9c00afc1fb2e0245519d725b",
"mode": "off",
"allowed_modes": [
"on",
"off"
]
}
}

View File

@@ -0,0 +1,24 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "f939de3be84e66e757adcdcb87908023",
"description": "SQL injection prevention for SELECT statements",
"priority": 5,
"group": {
"id": "de677e5818985db1285d0e80225f06e5",
"name": "Project Honey Pot"
},
"package_id": "a25a9a7e9c00afc1fb2e0245519d725b",
"allowed_modes": [
"on",
"off"
],
"mode": "on"
}
}

View File

@@ -0,0 +1,23 @@
{
"success": true,
"errors": [
{}
],
"messages": [
{}
],
"result": {
"id": "e928d310693a83094309acf9ead50448",
"name": "My Railgun",
"status": "active",
"enabled": true,
"zones_connected": 2,
"build": "b1234",
"version": "2.1",
"revision": "123",
"activation_key": "e4edc00281cb56ebac22c81be9bac8f3",
"activated_on": "2014-01-02T02:20:00Z",
"created_on": "2014-01-01T05:20:00Z",
"modified_on": "2014-01-01T05:20:00Z"
}
}

View File

@@ -1,6 +1,10 @@
<?php
use GuzzleHttp\Psr7;
/**
* Class TestCase
* @SuppressWarnings(PHPMD.NumberOfChildren)
*/
abstract class TestCase extends PHPUnit_Framework_TestCase
{
/**