* All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ require_once("guiconfig.inc"); require_once("interfaces.inc"); $a_gateway_groups = &config_read_array('gateways', 'gateway_group'); $a_gateways = (new \OPNsense\Routing\Gateways(legacy_interfaces_details()))->gatewaysIndexedByName(); if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (isset($_GET['id']) && isset($a_gateway_groups[$_GET['id']])) { $id = $_GET['id']; $configId = $id; } elseif (isset($_GET['dup']) && isset($a_gateway_groups[$_GET['dup']])) { $configId = $_GET['dup']; } $pconfig = []; if (isset($configId)) { $pconfig['name'] = $a_gateway_groups[$configId]['name']; $pconfig['item'] = &$a_gateway_groups[$configId]['item']; $pconfig['descr'] = $a_gateway_groups[$configId]['descr']; $pconfig['trigger'] = $a_gateway_groups[$configId]['trigger']; } else { $pconfig['name'] = null; $pconfig['descr'] = null; $pconfig['trigger'] = null; $pconfig['item'] = array(); } } elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { $pconfig = $_POST; if (isset($_POST['id']) && isset($a_gateway_groups[$_POST['id']])) { $id = $_POST['id']; } $input_errors = array(); /* input validation */ $reqdfields = explode(" ", "name"); $reqdfieldsn = explode(",", "Name"); do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); if (empty($pconfig['name'])) { $input_errors[] = gettext("A valid gateway group name must be specified."); } elseif (!isset($id) && !preg_match('/^[a-zA-Z0-9_\-]{1,32}$/', $pconfig['name'])) { $input_errors[] = sprintf(gettext('The name must be less than 32 characters long and may only consist of the following characters: %s'), 'a-z, A-Z, 0-9, _'); } if (!empty($pconfig['name'])) { /* check for overlaps */ if (is_array($a_gateway_groups)) { foreach ($a_gateway_groups as $gateway_group) { if (isset($id) && ($a_gateway_groups[$id]) && ($a_gateway_groups[$id] === $gateway_group)) { if ($gateway_group['name'] != $pconfig['name']) { $input_errors[] = gettext("Changing name on a gateway group is not allowed."); } continue; } if ($gateway_group['name'] == $pconfig['name']) { $input_errors[] = sprintf(gettext('A gateway group with this name "%s" already exists.'), $pconfig['name']); break; } } } } /* Build list of items in group with priority */ $pconfig['item'] = array(); foreach ($a_gateways as $gwname => $gateway) { if (isset($pconfig[$gwname]) && $pconfig[$gwname] > 0) { /* we have a priority above 0 (disabled), add item to list */ $pconfig['item'][] = "{$gwname}|{$pconfig[$gwname]}"; } /* check for overlaps */ if ($pconfig['name'] == $gwname) { $input_errors[] = sprintf(gettext('A gateway group cannot have the same name with a gateway "%s" please choose another name.'), $pconfig['name']); } } if (count($pconfig['item']) == 0) { $input_errors[] = gettext("No gateway(s) have been selected to be used in this group"); } if (count($input_errors) == 0) { $gateway_group = array(); $gateway_group['name'] = $pconfig['name']; $gateway_group['item'] = $pconfig['item']; $gateway_group['trigger'] = $pconfig['trigger']; $gateway_group['descr'] = $pconfig['descr']; if (isset($id)) { $a_gateway_groups[$id] = $gateway_group; } else { $a_gateway_groups[] = $gateway_group; } mark_subsystem_dirty('gwgroups'); write_config(); header(url_safe('Location: /system_gateway_groups.php')); exit; } } legacy_html_escape_form_data($a_gateways); legacy_html_escape_form_data($pconfig); include("head.inc"); ?>