diff --git a/frontend/index.html b/frontend/index.html
index b5efa39..eeb22ca 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -29,6 +29,13 @@
+
@@ -39,6 +46,13 @@
+
-
+
diff --git a/frontend/js/settings/settings.js b/frontend/js/settings/settings.js
index 1f9e3f6..501505f 100644
--- a/frontend/js/settings/settings.js
+++ b/frontend/js/settings/settings.js
@@ -2,27 +2,35 @@ const upstream_dns_servers_table_body = document.querySelector('#upstream-dns-se
const local_domains_table_body = document.querySelector('#local-domains-table-body')
const cache_size_input = document.querySelector('#cache-size-input')
const save_settings_button = document.querySelector('#save-settings-button')
+const add_dns_server_button = document.querySelector('#add_dns_server_button')
+const add_local_domain_button = document.querySelector('#add_local_domain_button')
+const edit_file_input = document.querySelector('#edit_file_input')
+const save_config_file_button = document.querySelector('#save_config_file_button')
var settings = {}
+var configFile = ""
-const updateInterface = () => {
+const updateDnsServersTable = () => {
upstream_dns_servers_table_body.innerHTML = ""
- local_domains_table_body.innerHTML = ""
for (var i = 0; i < settings.resolv.length; i++) {
upstream_dns_servers_table_body.innerHTML += `
|
${settings.resolv[i]}
-
+
|
`
}
+}
+
+const updateLocalDomainsTable = () => {
+ local_domains_table_body.innerHTML = ""
for (const [key, value] of Object.entries(settings.hosts)) {
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i++) {
local_domains_table_body.innerHTML += `
| ${key} |
${value[i]} |
-
+ |
|
`
}
@@ -30,11 +38,16 @@ const updateInterface = () => {
local_domains_table_body.innerHTML += `
| ${key} |
${value} |
-
+ |
|
`
}
}
+}
+
+const updateInterface = () => {
+ updateDnsServersTable()
+ updateLocalDomainsTable()
cache_size_input.value = settings.cache_size
}
@@ -74,4 +87,97 @@ cache_size_input.addEventListener('input', (e) => {
write_cache_size(e.target.value)
})
-getSettings()
\ No newline at end of file
+getSettings()
+
+add_dns_server_button.addEventListener('click', () => {
+ const dns_server = prompt("Input your DNS server:")
+ if (dns_server === null) return
+ if (confirm("Confirm DNS settings? (add DNS server)")) {
+ if (Array.isArray(settings.resolv)) {
+ if (!settings.resolv.includes(dns_server)) {
+ settings.resolv.push(dns_server)
+ updateDnsServersTable()
+ }
+ }
+ }
+})
+
+upstream_dns_servers_table_body.addEventListener('click', (e) => {
+ if (e.target.classList.contains("delete-table-button")) {
+ if (confirm(`Confirm DNS settings? (delete DNS server: ${e.target.id})`)) {
+ if (Array.isArray(settings.resolv)) {
+ settings.resolv.splice(e.target.id, 1)
+ updateDnsServersTable()
+ }
+ }
+ }
+})
+
+add_local_domain_button.addEventListener('click', () => {
+ const domainip = prompt('Input localdomain IP:')
+ if (domainip === null) return
+ const domain = prompt('Input domain:')
+ if (domainip === null || domain === null) return
+ if (confirm(`Confirm DNS settings? (Add Local Domain: ${domainip} ${domain})`)) {
+ for (const [key, value] of Object.entries(settings.hosts)) {
+ if (key === domainip) {
+ if (Array.isArray(value)) {
+ if (!value.includes(domain)) {
+ value.push(domain)
+ updateLocalDomainsTable()
+ return
+ }
+ return
+ }
+ const domainsarray = [value, domain]
+ settings.hosts[key] = domainsarray
+ updateLocalDomainsTable()
+ return
+ }
+ }
+ settings.hosts[domainip] = domain
+ updateLocalDomainsTable()
+ }
+})
+
+local_domains_table_body.addEventListener('click', (e) => {
+ if (e.target.classList.contains('deldomain')) {
+ if (confirm(`Confirm DNS settings? (delete domain: ${e.target.id})`)) {
+ const domainip = e.target.id.split("|")[0]
+ const domain = e.target.id.split("|")[1]
+ for (const [key, value] of Object.entries(settings.hosts)) {
+ if (key === domainip) {
+ if (Array.isArray(value)) {
+ if (value.includes(domain)) {
+ value.splice(value.indexOf(domain), 1)
+ updateLocalDomainsTable()
+ return
+ }
+ return
+ }
+ delete settings.hosts[key]
+ updateLocalDomainsTable()
+ return
+ }
+ }
+ }
+ }
+})
+
+const getConfigFile = () => {
+ fetch(window.location.origin + "/api/settings/file")
+ .then(data => data.text())
+ .then(textdata => edit_file_input.value = textdata)
+}
+
+getConfigFile()
+
+save_config_file_button.addEventListener('click', () => {
+ if (confirm("Save Config file?")) {
+ fetch(window.location.origin + "/api/settings/file", {
+ method: 'POST',
+ body: edit_file_input.value
+ }).then(data => data.text())
+ .then(textdata => edit_file_input.value = textdata)
+ }
+})
\ No newline at end of file