mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-04 01:01:35 -07:00
FE+BE: init check work, removed legacy setDeviceData
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
@@ -306,53 +306,93 @@
|
|||||||
|
|
||||||
showSpinner();
|
showSpinner();
|
||||||
|
|
||||||
// Update data to server using POST
|
const apiToken = getSetting("API_TOKEN"); // dynamic token
|
||||||
$.post('php/server/devices.php?action=setDeviceData', {
|
const host = window.location.hostname;
|
||||||
mac: $('#NEWDEV_devMac').val(),
|
const port = getSetting("GRAPHQL_PORT");
|
||||||
name: encodeURIComponent($('#NEWDEV_devName').val().replace(/'/g, "’")),
|
|
||||||
owner: encodeURIComponent($('#NEWDEV_devOwner').val().replace(/'/g, "’")),
|
mac = $('#NEWDEV_devMac').val();
|
||||||
type: $('#NEWDEV_devType').val().replace(/'/g, ""),
|
|
||||||
vendor: encodeURIComponent($('#NEWDEV_devVendor').val().replace(/'/g, "’")),
|
// Build payload for new endpoint
|
||||||
icon: encodeURIComponent($('#NEWDEV_devIcon').val()),
|
const payload = {
|
||||||
favorite: ($('#NEWDEV_devFavorite')[0].checked * 1),
|
devName: $('#NEWDEV_devName').val().replace(/'/g, "’"),
|
||||||
group: encodeURIComponent($('#NEWDEV_devGroup').val().replace(/'/g, "’")),
|
devOwner: $('#NEWDEV_devOwner').val().replace(/'/g, "’"),
|
||||||
location: encodeURIComponent($('#NEWDEV_devLocation').val().replace(/'/g, "’")),
|
devType: $('#NEWDEV_devType').val().replace(/'/g, ""),
|
||||||
comments: encodeURIComponent(encodeSpecialChars($('#NEWDEV_devComments').val())),
|
devVendor: $('#NEWDEV_devVendor').val().replace(/'/g, "’"),
|
||||||
networknode: $('#NEWDEV_devParentMAC').val(),
|
devIcon: $('#NEWDEV_devIcon').val(),
|
||||||
networknodeport: $('#NEWDEV_devParentPort').val(),
|
|
||||||
ssid: $('#NEWDEV_devSSID').val(),
|
devFavorite: ($('#NEWDEV_devFavorite')[0].checked * 1),
|
||||||
networksite: $('#NEWDEV_devSite').val(),
|
devGroup: $('#NEWDEV_devGroup').val().replace(/'/g, "’"),
|
||||||
staticIP: ($('#NEWDEV_devStaticIP')[0].checked * 1),
|
devLocation: $('#NEWDEV_devLocation').val().replace(/'/g, "’"),
|
||||||
scancycle: "1",
|
devComments: encodeSpecialChars($('#NEWDEV_devComments').val()),
|
||||||
alertevents: ($('#NEWDEV_devAlertEvents')[0].checked * 1),
|
|
||||||
alertdown: ($('#NEWDEV_devAlertDown')[0].checked * 1),
|
devParentMAC: $('#NEWDEV_devParentMAC').val(),
|
||||||
skiprepeated: $('#NEWDEV_devSkipRepeated').val().split(' ')[0],
|
devParentPort: $('#NEWDEV_devParentPort').val(),
|
||||||
relType: $('#NEWDEV_devParentRelType').val().replace(/'/g, ""),
|
devParentRelType: $('#NEWDEV_devParentRelType').val().replace(/'/g, ""),
|
||||||
reqNics: ($('#NEWDEV_devReqNicsOnline')[0].checked * 1),
|
|
||||||
newdevice: ($('#NEWDEV_devIsNew')[0].checked * 1),
|
devSSID: $('#NEWDEV_devSSID').val(),
|
||||||
archived: ($('#NEWDEV_devIsArchived')[0].checked * 1),
|
devSite: $('#NEWDEV_devSite').val(),
|
||||||
devFirstConnection: ($('#NEWDEV_devFirstConnection').val()),
|
|
||||||
devLastConnection: ($('#NEWDEV_devLastConnection').val()),
|
devStaticIP: ($('#NEWDEV_devStaticIP')[0].checked * 1),
|
||||||
devCustomProps: btoa(JSON.stringify(collectTableData("#NEWDEV_devCustomProps_table"))),
|
devScan: 1,
|
||||||
ip: ($('#NEWDEV_devLastIP').val()),
|
|
||||||
|
devAlertEvents: ($('#NEWDEV_devAlertEvents')[0].checked * 1),
|
||||||
|
devAlertDown: ($('#NEWDEV_devAlertDown')[0].checked * 1),
|
||||||
|
devSkipRepeated: $('#NEWDEV_devSkipRepeated').val().split(' ')[0],
|
||||||
|
|
||||||
|
devReqNicsOnline: ($('#NEWDEV_devReqNicsOnline')[0].checked * 1),
|
||||||
|
devIsNew: ($('#NEWDEV_devIsNew')[0].checked * 1),
|
||||||
|
devIsArchived: ($('#NEWDEV_devIsArchived')[0].checked * 1),
|
||||||
|
|
||||||
|
devFirstConnection: $('#NEWDEV_devFirstConnection').val(),
|
||||||
|
devLastConnection: $('#NEWDEV_devLastConnection').val(),
|
||||||
|
devLastIP: $('#NEWDEV_devLastIP').val(),
|
||||||
|
|
||||||
|
devCustomProps: btoa(
|
||||||
|
JSON.stringify(collectTableData("#NEWDEV_devCustomProps_table"))
|
||||||
|
),
|
||||||
|
|
||||||
createNew: createNew
|
createNew: createNew
|
||||||
}, function(msg) {
|
};
|
||||||
showMessage(msg);
|
|
||||||
|
|
||||||
// Remove navigation prompt "Are you sure you want to leave..."
|
|
||||||
window.onbeforeunload = null;
|
|
||||||
somethingChanged = false;
|
|
||||||
|
|
||||||
// refresh API
|
$.ajax({
|
||||||
updateApi("devices,appevents");
|
url: "http://" + host + ":" + port + "/device/" + encodeURIComponent(mac),
|
||||||
|
type: "POST",
|
||||||
|
headers: {
|
||||||
|
"Authorization": "Bearer " + apiToken,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
},
|
||||||
|
data: JSON.stringify(payload),
|
||||||
|
success: function (resp) {
|
||||||
|
|
||||||
// Callback function
|
if (resp && resp.success) {
|
||||||
if (typeof refreshCallback == 'function') {
|
showMessage("Device saved successfully");
|
||||||
refreshCallback(direction);
|
} else {
|
||||||
|
showMessage("Device update returned an unexpected response");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove navigation prompt
|
||||||
|
window.onbeforeunload = null;
|
||||||
|
somethingChanged = false;
|
||||||
|
|
||||||
|
// Refresh API
|
||||||
|
updateApi("devices,appevents");
|
||||||
|
|
||||||
|
// Callback
|
||||||
|
if (typeof refreshCallback === "function") {
|
||||||
|
refreshCallback(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
hideSpinner();
|
||||||
|
},
|
||||||
|
error: function (xhr) {
|
||||||
|
if (xhr.status === 403) {
|
||||||
|
showMessage("Unauthorized – invalid API token");
|
||||||
|
} else {
|
||||||
|
showMessage("Failed to save device (" + xhr.status + ")");
|
||||||
|
}
|
||||||
|
hideSpinner();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Everything loaded
|
|
||||||
hideSpinner();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
switch ($action) {
|
switch ($action) {
|
||||||
// check server/api_server/api_server_start.py for equivalents
|
// check server/api_server/api_server_start.py for equivalents
|
||||||
case 'getServerDeviceData': getServerDeviceData(); break; // equivalent: get_device_data
|
case 'getServerDeviceData': getServerDeviceData(); break; // equivalent: get_device_data
|
||||||
case 'setDeviceData': setDeviceData(); break; // equivalent: set_device_data
|
|
||||||
case 'deleteDevice': deleteDevice(); break; // equivalent: delete_device(mac)
|
case 'deleteDevice': deleteDevice(); break; // equivalent: delete_device(mac)
|
||||||
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break; // equivalent: delete_all_with_empty_macs
|
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break; // equivalent: delete_all_with_empty_macs
|
||||||
|
|
||||||
|
|||||||
@@ -345,8 +345,7 @@ function formatDataSize(bytes) {
|
|||||||
|
|
||||||
|
|
||||||
function loadInterfaces() {
|
function loadInterfaces() {
|
||||||
const apiToken = getSetting("API_TOKEN"); // replace with dynamic token if available
|
const apiToken = getSetting("API_TOKEN");
|
||||||
|
|
||||||
const host = window.location.hostname;
|
const host = window.location.hostname;
|
||||||
const port = getSetting("GRAPHQL_PORT");
|
const port = getSetting("GRAPHQL_PORT");
|
||||||
|
|
||||||
|
|||||||
@@ -500,96 +500,112 @@ class DeviceInstance:
|
|||||||
|
|
||||||
def setDeviceData(self, mac, data):
|
def setDeviceData(self, mac, data):
|
||||||
"""Update or create a device."""
|
"""Update or create a device."""
|
||||||
if data.get("createNew", False):
|
try:
|
||||||
sql = """
|
if data.get("createNew", False):
|
||||||
INSERT INTO Devices (
|
sql = """
|
||||||
devMac, devName, devOwner, devType, devVendor, devIcon,
|
INSERT INTO Devices (
|
||||||
devFavorite, devGroup, devLocation, devComments,
|
devMac, devName, devOwner, devType, devVendor, devIcon,
|
||||||
devParentMAC, devParentPort, devSSID, devSite,
|
devFavorite, devGroup, devLocation, devComments,
|
||||||
devStaticIP, devScan, devAlertEvents, devAlertDown,
|
devParentMAC, devParentPort, devSSID, devSite,
|
||||||
devParentRelType, devReqNicsOnline, devSkipRepeated,
|
devStaticIP, devScan, devAlertEvents, devAlertDown,
|
||||||
devIsNew, devIsArchived, devLastConnection,
|
devParentRelType, devReqNicsOnline, devSkipRepeated,
|
||||||
devFirstConnection, devLastIP, devGUID, devCustomProps,
|
devIsNew, devIsArchived, devLastConnection,
|
||||||
devSourcePlugin
|
devFirstConnection, devLastIP, devGUID, devCustomProps,
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
devSourcePlugin
|
||||||
"""
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
|
"""
|
||||||
|
|
||||||
values = (
|
values = (
|
||||||
mac,
|
mac,
|
||||||
data.get("devName", ""),
|
data.get("devName", ""),
|
||||||
data.get("devOwner", ""),
|
data.get("devOwner", ""),
|
||||||
data.get("devType", ""),
|
data.get("devType", ""),
|
||||||
data.get("devVendor", ""),
|
data.get("devVendor", ""),
|
||||||
data.get("devIcon", ""),
|
data.get("devIcon", ""),
|
||||||
data.get("devFavorite", 0),
|
data.get("devFavorite", 0),
|
||||||
data.get("devGroup", ""),
|
data.get("devGroup", ""),
|
||||||
data.get("devLocation", ""),
|
data.get("devLocation", ""),
|
||||||
data.get("devComments", ""),
|
data.get("devComments", ""),
|
||||||
data.get("devParentMAC", ""),
|
data.get("devParentMAC", ""),
|
||||||
data.get("devParentPort", ""),
|
data.get("devParentPort", ""),
|
||||||
data.get("devSSID", ""),
|
data.get("devSSID", ""),
|
||||||
data.get("devSite", ""),
|
data.get("devSite", ""),
|
||||||
data.get("devStaticIP", 0),
|
data.get("devStaticIP", 0),
|
||||||
data.get("devScan", 0),
|
data.get("devScan", 0),
|
||||||
data.get("devAlertEvents", 0),
|
data.get("devAlertEvents", 0),
|
||||||
data.get("devAlertDown", 0),
|
data.get("devAlertDown", 0),
|
||||||
data.get("devParentRelType", "default"),
|
data.get("devParentRelType", "default"),
|
||||||
data.get("devReqNicsOnline", 0),
|
data.get("devReqNicsOnline", 0),
|
||||||
data.get("devSkipRepeated", 0),
|
data.get("devSkipRepeated", 0),
|
||||||
data.get("devIsNew", 0),
|
data.get("devIsNew", 0),
|
||||||
data.get("devIsArchived", 0),
|
data.get("devIsArchived", 0),
|
||||||
data.get("devLastConnection", timeNowDB()),
|
data.get("devLastConnection", timeNowDB()),
|
||||||
data.get("devFirstConnection", timeNowDB()),
|
data.get("devFirstConnection", timeNowDB()),
|
||||||
data.get("devLastIP", ""),
|
data.get("devLastIP", ""),
|
||||||
data.get("devGUID", ""),
|
data.get("devGUID", ""),
|
||||||
data.get("devCustomProps", ""),
|
data.get("devCustomProps", ""),
|
||||||
data.get("devSourcePlugin", "DUMMY"),
|
data.get("devSourcePlugin", "DUMMY"),
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
sql = """
|
sql = """
|
||||||
UPDATE Devices SET
|
UPDATE Devices SET
|
||||||
devName=?, devOwner=?, devType=?, devVendor=?, devIcon=?,
|
devName=?, devOwner=?, devType=?, devVendor=?, devIcon=?,
|
||||||
devFavorite=?, devGroup=?, devLocation=?, devComments=?,
|
devFavorite=?, devGroup=?, devLocation=?, devComments=?,
|
||||||
devParentMAC=?, devParentPort=?, devSSID=?, devSite=?,
|
devParentMAC=?, devParentPort=?, devSSID=?, devSite=?,
|
||||||
devStaticIP=?, devScan=?, devAlertEvents=?, devAlertDown=?,
|
devStaticIP=?, devScan=?, devAlertEvents=?, devAlertDown=?,
|
||||||
devParentRelType=?, devReqNicsOnline=?, devSkipRepeated=?,
|
devParentRelType=?, devReqNicsOnline=?, devSkipRepeated=?,
|
||||||
devIsNew=?, devIsArchived=?, devCustomProps=?
|
devIsNew=?, devIsArchived=?, devCustomProps=?
|
||||||
WHERE devMac=?
|
WHERE devMac=?
|
||||||
"""
|
"""
|
||||||
values = (
|
values = (
|
||||||
data.get("devName", ""),
|
data.get("devName", ""),
|
||||||
data.get("devOwner", ""),
|
data.get("devOwner", ""),
|
||||||
data.get("devType", ""),
|
data.get("devType", ""),
|
||||||
data.get("devVendor", ""),
|
data.get("devVendor", ""),
|
||||||
data.get("devIcon", ""),
|
data.get("devIcon", ""),
|
||||||
data.get("devFavorite", 0),
|
data.get("devFavorite", 0),
|
||||||
data.get("devGroup", ""),
|
data.get("devGroup", ""),
|
||||||
data.get("devLocation", ""),
|
data.get("devLocation", ""),
|
||||||
data.get("devComments", ""),
|
data.get("devComments", ""),
|
||||||
data.get("devParentMAC", ""),
|
data.get("devParentMAC", ""),
|
||||||
data.get("devParentPort", ""),
|
data.get("devParentPort", ""),
|
||||||
data.get("devSSID", ""),
|
data.get("devSSID", ""),
|
||||||
data.get("devSite", ""),
|
data.get("devSite", ""),
|
||||||
data.get("devStaticIP", 0),
|
data.get("devStaticIP", 0),
|
||||||
data.get("devScan", 0),
|
data.get("devScan", 0),
|
||||||
data.get("devAlertEvents", 0),
|
data.get("devAlertEvents", 0),
|
||||||
data.get("devAlertDown", 0),
|
data.get("devAlertDown", 0),
|
||||||
data.get("devParentRelType", "default"),
|
data.get("devParentRelType", "default"),
|
||||||
data.get("devReqNicsOnline", 0),
|
data.get("devReqNicsOnline", 0),
|
||||||
data.get("devSkipRepeated", 0),
|
data.get("devSkipRepeated", 0),
|
||||||
data.get("devIsNew", 0),
|
data.get("devIsNew", 0),
|
||||||
data.get("devIsArchived", 0),
|
data.get("devIsArchived", 0),
|
||||||
data.get("devCustomProps", ""),
|
data.get("devCustomProps", ""),
|
||||||
mac,
|
mac,
|
||||||
)
|
)
|
||||||
|
|
||||||
conn = get_temp_db_connection()
|
conn = get_temp_db_connection()
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
cur.execute(sql, values)
|
cur.execute(sql, values)
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
return {"success": True}
|
return {"success": True}
|
||||||
|
except Exception as e:
|
||||||
|
if conn:
|
||||||
|
conn.rollback()
|
||||||
|
|
||||||
|
# Optional: your existing logger
|
||||||
|
mylog("none", f"[DeviceInstance] setDeviceData({mac}) failed: {e}")
|
||||||
|
|
||||||
|
return {
|
||||||
|
"success": False,
|
||||||
|
"error": str(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
finally:
|
||||||
|
if conn:
|
||||||
|
conn.close()
|
||||||
|
|
||||||
def deleteDeviceByMAC(self, mac):
|
def deleteDeviceByMAC(self, mac):
|
||||||
"""Delete a device by MAC."""
|
"""Delete a device by MAC."""
|
||||||
|
|||||||
Reference in New Issue
Block a user