Add firewall access rules endpoint (#37)

* Add firewall access rules endpoint

* Configuration is an object

Maybe this needs to be defined in a seperate namespace (e.g. Cloudflare\API\Configuration) because it's no longer an array.

* Incorporate review
This commit is contained in:
Kleis Auke Wolthuizen
2017-11-25 04:45:18 +01:00
committed by Junade
parent 65e4f29bc0
commit c8e85d2582
7 changed files with 403 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
<?php
namespace Cloudflare\API\Configurations;
class AccessRules implements Configurations
{
private $config;
public function setIP(string $value)
{
$this->config = ['target' => 'ip', 'value' => $value];
}
public function setIPRange(string $value)
{
$this->config = ['target' => 'ip_range', 'value' => $value];
}
public function setCountry(string $value)
{
$this->config = ['target' => 'country', 'value' => $value];
}
public function getArray(): array
{
return $this->config;
}
}

View File

@@ -0,0 +1,153 @@
<?php
namespace Cloudflare\API\Endpoints;
use Cloudflare\API\Adapter\Adapter;
use Cloudflare\API\Configurations\Configurations;
class AccessRules implements API
{
private $adapter;
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
}
/**
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*
* @param string $zoneID
* @param string $scopeType
* @param string $mode
* @param string $configurationTarget
* @param string $configurationValue
* @param int $page
* @param int $perPage
* @param string $order
* @param string $direction
* @param string $match
* @param string $notes
* @return \stdClass
*/
public function listRules(
string $zoneID,
string $scopeType = '',
string $mode = '',
string $configurationTarget = '',
string $configurationValue = '',
int $page = 1,
int $perPage = 50,
string $order = '',
string $direction = '',
string $match = 'all',
string $notes = ''
): \stdClass {
$query = [
'page' => $page,
'per_page' => $perPage,
'match' => $match
];
if (!empty($scopeType)) {
$query['scope_type'] = $scopeType;
}
if (!empty($mode)) {
$query['mode'] = $mode;
}
if (!empty($configurationTarget)) {
$query['configuration_target'] = $configurationTarget;
}
if (!empty($configurationValue)) {
$query['configuration_value'] = $configurationValue;
}
if (!empty($order)) {
$query['order'] = $order;
}
if (!empty($direction)) {
$query['direction'] = $direction;
}
if (!empty($notes)) {
$query['notes'] = $notes;
}
$data = $this->adapter->get('zones/' . $zoneID . '/firewall/access_rules/rules', $query, []);
$body = json_decode($data->getBody());
return (object)['result' => $body->result, 'result_info' => $body->result_info];
}
public function createRule(
string $zoneID,
string $mode,
Configurations $configuration,
string $notes = null
): bool {
$options = [
'mode' => $mode,
'configuration' => (object) $configuration->getArray()
];
if ($notes !== null) {
$options['notes'] = $notes;
}
$query = $this->adapter->post('zones/' . $zoneID . '/firewall/access_rules/rules', [], $options);
$body = json_decode($query->getBody());
if (isset($body->result->id)) {
return true;
}
return false;
}
public function updateRule(
string $zoneID,
string $ruleID,
string $mode,
string $notes = null
): bool {
$options = [
'mode' => $mode
];
if ($notes !== null) {
$options['notes'] = $notes;
}
$query = $this->adapter->patch('zones/' . $zoneID . '/firewall/access_rules/rules/' . $ruleID, [], $options);
$body = json_decode($query->getBody());
if (isset($body->result->id)) {
return true;
}
return false;
}
public function deleteRule(string $zoneID, string $ruleID, string $cascade = 'none'): bool
{
$options = [
'cascade' => $cascade
];
$data = $this->adapter->delete('zones/' . $zoneID . '/firewall/access_rules/rules/' . $ruleID, [], $options);
$body = json_decode($data->getBody());
if (isset($body->result->id)) {
return true;
}
return false;
}
}