1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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
);
// 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";
}
}
|