diff --git a/README.md b/README.md index 390271e..4e984b9 100644 --- a/README.md +++ b/README.md @@ -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/) diff --git a/src/Endpoints/Railgun.php b/src/Endpoints/Railgun.php new file mode 100644 index 0000000..85443a1 --- /dev/null +++ b/src/Endpoints/Railgun.php @@ -0,0 +1,107 @@ +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; + } +} diff --git a/src/Endpoints/WAF.php b/src/Endpoints/WAF.php new file mode 100644 index 0000000..ec69fb9 --- /dev/null +++ b/src/Endpoints/WAF.php @@ -0,0 +1,203 @@ +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; + } +} diff --git a/tests/Endpoints/RailgunTest.php b/tests/Endpoints/RailgunTest.php new file mode 100644 index 0000000..10726a0 --- /dev/null +++ b/tests/Endpoints/RailgunTest.php @@ -0,0 +1,153 @@ + "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"); + } +} diff --git a/tests/Endpoints/WAFTest.php b/tests/Endpoints/WAFTest.php new file mode 100644 index 0000000..0a31cae --- /dev/null +++ b/tests/Endpoints/WAFTest.php @@ -0,0 +1,223 @@ +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); + } + } +} diff --git a/tests/Fixtures/Endpoints/createRailgun.json b/tests/Fixtures/Endpoints/createRailgun.json new file mode 100644 index 0000000..33054a7 --- /dev/null +++ b/tests/Fixtures/Endpoints/createRailgun.json @@ -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" + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/deleteRailgun.json b/tests/Fixtures/Endpoints/deleteRailgun.json new file mode 100644 index 0000000..a16e6c7 --- /dev/null +++ b/tests/Fixtures/Endpoints/deleteRailgun.json @@ -0,0 +1,12 @@ +{ + "success": true, + "errors": [ + {} + ], + "messages": [ + {} + ], + "result": { + "id": "e928d310693a83094309acf9ead50448" + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/getPackageGroupInfo.json b/tests/Fixtures/Endpoints/getPackageGroupInfo.json new file mode 100644 index 0000000..e607ddd --- /dev/null +++ b/tests/Fixtures/Endpoints/getPackageGroupInfo.json @@ -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" + ] + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/getPackageInfo.json b/tests/Fixtures/Endpoints/getPackageInfo.json new file mode 100644 index 0000000..5c94df8 --- /dev/null +++ b/tests/Fixtures/Endpoints/getPackageInfo.json @@ -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" + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/getPackageRuleInfo.json b/tests/Fixtures/Endpoints/getPackageRuleInfo.json new file mode 100644 index 0000000..c40c3d2 --- /dev/null +++ b/tests/Fixtures/Endpoints/getPackageRuleInfo.json @@ -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" + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/getRailgun.json b/tests/Fixtures/Endpoints/getRailgun.json new file mode 100644 index 0000000..33054a7 --- /dev/null +++ b/tests/Fixtures/Endpoints/getRailgun.json @@ -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" + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/listPackageGroups.json b/tests/Fixtures/Endpoints/listPackageGroups.json new file mode 100644 index 0000000..11855a0 --- /dev/null +++ b/tests/Fixtures/Endpoints/listPackageGroups.json @@ -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 + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/listPackageRules.json b/tests/Fixtures/Endpoints/listPackageRules.json new file mode 100644 index 0000000..a11d418 --- /dev/null +++ b/tests/Fixtures/Endpoints/listPackageRules.json @@ -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 + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/listPackages.json b/tests/Fixtures/Endpoints/listPackages.json new file mode 100644 index 0000000..d6be34c --- /dev/null +++ b/tests/Fixtures/Endpoints/listPackages.json @@ -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 + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/listRailgunZones.json b/tests/Fixtures/Endpoints/listRailgunZones.json new file mode 100644 index 0000000..983004a --- /dev/null +++ b/tests/Fixtures/Endpoints/listRailgunZones.json @@ -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 + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/listRailguns.json b/tests/Fixtures/Endpoints/listRailguns.json new file mode 100644 index 0000000..7a4db43 --- /dev/null +++ b/tests/Fixtures/Endpoints/listRailguns.json @@ -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 + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/updatePackageGroup.json b/tests/Fixtures/Endpoints/updatePackageGroup.json new file mode 100644 index 0000000..61db152 --- /dev/null +++ b/tests/Fixtures/Endpoints/updatePackageGroup.json @@ -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" + ] + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/updatePackageRule.json b/tests/Fixtures/Endpoints/updatePackageRule.json new file mode 100644 index 0000000..c40c3d2 --- /dev/null +++ b/tests/Fixtures/Endpoints/updatePackageRule.json @@ -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" + } +} \ No newline at end of file diff --git a/tests/Fixtures/Endpoints/updateRailgun.json b/tests/Fixtures/Endpoints/updateRailgun.json new file mode 100644 index 0000000..33054a7 --- /dev/null +++ b/tests/Fixtures/Endpoints/updateRailgun.json @@ -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" + } +} \ No newline at end of file diff --git a/tests/TestCase.php b/tests/TestCase.php index a8ed229..50cc296 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -1,6 +1,10 @@