From 7786843f2769d08c25d84b22ef3bc8009da0e705 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Fri, 4 Mar 2016 11:59:44 +0100 Subject: [PATCH] (legacy) refactor load_balancer_pool_edit.php --- src/www/load_balancer_pool_edit.php | 616 +++++++++++++++------------- 1 file changed, 330 insertions(+), 286 deletions(-) diff --git a/src/www/load_balancer_pool_edit.php b/src/www/load_balancer_pool_edit.php index 68e6243e5..548c64697 100644 --- a/src/www/load_balancer_pool_edit.php +++ b/src/www/load_balancer_pool_edit.php @@ -1,7 +1,7 @@ . All rights reserved. @@ -31,311 +31,355 @@ require_once("guiconfig.inc"); require_once("services.inc"); require_once("interfaces.inc"); -$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/load_balancer_pool.php'); -if (!is_array($config['load_balancer']['lbpool'])) { - $config['load_balancer']['lbpool'] = array(); +if (empty($config['load_balancer']['lbpool']) || !is_array($config['load_balancer']['lbpool'])) { + $config['load_balancer']['lbpool'] = array(); } $a_pool = &$config['load_balancer']['lbpool']; -if (is_numericint($_GET['id'])) - $id = $_GET['id']; -if (isset($_POST['id']) && is_numericint($_POST['id'])) - $id = $_POST['id']; -if (isset($id) && $a_pool[$id]) { - $pconfig['name'] = $a_pool[$id]['name']; - $pconfig['mode'] = $a_pool[$id]['mode']; - $pconfig['descr'] = $a_pool[$id]['descr']; - $pconfig['port'] = $a_pool[$id]['port']; - $pconfig['retry'] = $a_pool[$id]['retry']; - $pconfig['servers'] = &$a_pool[$id]['servers']; - $pconfig['serversdisabled'] = &$a_pool[$id]['serversdisabled']; - $pconfig['monitor'] = $a_pool[$id]['monitor']; +$copy_fields = array('name', 'mode', 'descr', 'port', 'retry', 'monitor', 'servers', 'serversdisabled'); +if ($_SERVER['REQUEST_METHOD'] === 'GET') { + if (isset($_GET['id']) && !empty($a_pool[$_GET['id']])) { + $id = $_GET['id']; + } + $pconfig = array(); + + // copy fields + foreach ($copy_fields as $fieldname) { + if (isset($id) && isset($a_pool[$id][$fieldname])) { + $pconfig[$fieldname] = $a_pool[$id][$fieldname]; + } else { + $pconfig[$fieldname] = null; + } + } + + // init arrays + $pconfig['servers'] = is_array($pconfig['servers']) ? $pconfig['servers'] : array(); + $pconfig['serversdisabled'] = is_array($pconfig['serversdisabled']) ? $pconfig['serversdisabled'] : array(); +} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { + if (isset($_POST['id']) && !empty($a_pool[$_POST['id']])) { + $id = $_POST['id']; + } + $pconfig = $_POST; + $input_errors = array(); + /* input validation */ + $reqdfields = explode(" ", "name mode port monitor servers"); + $reqdfieldsn = array(gettext("Name"),gettext("Mode"),gettext("Port"),gettext("Monitor"),gettext("Server List")); + + do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors); + + /* Ensure that our pool names are unique */ + for ($i=0; isset($config['load_balancer']['lbpool'][$i]); $i++) { + if ($pconfig['name'] == $config['load_balancer']['lbpool'][$i]['name'] && $i != $id) { + $input_errors[] = gettext("This pool name has already been used. Pool names must be unique."); + } + } + + if (strpos($pconfig['name'], " ") !== false) { + $input_errors[] = gettext("You cannot use spaces in the 'name' field."); + } + + if (in_array($pconfig['name'], $reserved_table_names)) { + $input_errors[] = sprintf(gettext("The name '%s' is a reserved word and cannot be used."), $_POST['name']); + } + + if (is_alias($pconfig['name'])) { + $input_errors[] = sprintf(gettext("Sorry, an alias is already named %s."), $_POST['name']); + } + + if (!is_portoralias($pconfig['port'])) { + $input_errors[] = gettext("The port must be an integer between 1 and 65535, or a port alias."); + } + + // May as well use is_port as we want a positive integer and such. + if (!empty($pconfig['retry']) && !is_port($pconfig['retry'])) { + $input_errors[] = gettext("The retry value must be an integer between 1 and 65535."); + } + + if (is_array($pconfig['servers'])) { + foreach($pconfig['servers'] as $svrent) { + if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) { + $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."), $svrent); + } elseif (is_subnetv4($svrent) && subnet_size($svrent) > 64) { + $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."), $svrent); + } + } + } + if (is_array($pconfig['serversdisabled'])) { + foreach($pconfig['serversdisabled'] as $svrent) { + if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) { + $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."), $svrent); + } elseif (is_subnetv4($svrent) && subnet_size($svrent) > 64) { + $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."), $svrent); + } + } + } + $m = array(); + for ($i=0; isset($config['load_balancer']['monitor_type'][$i]); $i++) { + $m[$config['load_balancer']['monitor_type'][$i]['name']] = $config['load_balancer']['monitor_type'][$i]; + } + if (!isset($m[$pconfig['monitor']])) { + $input_errors[] = gettext("Invalid monitor chosen."); + } + if (count($input_errors) == 0) { + $poolent = array(); + foreach ($copy_fields as $fieldname) { + $poolent[$fieldname] = $pconfig[$fieldname]; + } + + if (isset($id)) { + /* modify all virtual servers with this name */ + for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) { + if ($config['load_balancer']['virtual_server'][$i]['lbpool'] == $a_pool[$id]['name']) { + $config['load_balancer']['virtual_server'][$i]['lbpool'] = $poolent['name']; + } + } + $a_pool[$id] = $poolent; + } else { + $a_pool[] = $poolent; + } + + mark_subsystem_dirty('loadbalancer'); + write_config(); + header("Location: load_balancer_pool.php"); + exit; } } -if ($_POST) { - unset($input_errors); - $pconfig = $_POST; - /* input validation */ - $reqdfields = explode(" ", "name mode port monitor servers"); - $reqdfieldsn = array(gettext("Name"),gettext("Mode"),gettext("Port"),gettext("Monitor"),gettext("Server List")); - - do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); - - /* Ensure that our pool names are unique */ - for ($i=0; isset($config['load_balancer']['lbpool'][$i]); $i++) - if (($_POST['name'] == $config['load_balancer']['lbpool'][$i]['name']) && ($i != $id)) - $input_errors[] = gettext("This pool name has already been used. Pool names must be unique."); - - if (strpos($_POST['name'], " ") !== false) - $input_errors[] = gettext("You cannot use spaces in the 'name' field."); - - if (in_array($_POST['name'], $reserved_table_names)) - $input_errors[] = sprintf(gettext("The name '%s' is a reserved word and cannot be used."), $_POST['name']); - - if (is_alias($_POST['name'])) - $input_errors[] = sprintf(gettext("Sorry, an alias is already named %s."), $_POST['name']); - - if (!is_portoralias($_POST['port'])) - $input_errors[] = gettext("The port must be an integer between 1 and 65535, or a port alias."); - - // May as well use is_port as we want a positive integer and such. - if (!empty($_POST['retry']) && !is_port($_POST['retry'])) - $input_errors[] = gettext("The retry value must be an integer between 1 and 65535."); - - if (is_array($_POST['servers'])) { - foreach($pconfig['servers'] as $svrent) { - if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) { - $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"enabled\" list)."), $svrent); - } - else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) { - $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"enabled\" list)."), $svrent); - } - } - } - if (is_array($_POST['serversdisabled'])) { - foreach($pconfig['serversdisabled'] as $svrent) { - if (!is_ipaddr($svrent) && !is_subnetv4($svrent)) { - $input_errors[] = sprintf(gettext("%s is not a valid IP address or IPv4 subnet (in \"disabled\" list)."), $svrent); - } - else if (is_subnetv4($svrent) && subnet_size($svrent) > 64) { - $input_errors[] = sprintf(gettext("%s is a subnet containing more than 64 IP addresses (in \"disabled\" list)."), $svrent); - } - } - } - $m = array(); - for ($i=0; isset($config['load_balancer']['monitor_type'][$i]); $i++) - $m[$config['load_balancer']['monitor_type'][$i]['name']] = $config['load_balancer']['monitor_type'][$i]; - - if (!isset($m[$_POST['monitor']])) - $input_errors[] = gettext("Invalid monitor chosen."); - - if (!$input_errors) { - $poolent = array(); - - if (isset($id) && $a_pool[$id]) { - $poolent = $a_pool[$id]; - } - - $poolent['name'] = $_POST['name']; - $poolent['mode'] = $_POST['mode']; - $poolent['descr'] = $_POST['descr']; - $poolent['port'] = $_POST['port']; - $poolent['retry'] = $_POST['retry']; - $poolent['servers'] = $_POST['servers']; - $poolent['serversdisabled'] = $_POST['serversdisabled']; - $poolent['monitor'] = $_POST['monitor']; - - if (isset($id) && $a_pool[$id]) { - /* modify all virtual servers with this name */ - for ($i = 0; isset($config['load_balancer']['virtual_server'][$i]); $i++) { - if ($config['load_balancer']['virtual_server'][$i]['lbpool'] == $a_pool[$id]['name']) - $config['load_balancer']['virtual_server'][$i]['lbpool'] = $poolent['name']; - } - $a_pool[$id] = $poolent; - } else { - $a_pool[] = $poolent; - } - - mark_subsystem_dirty('loadbalancer'); - write_config(); - header("Location: load_balancer_pool.php"); - exit; - } -} $service_hook = 'relayd'; - +legacy_html_escape_form_data($pconfig); include("head.inc"); - ?> - + + + - + - + $("#mode").change(function(event){ + event.preventDefault(); + if ($('#mode').val() == 'failover' && $('#servers option').length > 1){ + $('#servers option:not(:first)').remove().appendTo('#serversdisabled'); + } + }); + $("#btn_add_to_pool").click(function(event){ + event.preventDefault(); + if ($('#mode').val() != 'failover' || $('#servers option').length == 0){ + $('#servers').append($('