diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-12-30 14:50:43 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2019-12-30 14:51:40 +0100 |
commit | d07cfba160ca7eb433e74f1ffad8d10e2b9cc9ca (patch) | |
tree | a767fe8187d80d35afc53f4bec51b97b9b73733d | |
parent | 9e259174323a406b93664e307bb8a50fc3d80483 (diff) |
luci-app-firewall: update rule ip hints based on address family
Fixes: #3119
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js index c98ffe981..a0d4cfc06 100644 --- a/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js +++ b/applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js @@ -109,6 +109,38 @@ function rule_target_txt(s) { return fmt('<var>%s</var>', t); } +function update_ip_hints(map, section_id, family, hosts) { + var elem_src_ip = map.lookupOption('src_ip', section_id)[0].getUIElement(section_id), + elem_dst_ip = map.lookupOption('dest_ip', section_id)[0].getUIElement(section_id), + choice_values = [], choice_labels = {}; + + elem_src_ip.clearChoices(); + elem_dst_ip.clearChoices(); + + if (!family || family == 'ipv4') { + L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) { + var val = hosts[mac].ipv4, + txt = '%s (<strong>%s</strong>)'.format(val, hosts[mac].name || mac); + + choice_values.push(val); + choice_labels[val] = txt; + }); + } + + if (!family || family == 'ipv6') { + L.sortedKeys(hosts, 'ipv6', 'addr').forEach(function(mac) { + var val = hosts[mac].ipv6, + txt = '%s (<strong>%s</strong>)'.format(val, hosts[mac].name || mac); + + choice_values.push(val); + choice_labels[val] = txt; + }); + } + + elem_src_ip.addChoices(choice_values, choice_labels); + elem_dst_ip.addChoices(choice_values, choice_labels); +} + return L.view.extend({ callHostHints: rpc.declare({ object: 'luci-rpc', @@ -201,6 +233,10 @@ return L.view.extend({ o.value('', _('IPv4 and IPv6')); o.value('ipv4', _('IPv4 only')); o.value('ipv6', _('IPv6 only')); + o.validate = function(section_id, value) { + update_ip_hints(this.map, section_id, value, hosts); + return true; + }; o = s.taboption('general', form.Value, 'proto', _('Protocol')); o.modalonly = true; @@ -283,12 +319,7 @@ return L.view.extend({ o.modalonly = true; o.datatype = 'list(neg(ipmask))'; o.placeholder = _('any'); - L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) { - o.value(hosts[mac].ipv4, '%s (%s)'.format( - hosts[mac].ipv4, - hosts[mac].name || mac - )); - }); + o.transformChoices = function() { return {} }; /* force combobox rendering */ o = s.taboption('general', form.Value, 'src_port', _('Source port')); o.modalonly = true; @@ -309,12 +340,7 @@ return L.view.extend({ o.modalonly = true; o.datatype = 'list(neg(ipmask))'; o.placeholder = _('any'); - L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) { - o.value(hosts[mac].ipv4, '%s (%s)'.format( - hosts[mac].ipv4, - hosts[mac].name || mac - )); - }); + o.transformChoices = function() { return {} }; /* force combobox rendering */ o = s.taboption('general', form.Value, 'dest_port', _('Destination port')); o.modalonly = true; |