summaryrefslogtreecommitdiffstats
path: root/modules-available/usblockoff/page.inc.php
diff options
context:
space:
mode:
authorJannik Schönartz2018-03-13 11:23:22 +0100
committerJannik Schönartz2018-03-13 11:23:22 +0100
commitea62e9679dd003c50ef04cb2ce9a361aad343f3e (patch)
tree483fb86206e3e4e73d61bc3eaae5bbf1b435baaf /modules-available/usblockoff/page.inc.php
parentMerge branch 'origin/master' into usb-lock-off (diff)
downloadslx-admin-ea62e9679dd003c50ef04cb2ce9a361aad343f3e.tar.gz
slx-admin-ea62e9679dd003c50ef04cb2ce9a361aad343f3e.tar.xz
slx-admin-ea62e9679dd003c50ef04cb2ce9a361aad343f3e.zip
[usb-lock-off] Big rework. Moved from client side (modal) stuff to server side (new page) system. Removed the rules.conf textfield and added an UI prototype for the rules creation.
Diffstat (limited to 'modules-available/usblockoff/page.inc.php')
-rw-r--r--modules-available/usblockoff/page.inc.php293
1 files changed, 196 insertions, 97 deletions
diff --git a/modules-available/usblockoff/page.inc.php b/modules-available/usblockoff/page.inc.php
index 5e1b27b4..5cfb0ec3 100644
--- a/modules-available/usblockoff/page.inc.php
+++ b/modules-available/usblockoff/page.inc.php
@@ -1,8 +1,4 @@
<?php
-$glob3 = 'globale Variable 3';
-$name = 'testname';
-$logedIn = true;
-
class Page_usblockoff extends Page
{
@@ -22,8 +18,12 @@ class Page_usblockoff extends Page
if ($this->action === 'updateConfig') {
$this->updateConfig();
+ } elseif ($this->action === 'addDevices') {
+ $this->addDevices();
} elseif ($this->action === 'deleteConfig') {
$this->deleteConfig();
+ } elseif ($this->action === 'deleteRule') {
+ $this->deleteRule();
}
}
@@ -50,7 +50,140 @@ class Page_usblockoff extends Page
'rulesConfigHtml' => $rulesConfigHtml,
'daemonConfigHtml' => $daemonConfigHtml
));
+ } else if ($show === "add-devices") {
+ $this->deviceList();
+ } else if ($show === "add-generic-rule") {
+ $this->addGenericRule();
+ }
+ }
+
+ private function addDevices()
+ {
+ $configid = Request::any('configid', 0, 'int');
+
+ $rules = json_decode(Request::post('rules', '', 'string'), true);
+ foreach ($rules as $rule) {
+ $rid = (int)$rule['id'];
+ if($rid == 0) {
+ // New entry so insert only with new id.
+ $rid = Database::queryFirst("SELECT MAX(ruleid) AS ID FROM `usb_rule_prop`");
+ $rid = $rid['ID'];
+ if ($rid == null) $rid = 1;
+ else $rid += 1;
+ } else {
+ // Old entry so delete all old ones and insert new ones.
+ Database::exec("DELETE FROM `usb_rule_prop` WHERE ruleid=:ruleid", array('ruleid' => $rid));
+ }
+
+ Database::exec("INSERT INTO `usb_rule_prop` (ruleid, prop, value) VALUES (:ruleid, :prop, :val)", array(
+ 'ruleid' => $rid,
+ 'prop' => 'target',
+ 'val' => $rule['target']
+ ));
+
+ foreach ($rule['attributes'] as $attribute) {
+ // TODO: Better in one query?
+ Database::exec("INSERT INTO `usb_rule_prop` (ruleid, prop, value) VALUES (:ruleid, :prop, :val)", array(
+ 'ruleid' => $rid,
+ 'prop' => $attribute['prop'],
+ 'val' => $attribute['value']
+ ));
+ }
+
+ // TODO: Add id at the end of the config entry.
+ $config = Database::queryFirst("SELECT rulesconfig FROM `usb_configs` WHERE configid=:configid", array(
+ 'configid' => $configid
+ ));
+ $rulesconfig = json_decode($config['rulesconfig'], true);
+ $rulesconfig[] = $rid;
+ Database::exec("UPDATE `usb_configs` SET rulesconfig = :rulesconfig WHERE configid=:configid", array(
+ 'configid' => $configid,
+ 'rulesconfig' => json_encode($rulesconfig)
+ ));
+ //$result['rules'][] = $rid;
+ }
+
+ Util::redirect('?do=usblockoff&show=edit-config&configid=' . $configid);
+ }
+
+ private function deviceList()
+ {
+ $configid = Request::get("configid", 0, 'int');
+ $usbdevices = $this->getUsbDeviceList();
+
+ // TODO: Translate Operator Action etc..
+
+ $settings = array();
+ $setting = array();
+ $setting['title'] = "Action";
+ $setting['select_list'] = array(array(
+ 'option' => 'allow',
+ 'active' => true,
+ ),
+ array(
+ 'option' => 'block',
+ 'active' => false,
+ ),
+ array(
+ 'option' => 'reject',
+ 'active' => false,
+ ));
+ $setting['helptext'] = array('helptext' => Dictionary::translateFile('rule', 'abr_helptext'));
+ $setting['property'] = 'action';
+ $setting['settingHtml'] = Render::parse('server-prop-dropdown', (array)$setting);
+ $settings[] = $setting;
+
+ $ruleValues = array('id' => true,
+ 'serial' => true,
+ 'name' => true,
+ //'hash' => false,
+ //'parent-hash' => false,
+ 'via-port' => false,
+ 'with-interface' => false);
+ foreach ($ruleValues as $key => $value) {
+ $settings[] = array(
+ 'settingHtml' => Render::parse('server-prop-bool', array('title' => Dictionary::translateFile('rule', $key),
+ 'helptext' => array('helptext' => Dictionary::translateFile('rule', $key . "_helptext")),
+ 'property' => $key,
+ 'currentvalue' => $value)),
+ );
}
+ Render::addTemplate('usb-device-list', array(
+ 'list' => array_values($usbdevices),
+ 'settings' => array_values($settings),
+ 'configid' => $configid
+ ));
+ }
+
+ private function addGenericRule($target = 'allow') {
+ $settings = array();
+ $configid = Request::get("configid", "");
+
+ // TODO: Translate Operator Action etc..
+
+ $setting = array();
+ $setting['title'] = "Action";
+ $setting['select_list'] = array(array(
+ 'option' => 'allow',
+ 'active' => ($target == 'allow' ? true : false),
+ ),
+ array(
+ 'option' => 'block',
+ 'active' => ($target == 'block' ? true : false),
+ ),
+ array(
+ 'option' => 'reject',
+ 'active' => ($target == 'reject' ? true : false),
+ ));
+ $setting['helptext'] = array('helptext' => Dictionary::translateFile('rule', 'abr_helptext'));
+ $setting['property'] = 'action';
+ $setting['settingHtml'] = Render::parse('server-prop-dropdown', (array)$setting);
+ $settings[] = $setting;
+
+ Render::addTemplate('usb-add-generic-rule', array(
+ 'settings' => array_values($settings),
+ 'configid' => $configid
+ ));
}
protected function loadConfigChooser()
@@ -68,7 +201,6 @@ class Page_usblockoff extends Page
protected function deleteConfig()
{
$configID = Request::any('id', 0, 'int');
-
if ($configID != 0) {
Database::exec("DELETE FROM `usb_configs` WHERE configid=:configid", array('configid' => $configID));
}
@@ -77,6 +209,19 @@ class Page_usblockoff extends Page
Util::redirect('?do=usblockoff');
}
+ protected function deleteRule()
+ {
+ $configid = Request::any('configid', 0, 'int');
+ $ruleid = Request::any('id', 0, 'int');
+ if ($ruleid != 0) {
+ Database::exec("DELETE FROM `usb_rule_prop` WHERE ruleid=:ruleid", array('ruleid' => $ruleid));
+ }
+
+ Message::addSuccess('rule-deleted');
+ Util::redirect('?do=usblockoff&show=edit-config&configid=' . $configid);
+ }
+
+
protected function updateConfig()
{
$result['saveAsNewConfig'] = Request::post('saveAsNewConfig', false, 'bool');
@@ -93,7 +238,7 @@ class Page_usblockoff extends Page
$result['IPCAccessControlFiles'] = Request::post('IPCAccessControlFiles', '', 'string');
$result['DeviceRulesWithPort'] = Request::post('DeviceRulesWithPort', '', 'string');
$result['AuditFilePath'] = Request::post('AuditFilePath', '', 'string');
- $result['rules'] = Request::post('rules', '', 'string');
+ $result['rules'] = json_decode(Request::post('rules', '', 'string'), true);
$id = Request::post('id', 0, 'int');
$configname = Request::post('configName', '', 'string');
@@ -126,32 +271,66 @@ class Page_usblockoff extends Page
if ($id == '0' || $result['saveAsNewConfig']) {
$dbquery = Database::exec("INSERT INTO `usb_configs` (configname, rulesconfig, daemonconfig) VALUES (:configname, :rulesconfig, :daemonconfig)",
array('configname' => $configname,
- 'rulesconfig' => $result['rules'],
+ 'rulesconfig' => json_encode($result['rules']),
'daemonconfig' => implode($newDaemonConf)));
} else {
$dbquery = Database::exec("UPDATE `usb_configs` SET configname=:configname, rulesconfig=:rulesconfig, daemonconfig=:daemonconfig WHERE configid=:configid",
array('configid' => $id,
'configname' => $configname,
- 'rulesconfig' => $result['rules'],
+ 'rulesconfig' => json_encode($result['rules']),
'daemonconfig' => implode($newDaemonConf)));
}
Message::addSuccess('config-saved');
}
- private function loadRulesConfig($id) {
+ private function loadRulesConfig($configid) {
$rulesConf = null;
- if ($id == 0) {
+ if ($configid == 0) {
$currentdir = getcwd();
-
+ // TODO: No need for that with the new rule db structure.
$rulesConf = file_get_contents($currentdir . '/modules/usblockoff/inc/default-configs/rules.conf');
} else {
- $dbquery = Database::queryFirst("SELECT * FROM `usb_configs` WHERE configid=:id", array('id' => $id));
- $rulesConf = $dbquery['rulesconfig'];
+ $dbquery = Database::queryFirst("SELECT * FROM `usb_configs` WHERE configid=:id", array('id' => $configid));
+ $ruleIds = json_decode($dbquery['rulesconfig'], true);
}
+
+ $rulesArray = [];
+ foreach ($ruleIds as $id) {
+ // TODO: Query rule and prepare array for the html file.
+ $dbq = Database::simpleQuery("SELECT * FROM `usb_rule_prop` WHERE ruleid=:id", array('id' => $id));
+ $rule = [];
+ $rule['id'] = $id;
+ $rule['hasoverload'] = false;
+ $rule['num_overload'] = 0;
+ $rule['attributes'] = array();
+ $rule['attributes_overload'] = "";
+ while ($entry = $dbq->fetch(PDO::FETCH_ASSOC)) {
+ if ($entry['prop'] == "target") {
+ $rule['target'] = $entry['value'];
+ } else {
+ $attributes = [];
+ $attributes['prop'] = $entry['prop'];
+ $attributes['value'] = $entry['value'];
+
+ if(sizeof($rule['attributes']) >= 3) {
+ $rule['hasoverload'] = true;
+ $rule['num_overload'] += 1;
+ $rule['attributes_overload'] .= $attributes['prop'] . ': ' . $attributes['value'] . "<br>";
+ } else {
+ $rule['attributes'][] = $attributes;
+ }
+ }
+ }
+
+ if (!empty($rule['target'])) {
+ $rulesArray[] = $rule;
+ }
+ }
return Render::parse('usb-rules-config', array(
- 'rules' => $rulesConf,
+ 'rules' => (array)$rulesArray,
+ 'configid' => $configid
));
}
@@ -168,7 +347,6 @@ class Page_usblockoff extends Page
$dbquery = Database::queryFirst("SELECT * FROM `usb_configs` WHERE configid=:id", array('id' => $id));
$daemonConf = explode("\r\n", $dbquery['daemonconfig']);
}
-
$element = array();
$hlptxt = '';
@@ -205,90 +383,11 @@ class Page_usblockoff extends Page
die('Unauthorized');
}
$action = Request::any('action');
- if ($action === 'deviceList') {
- $this->ajaxDeviceList();
- } elseif ($action === 'genericRuleBuilder') {
- $this->ajaxGenericRuleBuilder();
- }
- }
-
-
-
- private function ajaxGenericRuleBuilder() {
- $settings = array();
-
- // TODO: Translate Operator Action etc..
- $setting = array();
- $setting['title'] = "Action";
- $setting['select_list'] = array(array(
- 'option' => 'allow',
- 'active' => true,
- ),
- array(
- 'option' => 'block',
- 'active' => false,
- ),
- array(
- 'option' => 'reject',
- 'active' => false,
- ));
- $setting['helptext'] = array('helptext' => Dictionary::translateFile('rule', 'abr_helptext'));
- $setting['property'] = 'action';
- $setting['settingHtml'] = Render::parse('server-prop-dropdown', (array)$setting);
- $settings[] = $setting;
-
- echo Render::parse('usb-add-generic-rule', array(
- 'settings' => array_values($settings),
- ));
- }
-
- private function ajaxDeviceList()
- {
- $usbdevices = $this->getUsbDeviceList();
-
- // TODO: Translate Operator Action etc..
-
- $settings = array();
- $setting = array();
- $setting['title'] = "Action";
- $setting['select_list'] = array(array(
- 'option' => 'allow',
- 'active' => true,
- ),
- array(
- 'option' => 'block',
- 'active' => false,
- ),
- array(
- 'option' => 'reject',
- 'active' => false,
- ));
- $setting['helptext'] = array('helptext' => Dictionary::translateFile('rule', 'abr_helptext'));
- $setting['property'] = 'action';
- $setting['settingHtml'] = Render::parse('server-prop-dropdown', (array)$setting);
- $settings[] = $setting;
-
- $ruleValues = array('id' => true,
- 'serial' => true,
- 'name' => true,
- 'hash' => false,
- 'parent-hash' => false,
- 'via-port' => false,
- 'with-interface' => false,
- 'interface-policy' => false);
- foreach ($ruleValues as $key => $value) {
- $settings[] = array(
- 'settingHtml' => Render::parse('server-prop-bool', array('title' => Dictionary::translateFile('rule', $key),
- 'helptext' => array('helptext' => Dictionary::translateFile('rule', $key . "_helptext")),
- 'property' => $key,
- 'currentvalue' => $value)),
- );
+ // TODO: Removed if not needed anymore.
+ if ($action === '') {
+ //$this->ajaxDeviceList();
}
- echo Render::parse('usb-device-list', array(
- 'list' => array_values($usbdevices),
- 'settings' => array_values($settings)
- ));
}
private function getUsbDeviceList() {