$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 ); // 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'), 'with-interface' => Request::get('with-interface', '', '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"; } }