Update Cloudflare.php

This commit is contained in:
David Bomba 2018-04-26 08:12:53 +10:00 committed by GitHub
parent 9b1f5651c6
commit 272d8764b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,103 +1,66 @@
<?php <?php
namespace App\Ninja\DNS; namespace App\Ninja\DNS;
use App\Libraries\Utils; use App\Libraries\Utils;
use App\Models\Account; use App\Models\Account;
class Cloudflare class Cloudflare
{ {
public static function addDNSRecord(Account $account){ public static function addDNSRecord(Account $account){
$zones = json_decode(env('CLOUDFLARE_ZONE_IDS',''), true); $zones = json_decode(env('CLOUDFLARE_ZONE_IDS',''), true);
foreach($zones as $zone) foreach($zones as $zone)
{ {
if($account->subdomain != "") if($account->subdomain != "")
{ {
$jsonEncodedData = json_encode(['type' => 'A', 'name' => $account->subdomain, 'content' => env('CLOUDFLARE_TARGET_IP_ADDRESS', ''), 'proxied' => true]); $jsonEncodedData = json_encode(['type' => 'A', 'name' => $account->subdomain, 'content' => env('CLOUDFLARE_TARGET_IP_ADDRESS', ''), 'proxied' => true]);
$requestType = 'POST'; $requestType = 'POST';
$url = 'https://api.cloudflare.com/client/v4/zones/' . $zone . '/dns_records'; $url = 'https://api.cloudflare.com/client/v4/zones/' . $zone . '/dns_records';
$response = self::curlCloudFlare($requestType, $url, $jsonEncodedData); $response = self::curlCloudFlare($requestType, $url, $jsonEncodedData);
if ($response['status'] != 200) if ($response['status'] != 200)
Utils::logError('Unable to update subdomain ' . $account->subdomain . ' @ Cloudflare - ' . $response['result']['result']); Utils::logError('Unable to update subdomain ' . $account->subdomain . ' @ Cloudflare - ' . $response['result']['result']);
} }
} }
} }
public static function removeDNSRecord(Account $account) { public static function removeDNSRecord(Account $account) {
$zones = json_decode(env('CLOUDFLARE_ZONE_IDS',''), true); $zones = json_decode(env('CLOUDFLARE_ZONE_IDS',''), true);
foreach($zones as $zone) foreach($zones as $zone)
{ {
if($account->subdomain != "") if($account->subdomain != "")
{ {
$dnsRecordId = self::getDNSRecord($zone, $account->subdomain); $dnsRecordId = self::getDNSRecord($zone, $account->subdomain);
//test record exists
if($dnsRecordId == 0)
return;
$jsonEncodedData = json_encode([]); $jsonEncodedData = json_encode([]);
$requestType = 'DELETE'; $requestType = 'DELETE';
$url = 'https://api.cloudflare.com/client/v4/zones/' . $zone . '/dns_records/'. $dnsRecordId .''; $url = 'https://api.cloudflare.com/client/v4/zones/' . $zone . '/dns_records/'. $dnsRecordId .'';
$response = self::curlCloudFlare($requestType, $url, $jsonEncodedData); $response = self::curlCloudFlare($requestType, $url, $jsonEncodedData);
if ($response['status'] != 200) if ($response['status'] != 200)
Utils::logError('Unable to delete subdomain ' . $account->subdomain . ' @ Cloudflare - ' . $response['result']['result']); Utils::logError('Unable to delete subdomain ' . $account->subdomain . ' @ Cloudflare - ' . $response['result']['result']);
} }
} }
} }
public static function getDNSRecord($zone, $aRecord) public static function getDNSRecord($zone, $aRecord)
{ {
//harvest the zone_name //harvest the zone_name
$url = 'https://api.cloudflare.com/client/v4/zones/'. $zone .'/dns_records?type=A&per_page=1'; $url = 'https://api.cloudflare.com/client/v4/zones/'. $zone .'/dns_records?type=A&per_page=1';
$requestType = 'GET'; $requestType = 'GET';
$jsonEncodedData = json_encode([]); $jsonEncodedData = json_encode([]);
$response = self::curlCloudFlare($requestType, $url, $jsonEncodedData); $response = self::curlCloudFlare($requestType, $url, $jsonEncodedData);
if ($response['status'] != 200) if ($response['status'] != 200)
Utils::logError('Unable to get the zone name for ' . $aRecord . ' @ Cloudflare - ' . $response['result']['result']); Utils::logError('Unable to get the zone name for ' . $aRecord . ' @ Cloudflare - ' . $response['result']['result']);
$zoneName = $response['result']['result'][0]['zone_name']; $zoneName = $response['result']['result'][0]['zone_name'];
//get the A record //get the A record
$url = 'https://api.cloudflare.com/client/v4/zones/'. $zone .'/dns_records?type=A&name='. $aRecord .'.'. $zoneName .' '; $url = 'https://api.cloudflare.com/client/v4/zones/'. $zone .'/dns_records?type=A&name='. $aRecord .'.'. $zoneName .' ';
$response = self::curlCloudFlare($requestType, $url, $jsonEncodedData); $response = self::curlCloudFlare($requestType, $url, $jsonEncodedData);
if ($response['status'] != 200) if ($response['status'] != 200)
Utils::logError('Unable to get the record ID for ' . $aRecord . ' @ Cloudflare - ' . $response['result']['result']); Utils::logError('Unable to get the record ID for ' . $aRecord . ' @ Cloudflare - ' . $response['result']['result']);
if(isset($response['result']['result'][0]))
return $response['result']['result'][0]['id']; return $response['result']['result'][0]['id'];
else
return 0;
} }
private static function curlCloudFlare($requestType, $url, $jsonEncodedData) private static function curlCloudFlare($requestType, $url, $jsonEncodedData)
{ {
$curl = curl_init(); $curl = curl_init();
$opts = [ $opts = [
CURLOPT_URL => $url, CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true, CURLOPT_RETURNTRANSFER => true,
@ -110,22 +73,12 @@ class Cloudflare
'X-Auth-Key: ' . env('CLOUDFLARE_API_KEY', '') 'X-Auth-Key: ' . env('CLOUDFLARE_API_KEY', '')
], ],
]; ];
curl_setopt_array($curl, $opts); curl_setopt_array($curl, $opts);
$result = curl_exec($curl); $result = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$data['status'] = $status; $data['status'] = $status;
$data['result'] = \json_decode($result, true); $data['result'] = \json_decode($result, true);
curl_close($curl); curl_close($curl);
return $data; return $data;
} }
} }