Centralized network visibility and continuous asset discovery. Monitor devices, detect change, and stay aware across distributed networks.
This report presents the forensic synthetic code analysis of netalertx/NetAlertX, a Python project with 6,700 GitHub stars. SynthScan v2.0 examined 258,742 lines of code across 834 source files, recording 2314 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 17.9 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2314 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | install/index.html | 6 | #------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/production-filesystem/services/start-nginx.sh | 45 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | install/production-filesystem/services/start-nginx.sh | 47 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …oduction-filesystem/services/scripts/update_vendors.sh | 4 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …oduction-filesystem/services/scripts/update_vendors.sh | 9 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …oduction-filesystem/services/scripts/update_vendors.sh | 11 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | …oduction-filesystem/services/scripts/update_vendors.sh | 13 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …oduction-filesystem/services/scripts/update_vendors.sh | 16 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | back/update_vendors.sh | 3 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | back/update_vendors.sh | 8 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | back/update_vendors.sh | 10 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | back/update_vendors.sh | 12 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | back/update_vendors.sh | 15 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | back/update_vendors.sh | 23 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 121 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | test/db_test_helpers.py | 123 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | test/db_test_helpers.py | 184 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | test/db_test_helpers.py | 186 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | test/db_test_helpers.py | 199 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 201 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 314 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 317 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 407 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 409 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 439 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 441 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 457 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/db_test_helpers.py | 459 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/docker_tests/test_container_environment.py | 658 | # ┌─────────────────────────────────────────────────────────────────────────────────────────┐ | STRING |
| MEDIUM⚡ | test/docker_tests/test_container_environment.py | 661 | # └─────────────────────────────────────────────────────────────────────────────────────────┘ | STRING |
| MEDIUM⚡ | test/docker_tests/test_container_environment.py | 679 | # ┌─────────────────────────────────────────────────────────────────────────────────────────┐ | STRING |
| MEDIUM⚡ | test/docker_tests/test_container_environment.py | 682 | # └─────────────────────────────────────────────────────────────────────────────────────────┘ | STRING |
| MEDIUM⚡ | test/docker_tests/test_docker_compose_scenarios.py | 651 | # ┌─────────────────────────────────────────────────────────────────────────────────────────┐ | COMMENT |
| MEDIUM⚡ | test/docker_tests/test_docker_compose_scenarios.py | 655 | # └─────────────────────────────────────────────────────────────────────────────────────────┘ | COMMENT |
| MEDIUM⚡ | test/ui/test_ui_translations.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/ui/test_ui_translations.py | 54 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/ui/test_ui_xss_devname.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/ui/test_ui_xss_devname.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/ui/test_ui_xss_devname.py | 76 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/ui/test_ui_xss_devname.py | 78 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/ui/test_ui_xss_devname.py | 163 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/ui/test_ui_xss_devname.py | 165 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/ui/test_ui_xss_devname.py | 205 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/ui/test_ui_xss_devname.py | 207 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 72 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 74 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 161 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 163 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 284 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 286 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 317 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | test/plugins/test_fritzbox.py | 319 | # =========================================================================== | COMMENT |
| MEDIUM | test/plugins/test_fritzbox.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/plugins/test_fritzbox.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| 806 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test_mcp_disablement.py | 16 | def test_disable_tool_management(): | CODE |
| LOW | test/test_mcp_disablement.py | 78 | def test_openapi_spec_injection(): | CODE |
| LOW | test/test_mcp_disablement.py | 111 | def test_execute_disabled_tool(mock_get, mock_setting): | CODE |
| LOW | test/test_plugin_helper.py | 4 | def test_is_mac_accepts_wildcard(): | CODE |
| LOW | test/test_plugin_helper.py | 13 | def test_normalize_mac_preserves_wildcard(): | CODE |
| LOW | test/test_plugin_helper.py | 26 | def test_normalize_mac_preserves_internet_root(): | CODE |
| LOW | test/verify_runtime_validation.py | 51 | def test_search_invalid_schema(): | CODE |
| LOW⚡ | test/test_device_atomicity.py | 99 | def test_create_new_device_atomicity(self): | CODE |
| LOW | test/test_device_atomicity.py | 137 | def test_update_device_with_source_tracking_atomicity(self): | CODE |
| LOW | test/test_device_atomicity.py | 183 | def test_source_tracking_failure_rolls_back_device(self): | STRING |
| LOW | test/docker_tests/test_puid_pgid.py | 109 | def test_default_puid_pgid_ok() -> None: | CODE |
| LOW | test/docker_tests/test_puid_pgid.py | 123 | def test_invalid_puid_pgid_rejected(env: dict[str, str], expected: str) -> None: | CODE |
| LOW | test/docker_tests/test_puid_pgid.py | 139 | def test_legacy_user_mode_skips_puid_pgid() -> None: | CODE |
| LOW | test/docker_tests/test_puid_pgid.py | 153 | def test_synology_like_fresh_volume_is_primed() -> None: | CODE |
| LOW | test/docker_tests/test_puid_pgid.py | 238 | def test_aufs_explicit_root_no_warning() -> None: | CODE |
| LOW | test/docker_tests/test_puid_pgid.py | 331 | def test_missing_cap_chown_fails_priming() -> None: | CODE |
| LOW | test/docker_tests/conftest.py | 58 | def build_netalertx_test_image(request: pytest.FixtureRequest, cleanup_artifacts: None) -> None: | CODE |
| LOW⚡ | test/docker_tests/test_container_environment.py | 1383 | def test_restrictive_permissions_handling(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 240 | def _build_volume_args_for_keys( | CODE |
| LOW | test/docker_tests/test_container_environment.py | 442 | def test_nonroot_custom_uid_logs_note( | CODE |
| LOW | test/docker_tests/test_container_environment.py | 858 | def test_missing_capabilities_triggers_warning(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 891 | def test_missing_host_network_warns(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 922 | def test_missing_app_conf_triggers_seed(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 965 | def test_first_run_dynamic_subnet(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1007 | def test_missing_app_db_triggers_seed(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1051 | def test_custom_port_without_writable_conf(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1086 | def test_excessive_capabilities_warning(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1111 | def test_appliance_integrity_read_write_mode(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1136 | def test_zero_permissions_app_db_dir(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1162 | def test_zero_permissions_app_config_dir(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1188 | def test_mandatory_folders_creation(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1227 | def test_writable_config_validation(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1269 | def test_mount_analysis_ram_disk_performance(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 1326 | def test_mount_analysis_dataloss_risk(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_unit.py | 4 | def test_run_docker_compose_returns_output(monkeypatch, tmp_path): | CODE |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 67 | def capture_project_mandatory_required_audit_stream(container_name: str) -> subprocess.Popen[str]: | CODE |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 168 | def assert_has_troubleshooting_url(output: str) -> None: | CODE |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 436 | def validate_scenario_table_output(output: str, test_scenario: TestScenario) -> None: | CODE |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 744 | def test_cap_chown_required_when_caps_dropped(): | STRING |
| LOW | test/docker_tests/test_ports_available.py | 196 | def test_ports_available_normal_case(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_ports_available.py | 216 | def test_ports_conflict_same_number(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_ports_available.py | 241 | def test_ports_in_use_warning(dummy_container, tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_entrypoint.py | 52 | def test_app_conf_override_from_graphql_port(): | CODE |
| LOW | test/docker_tests/test_entrypoint.py | 64 | def test_app_conf_override_not_overridden(): | CODE |
| LOW | test/docker_tests/test_entrypoint.py | 79 | def test_no_app_conf_override_when_no_graphql_port(): | CODE |
| LOW | test/docker_tests/test_entrypoint.py | 87 | def test_skip_startup_checks_env_var(): | CODE |
| LOW | test/docker_tests/test_entrypoint.py | 98 | def test_host_optimization_warning_matches_sysctl(): | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 45 | def capture_project_mandatory_required_audit_stream(container_names: list[str], compose_cwd: pathlib.Path, env: dict[str | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 245 | def _extract_conflict_container_name(output: str) -> str | None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 336 | def _write_normal_startup_compose( | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 700 | def test_missing_capabilities_compose() -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 728 | def test_custom_port_with_unwritable_nginx_config_compose() -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 741 | def _wait_for_unwritable_failure() -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 793 | def test_host_network_compose(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 834 | def test_normal_startup_no_warnings_compose(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 959 | def test_ram_disk_mount_analysis_compose(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 1021 | def test_dataloss_risk_mount_analysis_compose(tmp_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 1083 | def test_missing_net_admin_compose() -> None: | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 1119 | def test_missing_net_raw_compose() -> None: | CODE |
| LOW | test/ui/test_ui_plugins.py | 34 | def test_plugin_actions_present(driver): | CODE |
| 673 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …uction-filesystem/entrypoint.d/30-mandatory-folders.sh | 107 | # Create the folders and files. | COMMENT |
| MEDIUM | …uction-filesystem/entrypoint.d/30-mandatory-folders.sh | 108 | # Create a log message for observability if any fail. | COMMENT |
| MEDIUM | install/proxmox/proxmox-install-netalertx.sh | 309 | # Create the execution_queue.log file if it doesn't exist | COMMENT |
| MEDIUM | install/ubuntu24/install.sh | 24 | OUI_FILE="/usr/share/arp-scan/ieee-oui.txt" # Define the path to ieee-oui.txt and ieee-iab.txt | CODE |
| MEDIUM | install/debian12/start.debian12.sh | 18 | OUI_FILE="/usr/share/arp-scan/ieee-oui.txt" # Define the path to ieee-oui.txt and ieee-iab.txt | CODE |
| MEDIUM | install/debian12/start.debian12.sh | 112 | # Create an empty log files | COMMENT |
| MEDIUM | install/debian12/start.debian12.sh | 114 | # Create the execution_queue.log file if it doesn't exist | COMMENT |
| MEDIUM⚡ | back/update_vendors.sh | 27 | # Define the URL of the IEEE OUI file | COMMENT |
| MEDIUM | test/test_mcp_disablement.py | 115 | # Create a dummy app for context | COMMENT |
| MEDIUM⚡ | test/test_device_atomicity.py | 109 | # Create a new device | COMMENT |
| MEDIUM | test/docker_tests/test_container_environment.py | 834 | # Create a dummy file for other directories | COMMENT |
| MEDIUM | test/docker_tests/test_ports_available.py | 35 | # Create a simple docker-compose file for the dummy container | COMMENT |
| MEDIUM | test/docker_tests/test_docker_compose_scenarios.py | 238 | # Create a minimal SQLite database | COMMENT |
| MEDIUM | test/ui/test_ui_login.py | 158 | # Create a deep link to devices.php#device-123 | COMMENT |
| MEDIUM | test/ui/test_ui_login.py | 193 | # Create a deep link to network.php#settings-panel | COMMENT |
| MEDIUM | test/ui/test_ui_xss_devname.py | 183 | # Create an event so events.php actually renders this device's name. | COMMENT |
| MEDIUM⚡ | test/api_endpoints/test_devices_endpoints.py | 89 | # Create a device first | COMMENT |
| MEDIUM | test/api_endpoints/test_devices_endpoints.py | 103 | # Create a device first | COMMENT |
| MEDIUM | server/plugin.py | 465 | # Create the file path | STRING |
| MEDIUM | server/plugin.py | 539 | # Create a tuple containing values to be inserted into the database. | STRING |
| MEDIUM | server/plugin.py | 567 | # Create a base tuple containing values to be inserted into the database. | STRING |
| MEDIUM | server/plugin.py | 655 | # Create a base tuple containing values to be inserted into the database. | STRING |
| MEDIUM | server/initialise.py | 142 | # Create the tuples | COMMENT |
| MEDIUM | server/initialise.py | 880 | # Create a backup file with the suffix "_old_setting_names" and timestamp | COMMENT |
| MEDIUM | server/workflows/app_events.py | 19 | # Create the AppEvents table if missing | COMMENT |
| MEDIUM⚡ | server/utils/plugin_utils.py | 300 | # Create the full file path | COMMENT |
| MEDIUM⚡ | server/utils/plugin_utils.py | 186 | pluginsList = [] # Create an empty list to store plugin configurations | CODE |
| MEDIUM | server/models/notification_instance.py | 57 | # Create a new DB entry if new notifications available, otherwise skip | STRING |
| MEDIUM | server/api_server/prometheus_endpoint.py | 20 | # Define a base URL with the user's home directory | COMMENT |
| MEDIUM | server/api_server/openapi/introspection.py | 81 | # Create a unique key for this path/method/op combination if needed, | COMMENT |
| MEDIUM | server/db/db_upgrade.py | 8 | # Define the expected Devices table columns (hardcoded base schema) [v26.1/2.XX] | COMMENT |
| MEDIUM | front/plugins/omada_sdn_imp/omada_sdn.py | 33 | # Define the installation path and extend the system path for plugin imports | COMMENT |
| MEDIUM | front/plugins/omada_sdn_imp/omada_sdn.py | 54 | # Define the current path and log file paths | COMMENT |
| MEDIUM | front/plugins/omada_sdn_imp/omada_sdn.py | 262 | # Create a DeviceInstance instance | COMMENT |
| MEDIUM | front/plugins/wake_on_lan/wake_on_lan.py | 8 | # Define the installation path and extend the system path for plugin imports | COMMENT |
| MEDIUM | front/plugins/wake_on_lan/wake_on_lan.py | 27 | # Define the current path and log file paths | COMMENT |
| MEDIUM | front/plugins/wake_on_lan/wake_on_lan.py | 46 | # Create a DeviceInstance instance | COMMENT |
| MEDIUM⚡ | front/plugins/_publisher_mqtt/mqtt.py | 63 | # Create a database connection | COMMENT |
| MEDIUM | front/plugins/_publisher_mqtt/mqtt.py | 44 | # Create an MD5 hash object | COMMENT |
| MEDIUM | front/plugins/_publisher_mqtt/mqtt.py | 313 | # Create a generic device for overal stats | COMMENT |
| MEDIUM | front/plugins/_publisher_mqtt/mqtt.py | 331 | # Create the HA sensor config if a new device is discovered | COMMENT |
| MEDIUM | front/plugins/_publisher_mqtt/mqtt.py | 449 | # Create a generic device for overal stats | COMMENT |
| MEDIUM | front/plugins/_publisher_mqtt/mqtt.py | 451 | # Create a new device representing overall stats | COMMENT |
| MEDIUM | front/plugins/csv_backup/script.py | 70 | # Create a CSV file in the specified location | COMMENT |
| MEDIUM | front/plugins/__test/test.py | 27 | # Create an MD5 hash object | COMMENT |
| MEDIUM⚡ | front/plugins/_publisher_email/email_smtp.py | 50 | # Create a database connection | COMMENT |
| MEDIUM⚡ | front/plugins/_publisher_email/email_smtp.py | 57 | # Create a NotificationInstance instance | COMMENT |
| MEDIUM | front/plugins/omada_sdn_openapi/script.py | 36 | # Define the installation path and extend the system path for plugin imports | COMMENT |
| MEDIUM | front/plugins/omada_sdn_openapi/script.py | 54 | # Define the current path and log file paths | COMMENT |
| MEDIUM | front/plugins/omada_sdn_openapi/script.py | 601 | # Initialize the Plugin object output file | COMMENT |
| MEDIUM⚡ | front/plugins/_publisher_pushsafer/pushsafer.py | 42 | # Create a database connection | COMMENT |
| MEDIUM⚡ | front/plugins/_publisher_pushsafer/pushsafer.py | 49 | # Create a NotificationInstance instance | COMMENT |
| MEDIUM | front/plugins/adguard_import/adguard_import.py | 8 | # Define the installation path and extend the system path for plugin imports | COMMENT |
| MEDIUM | front/plugins/adguard_export/script.py | 21 | # Define the installation path and extend the system path for plugin imports | COMMENT |
| MEDIUM⚡ | front/plugins/_publisher_webhook/webhook.py | 46 | # Create a database connection | COMMENT |
| MEDIUM⚡ | front/plugins/_publisher_webhook/webhook.py | 53 | # Create a NotificationInstance instance | COMMENT |
| MEDIUM | front/plugins/icmp_scan/icmp.py | 69 | # Create a DeviceInstance instance | COMMENT |
| MEDIUM | front/plugins/fritzbox/fritzbox.py | 7 | # Define the installation path and extend the system path for plugin imports | COMMENT |
| MEDIUM | front/plugins/fritzbox/fritzbox.py | 34 | # Define the current path and log file paths | COMMENT |
| MEDIUM | front/plugins/dig_scan/digscan.py | 6 | # Define the installation path and extend the system path for plugin imports | COMMENT |
| 28 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | install/production-filesystem/entrypoint.d/15-mounts.py | 84 | print("Error: /proc/mounts not found. Not a Linux system?", file=sys.stderr) | CODE |
| LOW⚡ | test/docker_tests/test_container_environment.py | 519 | except Exception: | CODE |
| LOW⚡ | test/docker_tests/test_container_environment.py | 528 | except Exception: | CODE |
| LOW⚡ | test/docker_tests/test_container_environment.py | 535 | except Exception: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 110 | except Exception: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 567 | except Exception: | CODE |
| LOW⚡ | test/docker_tests/test_container_environment.py | 690 | except Exception: | STRING |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 702 | except Exception: | CODE |
| LOW⚡ | test/docker_tests/test_docker_compose_scenarios.py | 641 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 694 | except Exception: | CODE |
| LOW⚡ | test/ui/test_ui_waits.py | 42 | except Exception: | CODE |
| LOW⚡ | test/ui/test_ui_waits.py | 49 | except Exception: | CODE |
| LOW⚡ | test/ui/test_ui_waits.py | 54 | except Exception: | CODE |
| LOW | test/ui/test_chromium_setup.py | 71 | except Exception as e: | CODE |
| LOW | test/ui/test_ui_maintenance.py | 52 | except Exception: | CODE |
| LOW | test/ui/test_ui_maintenance.py | 70 | except Exception: | CODE |
| LOW⚡ | test/ui/test_ui_maintenance.py | 93 | except Exception: | CODE |
| LOW⚡ | test/ui/test_ui_maintenance.py | 95 | except Exception as e: | CODE |
| LOW⚡ | test/ui/test_ui_maintenance.py | 102 | except Exception: | CODE |
| LOW | test/ui/test_ui_settings.py | 144 | except Exception as e: | CODE |
| LOW | test/ui/test_ui_settings.py | 168 | except Exception: | CODE |
| LOW | test/ui/test_helpers.py | 104 | except Exception as e: | CODE |
| LOW | test/ui/test_helpers.py | 149 | except Exception: | CODE |
| MEDIUM | test/ui/test_helpers.py | 144 | def _get_val(d): | CODE |
| LOW | test/ui/run_all_tests.py | 41 | except Exception as e: | CODE |
| LOW | test/ui/test_ui_devices.py | 89 | except Exception: | CODE |
| LOW | test/backend/sql_safe_builder.py | 173 | except Exception: | CODE |
| LOW | test/backend/sql_safe_builder.py | 592 | except Exception: | CODE |
| LOW | test/scan/test_device_field_lock.py | 50 | except Exception as e: | CODE |
| LOW | test/scan/test_device_field_lock.py | 58 | except Exception as e: | CODE |
| LOW | server/database.py | 87 | except Exception: | CODE |
| LOW | server/database.py | 234 | except Exception as e: | CODE |
| LOW⚡ | server/database.py | 258 | except Exception as e: | CODE |
| LOW | server/database.py | 367 | except Exception: | CODE |
| LOW⚡ | server/helper.py | 397 | except Exception: | CODE |
| LOW⚡ | server/helper.py | 403 | except Exception: | CODE |
| MEDIUM | server/plugin.py | 368 | def run_plugin(command, set_RUN_TIMEOUT, plugin): | CODE |
| LOW | server/plugin.py | 968 | except Exception as e: | STRING |
| LOW | server/app_state.py | 187 | except Exception as e: | CODE |
| LOW⚡ | server/initialise.py | 46 | except Exception as e: | CODE |
| LOW⚡ | server/utils/plugin_utils.py | 223 | except Exception as e: | CODE |
| LOW | server/utils/datetime_utils.py | 65 | except Exception: | CODE |
| LOW | server/utils/datetime_utils.py | 185 | except Exception: | CODE |
| LOW⚡ | server/utils/datetime_utils.py | 217 | except Exception: | CODE |
| LOW⚡ | server/utils/datetime_utils.py | 224 | except Exception as e: | CODE |
| MEDIUM⚡ | server/utils/datetime_utils.py | 225 | print(f"Error formatting date: {e}") | CODE |
| LOW | server/utils/datetime_utils.py | 292 | except Exception as e: | CODE |
| LOW | server/models/user_events_queue_instance.py | 112 | except Exception as e: | CODE |
| LOW | server/models/parameters_instance.py | 61 | except Exception as e: | CODE |
| LOW | server/models/parameters_instance.py | 84 | except Exception as e: | CODE |
| LOW | server/models/parameters_instance.py | 106 | except Exception as e: | CODE |
| LOW | server/models/parameters_instance.py | 129 | except Exception as e: | CODE |
| LOW | server/models/parameters_instance.py | 177 | except Exception as e: | CODE |
| LOW | server/models/device_instance.py | 340 | except Exception as e: | CODE |
| LOW | server/models/device_instance.py | 347 | except Exception as e: | CODE |
| LOW | server/models/device_instance.py | 838 | except Exception as e: | STRING |
| LOW | server/models/device_instance.py | 852 | except Exception as e: | STRING |
| LOW | server/models/device_instance.py | 929 | except Exception as e: | CODE |
| LOW | server/models/device_instance.py | 946 | except Exception as e: | CODE |
| LOW | server/models/device_instance.py | 1026 | except Exception as e: | CODE |
| 136 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …tion-filesystem/entrypoint.d/95-appliance-integrity.sh | 11 | # Check if the root filesystem is mounted as read-only | COMMENT |
| LOW | …ction-filesystem/entrypoint.d/10-capabilities-audit.sh | 47 | # Check if bit is set in cap_bnd_dec | COMMENT |
| LOW | …tion-filesystem/entrypoint.d/35-apply-conf-override.sh | 15 | # Check if APP_CONF_OVERRIDE is set | COMMENT |
| LOW | …oduction-filesystem/entrypoint.d/99-ports-available.sh | 16 | # Check if ports are configured to be the same | COMMENT |
| LOW | …/production-filesystem/services/scripts/cron_script.sh | 6 | # Check if there are any entries with cron_restart_backend | COMMENT |
| LOW | install/proxmox/proxmox-install-netalertx.sh | 44 | # Check if script is run as root | COMMENT |
| LOW | install/proxmox/proxmox-install-netalertx.sh | 266 | # Check if ieee-oui.txt or ieee-iab.txt exist | COMMENT |
| LOW | install/ubuntu24/install.sh | 35 | # Check if script is run as root | COMMENT |
| LOW | install/ubuntu24/install.sh | 246 | # Check if ieee-oui.txt or ieee-iab.txt exist | COMMENT |
| LOW | install/ubuntu24/install.sh | 313 | # Check if buildtimestamp.txt doesn't exist | COMMENT |
| LOW | install/debian12/install.debian12.sh | 13 | # Check if script is run as root | COMMENT |
| LOW | install/debian12/start.debian12.sh | 33 | # Check if script is run as root | COMMENT |
| LOW | install/debian12/start.debian12.sh | 98 | # Check if ieee-oui.txt or ieee-iab.txt exist | COMMENT |
| LOW | install/debian12/start.debian12.sh | 159 | # Check if buildtimestamp.txt doesn't exist | COMMENT |
| LOW | install/debian12/install_dependencies.debian12.sh | 18 | # Check if script is run as root | COMMENT |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 257 | # Check if image exists | COMMENT |
| LOW | test/ui/test_chromium_setup.py | 8 | # Check if chromium and chromedriver are installed | COMMENT |
| LOW | test/ui/run_ui_tests.sh | 16 | # Check if chromium is installed, install if missing | COMMENT |
| LOW | test/ui/test_ui_maintenance.py | 138 | # Check if response looks like CSV | COMMENT |
| LOW | test/ui/test_helpers.py | 51 | # Check if chromedriver exists | COMMENT |
| LOW | test/backend/sql_safe_builder.py | 197 | # Check if this is a compound condition (multiple clauses) | COMMENT |
| LOW | test/backend/sql_safe_builder.py | 342 | # Check if we're at a word boundary (start of string or after whitespace) | COMMENT |
| LOW | server/database.py | 59 | # Check if DB is open | COMMENT |
| LOW | server/api.py | 137 | # Check if the endpoint needs to be updated | COMMENT |
| LOW⚡ | server/helper.py | 639 | # Check if second character matches "2", "6", "A", "E" (case insensitive) | COMMENT |
| LOW⚡ | server/helper.py | 665 | # Check if it's an IPv6 address | COMMENT |
| LOW | server/plugin.py | 86 | # Check if schedule overdue | COMMENT |
| LOW | server/plugin.py | 735 | # Check if watched values changed for the given plugin | STRING |
| LOW | server/plugin.py | 1046 | # Check if there's a default value specified for this column in the JSON. | STRING |
| LOW | server/plugin.py | 1105 | # Check if self.status is valid | STRING |
| LOW | server/app_state.py | 81 | # Check if the file exists and recover previous values | COMMENT |
| LOW | server/__main__.py | 139 | # Check if any plugins need to run on schedule | COMMENT |
| LOW | server/__main__.py | 171 | # Check if new devices found (created by process_scan) | COMMENT |
| LOW | server/initialise.py | 763 | # Check if app was upgraded | COMMENT |
| LOW | server/initialise.py | 864 | # Check if the file contains any of the old setting code names | COMMENT |
| LOW⚡ | server/utils/plugin_utils.py | 303 | # Check if the file exists | COMMENT |
| LOW⚡ | server/utils/plugin_utils.py | 305 | # Check if the file name contains "encoded" | COMMENT |
| LOW | server/utils/plugin_utils.py | 197 | # Check if the directory name does not start with "__" to skip python cache | COMMENT |
| LOW | server/utils/plugin_utils.py | 199 | # Check if the 'ignore_plugin' file exists in the plugin folder | COMMENT |
| LOW | server/models/notification_instance.py | 64 | # Check if nothing to report, end | STRING |
| LOW | server/models/notification_instance.py | 235 | # Set all to "processed" status | STRING |
| LOW⚡ | server/scan/device_handling.py | 898 | # Check if plugins data changed | COMMENT |
| LOW | server/scan/device_handling.py | 1358 | # Check if the variable contains a valid MAC address or "internet" | COMMENT |
| LOW | server/api_server/mcp_endpoint.py | 681 | # Check if tool is disabled | COMMENT |
| LOW | server/api_server/openapi/introspection.py | 86 | # Check if this operation (path + method) is already registered | COMMENT |
| LOW | server/db/authoritative_handler.py | 212 | # Check if field has a corresponding source and should be updated | COMMENT |
| LOW | server/db/sql_safe_builder.py | 207 | # Check if this is a compound condition (multiple clauses) | COMMENT |
| LOW | server/db/sql_safe_builder.py | 352 | # Check if we're at a word boundary (start of string or after whitespace) | COMMENT |
| LOW | server/db/db_upgrade.py | 79 | # Check if target column is already present | COMMENT |
| LOW | server/db/db_upgrade.py | 1062 | # Check if table exists | STRING |
| LOW | server/messaging/in_app.py | 100 | # Check if file exists | COMMENT |
| LOW | server/messaging/in_app.py | 156 | # Open file in read/write mode and acquire exclusive lock | COMMENT |
| LOW | server/messaging/in_app.py | 161 | # Read file contents | COMMENT |
| LOW | front/plugins/plugin_helper.py | 143 | # Check if a valid MAC address | COMMENT |
| LOW | front/plugins/omada_sdn_imp/omada_sdn.py | 230 | # Assign port to switch | COMMENT |
| LOW⚡ | front/plugins/_publisher_mqtt/mqtt.py | 59 | # Check if basic config settings supplied | COMMENT |
| LOW | front/plugins/_publisher_mqtt/mqtt.py | 226 | # Check if the plugin object is new | COMMENT |
| LOW⚡ | front/plugins/_publisher_email/email_smtp.py | 45 | # Check if basic config settings supplied | COMMENT |
| LOW | front/plugins/omada_sdn_openapi/script.py | 282 | # Check if a parameter is required and if it's value is non-empty | COMMENT |
| LOW | front/plugins/omada_sdn_openapi/script.py | 286 | # Check if a parameter has a correct datatype | COMMENT |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install/production-filesystem/entrypoint.d/15-mounts.py | 72 | CODE | |
| LOW | install/production-filesystem/entrypoint.d/15-mounts.py | 89 | CODE | |
| LOW | install/production-filesystem/entrypoint.d/15-mounts.py | 294 | CODE | |
| LOW | test/docker_tests/test_puid_pgid.py | 22 | CODE | |
| LOW | test/docker_tests/test_container_environment.py | 115 | CODE | |
| LOW | test/docker_tests/test_container_environment.py | 190 | CODE | |
| LOW | test/docker_tests/test_container_environment.py | 468 | CODE | |
| LOW | test/docker_tests/test_container_environment.py | 730 | CODE | |
| LOW | test/docker_tests/test_docker_compose_unit.py | 4 | CODE | |
| LOW | test/docker_tests/test_docker_compose_unit.py | 18 | CODE | |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 108 | CODE | |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 288 | CODE | |
| LOW | test/docker_tests/test_mount_diagnostics_pytest.py | 436 | CODE | |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 263 | CODE | |
| LOW | test/docker_tests/test_docker_compose_scenarios.py | 402 | CODE | |
| LOW | test/ui/test_ui_login.py | 20 | CODE | |
| LOW | test/ui/test_helpers.py | 20 | CODE | |
| LOW | test/backend/sql_safe_builder.py | 307 | CODE | |
| LOW | test/api_endpoints/test_mcp_openapi_spec.py | 179 | CODE | |
| LOW | test/api_endpoints/test_events_endpoints.py | 134 | CODE | |
| LOW | test/api_endpoints/test_mcp_disabled_tools.py | 16 | CODE | |
| LOW | test/api_endpoints/test_mcp_disabled_tools.py | 42 | CODE | |
| LOW | server/logger.py | 99 | CODE | |
| LOW | server/api.py | 275 | CODE | |
| LOW | server/api.py | 121 | CODE | |
| LOW | server/helper.py | 200 | CODE | |
| LOW | server/helper.py | 265 | CODE | |
| LOW | server/helper.py | 434 | CODE | |
| LOW | server/helper.py | 456 | CODE | |
| LOW | server/plugin.py | 387 | CODE | |
| LOW | server/plugin.py | 736 | CODE | |
| LOW | server/plugin.py | 65 | CODE | |
| LOW | server/plugin.py | 121 | CODE | |
| LOW | server/plugin.py | 293 | CODE | |
| LOW | server/plugin.py | 1081 | CODE | |
| LOW | server/app_state.py | 36 | CODE | |
| LOW | server/__main__.py | 65 | CODE | |
| LOW | server/initialise.py | 56 | CODE | |
| LOW | server/initialise.py | 227 | CODE | |
| LOW | server/initialise.py | 863 | CODE | |
| LOW | server/workflows/conditions.py | 19 | CODE | |
| LOW | server/workflows/manager.py | 161 | CODE | |
| LOW | server/utils/plugin_utils.py | 92 | CODE | |
| LOW | server/utils/plugin_utils.py | 185 | CODE | |
| LOW | server/utils/plugin_utils.py | 249 | CODE | |
| LOW | server/utils/plugin_utils.py | 283 | CODE | |
| LOW | server/models/notification_instance.py | 296 | CODE | |
| LOW | server/models/user_events_queue_instance.py | 46 | CODE | |
| LOW | server/models/device_instance.py | 106 | CODE | |
| LOW | server/models/device_instance.py | 326 | CODE | |
| LOW | server/models/device_instance.py | 615 | CODE | |
| LOW | server/scan/device_heuristics.py | 34 | CODE | |
| LOW | server/scan/device_handling.py | 266 | CODE | |
| LOW | server/scan/device_handling.py | 965 | CODE | |
| LOW | server/scan/device_handling.py | 1385 | CODE | |
| LOW | server/scan/device_handling.py | 988 | CODE | |
| LOW | server/api_server/graphql_endpoint.py | 164 | CODE | |
| LOW | server/api_server/graphql_endpoint.py | 421 | CODE | |
| LOW | server/api_server/graphql_endpoint.py | 531 | CODE | |
| LOW | server/api_server/nettools_endpoint.py | 116 | CODE | |
| 58 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | front/lib/datatables/datatables.js | 7977 | jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { | CODE |
| CRITICAL | front/lib/datatables/datatables.js | 13919 | * $.fn.dataTable.ext.type.detect.push( | COMMENT |
| CRITICAL | front/lib/datatables/datatables.min.js | 14 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f | CODE |
| CRITICAL | front/lib/jquery/jquery.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f | CODE |
| CRITICAL | front/lib/datatables.net/js/jquery.dataTables.js | 14199 | * $.fn.dataTable.ext.type.detect.push( | COMMENT |
| CRITICAL⚡ | front/lib/jquery-ui/jquery-ui.min.js | 6 | (function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e= | CODE |
| CRITICAL⚡ | front/lib/jquery-ui/jquery-ui.min.js | 9 | }},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install/index.html | 1 | <!-- --------------------------------------------------------------------------- | COMMENT |
| LOW | install/production-filesystem/root-entrypoint.sh | 1 | #!/bin/bash | COMMENT |
| LOW | install/production-filesystem/root-entrypoint.sh | 21 | # - PUID/PGID env vars are ignored (cannot switch users). | COMMENT |
| LOW | install/production-filesystem/entrypoint.sh | 1 | #!/bin/bash | COMMENT |
| LOW | install/production-filesystem/entrypoint.sh | 21 | # container will wait for all to exit naturally (development mode). | COMMENT |
| LOW | install/production-filesystem/entrypoint.sh | 141 | COMMENT | |
| LOW | install/production-filesystem/entrypoint.sh | 181 | add_service() { | COMMENT |
| LOW | install/production-filesystem/entrypoint.sh | 241 | # Process: | COMMENT |
| LOW | install/production-filesystem/entrypoint.sh | 281 | add_service "/services/start-cron.sh" "supercronic" | COMMENT |
| LOW | …roduction-filesystem/entrypoint.d/05-data-migration.sh | 1 | #!/bin/sh | COMMENT |
| LOW | …oduction-filesystem/services/scripts/update_vendors.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | back/update_vendors.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …r_tests/configurations/docker-compose.missing-caps.yml | 41 | # - Normal operation: container starts all services after passing checks | COMMENT |
| LOW | test/ui/test_ui_settings.py | 201 | # # Extract backend API URL from BASE_URL | COMMENT |
| LOW | test/ui/test_ui_settings.py | 221 | # except requests.exceptions.RequestException as e: | COMMENT |
| LOW | test/scan/test_down_sleep_events.py | 441 | FROM DevicesView | COMMENT |
| LOW | server/conf.py | 41 | # ------------------------------------------- | COMMENT |
| LOW | server/__main__.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | server/__main__.py | 201 | # ------------------------------------------------------------------------------ | COMMENT |
| LOW | server/workflows/app_events.py | 41 | # "objectPrimaryId": "NEW.plugin", | COMMENT |
| LOW | server/api_server/mcp_endpoint.py | 201 | test_mode = os.getenv("MCP_TEST_MODE", "").lower() in ("1", "true", "yes") | COMMENT |
| LOW | server/api_server/api_server_start.py | 1181 | # success, message = res | COMMENT |
| LOW | server/api_server/openapi/schemas.py | 921 | description="Base64-encoded SQL query. (UNSAFE: Use only for administrative tasks)", | COMMENT |
| LOW | server/messaging/reporting.py | 1 | # ---------------------------------------------------------------------------------# | COMMENT |
| LOW | docs/AUTHELIA.md | 161 | - openid | COMMENT |
| LOW | docs/DOCKER_COMPOSE.md | 61 | target: /etc/localtime | COMMENT |
| LOW | .devcontainer/scripts/setup.sh | 1 | #!/bin/bash | COMMENT |
| LOW | front/devices.php | 1 | <!-- | COMMENT |
| LOW | front/deviceDetails.php | 1 | <!-- | COMMENT |
| LOW | front/systeminfo.php | 1 | <?php | COMMENT |
| LOW | front/presence.php | 1 | <!-- | COMMENT |
| LOW | front/css/app.css | 2801 | #notifications-skeleton, #workflows-skeleton, #plugins-skeleton { z-index: 50; } | COMMENT |
| LOW | front/plugins/omada_sdn_imp/omada_sdn.py | 61 | # Initialize the Plugin obj output file | COMMENT |
| LOW | front/plugins/adguard_export/script.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | front/plugins/ddns_update/script.py | 81 | COMMENT | |
| LOW | front/plugins/sync/sync.py | 181 | mylog('verbose', [f'[{pluginName}] Devices files to process: "{files_to_process}"']) | COMMENT |
| LOW | front/plugins/sync/sync.py | 281 | # | COMMENT |
| LOW | front/plugins/sync/sync.py | 321 | devices_to_write = new_devices if sync_behavior == 'copy-new' else device_data | COMMENT |
| LOW | front/js/cache.js | 21 | // Central registry of all localStorage cache keys. | COMMENT |
| LOW | front/js/cache.js | 141 | COMMENT | |
| LOW | front/js/settings_utils.js | 1161 | COMMENT | |
| LOW | front/js/db_methods.js | 1 | // ----------------------------------------------------------------------------- | COMMENT |
| LOW | front/js/ui_components.js | 1 | /* ----------------------------------------------------------------------------- | COMMENT |
| LOW | front/js/device-columns.js | 1 | // ============================================================================= | COMMENT |
| LOW | front/js/device-columns.js | 81 | // Row positions for extra (non-display) fields. | COMMENT |
| LOW | front/php/server/db.php | 1 | <?php | COMMENT |
| LOW | front/php/templates/version.php | 1 | <?php | COMMENT |
| LOW | front/php/templates/footer.php | 1 | <!-- | COMMENT |
| LOW | front/lib/chart.js/Chart.js | 7301 | var padding = helpers$1.options.toPadding(layoutOptions.padding); | COMMENT |
| LOW | front/lib/chart.js/Chart.js | 7321 | // | |----|-------------------------------------|----| | COMMENT |
| LOW | front/lib/chart.js/Chart.js | 7761 | if (item && item.canvas) { | COMMENT |
| LOW | front/lib/chart.js/Chart.js | 13481 | end: pos + size | COMMENT |
| LOW | front/lib/chart.js/Chart.js | 13501 | // | COMMENT |
| LOW | front/lib/datatables/datatables.js | 4041 | // In cases where either: | COMMENT |
| LOW | front/lib/datatables/datatables.js | 5641 | }, | COMMENT |
| LOW | front/lib/datatables/datatables.js | 6421 | isCustomProp = rcustomProp.test( name ), | COMMENT |
| LOW | front/lib/datatables/datatables.js | 6441 | // `getPropertyValue` returns an empty string, the value returned | COMMENT |
| LOW | front/lib/datatables/datatables.js | 10661 | return text == null ? | COMMENT |
| LOW | front/lib/datatables/datatables.js | 14201 | // implementations differ between browsers. | COMMENT |
| LOW | front/lib/datatables/datatables.js | 20201 | } | COMMENT |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/docker_tests/test_puid_pgid.py | 167 | "chown -R 0:0 /data && chmod -R 0755 /data && " | CODE |
| HIGH | test/docker_tests/test_puid_pgid.py | 345 | "chown -R 1000:1000 /data && chmod -R 0755 /data" | CODE |
| HIGH⚡ | test/docker_tests/test_container_environment.py | 1401 | "-c", "chown -R 0:0 /mnt && chmod 755 /mnt", | CODE |
| HIGH | test/docker_tests/test_container_environment.py | 1455 | "-c", "ls -ldn /data/db && touch /data/db/test_write_after_fix" | CODE |
| HIGH⚡ | test/docker_tests/test_container_environment.py | 653 | "if kill -0 $pid >/dev/null 2>&1; then kill -TERM $pid >/dev/null 2>&1 || true; fi; ", | STRING |
| HIGH | test/docker_tests/test_ports_available.py | 44 | f.write(" command: sh -c \"while true; do nc -l -p 20211 < /dev/null > /dev/null; done & while true; do nc -l | CODE |
| HIGH | test/docker_tests/test_ports_available.py | 149 | script = f"printf '%s\\n' '{script_cont.replace(chr(39), chr(39) + chr(92) + chr(39) + chr(39))}' > /tmp/ports-check | CODE |
| HIGH | test/ui/test_ui_translations.py | 37 | "return (typeof getString === 'function') ? getString(arguments[0]) : null;", | CODE |
| HIGH | test/ui/test_ui_xss_devname.py | 131 | return bool(driver.execute_script("return window.__xss_canary || false;")) | CODE |
| HIGH | test/ui/test_ui_xss_devname.py | 284 | assert not driver.execute_script("return window.__xss_canary || false"), ( | CODE |
| HIGH | test/scan/test_ip_format_and_locking.py | 62 | """Invalid IP values like (unknown), null, empty should be rejected.""" | STRING |
| HIGH⚡ | test/api_endpoints/test_health_endpoints.py | 129 | """cpu_temp should be optional (int or null).""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/docker_tests/test_container_environment.py | 916 | # NOTE: The following runtime-behavior tests depended on the entrypoint continuing even when | COMMENT |
| LOW⚡ | test/ui/TESTING_GUIDE.md | 115 | # Step 1: Navigate to devices page | COMMENT |
| LOW⚡ | test/ui/TESTING_GUIDE.md | 119 | # Step 2: Click first device | COMMENT |
| LOW⚡ | test/ui/TESTING_GUIDE.md | 124 | # Step 3: Edit device name | COMMENT |
| LOW⚡ | test/ui/TESTING_GUIDE.md | 130 | # Step 4: Save changes | COMMENT |
| LOW⚡ | test/ui/TESTING_GUIDE.md | 135 | # Step 5: Verify save succeeded | COMMENT |
| LOW⚡ | test/ui/TESTING_GUIDE.md | 138 | # Step 6: Restore original name | COMMENT |
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 95 | # Step 1: Create the source device | COMMENT |
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 102 | # Step 2: Generate a target MAC (lowercase to match DB trigger normalisation) | COMMENT |
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 107 | # Step 3: Copy device | COMMENT |
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 114 | # Step 4: Verify new device exists | COMMENT |
| LOW⚡ | server/utils/plugin_utils.py | 349 | # Step 1: Initialize the setting value as an empty string | COMMENT |
| LOW⚡ | server/utils/plugin_utils.py | 352 | # Step 2: Get the default setting object for the plugin's specified key | COMMENT |
| LOW | server/utils/plugin_utils.py | 363 | # Step 3: Check for user-defined setting value in the dictionary | COMMENT |
| LOW⚡ | server/scan/device_handling.py | 1281 | # Step 3: Execute batch update | COMMENT |
| LOW | server/scan/device_handling.py | 1240 | # Step 1: Load all devices from the DB | COMMENT |
| LOW | server/scan/device_handling.py | 1254 | # Step 2: For each non-NIC device, determine new devPresentLastScan | COMMENT |
| LOW⚡ | server/api_server/nettools_endpoint.py | 81 | # Step 1: Validate IP address | COMMENT |
| LOW⚡ | server/api_server/nettools_endpoint.py | 90 | # Step 2: Execute traceroute | COMMENT |
| LOW⚡ | server/api_server/nettools_endpoint.py | 103 | # Step 3: Handle command errors | COMMENT |
| LOW⚡ | docs/PLUGINS_DEV.md | 73 | ### Step 1: Understand the Basics | COMMENT |
| LOW⚡ | docs/PLUGINS_DEV.md | 78 | ### Step 2: Create Your Plugin | COMMENT |
| LOW⚡ | docs/PLUGINS_DEV.md | 84 | ### Step 3: Configure & Display | COMMENT |
| LOW⚡ | docs/PLUGINS_DEV.md | 89 | ### Step 4: Deploy & Test | COMMENT |
| LOW⚡ | front/js/common.js | 265 | // Step 1: Replace double quotes within single-quoted strings | COMMENT |
| LOW⚡ | front/js/common.js | 271 | // Step 2: Replace all single quotes with double quotes | COMMENT |
| LOW⚡ | front/js/common.js | 274 | // Step 3: Restore escaped double quotes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test/test_device_atomicity.py | 114 | "devOwner": "John Doe", | CODE |
| LOW | server/initialise.py | 464 | '{"dataType":"array","elements":[{"elementType":"input","elementOptions":[{"placeholder":"Enter value"},{"suffix | CODE |
| LOW | server/initialise.py | 304 | """{"dataType": "array","elements": [{"elementType": "input","elementOptions": [{"placeholder": "192.168.1.0/24 | STRING |
| LOW | front/plugins/omada_sdn_imp/config.json | 163 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/custom_props/config.json | 40 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/custom_props/config.json | 125 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/custom_props/config.json | 329 | "placeholder": "<i class=\"far fa-trash-alt\"></i>" | CODE |
| LOW | front/plugins/custom_props/config.json | 344 | "placeholder": "<i class=\"far fa-clone\"></i>" | CODE |
| LOW | front/plugins/wake_on_lan/config.json | 156 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/wake_on_lan/config.json | 232 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/omada_sdn_openapi/config.json | 226 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/unifi_import/config.json | 790 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/snmp_discovery/config.json | 416 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/newdev_template/config.json | 42 | "placeholder": "Enter value" | CODE |
| LOW | front/plugins/newdev_template/config.json | 167 | "placeholder": "Enter value" | CODE |
| LOW | front/plugins/newdev_template/config.json | 292 | "placeholder": "Enter value" | CODE |
| LOW | front/plugins/rest_import/config.json | 252 | "placeholder": "e.g. OPNsense DHCP" | CODE |
| LOW | front/plugins/rest_import/config.json | 290 | "placeholder": "https://host/api/endpoint" | CODE |
| LOW | front/plugins/rest_import/config.json | 440 | "placeholder": "Username or API Key" | CODE |
| LOW | front/plugins/rest_import/config.json | 478 | "placeholder": "Password or API Secret" | CODE |
| LOW | front/plugins/rest_import/config.json | 516 | "placeholder": "Bearer token" | CODE |
| LOW | front/plugins/rest_import/config.json | 554 | "placeholder": "Accept: application/json" | CODE |
| LOW | front/plugins/rest_import/config.json | 592 | "placeholder": "Optional JSON body for POST requests" | CODE |
| LOW | front/plugins/rest_import/config.json | 630 | "placeholder": "rows" | CODE |
| LOW | front/plugins/rest_import/config.json | 668 | "placeholder": "e.g. hwaddr" | CODE |
| LOW | front/plugins/rest_import/config.json | 706 | "placeholder": "e.g. address" | CODE |
| LOW | front/plugins/rest_import/config.json | 744 | "placeholder": "e.g. hostname" | CODE |
| LOW | front/plugins/rest_import/config.json | 782 | "placeholder": "e.g. mac_info" | CODE |
| LOW | front/plugins/rest_import/config.json | 820 | "placeholder": "e.g. wlan" | CODE |
| LOW | front/plugins/rest_import/config.json | 858 | "placeholder": "e.g. device_type" | CODE |
| LOW | front/plugins/rest_import/config.json | 896 | "placeholder": "e.g. parent_mac" | CODE |
| LOW | front/plugins/rest_import/config.json | 934 | "placeholder": "e.g. port" | CODE |
| LOW | front/plugins/rest_import/config.json | 972 | "placeholder": "e.g. site" | CODE |
| LOW | front/plugins/rest_import/config.json | 1010 | "placeholder": "e.g. vlan" | CODE |
| LOW | front/plugins/__template/config.json | 181 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/website_monitor/config.json | 624 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/sync/config.json | 214 | "placeholder": "Enter full url" | CODE |
| LOW | front/plugins/dhcp_leases/config.json | 502 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/unifi_api_import/config.json | 252 | "placeholder": "Enter value" | CODE |
| LOW | front/plugins/unifi_api_import/config.json | 290 | "placeholder": "https://host_ip/proxy/network/integration/" | CODE |
| LOW | front/plugins/unifi_api_import/config.json | 328 | "placeholder": "v1" | CODE |
| LOW | front/plugins/unifi_api_import/config.json | 366 | "placeholder": "Enter value" | CODE |
| LOW | front/plugins/ui_settings/config.json | 65 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/plugins/ui_settings/config.json | 140 | { "placeholder": "Enter value" }, | CODE |
| LOW | front/lib/datatables/datatables.js | 26224 | .attr( 'placeholder', opts.placeholder ) | CODE |
| LOW | front/lib/datatables/datatables.min.js | 28 | !function(n){"use strict";var a;"function"==typeof define&&define.amd?define(["jquery"],function(t){return n(t,window,do | CODE |
| LOW | front/lib/select2/select2.full.min.js | 2 | !function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.e | CODE |
| LOW | front/lib/datatables.net/js/jquery.dataTables.min.js | 41 | g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!th | CODE |
| LOW | front/lib/datatables.net/js/jquery.dataTables.js | 4222 | .attr( 'placeholder', language.sSearchPlaceholder ) | CODE |
| LOW | front/lib/datatables.net/js/jquery.dataTables.js | 12552 | * // { "phone": 5552368, "phone_filter": "5552368 555-2368", "phone_display": "555-2368" } | COMMENT |
| LOW⚡ | front/lib/jquery-ui/jquery-ui.min.js | 6 | (function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e= | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/backend/sql_safe_builder.py | 147 | Parse and build a safe SQL condition from a user-provided string. This method attempts to parse common | STRING |
| HIGH | server/database.py | 304 | Retrieve device statistics from the database. Args: db: A database connection or handler object that p | STRING |
| HIGH | server/helper.py | 435 | Reverse applied transformers on a value or list of values. This function iterates through a list of transforme | STRING |
| HIGH | server/utils/datetime_utils.py | 28 | Return the current time in UTC. This is the ONLY function that calls datetime.datetime.now() in the entire cod | STRING |
| HIGH | server/utils/datetime_utils.py | 92 | Check if a datetime is strictly in the future. Utility for validating that a datetime hasn't already passed. | STRING |
| HIGH | server/utils/datetime_utils.py | 119 | Ensure a schedule's next() call returns a datetime strictly in the future. Keeps calling .next() until a futur | STRING |
| HIGH | server/db/sql_safe_builder.py | 156 | Parse and build a safe SQL condition from a user-provided string. This method attempts to parse common | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 95 | # Step 1: Create the source device | COMMENT |
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 102 | # Step 2: Generate a target MAC (lowercase to match DB trigger normalisation) | COMMENT |
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 107 | # Step 3: Copy device | COMMENT |
| LOW⚡ | test/api_endpoints/test_device_endpoints.py | 114 | # Step 4: Verify new device exists | COMMENT |
| LOW⚡ | server/utils/plugin_utils.py | 349 | # Step 1: Initialize the setting value as an empty string | COMMENT |
| LOW⚡ | server/utils/plugin_utils.py | 352 | # Step 2: Get the default setting object for the plugin's specified key | COMMENT |
| LOW | server/utils/plugin_utils.py | 363 | # Step 3: Check for user-defined setting value in the dictionary | COMMENT |
| LOW⚡ | server/scan/device_handling.py | 1281 | # Step 3: Execute batch update | COMMENT |
| LOW | server/scan/device_handling.py | 1240 | # Step 1: Load all devices from the DB | COMMENT |
| LOW | server/scan/device_handling.py | 1254 | # Step 2: For each non-NIC device, determine new devPresentLastScan | COMMENT |
| LOW⚡ | server/api_server/nettools_endpoint.py | 81 | # Step 1: Validate IP address | COMMENT |
| LOW⚡ | server/api_server/nettools_endpoint.py | 90 | # Step 2: Execute traceroute | COMMENT |
| LOW⚡ | server/api_server/nettools_endpoint.py | 103 | # Step 3: Handle command errors | COMMENT |
| LOW⚡ | front/js/common.js | 265 | // Step 1: Replace double quotes within single-quoted strings | COMMENT |
| LOW⚡ | front/js/common.js | 271 | // Step 2: Replace all single quotes with double quotes | COMMENT |
| LOW⚡ | front/js/common.js | 274 | // Step 3: Restore escaped double quotes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/docker_tests/test_puid_pgid.py | 7 | CODE | |
| LOW | test/plugins/test_adguard_export.py | 16 | CODE | |
| LOW | test/plugins/test_adguard_export.py | 18 | CODE | |
| LOW | test/plugins/test_rest_import.py | 11 | CODE | |
| LOW | test/plugins/test_rest_import.py | 13 | CODE | |
| LOW | test/backend/test_device_history.py | 20 | CODE | |
| LOW | test/backend/test_device_history.py | 20 | CODE | |
| LOW | test/backend/test_device_history.py | 20 | CODE | |
| LOW | test/api_endpoints/test_mcp_disabled_tools.py | 4 | CODE | |
| LOW | test/api_endpoints/test_mcp_disabled_tools.py | 5 | CODE | |
| LOW | server/config_paths.py | 8 | CODE | |
| LOW | server/models/parameters_instance.py | 11 | CODE | |
| LOW | server/api_server/graphql_types.py | 1 | CODE | |
| LOW | server/api_server/mcp_endpoint.py | 24 | CODE | |
| LOW | server/api_server/openapi/registry.py | 1 | CODE | |
| LOW | server/api_server/openapi/schema_converter.py | 1 | CODE | |
| LOW | server/api_server/openapi/spec_generator.py | 31 | CODE | |
| LOW | server/api_server/openapi/schemas.py | 14 | CODE | |
| LOW | server/api_server/openapi/introspection.py | 1 | CODE | |
| LOW | server/api_server/openapi/validation.py | 1 | CODE | |
| LOW | front/plugins/unifi_import/script.py | 4 | CODE | |
| LOW | front/plugins/snmp_discovery/script.py | 3 | CODE | |
| LOW | front/plugins/dhcp_leases/script.py | 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/db_test_helpers.py | 0 | create table currentscan ( scanmac text, scanname text, scanvendor text, scansourceplugin text, scanlastip text, scansyn | STRING |
| HIGH | test/scan/conftest.py | 0 | create table currentscan ( scanmac text, scanname text, scanvendor text, scansourceplugin text, scanlastip text, scansyn | STRING |
| HIGH | test/scan/test_field_lock_scan_integration.py | 0 | create table currentscan ( scanmac text, scanname text, scanvendor text, scansourceplugin text, scanlastip text, scansyn | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | server/api_server/mcp_endpoint.py | 398 | # 2. Prefer POST methods over GET for the same logic (usually more robust body validation). | COMMENT |
| LOW | server/api_server/mcp_endpoint.py | 259 | # if multiple prefixes are used, so we just return it. | COMMENT |
| MEDIUM | front/lib/chart.js/Chart.js | 7309 | // Essentially we now have any number of boxes on each of the 4 sides. | COMMENT |
| MEDIUM | front/lib/datatables/datatables.js | 10670 | // understands anonymous AMD modules. A named AMD is safest and most robust | COMMENT |
| MEDIUM | front/lib/datatables/datatables.js | 33566 | // Note that DataTables 2.1 has more robust type detection, but we retain | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/db_test_helpers.py | 593 | CODE | |
| LOW | test/docker_tests/test_container_environment.py | 541 | CODE | |
| LOW | test/backend/sql_safe_builder.py | 108 | CODE | |
| LOW | server/app_state.py | 195 | CODE | |
| LOW | server/app_state.py | 36 | CODE | |
| LOW | server/api_server/openapi/registry.py | 86 | CODE | |
| LOW | server/api_server/openapi/validation.py | 36 | CODE | |
| LOW | server/db/sql_safe_builder.py | 117 | CODE | |
| LOW | front/plugins/plugin_helper.py | 275 | CODE | |
| LOW | front/plugins/plugin_helper.py | 342 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | server/plugin.py | 780 | # compare hash of the changed watched columns for uniqueness - make sure you compare the values wit | STRING |
| LOW | front/plugins/_publisher_mqtt/mqtt.py | 409 | # If you intend to run multiple instances simultaneously, make sure to set unique client IDs for each instance. | COMMENT |
| MEDIUM | front/plugins/asuswrt_import/script.py | 89 | # Now you can use the router object to call methods | COMMENT |
| MEDIUM | front/plugins/__template/rename_me.py | 89 | # Sample data for testing purposes, you can adjust the processing in main() as needed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test/docker_tests/test_container_environment.py | 1393 | def _setup_restrictive_dir(host_path: pathlib.Path) -> None: | CODE |
| LOW | test/docker_tests/test_container_environment.py | 828 | def _setup_zero_perm_dir(paths: dict[str, pathlib.Path], key: str) -> None: | STRING |
| LOW | server/config_paths.py | 14 | __all__ = [ | CODE |
| LOW | front/plugins/adguard_export/script.py | 144 | def update_client(self, old_name: str, client: dict) -> None: | CODE |
| LOW⚡ | front/plugins/unifi_import/script.py | 247 | def set_lock_file_value(config_value: str, lock_file_value: bool) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | front/lib/datatables/datatables.js | 4141 | function getData( data ) { | CODE |