mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-07 22:06:05 +01:00
add dns records cloudflare
This commit is contained in:
@@ -255,8 +255,6 @@ class DNSManager:
|
|||||||
if ACLManager.currentContextPermission(currentACL, 'addDeleteRecords') == 0:
|
if ACLManager.currentContextPermission(currentACL, 'addDeleteRecords') == 0:
|
||||||
return ACLManager.loadErrorJson('add_status', 0)
|
return ACLManager.loadErrorJson('add_status', 0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
zoneDomain = data['selectedZone']
|
zoneDomain = data['selectedZone']
|
||||||
recordType = data['recordType']
|
recordType = data['recordType']
|
||||||
recordName = data['recordName']
|
recordName = data['recordName']
|
||||||
@@ -770,7 +768,7 @@ class DNSManager:
|
|||||||
for zone in sorted(zones, key=lambda v: v['name']):
|
for zone in sorted(zones, key=lambda v: v['name']):
|
||||||
zone_id = zone['id']
|
zone_id = zone['id']
|
||||||
|
|
||||||
dns_record = cf.zones.dns_records.delete(zone_id, int(id))
|
cf.zones.dns_records.delete(zone_id, int(id))
|
||||||
|
|
||||||
final_dic = {'status': 1, 'delete_status': 1, 'error_message': "None"}
|
final_dic = {'status': 1, 'delete_status': 1, 'error_message': "None"}
|
||||||
final_json = json.dumps(final_dic)
|
final_json = json.dumps(final_dic)
|
||||||
@@ -779,4 +777,192 @@ class DNSManager:
|
|||||||
except BaseException as msg:
|
except BaseException as msg:
|
||||||
final_dic = {'status': 0, 'delete_status': 0, 'error_message': str(msg)}
|
final_dic = {'status': 0, 'delete_status': 0, 'error_message': str(msg)}
|
||||||
final_json = json.dumps(final_dic)
|
final_json = json.dumps(final_dic)
|
||||||
|
return HttpResponse(final_json)
|
||||||
|
|
||||||
|
|
||||||
|
def addDNSRecordCloudFlare(self, userID = None, data = None):
|
||||||
|
try:
|
||||||
|
|
||||||
|
currentACL = ACLManager.loadedACL(userID)
|
||||||
|
|
||||||
|
if ACLManager.currentContextPermission(currentACL, 'addDeleteRecords') == 0:
|
||||||
|
return ACLManager.loadErrorJson('add_status', 0)
|
||||||
|
|
||||||
|
zoneDomain = data['selectedZone']
|
||||||
|
recordType = data['recordType']
|
||||||
|
recordName = data['recordName']
|
||||||
|
ttl = int(data['ttl'])
|
||||||
|
|
||||||
|
admin = Administrator.objects.get(pk=userID)
|
||||||
|
self.admin = admin
|
||||||
|
if ACLManager.checkOwnershipZone(zoneDomain, admin, currentACL) == 1:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
return ACLManager.loadErrorJson()
|
||||||
|
|
||||||
|
## Get zone
|
||||||
|
|
||||||
|
self.loadCFKeys()
|
||||||
|
|
||||||
|
params = {'name': zoneDomain, 'per_page': 50}
|
||||||
|
cf = CloudFlare.CloudFlare(email=self.email, token=self.key)
|
||||||
|
|
||||||
|
try:
|
||||||
|
zones = cf.zones.get(params=params)
|
||||||
|
except CloudFlare.CloudFlareAPIError as e:
|
||||||
|
final_json = json.dumps({'status': 0, 'delete_status': 0, 'error_message': str(e), "data": '[]'})
|
||||||
|
return HttpResponse(final_json)
|
||||||
|
|
||||||
|
for zone in sorted(zones, key=lambda v: v['name']):
|
||||||
|
zone = zone['id']
|
||||||
|
|
||||||
|
value = ""
|
||||||
|
|
||||||
|
if recordType == "A":
|
||||||
|
|
||||||
|
recordContentA = data['recordContentA'] ## IP or ponting value
|
||||||
|
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentA, 0, ttl)
|
||||||
|
|
||||||
|
elif recordType == "MX":
|
||||||
|
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
|
||||||
|
recordContentMX = data['recordContentMX']
|
||||||
|
priority = data['priority']
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentMX, priority, ttl)
|
||||||
|
|
||||||
|
elif recordType == "AAAA":
|
||||||
|
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
|
||||||
|
recordContentAAAA = data['recordContentAAAA'] ## IP or ponting value
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentAAAA, 0, ttl)
|
||||||
|
|
||||||
|
elif recordType == "CNAME":
|
||||||
|
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
|
||||||
|
recordContentCNAME = data['recordContentCNAME'] ## IP or ponting value
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentCNAME, 0, ttl)
|
||||||
|
|
||||||
|
elif recordType == "SPF":
|
||||||
|
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
|
||||||
|
recordContentSPF = data['recordContentSPF'] ## IP or ponting value
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentSPF, 0, ttl)
|
||||||
|
|
||||||
|
elif recordType == "TXT":
|
||||||
|
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
|
||||||
|
recordContentTXT = data['recordContentTXT'] ## IP or ponting value
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentTXT, 0, ttl)
|
||||||
|
|
||||||
|
elif recordType == "SOA":
|
||||||
|
|
||||||
|
recordContentSOA = data['recordContentSOA']
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, recordName, recordType, recordContentSOA, 0, ttl)
|
||||||
|
|
||||||
|
elif recordType == "NS":
|
||||||
|
|
||||||
|
recordContentNS = data['recordContentNS']
|
||||||
|
|
||||||
|
if recordContentNS == "@":
|
||||||
|
recordContentNS = "ns1." + zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?',
|
||||||
|
recordContentNS, M | I):
|
||||||
|
recordContentNS = recordContentNS
|
||||||
|
else:
|
||||||
|
recordContentNS = recordContentNS + "." + zoneDomain
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, recordName, recordType, recordContentNS, 0, ttl)
|
||||||
|
|
||||||
|
elif recordType == "SRV":
|
||||||
|
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
|
||||||
|
recordContentSRV = data['recordContentSRV']
|
||||||
|
priority = data['priority']
|
||||||
|
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentSRV, priority, ttl)
|
||||||
|
|
||||||
|
elif recordType == "CAA":
|
||||||
|
if recordName == "@":
|
||||||
|
value = zoneDomain
|
||||||
|
## re.match
|
||||||
|
elif match(r'([\da-z\.-]+\.[a-z\.]{2,12}|[\d\.]+)([\/:?=&#]{1}[\da-z\.-]+)*[\/\?]?', recordName,
|
||||||
|
M | I):
|
||||||
|
value = recordName
|
||||||
|
else:
|
||||||
|
value = recordName + "." + zoneDomain
|
||||||
|
recordContentCAA = data['recordContentCAA'] ## IP or ponting value
|
||||||
|
DNS.createDNSRecordCloudFlare(cf, zone, value, recordType, recordContentCAA, 0, ttl)
|
||||||
|
|
||||||
|
final_dic = {'status': 1, 'add_status': 1, 'error_message': "None"}
|
||||||
|
final_json = json.dumps(final_dic)
|
||||||
|
return HttpResponse(final_json)
|
||||||
|
|
||||||
|
except BaseException as msg:
|
||||||
|
final_dic = {'status': 0, 'add_status': 0, 'error_message': str(msg)}
|
||||||
|
final_json = json.dumps(final_dic)
|
||||||
return HttpResponse(final_json)
|
return HttpResponse(final_json)
|
||||||
@@ -763,7 +763,7 @@ app.controller('addModifyDNSRecordsCloudFlare', function ($scope, $http) {
|
|||||||
$scope.recordsLoading = false;
|
$scope.recordsLoading = false;
|
||||||
|
|
||||||
|
|
||||||
url = "/dns/addDNSRecord";
|
url = "/dns/addDNSRecordCloudFlare";
|
||||||
|
|
||||||
|
|
||||||
// Record specific values
|
// Record specific values
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ urlpatterns = [
|
|||||||
url(r'^NSCreation',views.NSCreation,name="NSCreation"),
|
url(r'^NSCreation',views.NSCreation,name="NSCreation"),
|
||||||
url(r'^zoneCreation', views.zoneCreation, name='zoneCreation'),
|
url(r'^zoneCreation', views.zoneCreation, name='zoneCreation'),
|
||||||
url(r'^getCurrentRecordsForDomain$',views.getCurrentRecordsForDomain,name='getCurrentRecordsForDomain'),
|
url(r'^getCurrentRecordsForDomain$',views.getCurrentRecordsForDomain,name='getCurrentRecordsForDomain'),
|
||||||
url(r'^addDNSRecord',views.addDNSRecord,name='addDNSRecord'),
|
url(r'^addDNSRecord$',views.addDNSRecord,name='addDNSRecord'),
|
||||||
url(r'^deleteDNSRecord$',views.deleteDNSRecord,name='deleteDNSRecord'),
|
url(r'^deleteDNSRecord$',views.deleteDNSRecord,name='deleteDNSRecord'),
|
||||||
url(r'^deleteDNSZone',views.deleteDNSZone,name='deleteDNSZone'),
|
url(r'^deleteDNSZone',views.deleteDNSZone,name='deleteDNSZone'),
|
||||||
url(r'^submitZoneDeletion',views.submitZoneDeletion,name='submitZoneDeletion'),
|
url(r'^submitZoneDeletion',views.submitZoneDeletion,name='submitZoneDeletion'),
|
||||||
@@ -21,6 +21,6 @@ urlpatterns = [
|
|||||||
url(r'^saveCFConfigs$', views.saveCFConfigs, name='saveCFConfigs'),
|
url(r'^saveCFConfigs$', views.saveCFConfigs, name='saveCFConfigs'),
|
||||||
|
|
||||||
url(r'^getCurrentRecordsForDomainCloudFlare$', views.getCurrentRecordsForDomainCloudFlare, name='getCurrentRecordsForDomainCloudFlare'),
|
url(r'^getCurrentRecordsForDomainCloudFlare$', views.getCurrentRecordsForDomainCloudFlare, name='getCurrentRecordsForDomainCloudFlare'),
|
||||||
url(r'^deleteDNSRecordCloudFlare$', views.deleteDNSRecordCloudFlare,
|
url(r'^deleteDNSRecordCloudFlare$', views.deleteDNSRecordCloudFlare, name='deleteDNSRecordCloudFlare'),
|
||||||
name='deleteDNSRecordCloudFlare'),
|
url(r'^addDNSRecordCloudFlare$', views.addDNSRecordCloudFlare,name='addDNSRecordCloudFlare')
|
||||||
]
|
]
|
||||||
12
dns/views.py
12
dns/views.py
@@ -208,3 +208,15 @@ def deleteDNSRecordCloudFlare(request):
|
|||||||
return coreResult
|
return coreResult
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return redirect(loadLoginPage)
|
return redirect(loadLoginPage)
|
||||||
|
|
||||||
|
def addDNSRecordCloudFlare(request):
|
||||||
|
try:
|
||||||
|
userID = request.session['userID']
|
||||||
|
|
||||||
|
dm = DNSManager()
|
||||||
|
coreResult = dm.addDNSRecordCloudFlare(userID, json.loads(request.body))
|
||||||
|
|
||||||
|
return coreResult
|
||||||
|
|
||||||
|
except KeyError:
|
||||||
|
return redirect(loadLoginPage)
|
||||||
|
|||||||
@@ -419,6 +419,12 @@ class DNS:
|
|||||||
except:
|
except:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def createDNSRecordCloudFlare(cf, zone, name, type, value, priority, ttl):
|
||||||
|
dns_record = {'name': name, 'type': type, 'content': value, 'ttl': ttl, 'priority': priority}
|
||||||
|
r = cf.zones.dns_records.post(zone, data=dns_record)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def createDNSRecord(zone, name, type, value, priority, ttl):
|
def createDNSRecord(zone, name, type, value, priority, ttl):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user