Commit Graph

221 Commits

Author SHA1 Message Date
sebingel
1d4fd09444 Fix robustness issues in Fritz!Box plugin before PR
Two independent reliability problems were identified during PR readiness
review. First, FritzConnection had no explicit timeout, meaning an
unreachable or slow Fritz!Box would block the plugin process indefinitely
until the OS TCP timeout fired (typically 2+ minutes), making the 60s
RUN_TIMEOUT in config.json ineffective. Second, hashlib.md5() called
without usedforsecurity=False raises ValueError on FIPS-enforced systems
(common in enterprise Docker hosts), silently breaking the guest WiFi
synthetic device feature for those users.

Changes:
- Add timeout=10 to FritzConnection(...) call (fritzbox.py:57)
  The fritzconnection library accepts a timeout parameter directly in
  __init__; it applies per individual HTTP request to the Fritz!Box,
  bounding each TR-064 call including the initial connection handshake.

- Add usedforsecurity=False to hashlib.md5() call (fritzbox.py:191)
  The MD5 hash is used only for deterministic MAC derivation (not for
  any security purpose), so the flag is semantically correct and lifts
  the FIPS restriction without changing the computed value.

- Update test assertion to include timeout=10 (test_fritzbox.py:307)
  assert_called_once_with checks the exact call signature; the test
  expectation must match the updated production code.

The plugin now fails fast on unreachable Fritz!Box (within 10s per
request) and works correctly on FIPS-enabled hosts. Default behavior
for standard deployments is unchanged.
2026-04-06 07:48:59 +00:00
sebingel
5839853f69 Add Fritz!Box device scanner plugin via TR-064 protocol
NetAlertX had no native support for discovering devices connected to
Fritz!Box routers. Users relying on Fritz!Box as their primary home
router had to use generic network scanning (ARP/ICMP), missing
Fritz!Box-specific details like interface type (WiFi/LAN) and
connection status per device.

Changes:
- Add plugin implementation (front/plugins/fritzbox/fritzbox.py)
  Queries all hosts via FritzHosts TR-064 service, normalizes MACs,
  maps interface types (802.11→WiFi, Ethernet→LAN), and writes results
  to CurrentScan via Plugin_Objects. Supports filtering to active-only
  devices and optional guest WiFi monitoring via a synthetic AP device
  with a deterministic locally-administered MAC (02:xx derived from
  Fritz!Box MAC via MD5).

- Add plugin configuration (front/plugins/fritzbox/config.json)
  Defines plugin_type "device_scanner" with settings for host, port,
  credentials, guest WiFi reporting, and active-only filtering.
  Maps scan columns to CurrentScan fields (scanMac, scanLastIP, scanName,
  scanType). Default schedule: every 5 minutes.

- Add plugin documentation (front/plugins/fritzbox/README.md)
  Covers TR-064 protocol basics, quick setup guide, all settings with
  defaults, troubleshooting for common issues (connection refused, auth
  failures, no devices found), and technical details.

- Add fritzconnection>=1.15.1 dependency (requirements.txt)
  Required Python library for TR-064 communication with Fritz!Box.

- Add test suite (test/plugins/test_fritzbox.py:1-298)
  298 lines covering get_connected_devices (active filtering, MAC
  normalization, interface mapping, error resilience), check_guest_wifi_status
  (service detection, SSID-based guest detection, fallback behavior), and
  create_guest_wifi_device (deterministic MAC generation, locally-administered
  bit, fallback MAC, regression anchor with precomputed hash).

Users can now scan Fritz!Box-connected devices natively, seeing per-device
connection status and interface type directly in NetAlertX. Guest WiFi
monitoring provides visibility into guest network state. The plugin
defaults to HTTPS on port 49443 with active-only filtering enabled.
2026-04-06 07:34:14 +00:00
Jokob @NetAlertX
36e606e1a1 Refactor MQTT plugin: replace prepTimeStamp with format_date_iso for timestamp formatting and add regression tests for format_date_iso function Events have wrong time in HA
Some checks failed
🐳 ⚠ docker-unsafe from next_release branch / docker_dev_unsafe (push) Has been cancelled
Fixes #1587
2026-04-04 23:04:58 +00:00
Jokob @NetAlertX
3f80d2e57f feat(plugins): Implement /plugins/stats endpoint for per-plugin row counts with optional foreignKey filtering
Some checks failed
🐳 ⚠ docker-unsafe from next_release branch / docker_dev_unsafe (push) Has been cancelled
2026-03-27 21:35:41 +00:00
Jokob @NetAlertX
ec3e4c8988 feat(api): Enhance session events API with pagination, sorting, and filtering
- Added support for pagination (page and limit) in the session events endpoint.
- Implemented sorting functionality based on specified columns and directions.
- Introduced free-text search capability for session events.
- Updated SQL queries to retrieve all events and added a new SQL constant for events.
- Refactored GraphQL types and helpers to support new plugin and event queries.
- Created new GraphQL resolvers for plugins and events with pagination and filtering.
- Added comprehensive tests for new GraphQL endpoints and session events functionality.
2026-03-26 20:57:10 +00:00
Jokob @NetAlertX
7278ee8cfa Refactor getTotals method to clarify API contract and ensure stable response structure #1569 #1561 2026-03-21 21:28:42 +00:00
Jokob @NetAlertX
0a7ecb5b7c Update config.json files to add 'ordeable' option and refactor cacheStrings function for consistency 2026-03-17 09:22:25 +00:00
Jokob @NetAlertX
c7399215ec Refactor event and session column names to camelCase
- Updated test cases to reflect new column names (eve_MAC -> eveMac, eve_DateTime -> eveDateTime, etc.) across various test files.
- Modified SQL table definitions in the database cleanup and migration tests to use camelCase naming conventions.
- Implemented migration tests to ensure legacy column names are correctly renamed to camelCase equivalents.
- Ensured that existing data is preserved during the migration process and that views referencing old column names are dropped before renaming.
- Verified that the migration function is idempotent, allowing for safe re-execution without data loss.
2026-03-16 10:11:22 +00:00
Jokob @NetAlertX
0bb6db155b Merge branch 'next_release' of https://github.com/netalertx/NetAlertX into next_release 2026-03-15 01:42:23 +00:00
Jokob @NetAlertX
7221b4ba96 Keep all local changes while resolving conflicts 2026-03-15 01:19:34 +00:00
Jokob @NetAlertX
f75c53fc5d Implement notification text templates and update related settings for customizable notifications 2026-03-14 23:27:29 +00:00
Jokob @NetAlertX
aba1ddd3df Handle JSON decoding errors in _get_data function 2026-03-08 07:57:52 +00:00
Jokob @NetAlertX
d49abd9d02 Enhance code standards, update contributing guidelines, and add tests for SYNC plugin functionality 2026-03-07 21:34:38 +00:00
Jokob @NetAlertX
89811cd133 Merge pull request #1544 from adamoutler/built-in-tests
Improve built-in test used during system startup - thanks @adamoutler 🙏
2026-03-05 06:48:46 +11:00
Adam Outler
b854206599 Address review comments from PR #1544 2026-03-04 14:36:31 +00:00
Adam Outler
a532c98115 Update test/docker_tests/test_entrypoint.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-03-03 23:22:11 -05:00
Adam Outler
5c0f29b97c coderabbit suggestions 2026-03-04 01:33:43 +00:00
Adam Outler
f1496b483b Fix docker compose unit test to remove ARP FLUX warning. 2026-03-04 01:13:39 +00:00
Adam Outler
c1d53ff93f Update docker compose and unit tests 2026-03-02 19:43:28 +00:00
Jokob @NetAlertX
bc4f419927 Enhance device MAC address handling in tests to ensure lowercase normalization and skip tests when web protection is disabled 2026-03-02 10:42:36 +00:00
Jokob @NetAlertX
3a73817048 Enhance device down event handling for sleeping devices and improve down alerts query 2026-03-02 10:05:37 +00:00
Jokob @NetAlertX
3e237bb452 Normalize MAC addresses in SQL queries and add devCanSleep column to device schema 2026-03-02 06:03:18 +00:00
Jokob @NetAlertX
15807b7ab9 Add unit and integration tests for device down event handling and sleeping suppression 2026-03-02 05:53:28 +00:00
Jokob @NetAlertX
ea5585a8ef Add database cleanup for Sessions and optimize queries
- Implemented deletion of Sessions older than DAYS_TO_KEEP_EVENTS.
- Added index for Plugins_History to improve query performance.
- Introduced unit tests for Sessions trimming and database analysis.
2026-03-01 06:07:57 +00:00
Jokob @NetAlertX
814ba02d1c feat: implement languages endpoint and refactor language handling to use languages.json 2026-02-28 01:51:12 +00:00
Jokob @NetAlertX
25a81556e3 Refactor: Simplify login redirection logic and clean up UI test code 2026-02-22 05:20:05 +00:00
Jokob @NetAlertX
39f617be5f Refactor: Remove unused is_https_request function and related comments; clean up test_login function by removing unnecessary password list 2026-02-22 05:11:09 +00:00
Jokob @NetAlertX
54db347b94 Refactor: Clean up whitespace in deep link handling functions and tests 2026-02-22 04:54:43 +00:00
Jokob @NetAlertX
2ae87fca38 Refactor login functionality: Remove Remember Me feature and update tests for deep link support 2026-02-22 04:54:34 +00:00
Jokob @NetAlertX
8224363c45 Refactor authentication: Remove Remember Me API endpoints and schemas; implement cookie-based Remember Me functionality 2026-02-22 04:44:57 +00:00
Jokob @NetAlertX
70645e7ef3 server-side remember-me 2026-02-22 03:47:29 +00:00
jokob-sk
2742414123 BE: /health endpoint
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-18 22:29:12 +11:00
Jokob @NetAlertX
fa36adb015 Merge branch 'main' into chore_timestamps 2026-02-18 10:05:25 +11:00
Jokob @NetAlertX
264cae3338 feat: add health check endpoint and related schemas with tests 2026-02-17 23:01:49 +00:00
jokob-sk
9676111ceb BE: Events deduplication and uniqueness
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-15 13:59:15 +11:00
jokob-sk
70c3530a5c Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2026-02-11 15:33:52 +11:00
Jokob @NetAlertX
933004e792 fixes 2026-02-11 03:56:37 +00:00
Jokob @NetAlertX
45157b6156 timestamp cleanup 2026-02-11 01:55:02 +00:00
jokob-sk
a560009611 TEST: fixing totals assert check dynamically
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-11 10:25:19 +11:00
jokob-sk
d7f17c8e78 FIX: lowercase MAC normalization across project v0.4
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-07 14:12:51 +11:00
jokob-sk
8538c87fef FIX: lowercase MAC normalization across project v0.3
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-07 14:08:14 +11:00
jokob-sk
1bacb59044 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2026-02-07 14:02:59 +11:00
jokob-sk
827b5d2ad3 FIX: lowercase MAC normalization across project v0.2
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-07 14:02:54 +11:00
Jokob @NetAlertX
e70bbdb78e Merge pull request #1490 from adamoutler/testing-resilliancy
Enhance Testing Resilliancy
2026-02-07 13:45:17 +11:00
jokob-sk
946ad00253 FIX: lowercase MAC normalization across project v0.1
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-07 13:44:50 +11:00
jokob-sk
6bc2de6e24 TEST: scan processing - de;eted
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-06 18:54:15 +11:00
jokob-sk
09b42166cc TEST: scan processing 9
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-06 18:48:40 +11:00
jokob-sk
dbe490a042 TEST: scan processing 8
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-06 18:43:53 +11:00
jokob-sk
5996e70f60 TEST: scan processing 7
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-06 18:39:08 +11:00
jokob-sk
15366a7f2e TEST: scan processing 6 + css fixes
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
2026-02-06 18:34:25 +11:00