Skip to content

Commit 30fc22a

Browse files
author
Junade Ali
committed
Add Web Application Firewall and Railgun.
1 parent 0d89f13 commit 30fc22a

20 files changed

+1036
-2
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ Each API call is provided via a similarly named function within various classes
1717
- [x] User Administration (partial)
1818
- [x] [Cloudflare IPs](https://www.cloudflare.com/ips/)
1919
- [x] [Page Rules](https://support.cloudflare.com/hc/en-us/articles/200168306-Is-there-a-tutorial-for-Page-Rules-)
20-
- [ ] [Web Application Firewall (WAF)](https://www.cloudflare.com/waf/)
20+
- [x] [Web Application Firewall (WAF)](https://www.cloudflare.com/waf/)
2121
- [ ] Virtual DNS Management
2222
- [ ] Custom hostnames
2323
- [x] Zone Lockdown and User-Agent Block rules
2424
- [ ] Organization Administration
25-
- [ ] [Railgun](https://www.cloudflare.com/railgun/) administration
25+
- [x] [Railgun](https://www.cloudflare.com/railgun/) administration
2626
- [ ] [Keyless SSL](https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/)
2727
- [ ] [Origin CA](https://blog.cloudflare.com/universal-ssl-encryption-all-the-way-to-the-origin-for-free/)
2828

src/Endpoints/Railgun.php

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: junade
5+
* Date: 23/10/2017
6+
* Time: 11:15
7+
*/
8+
9+
namespace Cloudflare\API\Endpoints;
10+
11+
use Cloudflare\API\Adapter\Adapter;
12+
13+
class Railgun implements API
14+
{
15+
private $adapter;
16+
17+
public function __construct(Adapter $adapter)
18+
{
19+
$this->adapter = $adapter;
20+
}
21+
22+
public function create(
23+
string $name
24+
): \stdClass {
25+
$query = [
26+
'name' => $name,
27+
];
28+
29+
$user = $this->adapter->post('railguns', [], $query);
30+
$body = json_decode($user->getBody());
31+
32+
return $body;
33+
}
34+
35+
public function list(
36+
int $page = 1,
37+
int $perPage = 20,
38+
string $direction = ""
39+
): \stdClass {
40+
$query = [
41+
'page' => $page,
42+
'per_page' => $perPage
43+
];
44+
45+
if (!empty($direction)) {
46+
$query['direction'] = $direction;
47+
}
48+
49+
$user = $this->adapter->get('railguns', $query, []);
50+
$body = json_decode($user->getBody());
51+
52+
$result = new \stdClass();
53+
$result->result = $body->result;
54+
$result->result_info = $body->result_info;
55+
56+
return $result;
57+
}
58+
59+
public function get(
60+
string $railID
61+
): \stdClass {
62+
$user = $this->adapter->get('railguns/' . $railID, [], []);
63+
$body = json_decode($user->getBody());
64+
65+
return $body->result;
66+
}
67+
68+
public function getZones(
69+
string $railID
70+
): \stdClass {
71+
$user = $this->adapter->get('railguns/' . $railID . '/zones', [], []);
72+
$body = json_decode($user->getBody());
73+
74+
$result = new \stdClass();
75+
$result->result = $body->result;
76+
$result->result_info = $body->result_info;
77+
78+
return $result;
79+
}
80+
81+
public function update(
82+
string $railID,
83+
bool $status
84+
): \stdClass {
85+
$query = [
86+
'enabled' => $status
87+
];
88+
89+
$user = $this->adapter->patch('railguns/' . $railID, [], $query);
90+
$body = json_decode($user->getBody());
91+
92+
return $body->result;
93+
}
94+
95+
public function delete(
96+
string $railID
97+
): bool {
98+
$user = $this->adapter->delete('railguns/' . $railID, [], []);
99+
$body = json_decode($user->getBody());
100+
101+
if (isset($body->result->id)) {
102+
return true;
103+
}
104+
105+
return false;
106+
}
107+
}

src/Endpoints/WAF.php

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: junade
5+
* Date: 23/10/2017
6+
* Time: 11:17
7+
*/
8+
9+
namespace Cloudflare\API\Endpoints;
10+
11+
use Cloudflare\API\Adapter\Adapter;
12+
13+
class WAF implements \Cloudflare\API\Endpoints\API
14+
{
15+
private $adapter;
16+
17+
public function __construct(Adapter $adapter)
18+
{
19+
$this->adapter = $adapter;
20+
}
21+
22+
public function getPackages(
23+
string $zoneID,
24+
int $page = 1,
25+
int $perPage = 20,
26+
string $order = "",
27+
string $direction = "",
28+
string $match = "all"
29+
): \stdClass {
30+
$query = [
31+
'page' => $page,
32+
'per_page' => $perPage,
33+
'match' => $match
34+
];
35+
36+
if (!empty($order)) {
37+
$query['order'] = $order;
38+
}
39+
40+
if (!empty($direction)) {
41+
$query['direction'] = $direction;
42+
}
43+
44+
$user = $this->adapter->get('zones/' . $zoneID . '/firewall/waf/packages', $query, []);
45+
$body = json_decode($user->getBody());
46+
47+
$result = new \stdClass();
48+
$result->result = $body->result;
49+
$result->result_info = $body->result_info;
50+
51+
return $result;
52+
}
53+
54+
55+
public function getPackageInfo(
56+
string $zoneID,
57+
string $packageID
58+
): \stdClass {
59+
$user = $this->adapter->get('zones/' . $zoneID . '/firewall/waf/packages/' . $packageID, [], []);
60+
$body = json_decode($user->getBody());
61+
62+
return $body->result;
63+
}
64+
65+
public function getRules(
66+
string $zoneID,
67+
string $packageID,
68+
int $page = 1,
69+
int $perPage = 20,
70+
string $order = "",
71+
string $direction = "",
72+
string $match = "all"
73+
): \stdClass {
74+
$query = [
75+
'page' => $page,
76+
'per_page' => $perPage,
77+
'match' => $match
78+
];
79+
80+
if (!empty($order)) {
81+
$query['order'] = $order;
82+
}
83+
84+
if (!empty($direction)) {
85+
$query['direction'] = $direction;
86+
}
87+
$user = $this->adapter->get('zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/rules', $query, []);
88+
$body = json_decode($user->getBody());
89+
90+
$result = new \stdClass();
91+
$result->result = $body->result;
92+
$result->result_info = $body->result_info;
93+
94+
return $result;
95+
}
96+
97+
public function getRuleInfo(
98+
string $zoneID,
99+
string $packageID,
100+
string $ruleID
101+
): \stdClass {
102+
$user = $this->adapter->get(
103+
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/rules/' . $ruleID,
104+
[],
105+
[]
106+
);
107+
$body = json_decode($user->getBody());
108+
109+
return $body->result;
110+
}
111+
112+
public function updateRule(
113+
string $zoneID,
114+
string $packageID,
115+
string $ruleID,
116+
string $status
117+
): \stdClass {
118+
$query = [
119+
'mode' => $status,
120+
];
121+
122+
$user = $this->adapter->patch(
123+
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/rules/' . $ruleID,
124+
[],
125+
$query
126+
);
127+
$body = json_decode($user->getBody());
128+
129+
return $body->result;
130+
}
131+
132+
public function getGroups(
133+
string $zoneID,
134+
string $packageID,
135+
int $page = 1,
136+
int $perPage = 20,
137+
string $order = "",
138+
string $direction = "",
139+
string $match = "all"
140+
): \stdClass {
141+
$query = [
142+
'page' => $page,
143+
'per_page' => $perPage,
144+
'match' => $match
145+
];
146+
147+
if (!empty($order)) {
148+
$query['order'] = $order;
149+
}
150+
151+
if (!empty($direction)) {
152+
$query['direction'] = $direction;
153+
}
154+
155+
$user = $this->adapter->get(
156+
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/groups',
157+
$query,
158+
[]
159+
);
160+
$body = json_decode($user->getBody());
161+
162+
$result = new \stdClass();
163+
$result->result = $body->result;
164+
$result->result_info = $body->result_info;
165+
166+
return $result;
167+
}
168+
169+
public function getGroupInfo(
170+
string $zoneID,
171+
string $packageID,
172+
string $groupID
173+
): \stdClass {
174+
$user = $this->adapter->get(
175+
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/groups/' . $groupID,
176+
[],
177+
[]
178+
);
179+
$body = json_decode($user->getBody());
180+
181+
return $body->result;
182+
}
183+
184+
public function updateGroup(
185+
string $zoneID,
186+
string $packageID,
187+
string $groupID,
188+
string $status
189+
): \stdClass {
190+
$query = [
191+
'mode' => $status
192+
];
193+
194+
$user = $this->adapter->patch(
195+
'zones/' . $zoneID . '/firewall/waf/packages/' . $packageID . '/groups/' . $groupID,
196+
[],
197+
$query
198+
);
199+
$body = json_decode($user->getBody());
200+
201+
return $body->result;
202+
}
203+
}

0 commit comments

Comments
 (0)