diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/LvtemplateController.php b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/LvtemplateController.php new file mode 100644 index 000000000..b19958bd9 --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/LvtemplateController.php @@ -0,0 +1,71 @@ +searchBase( + "templates.template", + array('name', 'filters', 'or'), "name", null, SORT_NATURAL|SORT_FLAG_CASE + ); + } + + public function setItemAction($uuid) + { + return $this->setBase("template", "templates.template", $uuid); + } + + public function addItemAction() + { + return $this->addBase("template", "templates.template"); + } + + public function getItemAction($uuid = null) + { + return $this->getBase("template", "templates.template", $uuid); + } + + public function delItemAction($uuid) + { + return $this->delBase("templates.template", $uuid); + } + +} diff --git a/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Lvtemplate.php b/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Lvtemplate.php new file mode 100644 index 000000000..40262ed97 --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Lvtemplate.php @@ -0,0 +1,36 @@ + + //OPNsense/Firewall/Lvtemplate + 0.0.1 + Firewall Live View filter templates + + + + + + diff --git a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt index 416e57d5f..06b60b69d 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt @@ -1,6 +1,6 @@ {# # - # Copyright (c) 2014-2016 Deciso B.V. + # Copyright (c) 2014-2021 Deciso B.V. # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, @@ -37,7 +37,7 @@ let hostnameMap = {}; /** - * reverse lookup address fields (replace adres part for hostname if found) + * reverse lookup address fields (replace address part for hostname if found) */ function reverse_lookup() { let to_fetch = []; @@ -74,6 +74,139 @@ } } + /** + * set new selection + * @param items list of lexical expressions + * @param operator enable or disable global OR operator + */ + function set_selection(items, operator) + { + // remove old selection + $("#filters > span.badge").click(); + // collect valid condition types + let conditions = []; + $("#filter_condition > option").each(function(){ + conditions.push($(this).val()); + }); + items.forEach(function(value) { + let parts = value.split(new RegExp("("+conditions.join("|")+")(.+)$")); + if (parts.length >= 3 && $("#filter_tag").val(parts[0]).val() === parts[0] ) { + $("#filter_tag").val(parts[0]); + $("#filter_condition").val(parts[1]); + $("#filter_value").val(parts[2]); + $("#add_filter_condition").click(); + } else if (value.toLowerCase() == "or=1") { + operator = "1"; + } + }); + $("#filter_or_type").prop('checked', operator === "1" ? true : false); + $(".selectpicker").selectpicker('refresh'); + $("#filter_tag").change(); + } + + /** + * add new filters template + * @param t_data template's parameters + */ + function addTemplate(t_data) { + ajaxCall('/api/diagnostics/lvtemplate/addItem/', t_data, function(data, status) { + if (data.result == "saved") { + fetchTemplates(data.uuid); + } else { + BootstrapDialog.show({ + type: BootstrapDialog.TYPE_DANGER, + title: "{{ lang._('Add filters template') }}", + message: "{{ lang._('Template save failed. Message: ') }}" + data.result, + buttons: [{ + label: "{{ lang._('Close') }}", + action: function (dialogRef) { + dialogRef.close(); + } + }] + }); + fetchTemplates("00000"); + } + }) + } + + /** + * set template new values + * @param t_id template uuid + * @param t_data template's parameters + */ + function editTemplate(t_id, t_data) { + ajaxCall('/api/diagnostics/lvtemplate/setItem/' + t_id, t_data, function(data, status) { + if (data.result == "saved") { + fetchTemplates(t_id); + } else { + BootstrapDialog.show({ + type: BootstrapDialog.TYPE_DANGER, + title: "{{ lang._('Filters template edit') }}", + message: "{{ lang._('Template edit failed. Message: ') }}" + data.result, + buttons: [{ + label: "{{ lang._('Close') }}", + action: function (dialogRef) { + dialogRef.close(); + } + }] + }); + fetchTemplates(t_id); + } + }) + } + + /** + * delete filters template + * @param t_id template uuid + */ + function delTemplate(t_id) { + ajaxCall('/api/diagnostics/lvtemplate/delItem/' + t_id, {}, function(data, status) { + if (data.result == "deleted") { + //don't reset current filters so template can be restored right after delete + $("#templates option[value=" + t_id + "]").remove(); + $("#templates").val("").selectpicker('refresh'); + } else { + BootstrapDialog.show({ + type: BootstrapDialog.TYPE_DANGER, + title: "{{ lang._('Filters template delete') }}", + message: "{{ lang._('Template delete failed. Result: ') }}" + data.result, + buttons: [{ + label: "{{ lang._('Close') }}", + action: function (dialogRef) { + dialogRef.close(); + } + }] + }); + } + }) + } + + /** + * fetch templates from config + * @param opt select value to make :selected and apply + */ + function fetchTemplates(opt) { + opt = opt || "00000"; + //apply = apply || true; + $('#templ_name').val(""); + $('#templates').empty(); + $('#templates').append($(' @@ -505,14 +705,34 @@ - - {{ lang._('Select any of given criteria (or)') }} + -
+
+
+ + +
+ +
+ + + + +
+
+