This commit is contained in:
Usman Nasir
2020-02-12 14:44:38 +05:00
parent 122b6f0bdd
commit d170a8e283
6 changed files with 183 additions and 5 deletions

View File

@@ -768,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']
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_dic = {'status': 1, 'delete_status': 1, 'error_message': "None"}
final_json = json.dumps(final_dic) final_json = json.dumps(final_dic)
@@ -966,3 +966,77 @@ class DNSManager:
final_dic = {'status': 0, 'add_status': 0, 'error_message': str(msg)} final_dic = {'status': 0, 'add_status': 0, 'error_message': str(msg)}
final_json = json.dumps(final_dic) final_json = json.dumps(final_dic)
return HttpResponse(final_json) 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)

View File

@@ -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;
}
};
}); });

View File

@@ -88,7 +88,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">{% trans "Select Domain" %} </label> <label class="col-sm-2 control-label">{% trans "Select Domain" %} </label>
<div class="col-sm-6"> <div class="col-sm-6">
<select ng-change="fetchRecords()" ng-model="selectedZone" class="form-control"> <select ng-change="fetchRecords()" ng-model="selectedZone" class="form-control">
{% for items in domainsList %} {% for items in domainsList %}
@@ -96,6 +96,10 @@
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
<div ng-hide="addRecordsBox" class="col-sm-4">
<button style="width: 100%;" type="button" ng-click="syncCF()"
class="btn btn-primary">{% trans "Sync Local Records to CloudFlare" %}</button>
</div>
</div> </div>

View File

@@ -22,5 +22,6 @@ urlpatterns = [
url(r'^getCurrentRecordsForDomainCloudFlare$', views.getCurrentRecordsForDomainCloudFlare, name='getCurrentRecordsForDomainCloudFlare'), url(r'^getCurrentRecordsForDomainCloudFlare$', views.getCurrentRecordsForDomainCloudFlare, name='getCurrentRecordsForDomainCloudFlare'),
url(r'^deleteDNSRecordCloudFlare$', views.deleteDNSRecordCloudFlare, name='deleteDNSRecordCloudFlare'), 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')
] ]

View File

@@ -220,3 +220,15 @@ def addDNSRecordCloudFlare(request):
except KeyError: except KeyError:
return redirect(loadLoginPage) 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)

View File

@@ -421,8 +421,11 @@ class DNS:
@staticmethod @staticmethod
def createDNSRecordCloudFlare(cf, zone, name, type, value, priority, ttl): def createDNSRecordCloudFlare(cf, zone, name, type, value, priority, ttl):
try:
dns_record = {'name': name, 'type': type, 'content': value, 'ttl': ttl, 'priority': priority} dns_record = {'name': name, 'type': type, 'content': value, 'ttl': ttl, 'priority': priority}
r = cf.zones.dns_records.post(zone, data=dns_record) r = cf.zones.dns_records.post(zone, data=dns_record)
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
@staticmethod @staticmethod