Commit Graph
273 Commits
Author SHA1 Message Date
Aditya Raj Singh 4f604e4e2b feat(ntfy): allow more than one custom header
The custom header added in #1695 was a single name/value pair, which is
enough for a proxy that authenticates with one token but not for Pangolin,
which expects both P-Access-Token-Id and P-Access-Token.

NTFY_CUSTOMHEADER_NAME and NTFY_CUSTOMHEADER_VALUE are replaced by a single
list setting, NTFY_CUSTOM_HEADERS, holding one "Name: Value" entry per
header. The list widget is the same one the other list settings use.

Only the first colon separates the name from the value, so values may
contain colons. An entry is skipped and logged when it is malformed, when
the name repeats, or when it collides with a header the plugin already set,
so a custom header still cannot clobber the ntfy credentials.

Values are never written to the log, since they are usually secrets. That
also applies to the invalid-header error, which now names the headers that
were applied without quoting any of them.
2026-08-21 00:12:42 +05:30
Jokob @NetAlertX 3196b8088a Merge pull request #1744 from netalertx/copilot/fix-devcomments-xml-issue
Escape notification HTML device fields and fall back on indent errors
2026-08-15 10:15:38 +10:00
copilot-swe-agent[bot]andjokob-sk 13da2ddbf1 fix: use valid notification fallback log level
Co-authored-by: jokob-sk <96159884+jokob-sk@users.noreply.github.com>
2026-08-14 23:51:15 +00:00
copilot-swe-agent[bot]andjokob-sk 44ed53cb69 test: cover escaped notification html fallback
Co-authored-by: jokob-sk <96159884+jokob-sk@users.noreply.github.com>
2026-08-14 15:34:07 +00:00
copilot-swe-agent[bot]andjokob-sk 0197e7c2cf fix: escape notification HTML device fields
Co-authored-by: jokob-sk <96159884+jokob-sk@users.noreply.github.com>
2026-08-14 15:29:44 +00:00
Jokob @NetAlertX f14364335b Merge pull request #1739 from netalertx/copilot/fix-nic-child-relationship-issue
Fix: NIC child presence no longer forces a directly-detected parent offline (#1736)
2026-08-13 19:20:28 +10:00
copilot-swe-agent[bot]andjokob-sk f52cc50705 fix: address review feedback on NIC presence logic and tests
- Replace max() with explicit if/else for readability
- Use db_test_helpers (make_db, make_device_dict, insert_device_from_dict,
  DummyDB) instead of local mock DB objects in test_nic_presence.py
- Lowercase all MAC addresses in tests

Co-authored-by: jokob-sk <96159884+jokob-sk@users.noreply.github.com>
2026-08-13 08:52:43 +00:00
copilot-swe-agent[bot]andjokob-sk 283bea21c9 fix: NIC child presence no longer forces a directly-detected parent offline
When a parent device has NIC children, update_devPresentLastScan_based_on_nics
previously replaced the parent's devPresentLastScan unconditionally with the
NIC-derived value. This discarded any genuine direct detection of the parent:
if the parent was found by ARP/save_own_device (present=1) but its NIC child
was absent (present=0), the NIC step forced the parent back to 0. The next
scan re-detected the parent → Connected event → NIC forced it down again,
producing an endless one-directional Connected event stream.

Fix: use max(original, nic_derived) so NIC children can only raise a parent's
presence (bring an undetected parent online), never lower it when the parent
itself was directly detected this cycle.

Adds test/scan/test_nic_presence.py covering the exact regression scenario
and surrounding cases (raise, no-NIC unchanged, req_all modes).

Fixes #1736

Co-authored-by: jokob-sk <96159884+jokob-sk@users.noreply.github.com>
2026-08-13 08:44:00 +00:00
copilot-swe-agent[bot]andjokob-sk 80f2b03870 fix: use db_test_helpers and lowercase MACs in skip_repeated test
Co-authored-by: jokob-sk <96159884+jokob-sk@users.noreply.github.com>
2026-08-13 08:35:40 +00:00
copilot-swe-agent[bot]andjokob-sk 2dc2207228 fix: remove localtime modifier from skip_repeated_notifications cooldown comparison; add UTC regression tests
Co-authored-by: jokob-sk <96159884+jokob-sk@users.noreply.github.com>
2026-08-13 06:23:09 +00:00
Jokob @NetAlertX a06dc259a8 Refactor plugin paths in scripts and tests to ensure consistent directory structure 2026-08-10 03:51:23 +00:00
Jokob @NetAlertX 9e38cfd8b4 Add website monitoring plugin and update workflows configuration
- Introduced a new plugin for monitoring website health, including functionality to check URLs and log results.
- Created README and configuration files for the workflows plugin, detailing its purpose and settings.
- Updated import paths in various test files to reflect the new directory structure.
- Ensured compatibility of test cases with the updated plugin architecture.
2026-08-10 02:32:49 +00:00
jokob-sk 2658d5703e BE+FE: less logging bloat + better notification preview + skeletons 2026-07-09 13:34:54 +10:00
Jokob @NetAlertX 18ec0ce96c feat: Implement DevicesHistory feature with triggers and history tracking
- Added db_history.py to manage DevicesHistory table and triggers for INSERT and UPDATE operations.
- Created device_history_instance.py for querying and grouping DevicesHistory records.
- Developed change_history.php for displaying device change history with filtering and pagination.
- Introduced skel_device_details_tab_history.php for skeleton loading state in device details tab.
- Added unit tests in test_device_history.py to validate trigger functionality and history management.
- Implemented filter population and pagination in the change history UI.
2026-07-04 23:34:52 +00:00
Jokob @NetAlertX 35b19cbb51 Refactor cache handling for plugins: update pluginsData initialization and improve fetch logic; enhance UI tests for translation loading 2026-07-02 04:32:01 +00:00
Jokob @NetAlertX 6c593d8879 Enhance plugin string handling and initialization; add UI tests for translation loading 2026-07-02 04:15:00 +00:00
Jokob @NetAlertX b29d279de8 Merge branch 'next_release' of https://github.com/netalertx/NetAlertX into next_release 2026-07-01 08:14:07 +00:00
Jokob @NetAlertX 636b0d9ca7 Add 'not_equals' and 'not_contains' operators; enhance workflow examples and tests 2026-07-01 08:14:00 +00:00
copilot-swe-agent[bot] 20f7fbd0c9 Fix over-broad page source assertion in test_export_csv_button_works 2026-07-01 06:08:36 +00:00
Jokob @NetAlertX 495698c6c2 Update test suite configuration and enhance test assertions
- Changed the test suite name for clarity.
- Updated default behavior for running all tests in the workflow.
- Improved logging in the Docker test script for better debugging.
- Modified assertions in Nginx proxy security tests to ensure access is not blocked.
- Added exception handling in UI tests to skip tests when elements are not found.
2026-07-01 05:54:05 +00:00
Jokob @NetAlertX 21a1d1b97c test fixes 2026-07-01 05:19:06 +00:00
Jokob @NetAlertX 6122df1c5c test fixes 2026-07-01 05:00:49 +00:00
jokob-sk 847400bf4e test fixes 2026-07-01 13:24:37 +10:00
jokob-sk 7630608583 docs 2026-06-19 22:39:09 +00:00
Jokob @NetAlertX a9b2f4b256 Merge pull request #1678 from netalertx/main
sync
2026-06-17 16:48:40 +10:00
Jokob @NetAlertX 3a206f0996 Add REST Import plugin and corresponding tests
- Implemented the REST Import plugin (rest_import.py) to handle importing data from REST APIs.
- Added functionality for configurable HTTP methods, authentication types, and custom headers.
- Included error handling for various HTTP response statuses and connection issues.
- Created unit tests for the plugin covering header building, path resolution, MAC validation, record mapping, and authentication methods.
- Ensured that module-level side effects are patched during tests to prevent live interactions.
2026-06-17 06:43:26 +00:00
Jokob @NetAlertX 4075aa469b Merge pull request #1675 from netalertx/next_release
Next release
2026-06-17 15:37:23 +10:00
Jokob @NetAlertX 26b337d6a7 feat(workflows): Enhance device management with query capabilities and conflict resolution
- Added `queryByConditions` method to `DeviceInstance` for flexible device querying based on dynamic conditions.
- Introduced `interpolate_tokens` function to replace placeholders in action values with actual device data.
- Updated `UpdateFieldAction` to handle cross-device updates and archive conflicting MAC addresses.
- Implemented cascade prevention in `WorkflowManager` to avoid processing events for devices modified in the same batch.
- Added unit tests for new functionalities, including token interpolation, condition querying, and action execution.
- Created constants for device column validation to enhance security and maintainability.
- Established a structured research skill specification to guide development practices.
2026-06-16 11:40:28 +00:00
Jokob @NetAlertX 727fe0e3e2 Merge branch 'main' into feat/adguard-export-plugin 2026-05-30 08:53:04 +10:00
Jokob @NetAlertX f0cc4d123c Enhance carbon-copy behavior to prevent overwriting devPresentLastScan in sync operations #1651 2026-05-28 05:31:09 +00:00
Nathan JacobsonandClaude Sonnet 4.6 93e534cef5 refactor: use DeviceInstance model instead of direct SQLite query
Replaces the raw sqlite3 query in get_netalertx_devices() with
DeviceInstance().getAll() as suggested in code review, applying the
archived/offline/new filters in Python. Removes the sqlite3 and
fullDbPath imports. Updates tests to mock DeviceInstance.getAll().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 22:03:14 -04:00
Jokob @NetAlertX 014e8ffff0 linting 2026-05-26 21:59:54 +00:00
Jokob @NetAlertX 1f2205ff27 Refactor sync endpoint tests to use monkeypatch for environment variables and remove unused imports 2026-05-26 21:59:11 +00:00
Jokob @NetAlertX 5ea999fd57 Fix typos in README and test files related to SYNC_BEHAVIOR documentation 2026-05-26 07:51:09 +00:00
Jokob @NetAlertX f8f7ac3827 Implement SYNC_BEHAVIOR setting to control hub device write modes and update related documentation #1652 2026-05-26 07:42:03 +00:00
Jokob @NetAlertX c829c4cf5a Enhance node name extraction logic to accurately classify file formats for PUSH and PULL modes 2026-05-25 11:32:59 +00:00
Jokob @NetAlertX cc5fc0caae Enhance node name extraction logic to robustly handle dots in identifiers for PUSH and PULL modes 2026-05-24 22:25:17 +00:00
Jokob @NetAlertX b5d280644e Update code standards to prohibit inline imports and ensure all imports are at the top of the file 2026-05-24 02:21:56 +00:00
Jokob @NetAlertX b7cffe8c07 Refactor sync data processing to handle PUSH and PULL modes with improved error handling for JSON payloads 2026-05-24 02:14:11 +00:00
Jokob @NetAlertX 1108534540 Fix formatting inconsistencies in comments for sync endpoint tests 2026-05-24 01:30:33 +00:00
Jokob @NetAlertX e9879c47a9 Update sync POST test to use encrypted payload string 2026-05-24 01:20:21 +00:00
Jokob @NetAlertX 5910a7c2a1 BE: Refactor sync endpoint to accept JSON payloads and update related tests #1652 2026-05-24 01:11:00 +00:00
Nathan JacobsonandClaude Sonnet 4.6 ca7a699ce3 fix: address PR review feedback on adguard_export plugin
- config.json: add show:true to all visible column definitions so they
  render in the plugin output table
- script.py: fix managed_names adoption bug — update/skip branches no
  longer add unowned clients to managed state; rename tracking now
  scoped to plugin-created clients only
- README.md: fix ADGUARDEXP_URL default (localhost:3000, not local IP),
  add language tags to fenced code blocks, normalise metadata block to
  Other info / Maintainer / DD-Mon-YYYY format
- test_adguard_export.py: add regression test for manual client matched
  by ID not being adopted into managed state

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 14:22:58 -04:00
Jokob @NetAlertX 821594f617 Refine documentation and enhance XSS prevention measures in device details and test scripts 2026-05-21 00:36:59 +00:00
Jokob @NetAlertX 5f62d25e23 Implement XSS prevention by encoding special characters in device names across multiple files 2026-05-21 00:09:07 +00:00
Nathan JacobsonandClaude Sonnet 4.6 197e3a3cb6 feat: add adguard_export plugin and tests
Adds a new NetAlertX plugin that syncs known devices from the NetAlertX
database to AdGuard Home as persistent clients, keeping names, MACs, IP
addresses, and device-type tags in sync.

Also fixes the adguard_import config.json description placeholder and a
minor indentation inconsistency in that file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 16:27:25 -04:00
Jokob @NetAlertX f9bd8f35f5 Refactor test_sync_hub_node_backfill: streamline imports and utilize shared DB helpers 2026-04-15 12:48:01 +00:00
Jokob @NetAlertX 89139fed60 Add update_sync_hub_node function and corresponding tests for backfilling devSyncHubNode #1609 2026-04-14 20:59:36 +00:00
Jokob @NetAlertX c275bf447d fixes 2026-04-13 13:02:34 +00:00
Jokob @NetAlertX 8abecb7a0d PLG: Implement selective recording for Plugins_History to prevent unbounded growth 2026-04-12 23:09:34 +00:00