diff options
author | Simon Rettberg | 2019-02-27 15:15:07 +0100 |
---|---|---|
committer | Simon Rettberg | 2019-02-27 15:15:07 +0100 |
commit | 407f7fe6475ac0b084e370b986e193549e2866e3 (patch) | |
tree | 6d8351945b7c2b1122ac5304769dbf5742de8908 /modules-available/dozmod/pages/networkrules.inc.php | |
parent | [baseconfig_bwlp] Make default sound mute state configurable (diff) | |
download | slx-admin-407f7fe6475ac0b084e370b986e193549e2866e3.tar.gz slx-admin-407f7fe6475ac0b084e370b986e193549e2866e3.tar.xz slx-admin-407f7fe6475ac0b084e370b986e193549e2866e3.zip |
[dozmod] netrules: Edit set of rules, not single rules
Diffstat (limited to 'modules-available/dozmod/pages/networkrules.inc.php')
-rw-r--r-- | modules-available/dozmod/pages/networkrules.inc.php | 77 |
1 files changed, 45 insertions, 32 deletions
diff --git a/modules-available/dozmod/pages/networkrules.inc.php b/modules-available/dozmod/pages/networkrules.inc.php index 6011e3ff..710e90a9 100644 --- a/modules-available/dozmod/pages/networkrules.inc.php +++ b/modules-available/dozmod/pages/networkrules.inc.php @@ -11,7 +11,7 @@ class SubPage User::assertPermission('networkrules.save'); $ruleid = Request::post('ruleid', false, 'int'); if ($ruleid !== false) { - $res = Database::exec('DELETE FROM sat.presetnetworkrules WHERE ruleid = :ruleid', ['ruleid' => $ruleid]); + $res = Database::exec('DELETE FROM sat.presetnetworkrule WHERE ruleid = :ruleid', ['ruleid' => $ruleid]); if ($res !== false) { Message::addSuccess('networkrule-deleted'); } @@ -20,28 +20,43 @@ class SubPage User::assertPermission('networkrules.save'); $ruleid = Request::post('ruleid', 0, 'int'); $rulename = Request::post('rulename', '', 'string'); - $host = Request::post('host', '', 'string'); - $port = Request::post('port', '', 'string'); - $direction = Request::post('direction', '', 'string'); + $hosts = Request::post('host', false, 'array'); + $ports = Request::post('port', false, 'array'); + $directions = Request::post('direction', false, 'array'); - if (!in_array($direction, ['IN', 'OUT'], true)) { - Message::addError('networkrule-invalid-direction', $direction); - } elseif (empty($host)) { - Message::addError('networkrule-missing-host'); - } elseif (empty($port)) { - Message::addError('networkrule-missing-port'); + $data = []; + foreach (array_keys($hosts) as $key) { + if (!isset($hosts[$key]) || !isset($ports[$key]) || !isset($directions[$key])) + continue; + if (!in_array($directions[$key], ['IN', 'OUT'], true)) { + Message::addWarning('networkrule-invalid-direction', $directions[$key]); + continue; + } + settype($ports[$key], 'int'); + if ($ports[$key] < 0 || $ports[$key] > 65535) { + Message::addWarning('networkrule-invalid-port', $ports[$key]); + continue; + } + if (empty($hosts[$key]) || strpos($hosts[$key], ' ') !== false) { // Rather sloppy... + Message::addWarning('networkrule-invalid-host', $hosts[$key]); + continue; + } + $data[] = [ + 'host' => $hosts[$key], + 'port' => $ports[$key], + 'direction' => $directions[$key], + ]; + } + if (empty($data)) { + Message::addError('networkrule-empty-set'); } else { - $data = json_encode([ - 'host' => $host, - 'port' => $port, - 'direction' => $direction - ]); + $data = json_encode($data); if ($ruleid !== 0) { - Database::exec('UPDATE sat.presetnetworkrules SET rulename = :rulename, ruledata = :data' - .' WHERE ruleid = :ruleid', compact('ruleid', 'rulename', 'data')); + Database::exec('UPDATE sat.presetnetworkrule SET rulename = :rulename, ruledata = :data' + . ' WHERE ruleid = :ruleid', compact('ruleid', 'rulename', 'data')); } else { - Database::exec('INSERT INTO sat.presetnetworkrules (rulename, ruledata)' - .' VALUES (:rulename, :data)', compact('rulename', 'data')); + Database::exec('INSERT INTO sat.presetnetworkrule (rulename, ruledata)' + . ' VALUES (:rulename, :data)', compact('rulename', 'data')); } Message::addSuccess('networkrule-saved'); } @@ -57,14 +72,10 @@ class SubPage $show = Request::get('show', 'list', 'string'); if ($show === 'list') { $res = Database::simpleQuery('SELECT ruleid, rulename, ruledata - FROM sat.presetnetworkrules ORDER BY rulename ASC'); + FROM sat.presetnetworkrule ORDER BY rulename ASC'); $rows = array(); while ($row = $res->fetch(PDO::FETCH_ASSOC)) { - $dec = json_decode($row['ruledata'], true); - if (!is_array($dec)) { - $dec = []; - } - $rows[] = $row + $dec; + $rows[] = $row; } Render::addTemplate('networkrules', [ 'networkrules' => $rows, @@ -76,20 +87,22 @@ class SubPage $data = []; } else { $data = Database::queryFirst('SELECT ruleid, rulename, ruledata - FROM sat.presetnetworkrules WHERE ruleid = :ruleid', ['ruleid' => $ruleid]); + FROM sat.presetnetworkrule WHERE ruleid = :ruleid', ['ruleid' => $ruleid]); if ($data === false) { Message::addError('networkrule-invalid-ruleid', $ruleid); Util::redirect('?do=dozmod§ion=networkrules'); } $dec = json_decode($data['ruledata'], true); - if (is_array($dec)) { - $data += $dec; + if (!is_array($dec) || !isset($dec[0])) { + $dec = [[]]; } - if ($data['direction'] === 'IN') { - $data['inSelected'] = 'selected'; - } else { - $data['outSelected'] = 'selected'; + $data['rules'] = $dec; + $i = 0; + foreach ($data['rules'] as &$rule) { + $rule['index'] = ++$i; + $rule[$rule['direction'] . '_selected'] = 'selected'; } + unset($rule); } Render::addTemplate('networkrules-edit', $data); } |