From 0b0a74b20b612009846564b57e156c037358aee5 Mon Sep 17 00:00:00 2001 From: DrJest Date: Fri, 13 Oct 2017 00:04:22 +0200 Subject: [PATCH] Added (incomplete) client side validation for DNS value data --- js/edit-master.js | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/js/edit-master.js b/js/edit-master.js index 5ce59df..81d67aa 100644 --- a/js/edit-master.js +++ b/js/edit-master.js @@ -46,7 +46,7 @@ $(document).ready(function() { }); $('#addType').select2({ data: recordTypes - }); + }).on("change", { target: $("#addContent") }, adaptContentRegex).trigger("change"); $('#table-records>thead>tr>td span.glyphicon').click(function() { var field = $(this).siblings('strong').text().toLowerCase(); if(sort.field == field) { @@ -74,6 +74,35 @@ $(document).ready(function() { requestSerial(); requestDomainName(); }); +function adaptContentRegex(event) { + var re; + switch($(this).val()) { + case 'A': + re = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.toString(); + break; + case 'A6': + case 'AAAA': + re = /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/.toString(); + break; + case 'MX': + case 'CNAME': + case 'PTR': + case 'NS': + case 'ALIAS': + case 'URL': + case 'AFSDB': + re = /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/.toString(); + break; + case 'SPF': + re = /^v\=spf/.toString(); + break; + case 'LOC': + re = /(\d+)(?: (\d+))?(?: (\d+(?:\.\d+)?))? (N|S) (\d+)(?: (\d+))?(?: (\d+(?:\.\d+)?))? (E|W)(?: (-?\d+(?:\.\d+)?)m?)(?: (-?\d+(?:\.\d+)?)m?)?(?: (-?\d+(?:\.\d+)?)m?)?(?: (-?\d+(?:\.\d+)?)m?)?/.toString(); + default: + re = '/^.+$/'; + } + event.data.target.attr('data-regex', re.substring(1, re.length -1)).trigger('change'); +}; function validateSoaData() { var error = 0; $('#soa form input:not(#soa-serial)').each(function() { @@ -198,12 +227,13 @@ function editClicked() { $('').appendTo(inputGroupName).text("." + domainName); var valueType = tableCells.eq(2).text(); tableCells.eq(2).empty(); - $('').appendTo(tableCells.eq(2)).select2({ + var typeSelect = $('').appendTo(tableCells.eq(2)).select2({ data: recordTypes }).val(valueType).trigger("change"); var valueContent = tableCells.eq(3).text(); tableCells.eq(3).empty(); - $('').appendTo(tableCells.eq(3)).val(valueContent); + var content = $('').appendTo(tableCells.eq(3)).val(valueContent); + typeSelect.on("change", { target: content }, adaptContentRegex).change(); var valuePrio = tableCells.eq(4).text(); tableCells.eq(4).empty(); $('').appendTo(tableCells.eq(4)).val(valuePrio);