diff --git a/CyberCP/secMiddleware.py b/CyberCP/secMiddleware.py index 7cb0562b7..8f0271330 100755 --- a/CyberCP/secMiddleware.py +++ b/CyberCP/secMiddleware.py @@ -73,7 +73,7 @@ class secMiddleware: or key == 'imageByPass' or key == 'passwordByPass' or key == 'cronCommand' \ or key == 'emailMessage' or key == 'configData' or key == 'rewriteRules' \ or key == 'modSecRules' or key == 'recordContentTXT' or key == 'SecAuditLogRelevantStatus' \ - or key == 'fileContent' or key == 'commands' or key == 'gitHost' or key == 'ipv6': + or key == 'fileContent' or key == 'commands' or key == 'gitHost' or key == 'ipv6' or key == 'contentNow': continue if value.find(';') > -1 or value.find('&&') > -1 or value.find('|') > -1 or value.find('...') > -1 \ or value.find("`") > -1 or value.find("$") > -1 or value.find("(") > -1 or value.find(")") > -1 \ diff --git a/dns/dnsManager.py b/dns/dnsManager.py index fc2654a78..d65a61376 100755 --- a/dns/dnsManager.py +++ b/dns/dnsManager.py @@ -418,6 +418,47 @@ class DNSManager: final_json = json.dumps(final_dic) return HttpResponse(final_json) + def updateRecord(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) + if ACLManager.checkOwnershipZone(zoneDomain, admin, currentACL) == 1: + pass + else: + return ACLManager.loadErrorJson() + + record = Records.objects.get(pk=data['id']) + + if data['nameNow'] != None: + record.name = data['nameNow'] + + if data['ttlNow'] != None: + record.ttl = int(data['ttlNow']) + + if data['priorityNow'] != None: + record.prio = int(data['priorityNow']) + + if data['contentNow'] != None: + record.content = data['contentNow'] + + record.save() + + 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) + def deleteDNSRecord(self, userID = None, data = None): try: currentACL = ACLManager.loadedACL(userID) diff --git a/dns/static/dns/dns.js b/dns/static/dns/dns.js index 516d2f4de..18cc88645 100755 --- a/dns/static/dns/dns.js +++ b/dns/static/dns/dns.js @@ -154,346 +154,434 @@ app.controller('createDNSZone', function ($scope, $http) { app.controller('addModifyDNSRecords', function ($scope, $http) { - $scope.addRecordsBox = true; - $scope.currentRecords = true; - $scope.canNotFetchRecords = true; - $scope.recordsFetched = true; - $scope.recordDeleted = true; - $scope.recordAdded = true; - $scope.couldNotConnect = true; - $scope.recordsLoading = true; - $scope.recordDeleted = true; - $scope.couldNotDeleteRecords = true; - $scope.couldNotAddRecord = true; - $scope.recordValueDefault = false; + $scope.addRecordsBox = true; + $scope.currentRecords = true; + $scope.canNotFetchRecords = true; + $scope.recordsFetched = true; + $scope.recordDeleted = true; + $scope.recordAdded = true; + $scope.couldNotConnect = true; + $scope.recordsLoading = true; + $scope.recordDeleted = true; + $scope.couldNotDeleteRecords = true; + $scope.couldNotAddRecord = true; + $scope.recordValueDefault = false; - // Hide records boxes - $(".aaaaRecord").hide(); - $(".cNameRecord").hide(); - $(".mxRecord").hide(); - $(".txtRecord").hide(); - $(".spfRecord").hide(); - $(".nsRecord").hide(); - $(".soaRecord").hide(); - $(".srvRecord").hide(); - $(".caaRecord").hide(); + // Hide records boxes + $(".aaaaRecord").hide(); + $(".cNameRecord").hide(); + $(".mxRecord").hide(); + $(".txtRecord").hide(); + $(".spfRecord").hide(); + $(".nsRecord").hide(); + $(".soaRecord").hide(); + $(".srvRecord").hide(); + $(".caaRecord").hide(); - var currentSelection = "aRecord"; - $("#" + currentSelection).addClass("active"); - - $scope.fetchRecordsTabs = function (recordType) { - $("#" + currentSelection).removeClass("active"); - $("." + currentSelection).hide(); - $scope.recordsLoading = false; - currentSelection = recordType; + var currentSelection = "aRecord"; $("#" + currentSelection).addClass("active"); - $("." + currentSelection).show(); - populateCurrentRecords(); - }; - - $scope.fetchRecords = function () { - $scope.recordsLoading = false; - $scope.addRecordsBox = false; - populateCurrentRecords(); - }; - - - $scope.addDNSRecord = function (type) { - - $scope.recordsLoading = false; - - - url = "/dns/addDNSRecord"; - - - // Record specific values - - var data = {}; - - if (type === "MX") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentMX = $scope.recordContentMX; - data.priority = $scope.priority; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "A") { - - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentA = $scope.recordContentA; - data.ttl = $scope.ttl; - data.recordType = type; - - } else if (type === "AAAA") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentAAAA = $scope.recordContentAAAA; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "CNAME") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentCNAME = $scope.recordContentCNAME; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "SPF") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentSPF = $scope.recordContentSPF; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "SOA") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.selectedZone; - data.recordContentSOA = $scope.recordContentSOA; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "TXT") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentTXT = $scope.recordContentTXT; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "NS") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.selectedZone; - data.recordContentNS = $scope.recordContentNS; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "SRV") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentSRV = $scope.recordContentSRV; - data.priority = $scope.priority; - data.ttl = $scope.ttl; - data.recordType = type; - } else if (type === "CAA") { - data.selectedZone = $scope.selectedZone; - data.recordName = $scope.recordName; - data.recordContentCAA = $scope.recordContentCAA; - data.ttl = $scope.ttl; - data.recordType = type; - } - - - var config = { - headers: { - 'X-CSRFToken': getCookie('csrftoken') - } + $scope.fetchRecordsTabs = function (recordType) { + $("#" + currentSelection).removeClass("active"); + $("." + currentSelection).hide(); + $scope.recordsLoading = false; + currentSelection = recordType; + $("#" + currentSelection).addClass("active"); + $("." + currentSelection).show(); + populateCurrentRecords(); }; - $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); - - - function ListInitialDatas(response) { - - - if (response.data.add_status === 1) { - - - populateCurrentRecords(); - - $scope.canNotFetchRecords = true; - $scope.recordsFetched = false; - $scope.recordDeleted = true; - $scope.recordAdded = false; - $scope.couldNotConnect = true; - $scope.couldNotAddRecord = true; - $scope.recordsLoading = true; - - - } else { - - $scope.recordsFetched = true; - $scope.recordDeleted = true; - $scope.recordAdded = true; - $scope.couldNotConnect = true; - $scope.recordsLoading = true; - $scope.couldNotAddRecord = false; - - $scope.errorMessage = response.data.error_message; - } - - } - - function cantLoadInitialDatas(response) { - - $scope.addRecordsBox = true; - $scope.currentRecords = true; - $scope.canNotFetchRecords = true; - $scope.recordsFetched = true; - $scope.recordDeleted = true; - $scope.recordAdded = true; - $scope.couldNotConnect = false; - $scope.couldNotAddRecord = true; - - - } - - }; - - - function populateCurrentRecords() { - - var selectedZone = $scope.selectedZone; - - url = "/dns/getCurrentRecordsForDomain"; - - var data = { - selectedZone: selectedZone, - currentSelection: currentSelection - }; - - var config = { - headers: { - 'X-CSRFToken': getCookie('csrftoken') - } + $scope.fetchRecords = function () { + $scope.recordsLoading = false; + $scope.addRecordsBox = false; + populateCurrentRecords(); }; - $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + $scope.addDNSRecord = function (type) { + + $scope.recordsLoading = false; - function ListInitialDatas(response) { - if (response.data.fetchStatus === 1) { + url = "/dns/addDNSRecord"; - $scope.records = JSON.parse(response.data.data); - $scope.currentRecords = false; - $scope.canNotFetchRecords = true; - $scope.recordsFetched = false; - $scope.recordDeleted = true; - $scope.recordAdded = true; - $scope.couldNotConnect = true; - $scope.recordsLoading = true; - $scope.couldNotAddRecord = true; + // Record specific values - $scope.domainFeteched = $scope.selectedZone; + var data = {}; - } else { + if (type === "MX") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentMX = $scope.recordContentMX; + data.priority = $scope.priority; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "A") { + + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentA = $scope.recordContentA; + data.ttl = $scope.ttl; + data.recordType = type; + + } else if (type === "AAAA") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentAAAA = $scope.recordContentAAAA; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "CNAME") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentCNAME = $scope.recordContentCNAME; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "SPF") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentSPF = $scope.recordContentSPF; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "SOA") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.selectedZone; + data.recordContentSOA = $scope.recordContentSOA; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "TXT") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentTXT = $scope.recordContentTXT; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "NS") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.selectedZone; + data.recordContentNS = $scope.recordContentNS; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "SRV") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentSRV = $scope.recordContentSRV; + data.priority = $scope.priority; + data.ttl = $scope.ttl; + data.recordType = type; + } else if (type === "CAA") { + data.selectedZone = $scope.selectedZone; + data.recordName = $scope.recordName; + data.recordContentCAA = $scope.recordContentCAA; + data.ttl = $scope.ttl; + data.recordType = type; + } + + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + + + if (response.data.add_status === 1) { + + + populateCurrentRecords(); + + $scope.canNotFetchRecords = true; + $scope.recordsFetched = false; + $scope.recordDeleted = true; + $scope.recordAdded = false; + $scope.couldNotConnect = true; + $scope.couldNotAddRecord = true; + $scope.recordsLoading = true; + + + } else { + + $scope.recordsFetched = true; + $scope.recordDeleted = true; + $scope.recordAdded = true; + $scope.couldNotConnect = true; + $scope.recordsLoading = true; + $scope.couldNotAddRecord = false; + + $scope.errorMessage = response.data.error_message; + } + + } + + function cantLoadInitialDatas(response) { $scope.addRecordsBox = true; $scope.currentRecords = true; - $scope.canNotFetchRecords = false; + $scope.canNotFetchRecords = true; $scope.recordsFetched = true; $scope.recordDeleted = true; $scope.recordAdded = true; - $scope.couldNotConnect = true; - $scope.recordsLoading = true; + $scope.couldNotConnect = false; $scope.couldNotAddRecord = true; - $scope.errorMessage = response.data.error_message; + } - } - - function cantLoadInitialDatas(response) { - - $scope.addRecordsBox = true; - $scope.currentRecords = true; - $scope.canNotFetchRecords = true; - $scope.recordsFetched = true; - $scope.recordDeleted = true; - $scope.recordAdded = true; - $scope.couldNotConnect = false; - $scope.couldNotAddRecord = true; - - - } - - }; - - - $scope.deleteRecord = function (id) { - - - var selectedZone = $scope.selectedZone; - - url = "/dns/deleteDNSRecord"; - - var data = { - id: id, - }; - - var config = { - headers: { - 'X-CSRFToken': getCookie('csrftoken') - } }; - $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + function populateCurrentRecords() { + + var selectedZone = $scope.selectedZone; + + url = "/dns/getCurrentRecordsForDomain"; + + var data = { + selectedZone: selectedZone, + currentSelection: currentSelection + }; + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; - function ListInitialDatas(response) { + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); - if (response.data.delete_status == 1) { + function ListInitialDatas(response) { + if (response.data.fetchStatus === 1) { + $scope.records = JSON.parse(response.data.data); + + $scope.currentRecords = false; + $scope.canNotFetchRecords = true; + $scope.recordsFetched = false; + $scope.recordDeleted = true; + $scope.recordAdded = true; + $scope.couldNotConnect = true; + $scope.recordsLoading = true; + $scope.couldNotAddRecord = true; + + $scope.domainFeteched = $scope.selectedZone; + + } else { + + $scope.addRecordsBox = true; + $scope.currentRecords = true; + $scope.canNotFetchRecords = false; + $scope.recordsFetched = true; + $scope.recordDeleted = true; + $scope.recordAdded = true; + $scope.couldNotConnect = true; + $scope.recordsLoading = true; + $scope.couldNotAddRecord = true; + + $scope.errorMessage = response.data.error_message; + } + + } + + function cantLoadInitialDatas(response) { + + $scope.addRecordsBox = true; + $scope.currentRecords = true; + $scope.canNotFetchRecords = true; + $scope.recordsFetched = true; + $scope.recordDeleted = true; + $scope.recordAdded = true; + $scope.couldNotConnect = false; + $scope.couldNotAddRecord = true; + + + } + + }; + + var globalID = null; + var nameNow = null; + var ttlNow = null; + var contentNow = null; + var priorityNow = null; + + + $scope.setupContent = function (id, type, content) { + if (globalID === null) { + globalID = id; + } else { + if (globalID !== id) { + globalID = id; + nameNow = null; + ttlNow = null; + contentNow = null; + priorityNow = null; + } + } + + if (type === 'name') { + nameNow = content; + } else if (type === 'ttl') { + ttlNow = content; + } else if (type === 'content') { + contentNow = content; + } else if (type === 'priority') { + priorityNow = content; + } + }; + + $scope.saveNow = function (id) { + + if (id !== globalID) { + alert('This record is not changed'); + return; + } + $scope.recordsLoading = false; + + url = "/dns/updateRecord"; + + var data = { + selectedZone: $scope.selectedZone, + id: globalID, + nameNow: nameNow, + ttlNow: ttlNow, + contentNow: contentNow, + priorityNow: priorityNow, + }; + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + $scope.recordsLoading = true; + + if (response.data.status === 1) { + + new PNotify({ + title: 'Success!', + text: 'Record updated.', + type: 'success' + }); + + } else { + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + } + } + + function cantLoadInitialDatas(response) { + $scope.recordsLoading = true; + new PNotify({ + title: 'Operation Failed!', + text: 'Could not connect to server, please refresh this page', + type: 'error' + }); + } + }; + + $scope.deleteRecord = function (id) { + + var selectedZone = $scope.selectedZone; + + url = "/dns/deleteDNSRecord"; + + var data = { + id: id, + }; + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + + + if (response.data.delete_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 = false; + $scope.recordDeleted = true; $scope.recordAdded = true; - $scope.couldNotConnect = true; + $scope.couldNotConnect = false; $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; + }; - } - - - }; - - -}); + } +); /* Java script code to delete DNS Zone */ @@ -1049,7 +1137,7 @@ app.controller('addModifyDNSRecordsCloudFlare', function ($scope, $http, $window $scope.syncCF = function () { - $scope.recordsLoading = false; + $scope.recordsLoading = false; var selectedZone = $scope.selectedZone; url = "/dns/syncCF"; diff --git a/dns/templates/dns/addDeleteDNSRecords.html b/dns/templates/dns/addDeleteDNSRecords.html index 725f676d0..883795278 100755 --- a/dns/templates/dns/addDeleteDNSRecords.html +++ b/dns/templates/dns/addDeleteDNSRecords.html @@ -3,405 +3,458 @@ {% block title %}{% trans "Add/Modify DNS Records - CyberPanel" %}{% endblock %} {% block content %} -{% load static %} -{% get_current_language as LANGUAGE_CODE %} - - - -
{% trans "On this page you can add/modify dns records for domains whose dns zone is already created." %}
-
- {% trans "On this page you can add/modify dns records for domains whose dns zone is already created." %}
+