summaryrefslogtreecommitdiffstats
path: root/modules-available/usblockoff/api.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/usblockoff/api.inc.php')
-rw-r--r--modules-available/usblockoff/api.inc.php129
1 files changed, 129 insertions, 0 deletions
diff --git a/modules-available/usblockoff/api.inc.php b/modules-available/usblockoff/api.inc.php
new file mode 100644
index 00000000..6a5e4a7d
--- /dev/null
+++ b/modules-available/usblockoff/api.inc.php
@@ -0,0 +1,129 @@
+<?php
+
+HandleParameters();
+
+function HandleParameters()
+{
+ $getAction = Request::get('action', 0, 'string');
+ if ($getAction == "newdevice") {
+ $id = Request::get('id', '', 'string');
+ $serial = Request::get('serial', '', 'sting');
+ $name = Request::get('name', '', 'string');
+ $ip = Request::get('ip', 0, 'string');
+ $client = Database::queryFirst("SELECT m.machineuuid AS 'muid', m.currentuser AS 'user' FROM machine AS m WHERE m.clientip=:ip", array('ip' => $ip));
+
+ // TODO: product and vendor id necessary? It's already in the hwname part.
+ list($vid, $pid) = explode(':', $id);
+ $hwProps = array(
+ 'vendorid' => $vid,
+ 'productid' => $pid,
+ 'name' => $name,
+ 'with-interface' => Request::get('with-interface', '', 'string')
+ );
+ // TODO: WITH INTERFACE in the HW table?! Should be equal for every device but not guaranteed (ODROID).
+ $deviceProps = array(
+ 'hash' => Request::get('hash', '', 'string'),
+ 'parent-hash' => Request::get('parent-hash', '', 'string'),
+ 'via-port' => Request::get('via-port', '', 'string'),
+ 'interface-policy' => Request::get('interface-policy', '', 'string'),
+ 'machineuuid' => $client['muid'],
+ 'user' => $client['user'],
+ 'lastseen' => time()
+ );
+ newDevice($id, $serial, $hwProps, $deviceProps);
+ } elseif ($getAction == "deletedevice") {
+ $id = Request::get('id', '', 'string');
+ $serial = Request::get('serial', '', 'string');
+ deleteDevice($id, $serial);
+ }
+}
+
+/**
+ * Adds a new USB-Device to the db.
+ *
+ * @param string $id USB-Device id.
+ * @param string $serial USB-Device serial number.
+ * @param string $name USB-Device name.
+ */
+function newDevice($id, $serial, $hwProps, $deviceProps)
+{
+ // Add or Update the usb device in the statistic_hw table.
+ $hwid = (int)Database::insertIgnore('statistic_hw', 'hwid', array(
+ 'hwtype' => DeviceType::USB,
+ 'hwname' => $id));
+ // TODO: Is it okay to use the id (vendor:product) as hwname to identify a usb device?
+
+ // Add all the global prop values to the statistics_hw_prop table.
+ // productid, vendorid, name, interfaces
+ // TODO:
+ addHwProps('statistic_hw_prop', $hwid, $hwProps);
+
+ // Only when the device has a serial number add the specific hw props.
+ // TODO: !!! Are there data transfer devices without a serial number? !!!
+ if (!empty($serial)) {
+ // Add the hwid -> serial in the usblockoff_hw table if not already existent.
+ $dbquery2 = Database::queryFirst("Select * FROM `usblockoff_hw` WHERE hwid=:hwid AND serial=:serial", array(
+ 'hwid' => $hwid,
+ 'serial' => $serial
+ ));
+
+ if (empty($dbquery2)) {
+ Database::exec("INSERT INTO `usblockoff_hw` (hwid, serial) VALUES (:hwid, :serial)", array(
+ 'hwid' => $hwid,
+ 'serial' => $serial
+ ));
+ }
+
+ // Add all the prop values to the usblockoff_hw_prop table.
+ // PROP: serial, machineuuid, time, user, ruleInformation, Port, hash, interface-policy
+ addUSBHwProps('usblockoff_hw_prop', $hwid, $serial, $deviceProps);
+ echo "Successfully added";
+ } else {
+ echo "No specific props were added. Device has no serial number";
+ }
+}
+
+function addHwProps($table, $hwid, $propArray) {
+ foreach ($propArray as $prop => $value) {
+ if (empty($value)) {
+ continue;
+ }
+ Database::exec("INSERT INTO " . $table . " (hwid, prop, value) VALUES (:hwid, :prop, :value) ON DUPLICATE KEY UPDATE value=:value", array(
+ 'hwid' => $hwid,
+ 'prop' => $prop,
+ 'value' => $value
+ ));
+ }
+}
+
+function addUSBHwProps($table, $hwid, $serial, $propArray) {
+ foreach ($propArray as $prop => $value) {
+ if (empty($value)) {
+ continue;
+ }
+ Database::exec("INSERT INTO " . $table . " (hwid, serial, prop, value) VALUES (:hwid, :serial, :prop, :value) ON DUPLICATE KEY UPDATE value=:value", array(
+ 'hwid' => $hwid,
+ 'serial' => $serial,
+ 'prop' => $prop,
+ 'value' => $value
+ ));
+ }
+}
+
+/**
+ * Deletes a device from the db given a serial number.
+ *
+ * @param string $serial USB-Device serial number.
+ */
+function deleteDevice($id, $serial)
+{
+ $hw = Database::queryFirst("SELECT * FROM `statistic_hw` WHERE hwname=:id", array('id' => $id));
+ if($hw['hwtype'] === DeviceType::USB) {
+ Database::exec("DELETE FROM `usblockoff_hw` WHERE hwid=:hwid AND serial=:serial", array(
+ 'hwid' => $hw['hwid'],
+ 'serial' => $serial));
+ echo "Successfully deleted.";
+ } else {
+ echo "Type is not a USB device";
+ }
+}