FE+BE: init check work, removed legacy setDeviceData

Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
jokob-sk
2025-12-18 09:02:57 +11:00
parent bc76c04f9e
commit daa720ab94
4 changed files with 325 additions and 271 deletions

View File

@@ -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();
}); });
} }

View File

@@ -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

View File

@@ -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");

View File

@@ -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."""