mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Update Cloudflare.php
This commit is contained in:
parent
9b1f5651c6
commit
272d8764b0
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user