Merge pull request #4 from cloudflare/COM-40

COM-40 :: Added None Auth class, IPs endpoint and associated tests
This commit is contained in:
Junade
2017-09-05 13:13:03 +01:00
committed by GitHub
11 changed files with 155 additions and 52 deletions

View File

@@ -15,11 +15,12 @@ Each API call is provided via a similarly named function within various classes
- [x] DNS Records
- [x] Zones
- [x] User Administration (partial)
- [ ] Cloudflare IPs
- [x] Cloudflare IPs
- [ ] Page Rules
- [ ] Web Application Firewall (WAF)
- [ ] Virtual DNS Management
- [ ] Custom hostnames
- [ ] Zone Lockdown and User-Agent Block rules
- [ ] Organization Administration
- [ ] [Railgun](https://www.cloudflare.com/railgun/) administration
- [ ] [Keyless SSL](https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/)

View File

@@ -19,8 +19,12 @@ class Guzzle implements Adapter
/**
* @inheritDoc
*/
public function __construct(Auth $auth, String $baseURI = "https://api.cloudflare.com/client/v4/")
public function __construct(Auth $auth, String $baseURI = null)
{
if ($baseURI === null) {
$baseURI = "https://api.cloudflare.com/client/v4/";
}
$headers = $auth->getHeaders();
$this->client = new Client([

18
src/Auth/None.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 04/09/2017
* Time: 19:55
*/
namespace Cloudflare\API\Auth;
class None implements Auth
{
public function getHeaders(): array
{
return [];
}
}

View File

@@ -19,8 +19,14 @@ class DNS implements API
$this->adapter = $adapter;
}
public function addRecord(string $zoneID, string $type, string $name, string $content, int $ttl = 0, bool $proxied = true): bool
{
public function addRecord(
string $zoneID,
string $type,
string $name,
string $content,
int $ttl = 0,
bool $proxied = true
): bool {
$options = [
'type' => $type,
'name' => $name,
@@ -46,6 +52,7 @@ class DNS implements API
public function listRecords(
string $zoneID,
string $type = "",
string $name = "",
string $content = "",
int $page = 1,
int $perPage = 20,
@@ -79,7 +86,9 @@ class DNS implements API
$options['direction'] = $direction;
}
$user = $this->adapter->get('zones/'.$zoneID.'/dns_records', [], $options);
$query = http_build_query($options);
$user = $this->adapter->get('zones/' . $zoneID . '/dns_records?' . $query, []);
$body = json_decode($user->getBody());
$result = new \stdClass();
@@ -91,20 +100,20 @@ class DNS implements API
public function getRecordDetails(string $zoneID, string $recordID): \stdClass
{
$user = $this->adapter->get('zones/'.$zoneID.'/dns_records/'.$recordID, []);
$user = $this->adapter->get('zones/' . $zoneID . '/dns_records/' . $recordID, []);
$body = json_decode($user->getBody());
return $body->result;
}
public function updateRecordDetails(string $zoneID, string $recordID, array $details): \stdClass
{
$response = $this->adapter->put('zones/'.$zoneID.'/dns_records/'.$recordID, [], $details);
$response = $this->adapter->put('zones/' . $zoneID . '/dns_records/' . $recordID, [], $details);
return json_decode($response->getBody());
}
public function deleteRecord(string $zoneID, string $recordID): bool
{
$user = $this->adapter->delete('zones/'.$zoneID.'/dns_records/'.$recordID, [], []);
$user = $this->adapter->delete('zones/' . $zoneID . '/dns_records/' . $recordID, [], []);
$body = json_decode($user->getBody());

29
src/Endpoints/IPs.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 04/09/2017
* Time: 19:56
*/
namespace Cloudflare\API\Endpoints;
use Cloudflare\API\Adapter\Adapter;
class IPs implements API
{
private $adapter;
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
}
public function listIPs(): \stdClass {
$ips = $this->adapter->get('ips', []);
$body = json_decode($ips->getBody());
return $body->result;
}
}

View File

@@ -80,7 +80,9 @@ class Zones implements API
$options['direction'] = $direction;
}
$user = $this->adapter->get('zones', [], $options);
$query = http_build_query($options);
$user = $this->adapter->get('zones?' . $query, []);
$body = json_decode($user->getBody());
$result = new \stdClass();

20
tests/Auth/NoneTest.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 04/09/2017
* Time: 20:08
*/
use Cloudflare\API\Auth\None;
class NoneTest extends PHPUnit_Framework_TestCase
{
public function testGetHeaders()
{
$auth = new \Cloudflare\API\Auth\None();
$headers = $auth->getHeaders();
$this->assertEquals([], $headers);
}
}

View File

@@ -1,13 +1,11 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 09/06/2017
* Time: 15:31
*/
use Cloudflare\API\Endpoints\DNS;
class DNSTest extends PHPUnit_Framework_TestCase
{
public function testAddRecord()
@@ -40,7 +38,13 @@ class DNSTest extends PHPUnit_Framework_TestCase
$mock->expects($this->once())
->method('post')
->with($this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records'), $this->equalTo([]),
$this->equalTo(['type' => 'A', 'name' => 'example.com', 'content' => '127.0.0.1', 'ttl' => 120, 'proxied' => false])
$this->equalTo([
'type' => 'A',
'name' => 'example.com',
'content' => '127.0.0.1',
'ttl' => 120,
'proxied' => false
])
);
$dns = new \Cloudflare\API\Endpoints\DNS($mock);
@@ -77,28 +81,19 @@ class DNSTest extends PHPUnit_Framework_TestCase
"total_count": 2000
}
}');
$response = new GuzzleHttp\Psr7\Response(200, ['Content-Type' => 'application/json'], $stream);
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with($this->equalTo('zones'),
$this->equalTo([]),
$this->equalTo([
'page' => 1,
'per_page' => 20,
'match' => 'all',
'name' => 'example.com',
'status' => 'active',
'order' => 'status',
'direction' => 'desc'
]
));
->with($this->equalTo('zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records?page=1&per_page=20&match=all&type=A&name=example.com&content=127.0.0.1&order=type&direction=desc'),
$this->equalTo([])
);
$zones = new \Cloudflare\API\Endpoints\Zones($mock);
$result = $zones->listZones("example.com", "active", 1, 20, "status", "desc", "all");
$zones = new \Cloudflare\API\Endpoints\DNS($mock);
$result = $zones->listRecords("023e105f4ecef8ad9ca31a8372d0c353","A", "example.com", "127.0.0.1", 1, 20, "type", "desc", "all");
$this->assertObjectHasAttribute('result', $result);
$this->assertObjectHasAttribute('result_info', $result);

View File

@@ -0,0 +1,42 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 04/09/2017
* Time: 20:16
*/
use Cloudflare\API\Endpoints\IPs;
class IPsTest extends PHPUnit_Framework_TestCase
{
public function testListIPs() {
$stream = GuzzleHttp\Psr7\stream_for('
{
"success": true,
"errors": [],
"messages": [],
"result": {
"ipv4_cidrs": [
"199.27.128.0/21"
],
"ipv6_cidrs": [
"2400:cb00::/32"
]
}
}');
$response = new GuzzleHttp\Psr7\Response(200, ['Content-Type' => 'application/json'], $stream);
$mock = $this->getMockBuilder(\Cloudflare\API\Adapter\Adapter::class)->getMock();
$mock->method('get')->willReturn($response);
$mock->expects($this->once())
->method('get')
->with($this->equalTo('ips'), $this->equalTo([])
);
$ips = new \Cloudflare\API\Endpoints\IPs($mock);
$ips = $ips->listIPs();
$this->assertObjectHasAttribute("ipv4_cidrs", $ips);
$this->assertObjectHasAttribute("ipv6_cidrs", $ips);
}
}

View File

@@ -1,13 +1,11 @@
<?php
/**
* Created by PhpStorm.
* User: junade
* Date: 06/06/2017
* Time: 16:01
*/
use Cloudflare\API\Endpoints\Zones;
class ZonesTest extends PHPUnit_Framework_TestCase
{
public function testAddZone()
@@ -198,18 +196,9 @@ class ZonesTest extends PHPUnit_Framework_TestCase
$mock->expects($this->once())
->method('get')
->with($this->equalTo('zones'),
$this->equalTo([]),
$this->equalTo([
'page' => 1,
'per_page' => 20,
'match' => 'all',
'name' => 'example.com',
'status' => 'active',
'order' => 'status',
'direction' => 'desc'
]
));
->with($this->equalTo('zones?page=1&per_page=20&match=all&name=example.com&status=active&order=status&direction=desc'),
$this->equalTo([])
);
$zones = new \Cloudflare\API\Endpoints\Zones($mock);
$result = $zones->listZones("example.com", "active", 1, 20, "status", "desc", "all");
@@ -291,15 +280,9 @@ class ZonesTest extends PHPUnit_Framework_TestCase
$mock->expects($this->once())
->method('get')
->with($this->equalTo('zones'),
$this->equalTo([]),
$this->equalTo([
'name' => 'example.com',
'page' => 1,
'per_page' => 20,
'match' => 'all'
]
));
->with($this->equalTo('zones?page=1&per_page=20&match=all&name=example.com'),
$this->equalTo([])
);
$zones = new \Cloudflare\API\Endpoints\Zones($mock);
$result = $zones->getZoneID("example.com");