From d6bafb1526c823d6eeacdeafd1c1c7382a57ad5e Mon Sep 17 00:00:00 2001 From: "L. Bradley LaBoon" Date: Wed, 19 Oct 2022 13:56:40 -0400 Subject: [PATCH] Add zone file page --- dns/dns.js | 5 ++ dns/domain_zonefile/domain_zonefile.css | 22 ++++++ dns/domain_zonefile/domain_zonefile.js | 92 +++++++++++++++++++++++++ dns/domain_zonefile/index.shtml | 35 ++++++++++ 4 files changed, 154 insertions(+) create mode 100644 dns/domain_zonefile/domain_zonefile.css create mode 100644 dns/domain_zonefile/domain_zonefile.js create mode 100644 dns/domain_zonefile/index.shtml diff --git a/dns/dns.js b/dns/dns.js index d529fc7..e9af334 100644 --- a/dns/dns.js +++ b/dns/dns.js @@ -85,9 +85,14 @@ import { settings, elements, apiGet, parseParams, setupHeader } from "/global.js var removeLink = document.createElement("a"); removeLink.href = "/dns/domain_delete?did=" + domain.id; removeLink.innerHTML = "Remove"; + var zoneFileLink = document.createElement("a"); + zoneFileLink.href = "/dns/domain_zonefile?did=" + domain.id; + zoneFileLink.innerHTML = "Zone file"; options.appendChild(editLink); options.appendChild(separator); options.appendChild(removeLink); + options.appendChild(separator.cloneNode(true)); + options.appendChild(zoneFileLink); row.appendChild(options); return row; diff --git a/dns/domain_zonefile/domain_zonefile.css b/dns/domain_zonefile/domain_zonefile.css new file mode 100644 index 0000000..5afbdab --- /dev/null +++ b/dns/domain_zonefile/domain_zonefile.css @@ -0,0 +1,22 @@ +/* + * This file is part of Linode Manager Classic. + * + * Linode Manager Classic is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Linode Manager Classic is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Linode Manager Classic. If not, see . + */ + +@import url('/global.css'); + +#domain-zonefile { + padding: 0px 15px 15px; +} diff --git a/dns/domain_zonefile/domain_zonefile.js b/dns/domain_zonefile/domain_zonefile.js new file mode 100644 index 0000000..8d1cae6 --- /dev/null +++ b/dns/domain_zonefile/domain_zonefile.js @@ -0,0 +1,92 @@ +/* + * This file is part of Linode Manager Classic. + * + * Linode Manager Classic is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Linode Manager Classic is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Linode Manager Classic. If not, see . + */ + +import { settings, elements, apiGet, apiPut, parseParams, setupHeader } from "/global.js"; + +(function() +{ + // Element names specific to this page + elements.domainLabel = "domain-label"; + elements.domainTag = "domain-tag"; + elements.domainTagLink = "domain-tag-link"; + elements.zoneFile = "zonefile"; + + // Data recieved from API calls + var data = {}; + data.domain = {}; + + // Static references to UI elements + var ui = {}; + ui.domainLabel = {}; + ui.domainTag = {}; + ui.domainTagLink = {}; + ui.zoneFile = {}; + + // Callback for domain details API call + var displayDetails = function(response) + { + data.domain = response; + + // Set page title and header stuff + document.title += " // " + data.domain.domain; + ui.domainLabel.innerHTML = data.domain.domain; + if (data.domain.tags.length == 1) { + ui.domainTagLink.href = "/dns?tag=" + data.domain.tags[0]; + ui.domainTagLink.innerHTML = "(" + data.domain.tags[0] + ")"; + ui.domainTag.style.display = "inline"; + } + }; + + // Display zonefile contents + var displayZoneFile = function(response) + { + ui.zoneFile.innerHTML = response.zone_file.join("\n"); + }; + + // Initial setup + var setup = function() + { + // Parse URL parameters + data.params = parseParams(); + + // We need a domain ID, so die if we don't have it + if (!data.params.did) { + alert("No domain ID supplied!"); + return; + } + + setupHeader(); + + // Update links on page to include proper domain ID + var anchors = document.getElementsByTagName("a"); + for (var i = 0; i < anchors.length; i++) + anchors[i].href = anchors[i].href.replace("did=0", "did=" + data.params.did); + + // Get element references + ui.domainLabel = document.getElementById(elements.domainLabel); + ui.domainTag = document.getElementById(elements.domainTag); + ui.domainTagLink = document.getElementById(elements.domainTagLink); + ui.zoneFile = document.getElementById(elements.zoneFile); + + // Get data from API + apiGet("/domains/" + data.params.did, displayDetails, null); + apiGet("/domains/" + data.params.did + "/zone-file", displayZoneFile, null); + }; + + // Attach onload handler + window.addEventListener("load", setup); +})(); diff --git a/dns/domain_zonefile/index.shtml b/dns/domain_zonefile/index.shtml new file mode 100644 index 0000000..1c43fa3 --- /dev/null +++ b/dns/domain_zonefile/index.shtml @@ -0,0 +1,35 @@ + + + + + + LMC - Zone File + + + + + + +
+ +
+

+			
+
+ +