diff options
author | Ted Trask <ttrask01@yahoo.com> | 2010-04-15 07:21:45 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2010-04-15 07:21:45 +0000 |
commit | 40fdfb0119f899a4cb2134554431afd8e2403cfa (patch) | |
tree | fe8d8e8ec1d1a6b90604de2aa640925acd7bc974 | |
parent | 063695d2720d467076fea72bea5facd7c9f333db (diff) | |
download | acf-tinydns-40fdfb0119f899a4cb2134554431afd8e2403cfa.tar.bz2 acf-tinydns-40fdfb0119f899a4cb2134554431afd8e2403cfa.tar.xz |
Added validation to edit page to prevent A records for hosts outside domain.
-rw-r--r-- | tinydns-edit-html.lsp | 56 |
1 files changed, 44 insertions, 12 deletions
diff --git a/tinydns-edit-html.lsp b/tinydns-edit-html.lsp index cbde5b4..33169d5 100644 --- a/tinydns-edit-html.lsp +++ b/tinydns-edit-html.lsp @@ -43,7 +43,9 @@ var code = "000" + val.charCodeAt(0).toString(8) return "\\" + code.slice(-3) } - function finishForm(entry){ + function finishForm(entry, force){ + var addresspresent = false; + var notindomain = false; var entrytext = entry.find("select").val() + entry.find("input:not(.submit)").map(function(){ var val = $(this).val().replace(/^\s\s*/, '').replace(/\s\s*$/, ''); if (this.name != "dontconvertme") { @@ -55,9 +57,20 @@ else val = "<%= html.html_escape(domain) %>"; } + if (this.name == "address" && val != "") + addresspresent = true; + if (this.name == "testme" && val != "" && null == val.match(/\.?<%= string.gsub(html.html_escape(domain), "[\\%[%]%.%*%?%+%{%^%$]", "\\%1") %>$/i)) + notindomain = true; return val }).get().join(":"); - entry.empty().append(entrytext); + if (addresspresent && notindomain) { + if (force) + entry.empty().append(entrytext); + return false; + } + else + entry.empty().append(entrytext); + return true; } function createForm(entry){ var entrytext = entry.text(); @@ -84,18 +97,31 @@ } for (i=0; i<entryType.num; i++){ if (entries[i] === null) { entries[i] = ""; } - if (entryType.descriptions[i] == "Domain" || entryType.descriptions[i] == "Alias" || entryType.descriptions[i] == "Host" || entryType.descriptions[i] == "Domain Service" ) - form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + entries[i].replace(/\\\d{3}/g, octal_to_char).replace(/\.?<%= string.gsub(html.html_escape(domain), "[\\%[%]%.%*%?%+%{%^%$]", "\\%1") %>$/i, "") + '" name="fixme"> . <%= html.html_escape(domain) %></dd>'; - else if (entryType.descriptions[i] == "Comment") - form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + entries[i] + '" name="dontconvertme"></dd>'; - else - form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + entries[i].replace(/\\\d{3}/g, octal_to_char) + '"></dd>'; + var name = ""; + var value = entries[i]; + var extra = ""; + if (entryType.descriptions[i] == "Comment") + name = "dontconvertme" + else { + value = value.replace(/\\\d{3}/g, octal_to_char); + if (entryType.descriptions[i] == "Domain" || entryType.descriptions[i] == "Alias" || entryType.descriptions[i] == "Host" || entryType.descriptions[i] == "Domain Service" ) { + name = "fixme"; + value = value.replace(/\.?<%= string.gsub(html.html_escape(domain), "[\\%[%]%.%*%?%+%{%^%$]", "\\%1") %>$/i, "") + extra = " . <%= html.html_escape(domain) %>" + } + else if (entryType.descriptions[i] == "IP address") + name = "address"; + else if (entryType.descriptions[i] == "Name server" || entryType.descriptions[i] == "Mail exchanger" || entryType.descriptions[i] == "Server") + name = "testme"; + + } + form = form + '<dt>' + entryType.descriptions[i] + '</dt><dd><input type="text" value="' + value + '" name="' + name + '">' + extra + '</dd>'; } form = form + "\n</dl>"; entry.empty().append(form); entry.find("select").change(function(){ var entry = $(this).parent(); - finishForm(entry); + finishForm(entry, true); createForm(entry); }); entry.find("input.submit").click(function() { @@ -109,7 +135,8 @@ } var entry = parent.find("td:eq(1)"); if (entry.find("select").is("select")){ - finishForm(entry); + if ( ! finishForm(entry) ) + alert("Error: Cannot set IP address for host outside of <%= html.html_escape(domain) %> domain"); } else { createForm(entry); } @@ -130,22 +157,27 @@ }); } function submitFile(){ + var success = true; var file = ""; var lines = $("#entries").find("tr").find("td:eq(1)"); lines.each(function(){ var elem = jQuery(this); if (elem.find("select").is("select")){ - finishForm(elem); + success = finishForm(elem) && success; } file = file + elem.text() + "\n"; }); $("input[name='filecontent']").val(file); + if ( ! success ) { + alert("Error: Cannot set IP address for host outside of <%= html.html_escape(domain) %> domain"); + return false; + } } $(function(){ addLinks($("#entries").find("tr")); $("#entries").append(addEntry).find("a:last").click(addLine); - $("input.submit").click(submitFile); + $("form").submit(submitFile); <% if form.value.filecontent.linenumber then %> $("#entries tr:eq(<%= form.value.filecontent.linenumber - 1 %>)").find("a:eq(2)").click(); var top = $("#entries tr:eq(<%= form.value.filecontent.linenumber - 1 %>)").offset().top; |