mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-03-31 07:12:23 -07:00
feat(api): MCP, OpenAPI & Dynamic Introspection
New Features: - API endpoints now support comprehensive input validation with detailed error responses via Pydantic models. - OpenAPI specification endpoint (/openapi.json) and interactive Swagger UI documentation (/docs) now available for API discovery. - Enhanced MCP session lifecycle management with create, retrieve, and delete operations. - Network diagnostic tools: traceroute, nslookup, NMAP scanning, and network topology viewing exposed via API. - Device search, filtering by status (including 'offline'), and bulk operations (copy, delete, update). - Wake-on-LAN functionality for remote device management. - Added dynamic tool disablement and status reporting. Bug Fixes: - Fixed get_tools_status in registry to correctly return boolean values instead of None for enabled tools. - Improved error handling for invalid API inputs with standardized validation responses. - Fixed OPTIONS request handling for cross-origin requests. Refactoring: - Significant refactoring of api_server_start.py to use decorator-based validation (@validate_request).
This commit is contained in:
@@ -500,6 +500,7 @@ class DeviceInstance:
|
||||
|
||||
def setDeviceData(self, mac, data):
|
||||
"""Update or create a device."""
|
||||
conn = None
|
||||
try:
|
||||
if data.get("createNew", False):
|
||||
sql = """
|
||||
@@ -517,34 +518,34 @@ class DeviceInstance:
|
||||
|
||||
values = (
|
||||
mac,
|
||||
data.get("devName", ""),
|
||||
data.get("devOwner", ""),
|
||||
data.get("devType", ""),
|
||||
data.get("devVendor", ""),
|
||||
data.get("devIcon", ""),
|
||||
data.get("devFavorite", 0),
|
||||
data.get("devGroup", ""),
|
||||
data.get("devLocation", ""),
|
||||
data.get("devComments", ""),
|
||||
data.get("devParentMAC", ""),
|
||||
data.get("devParentPort", ""),
|
||||
data.get("devSSID", ""),
|
||||
data.get("devSite", ""),
|
||||
data.get("devStaticIP", 0),
|
||||
data.get("devScan", 0),
|
||||
data.get("devAlertEvents", 0),
|
||||
data.get("devAlertDown", 0),
|
||||
data.get("devParentRelType", "default"),
|
||||
data.get("devReqNicsOnline", 0),
|
||||
data.get("devSkipRepeated", 0),
|
||||
data.get("devIsNew", 0),
|
||||
data.get("devIsArchived", 0),
|
||||
data.get("devLastConnection", timeNowDB()),
|
||||
data.get("devFirstConnection", timeNowDB()),
|
||||
data.get("devLastIP", ""),
|
||||
data.get("devGUID", ""),
|
||||
data.get("devCustomProps", ""),
|
||||
data.get("devSourcePlugin", "DUMMY"),
|
||||
data.get("devName") or "",
|
||||
data.get("devOwner") or "",
|
||||
data.get("devType") or "",
|
||||
data.get("devVendor") or "",
|
||||
data.get("devIcon") or "",
|
||||
data.get("devFavorite") or 0,
|
||||
data.get("devGroup") or "",
|
||||
data.get("devLocation") or "",
|
||||
data.get("devComments") or "",
|
||||
data.get("devParentMAC") or "",
|
||||
data.get("devParentPort") or "",
|
||||
data.get("devSSID") or "",
|
||||
data.get("devSite") or "",
|
||||
data.get("devStaticIP") or 0,
|
||||
data.get("devScan") or 0,
|
||||
data.get("devAlertEvents") or 0,
|
||||
data.get("devAlertDown") or 0,
|
||||
data.get("devParentRelType") or "default",
|
||||
data.get("devReqNicsOnline") or 0,
|
||||
data.get("devSkipRepeated") or 0,
|
||||
data.get("devIsNew") or 0,
|
||||
data.get("devIsArchived") or 0,
|
||||
data.get("devLastConnection") or timeNowDB(),
|
||||
data.get("devFirstConnection") or timeNowDB(),
|
||||
data.get("devLastIP") or "",
|
||||
data.get("devGUID") or "",
|
||||
data.get("devCustomProps") or "",
|
||||
data.get("devSourcePlugin") or "DUMMY",
|
||||
)
|
||||
|
||||
else:
|
||||
@@ -559,29 +560,29 @@ class DeviceInstance:
|
||||
WHERE devMac=?
|
||||
"""
|
||||
values = (
|
||||
data.get("devName", ""),
|
||||
data.get("devOwner", ""),
|
||||
data.get("devType", ""),
|
||||
data.get("devVendor", ""),
|
||||
data.get("devIcon", ""),
|
||||
data.get("devFavorite", 0),
|
||||
data.get("devGroup", ""),
|
||||
data.get("devLocation", ""),
|
||||
data.get("devComments", ""),
|
||||
data.get("devParentMAC", ""),
|
||||
data.get("devParentPort", ""),
|
||||
data.get("devSSID", ""),
|
||||
data.get("devSite", ""),
|
||||
data.get("devStaticIP", 0),
|
||||
data.get("devScan", 0),
|
||||
data.get("devAlertEvents", 0),
|
||||
data.get("devAlertDown", 0),
|
||||
data.get("devParentRelType", "default"),
|
||||
data.get("devReqNicsOnline", 0),
|
||||
data.get("devSkipRepeated", 0),
|
||||
data.get("devIsNew", 0),
|
||||
data.get("devIsArchived", 0),
|
||||
data.get("devCustomProps", ""),
|
||||
data.get("devName") or "",
|
||||
data.get("devOwner") or "",
|
||||
data.get("devType") or "",
|
||||
data.get("devVendor") or "",
|
||||
data.get("devIcon") or "",
|
||||
data.get("devFavorite") or 0,
|
||||
data.get("devGroup") or "",
|
||||
data.get("devLocation") or "",
|
||||
data.get("devComments") or "",
|
||||
data.get("devParentMAC") or "",
|
||||
data.get("devParentPort") or "",
|
||||
data.get("devSSID") or "",
|
||||
data.get("devSite") or "",
|
||||
data.get("devStaticIP") or 0,
|
||||
data.get("devScan") or 0,
|
||||
data.get("devAlertEvents") or 0,
|
||||
data.get("devAlertDown") or 0,
|
||||
data.get("devParentRelType") or "default",
|
||||
data.get("devReqNicsOnline") or 0,
|
||||
data.get("devSkipRepeated") or 0,
|
||||
data.get("devIsNew") or 0,
|
||||
data.get("devIsArchived") or 0,
|
||||
data.get("devCustomProps") or "",
|
||||
mac,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user