diff --git a/dns/dnsManager.py b/dns/dnsManager.py index c33a1e30e..807ecf4d1 100755 --- a/dns/dnsManager.py +++ b/dns/dnsManager.py @@ -768,7 +768,7 @@ class DNSManager: for zone in sorted(zones, key=lambda v: v['name']): zone_id = zone['id'] - cf.zones.dns_records.delete(zone_id, int(id)) + cf.zones.dns_records.delete(zone_id, id) final_dic = {'status': 1, 'delete_status': 1, 'error_message': "None"} final_json = json.dumps(final_dic) @@ -965,4 +965,78 @@ class DNSManager: 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) + + def syncCF(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'] + + 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) + + 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"} + final_json = json.dumps(final_dic) + return HttpResponse(final_json) + + except CloudFlare.CloudFlareAPIError as 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 BaseException as msg: + logging.writeToFile(str(msg)) + final_dic = {'status': 0, 'error_message': str(msg)} + final_json = json.dumps(final_dic) + return HttpResponse(final_json) + + final_dic = {'status': 1, 'error_message': "None"} + final_json = json.dumps(final_dic) + return HttpResponse(final_json) + + except BaseException as msg: + final_dic = {'status': 0, 'error_message': str(msg)} + final_json = json.dumps(final_dic) return HttpResponse(final_json) \ No newline at end of file diff --git a/dns/static/dns/dns.js b/dns/static/dns/dns.js index 5e3b33732..fc60ecf64 100755 --- a/dns/static/dns/dns.js +++ b/dns/static/dns/dns.js @@ -1051,6 +1051,90 @@ app.controller('addModifyDNSRecordsCloudFlare', function ($scope, $http) { }; + $scope.syncCF = function () { + + + var selectedZone = $scope.selectedZone; + + url = "/dns/syncCF"; + + var data = { + selectedZone: selectedZone + }; + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + + + if (response.data.status === 1) { + + + $scope.addRecordsBox = false; + $scope.currentRecords = false; + $scope.canNotFetchRecords = true; + $scope.recordsFetched = true; + $scope.recordDeleted = false; + $scope.recordAdded = true; + $scope.couldNotConnect = true; + $scope.recordsLoading = true; + $scope.recordDeleted = true; + $scope.couldNotDeleteRecords = true; + $scope.couldNotAddRecord = true; + + populateCurrentRecords(); + + + } else { + + $scope.addRecordsBox = true; + $scope.currentRecords = true; + $scope.canNotFetchRecords = true; + $scope.recordsFetched = false; + $scope.recordDeleted = true; + $scope.recordAdded = true; + $scope.couldNotConnect = true; + $scope.recordsLoading = true; + $scope.recordDeleted = true; + $scope.couldNotDeleteRecords = false; + $scope.couldNotAddRecord = true; + + + $scope.errorMessage = response.data.error_message; + + + } + + } + + function cantLoadInitialDatas(response) { + + $scope.addRecordsBox = false; + $scope.currentRecords = false; + $scope.canNotFetchRecords = true; + $scope.recordsFetched = true; + $scope.recordDeleted = true; + $scope.recordAdded = true; + $scope.couldNotConnect = false; + $scope.recordsLoading = true; + $scope.recordDeleted = true; + $scope.couldNotDeleteRecords = true; + $scope.couldNotAddRecord = true; + + + } + + + }; + }); diff --git a/dns/templates/dns/addDeleteDNSRecordsCloudFlare.html b/dns/templates/dns/addDeleteDNSRecordsCloudFlare.html index 2bcb91627..f4d245915 100755 --- a/dns/templates/dns/addDeleteDNSRecordsCloudFlare.html +++ b/dns/templates/dns/addDeleteDNSRecordsCloudFlare.html @@ -88,7 +88,7 @@
- +
+
+ +
diff --git a/dns/urls.py b/dns/urls.py index cdbba940b..d3e560806 100755 --- a/dns/urls.py +++ b/dns/urls.py @@ -22,5 +22,6 @@ urlpatterns = [ url(r'^getCurrentRecordsForDomainCloudFlare$', views.getCurrentRecordsForDomainCloudFlare, name='getCurrentRecordsForDomainCloudFlare'), url(r'^deleteDNSRecordCloudFlare$', views.deleteDNSRecordCloudFlare, name='deleteDNSRecordCloudFlare'), - url(r'^addDNSRecordCloudFlare$', views.addDNSRecordCloudFlare,name='addDNSRecordCloudFlare') + url(r'^addDNSRecordCloudFlare$', views.addDNSRecordCloudFlare,name='addDNSRecordCloudFlare'), + url(r'^syncCF$', views.syncCF, name='syncCF') ] \ No newline at end of file diff --git a/dns/views.py b/dns/views.py index 0192cc07b..6e29fdde1 100755 --- a/dns/views.py +++ b/dns/views.py @@ -220,3 +220,15 @@ def addDNSRecordCloudFlare(request): except KeyError: return redirect(loadLoginPage) + +def syncCF(request): + try: + userID = request.session['userID'] + + dm = DNSManager() + coreResult = dm.syncCF(userID, json.loads(request.body)) + + return coreResult + + except KeyError: + return redirect(loadLoginPage) diff --git a/plogical/dnsUtilities.py b/plogical/dnsUtilities.py index a0c3ab820..f77de933c 100755 --- a/plogical/dnsUtilities.py +++ b/plogical/dnsUtilities.py @@ -421,8 +421,11 @@ class DNS: @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) + try: + dns_record = {'name': name, 'type': type, 'content': value, 'ttl': ttl, 'priority': priority} + r = cf.zones.dns_records.post(zone, data=dns_record) + except BaseException as msg: + logging.CyberCPLogFileWriter.writeToFile(str(msg)) @staticmethod