sync to cf by default

This commit is contained in:
Usman Nasir
2020-02-14 00:26:51 +05:00
parent 2c23c1f2f7
commit a291d932c6
2 changed files with 81 additions and 56 deletions

View File

@@ -987,65 +987,16 @@ class DNSManager:
## Get zone
self.loadCFKeys()
dns = DNS()
status, error = dns.cfTemplate(zoneDomain, admin)
cf = CloudFlare.CloudFlare(email=self.email, token=self.key)
try:
params = {'name': zoneDomain, 'per_page': 50}
zones = cf.zones.get(params=params)
for zone in sorted(zones, key=lambda v: v['name']):
zone = zone['id']
domain = Domains.objects.get(name=zoneDomain)
records = Records.objects.filter(domain_id=domain.id)
for record in records:
DNS.createDNSRecordCloudFlare(cf, zone, record.name, record.type, record.content, record.prio,
record.ttl)
final_dic = {'status': 1, 'error_message': "None"}
if status == 1:
final_dic = {'status': 1, 'error_message': 'None'}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except CloudFlare.exceptions.CloudFlareAPIError as e:
logging.writeToFile(str(e))
except Exception as e:
logging.writeToFile(str(e))
try:
zone_info = cf.zones.post(data={'jump_start': False, 'name': zoneDomain})
zone = zone_info['id']
domain = Domains.objects.get(name=zoneDomain)
records = Records.objects.filter(domain_id=domain.id)
for record in records:
DNS.createDNSRecordCloudFlare(cf, zone, record.name, record.type, record.content, record.prio,
record.ttl)
final_dic = {'status': 1, 'error_message': "None"}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except CloudFlare.exceptions.CloudFlareAPIError as e:
logging.writeToFile(str(e))
final_dic = {'status': 0, 'error_message': str(e)}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except Exception as e:
logging.writeToFile(str(e))
final_dic = {'status': 0, 'error_message': str(e)}
else:
final_dic = {'status': 0, 'error_message': error}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)

View File

@@ -12,11 +12,11 @@ import subprocess
import shlex
try:
from dns.models import Domains,Records
from plogical.processUtilities import ProcessUtilities
from manageServices.models import PDNSStatus, SlaveServers
except:
pass
import CloudFlare
from plogical.processUtilities import ProcessUtilities
class DNS:
@@ -28,6 +28,77 @@ class DNS:
## DNS Functions
def loadCFKeys(self):
cfFile = '%s%s' % (DNS.CFPath, self.admin.userName)
data = open(cfFile, 'r').readlines()
self.email = data[0].rstrip('\n')
self.key = data[1].rstrip('\n')
self.status = data[2].rstrip('\n')
def cfTemplate(self, zoneDomain, admin, enableCheck = None):
try:
self.admin = admin
## Get zone
self.loadCFKeys()
if enableCheck == None:
pass
else:
if self.status == 'Enable':
pass
else:
return 0, 'Sync not enabled.'
cf = CloudFlare.CloudFlare(email=self.email, token=self.key)
try:
params = {'name': zoneDomain, 'per_page': 50}
zones = cf.zones.get(params=params)
for zone in sorted(zones, key=lambda v: v['name']):
zone = zone['id']
domain = Domains.objects.get(name=zoneDomain)
records = Records.objects.filter(domain_id=domain.id)
for record in records:
DNS.createDNSRecordCloudFlare(cf, zone, record.name, record.type, record.content, record.prio,
record.ttl)
return 1, None
except CloudFlare.exceptions.CloudFlareAPIError as e:
logging.CyberCPLogFileWriter.writeToFile(str(e))
except Exception as e:
logging.CyberCPLogFileWriter.writeToFile(str(e))
try:
zone_info = cf.zones.post(data={'jump_start': False, 'name': zoneDomain})
zone = zone_info['id']
domain = Domains.objects.get(name=zoneDomain)
records = Records.objects.filter(domain_id=domain.id)
for record in records:
DNS.createDNSRecordCloudFlare(cf, zone, record.name, record.type, record.content, record.prio,
record.ttl)
return 1, None
except CloudFlare.exceptions.CloudFlareAPIError as e:
return 0, str(e)
except Exception as e:
return 0, str(e)
except BaseException as msg:
return 0, str(e)
@staticmethod
def dnsTemplate(domain, admin):
try:
@@ -372,6 +443,9 @@ class DNS:
command = 'sudo systemctl restart pdns'
ProcessUtilities.executioner(command)
dns = DNS()
dns.cfTemplate(domain, admin)
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile(
"We had errors while creating DNS records for: " + domain + ". Error message: " + str(msg))