Add 'class/Cloudflare.php'
This commit is contained in:
parent
45d9617b95
commit
39c0bf0c5e
270
class/Cloudflare.php
Normal file
270
class/Cloudflare.php
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class CloudflareException extends Exception
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
class Cloudflare
|
||||||
|
{
|
||||||
|
const GET = 'GET';
|
||||||
|
const POST = 'POST';
|
||||||
|
const PUT = 'PUT';
|
||||||
|
const PATCH = 'PATCH';
|
||||||
|
const DELETE = 'DELETE';
|
||||||
|
|
||||||
|
const ENDPOINT = 'https://api.cloudflare.com/client/v4/';
|
||||||
|
|
||||||
|
private $email;
|
||||||
|
private $apiKey;
|
||||||
|
private $resultInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $email
|
||||||
|
* @param string $apiKey
|
||||||
|
*
|
||||||
|
* @return CloudFlare
|
||||||
|
*/
|
||||||
|
public function __construct($email, $apiKey)
|
||||||
|
{
|
||||||
|
$this->email = $email;
|
||||||
|
$this->apiKey = $apiKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issues an HTTPS request and returns the result
|
||||||
|
*
|
||||||
|
* @param string $method
|
||||||
|
* @param string $endpoint
|
||||||
|
* @param array $params
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function request($method, $endpoint, $params = [])
|
||||||
|
{
|
||||||
|
$curl = curl_init();
|
||||||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, False);
|
||||||
|
|
||||||
|
$headers = [
|
||||||
|
'X-Auth-Email: ' . $this->email,
|
||||||
|
'X-Auth-Key: ' . $this->apiKey,
|
||||||
|
'User-Agent: cloudflare-php'
|
||||||
|
];
|
||||||
|
|
||||||
|
$url = self::ENDPOINT . ltrim($endpoint, '/');
|
||||||
|
switch ($method)
|
||||||
|
{
|
||||||
|
case self::POST :
|
||||||
|
curl_setopt($curl, CURLOPT_POST, true);
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
|
||||||
|
break;
|
||||||
|
case self::PUT :
|
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
|
||||||
|
$headers[] = 'Content-type: application/json';
|
||||||
|
break;
|
||||||
|
case self::PATCH :
|
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
|
||||||
|
$headers[] = 'Content-type: application/json';
|
||||||
|
break;
|
||||||
|
case self::DELETE :
|
||||||
|
curl_setopt($curl, CURLOPT_POST, true);
|
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
|
||||||
|
$headers[] = 'Content-type: application/json';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if ($params)
|
||||||
|
{
|
||||||
|
$url .= '?' . http_build_query($params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
||||||
|
curl_setopt($curl, CURLOPT_URL, $url);
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$response = json_decode(curl_exec($curl), true);
|
||||||
|
if (!$response)
|
||||||
|
{
|
||||||
|
throw new CloudflareException(curl_error($curl));
|
||||||
|
}
|
||||||
|
elseif (false == $response['success'])
|
||||||
|
{
|
||||||
|
throw new CloudflareException($response['errors'][0]['message']);
|
||||||
|
}
|
||||||
|
curl_close($curl);
|
||||||
|
|
||||||
|
$this->resultInfo = isset($response['result_info']) ? $response['result_info'] : null;
|
||||||
|
|
||||||
|
return $response['result'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issues an HTTP GET request
|
||||||
|
*
|
||||||
|
* @param string $endpoint
|
||||||
|
* @param array $params
|
||||||
|
*/
|
||||||
|
public function get($endpoint, $params = [])
|
||||||
|
{
|
||||||
|
return $this->request(self::GET, $endpoint, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issues an HTTP POST request
|
||||||
|
*
|
||||||
|
* @param string $endpoint
|
||||||
|
* @param array $params
|
||||||
|
*/
|
||||||
|
public function post($endpoint, $params = [])
|
||||||
|
{
|
||||||
|
return $this->request(self::POST, $endpoint, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issues an HTTP PUT request
|
||||||
|
*
|
||||||
|
* @param string $endpoint
|
||||||
|
* @param array $params
|
||||||
|
*/
|
||||||
|
public function put($endpoint, $params = [])
|
||||||
|
{
|
||||||
|
return $this->request(self::PUT, $endpoint, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issues an HTTP PATCH request
|
||||||
|
*
|
||||||
|
* @param string $endpoint
|
||||||
|
* @param array $params
|
||||||
|
*/
|
||||||
|
public function patch($endpoint, $params = [])
|
||||||
|
{
|
||||||
|
return $this->request(self::PATCH, $endpoint, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issues an HTTP DELETE request
|
||||||
|
*
|
||||||
|
* @param string $endpoint
|
||||||
|
* @param array $params
|
||||||
|
*/
|
||||||
|
public function delete($endpoint, $params = [])
|
||||||
|
{
|
||||||
|
return $this->request(self::DELETE, $endpoint, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZones(array $params = [])
|
||||||
|
{
|
||||||
|
return $this->get('/zones', $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getResultInfo()
|
||||||
|
{
|
||||||
|
return $this->resultInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZone($name)
|
||||||
|
{
|
||||||
|
$zones = $this->getZones([
|
||||||
|
'name' => $name
|
||||||
|
]);
|
||||||
|
foreach ($zones as $zone)
|
||||||
|
{
|
||||||
|
if ($zone['name'] == $name)
|
||||||
|
{
|
||||||
|
return $zone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZoneDnsRecords($zoneId, array $params = [])
|
||||||
|
{
|
||||||
|
return $this->get('/zones/' . $zoneId . '/dns_records', $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createDnsZone($name, array $params = [])
|
||||||
|
{
|
||||||
|
$params['name'] = $name;
|
||||||
|
return $this->post('/zones', $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a zone if it doesn't already exist.
|
||||||
|
*
|
||||||
|
* Returns information about the zone
|
||||||
|
*/
|
||||||
|
public function registerDnsZone($name, $params = [])
|
||||||
|
{
|
||||||
|
if ($res = $this->getZone($name))
|
||||||
|
{
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
return $this->createDnsZone($name, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDnsZoneSsl($zoneId, $type)
|
||||||
|
{
|
||||||
|
$allowedTypes = [
|
||||||
|
'off',
|
||||||
|
'flexible',
|
||||||
|
'full',
|
||||||
|
'full_strict'
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!in_array($type, $allowedTypes))
|
||||||
|
{
|
||||||
|
throw new Exception('SSL type not allowed. valid types are ' . join(', ', $allowedTypes));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->patch('/zones/' . $zoneId . '/settings/ssl', ['value' => $type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDnsZoneCache($zoneId, $type)
|
||||||
|
{
|
||||||
|
$allowedTypes = [
|
||||||
|
'aggressive',
|
||||||
|
'basic',
|
||||||
|
'simplified',
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!in_array($type, $allowedTypes))
|
||||||
|
{
|
||||||
|
throw new Exception('Cache type not allowed. valid types are ' . join(', ', $allowedTypes));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->patch('/zones/' . $zoneId . '/settings/cache_level', ['value' => $type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clearZoneCache($zoneId)
|
||||||
|
{
|
||||||
|
return $this->delete('/zones/' . $zoneId . '/purge_cache', ['purge_everything' => true]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDnsZoneMinify($zoneId, $settings)
|
||||||
|
{
|
||||||
|
return $this->patch('/zones/' . $zoneId . '/settings/minify', ['value' => $settings]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createDnsRecord($zoneId, $type, $name, $content, array $params = [])
|
||||||
|
{
|
||||||
|
$params = array_merge($params, [
|
||||||
|
'type' => $type,
|
||||||
|
'name' => $name,
|
||||||
|
'content' => $content,
|
||||||
|
]);
|
||||||
|
return $this->post('/zones/' . $zoneId . '/dns_records', $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateDnsRecord($zoneId, $recordId, array $params = [])
|
||||||
|
{
|
||||||
|
return $this->put('/zones/' . $zoneId . '/dns_records/' . $recordId, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteDnsRecord($zoneId, $recordId)
|
||||||
|
{
|
||||||
|
return $this->delete('/zones/' . $zoneId . '/dns_records/' . $recordId);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user