386 Commits
Author SHA1 Message Date
jokob-sk eeb7d070b4 BE: review fixes 2026-10-27 18:00:20 +11:00
jokob-sk 96f63ecc54 BE: review fixes 2026-10-27 15:06:30 +11:00
jokob-sk 03c8cace8a BE+FE: hardening 2026-10-27 14:19:55 +11:00
Jokob @NetAlertX 8fe3b49507 Merge pull request #1860 from netalertx/main
sync
2026-10-23 10:24:47 +09:00
Jokob @NetAlertX f669502028 Merge pull request #1858 from mauricio-camayo/fix/sync-hub-node-name
Sync + WIFICANARY: attribute synced detections to their node
2026-10-23 10:21:22 +09:00
jokob-sk ddc7cc67be PR cleanup alpine and python bump 2026-10-23 12:10:42 +11:00
Jokob @NetAlertX 212e0d3a6d Merge pull request #1859 from netalertx/main
sync
2026-10-23 10:05:51 +09:00
Jokob @NetAlertX 7e8f24aaa7 Merge pull request #1855 from frdmn/fix/mcp-sse-relative-endpoint
fix(mcp): advertise a relative SSE endpoint so clients work behind the /server proxy
2026-10-23 10:02:26 +09:00
Mauricio CamayoandClaude Opus 5.5 c263e939fd Address review: docstrings for execute_plugin and new WIFICANARY tests
execute_plugin's leading description comment becomes a docstring, as it
was touched by this PR; the two new check_trusted_aps tests get
docstrings instead of leading comments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PzCQWQVz9b2UzqLiGp2mPM
2026-10-22 12:29:12 -05:00
Mauricio CamayoandClaude Opus 5.5 ca4e92c32d Sync + WIFICANARY: attribute synced detections to their node
Fixes found running WIFICANARY on a WiFi satellite node that pushes its
detections to a hub with no WiFi of its own.

Synced plugin objects were stored with syncHubNodeName = "decoded"
instead of the node's name. plugin.py took filename.split(".")[2], but by
the time the hub processes the file decode_and_rename_files() has renamed
it to last_result.<PREFIX>.decoded.<NodeName>.<N>.log, so index 2 is the
literal marker. The parsing now lives in
utils.plugin_utils.get_sync_hub_node_name(), next to the function that
produces these names; it keeps node names that contain dots and returns
"" for local result files.

WIFICANARY's absent_baseline_clone was evaluated per trusted_aps entry,
so with a main AP + range extender pair, a weak clone seen while only the
main AP was in range also raised absent_baseline_clone through the
extender's entry, on top of the correct evil_twin. The baseline now
counts as present if any trusted radio for that SSID is visible;
single-entry behaviour is unchanged.

Leaving WIFICANARY_IFACE blank is how such a hub ingests the node's
detections (core processes the synced files after the plugin runs), but
it logged an unconditional "not set - nothing to scan" every cycle. It is
now a verbose "hub-only mode" message, and the node + hub setup is
documented in the setting description and the plugin README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PzCQWQVz9b2UzqLiGp2mPM
2026-10-22 12:09:53 -05:00
RobinMJD 90b1c081c8 fix(docker): require patched PHP 8.3 on Alpine 3.24
Move the Alpine builder and runner to the supported community repository, require PHP 8.3.36 or newer for the installed runtime components, and keep the Python 3.14 import paths aligned in the generated devcontainer. Add a runtime regression check for CLI, FPM and CGI covering CVE-2026-109618 and CVE-2026-109619.
2026-10-22 00:32:28 +02:00
Jonas Friedmann 68aaeaf527 BE+TESTS: relative MCP SSE endpoint path #1854
The SSE endpoint event advertised the absolute path /mcp/messages, which drops the /server prefix when clients connect through the bundled nginx proxy on port 20211. Clients then POST to /mcp/messages, nginx serves it as a static file and returns 404, so MCP clients can't connect via the proxy. A relative path resolves against whichever SSE URL the client used, so it works both directly and behind the prefix.
2026-10-21 13:07:34 +02:00
jokob-sk e9747066f1 BE: down notifications offset issue #1851 2026-10-19 19:10:46 +11:00
jokob-sk fbb42fbc61 BE: down notifications offset issue #1851 2026-10-19 19:10:30 +11:00
jokob-sk e8c214dda9 PLG: INTERNET plugin fix #1845 2026-10-18 10:25:23 +11:00
jokob-sk 02557f0db5 PLG: INTERNET plugin fix #1845 2026-10-18 10:01:18 +11:00
jokob-sk 19f6148a92 BE+FE: prevent ghost notifications #1841 2026-10-12 20:32:45 +11:00
jokob-sk ce6914beaf FE+TESTS: review fixes 2026-10-10 09:22:04 +11:00
jokob-sk c25fd5f6af DOS+BE: skill updates + multi ip handling #1831 2026-10-10 08:45:53 +11:00
jokob-sk 1a42bcf8a1 Merge branch 'next_release' of github.com:netalertx/NetAlertX into next_release 2026-10-10 07:54:44 +11:00
jokob-sk f5e66cc6a3 FE+TESTS: review fixes 2026-10-10 07:54:32 +11:00
Jokob @NetAlertX 77bce19345 Merge pull request #1838 from netalertx/main
sync
2026-10-09 09:59:36 +11:00
jokob-sk 1b106cbc32 Review fixes 2026-10-09 09:59:14 +11:00
jokob-sk f37f2c7df7 BE+FE: Plugins -> Sources DevDetails tab 2026-10-09 09:18:04 +11:00
Alexander Shevchenko 94164829ff docs(unifi): describe import and test helper functions 2026-10-06 11:38:38 +02:00
Alexander Shevchenko 75e427f805 test(unifi): cover SSID extraction and scan mapping
Cover wireless, wired, missing flags, missing SSIDs, and differing network names. Keep standalone imports valid when real pytz is installed.
2026-10-06 10:36:25 +02:00
Jokob @NetAlertX 735f51027c Merge pull request #1835 from netalertx/main
sync
2026-10-05 08:44:18 +11:00
Alexander Shevchenko 1aceeae218 test(frontend): cover network topology rendering and interactions
Add a standalone fixture using the real topology renderer and styles.
Check painted pixels in WebKit, Chromium and Firefox because DOM bounds
can remain correct when WebKit paints foreignObject content incorrectly.

Exercise node clicks, collapse/expand, wheel zoom and drag pan, including
assertions that pointer gestures change the SVG transform.

Document dependency installation and execution separately from pytest.
The regression fails with the original frontend and passes with the fix.
2026-10-04 16:45:29 +02:00
jokob-sk 145f3778d0 FE+BE: save icon + columns SOT refactor 2026-10-03 13:23:55 +10:00
Jokob @NetAlertX e663368698 Merge pull request #1820 from Svestis/fix/app-conf-string-escaping
Escape backslashes in string settings written to app.conf
2026-10-03 08:26:40 +10:00
jokob-sk 067a6a15ef FE+BE: review fixes #1828 #1826 2026-10-02 23:05:02 +10:00
jokob-sk af79016ac8 PLG: FREEBOX presence L3 fix #1828 2026-10-02 22:44:11 +10:00
jokob-sk 06d9ae9613 BE: Fix: NIC-Covered Parent Devices Miss Connected/Down Reconnected Events #1821 2026-10-01 07:41:17 +10:00
jokob-sk fbbdefb898 BE: Fix: NIC-Covered Parent Devices Miss Connected/Down Reconnected Events #1821 2026-09-30 22:01:04 +10:00
jokob-sk b18fc0688a BE: Fix: NIC-Covered Parent Devices Miss Connected/Down Reconnected Events #1821 2026-09-30 21:33:33 +10:00
jokob-sk 4f7448b3c9 BE: NICs presence fixes orphan disconnect events for parent #1821 2026-09-30 07:53:07 +10:00
Panagiotis Koilakos 1c3139bb7b BE: address app.conf escaping review feedback
Keep encode_python_string() in front/php/server/util.php, replacing
encode_single_quotes() in place, and remove the standalone
app_conf_encode.php helper file and its require.

Rework the regression test to dispatch the real util.php savesettings
path through the PHP CLI against temporary synthetic config, API and
session directories, covering both scalar string and array string
settings: the generated app.conf must compile with warnings as errors
and parse back to the typed values.

The existing {s-quote} lifecycle is preserved (single quotes are still
written as {s-quote} and converted back by the same consumers), and the
app.conf readers in initialise.py and plugin_helper.py are unchanged.
2026-09-29 23:11:07 +02:00
Panagiotis Koilakos 6dbd3f8f29 BE: escape backslashes when serializing string settings to app.conf
app.conf is written by util.php saveSettings() as Python source and later
compiled/exec'd by the backend. String settings were emitted into
single-quoted Python literals with only ' encoded (as {s-quote}), so
backslashes were written raw. A regex such as 192\.0\.2\..* then produced
"SyntaxWarning: invalid escape sequence '\.'", valid Python escapes such as
\n were silently reinterpreted, and a trailing backslash made the file fail
to compile.

Move the encoder into a side-effect-free helper, app_conf_encode.php, as
encode_python_string(). It now doubles backslashes before the existing
{s-quote} replacement, so backslashes round-trip unchanged through app.conf
serialization and Python parsing, while single quotes keep using the legacy
{s-quote} placeholder. Both scalar string and array string serialization use
the helper.

Add regression tests that run the real PHP helper through the PHP CLI,
compile the generated source with warnings promoted to errors, and check
the scalar and array round trips.
2026-09-28 19:54:45 +02:00
jokob-sk 0d60071d49 BE+FE: System info -> Performance section 2026-09-28 21:32:16 +10:00
jokob-sk 4aa2a0dddb BE+FE: System info -> Performance section 2026-09-28 14:40:11 +10:00
jokob-sk f0a833ccc8 BE: docstrings 2026-09-28 07:44:29 +10:00
jokob-sk c5081ba4c1 PLG: MQTT sanitization of input #1816 2026-09-28 07:38:33 +10:00
jokob-sk fa5c62c9c3 BE: Stats Logging for Down Devices corrected #1818 2026-09-28 07:27:06 +10:00
jokob-sk 6d5760405b PLG: MQTT refactor 2026-09-28 07:03:55 +10:00
jokob-sk 81b28cb15e PLG: MQTT add devVLan devSSID #1816 2026-09-27 09:25:58 +10:00
jokob-sk 6d7517eb8a DOCS+PLG: skill updates, PIHOLEMON corrected source 2026-09-26 10:06:37 +10:00
jokob-sk 127e2c92ee DOCS+PLG: skill updates, ADGUARDIMP more accurate presence determination #1813 2026-09-26 09:41:20 +10:00
jokob-sk 591b1fadbe Merge branch 'next_release' of github.com:netalertx/NetAlertX into next_release 2026-09-26 07:49:26 +10:00
jokob-sk c04213eb23 PLG: FREEBOX and FRITZBOX didn't respect SET_ALWAYS due to non-matching plugin name in config #1812 2026-09-26 07:49:11 +10:00
Jokob @NetAlertX d838376e9e Merge pull request #1809 from mauricio-camayo/add-wificanary-plugin
Add WIFICANARY plugin - passive WiFi rogue-AP detection
2026-09-25 14:19:37 +10:00