summaryrefslogtreecommitdiffstats
path: root/modules-available/dozmod/pages
diff options
context:
space:
mode:
authorSimon Rettberg2019-02-27 15:15:07 +0100
committerSimon Rettberg2019-02-27 15:15:07 +0100
commit407f7fe6475ac0b084e370b986e193549e2866e3 (patch)
tree6d8351945b7c2b1122ac5304769dbf5742de8908 /modules-available/dozmod/pages
parent[baseconfig_bwlp] Make default sound mute state configurable (diff)
downloadslx-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')
-rw-r--r--modules-available/dozmod/pages/networkrules.inc.php77
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&section=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);
}