{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-aeea3f3499cbf65d", "name": "Possibly dead Python function: start_flask", "shortDescription": {"text": "Possibly dead Python function: start_flask"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c81b750d032ba4c", "name": "Possibly dead Python function: open_browser", "shortDescription": {"text": "Possibly dead Python function: open_browser"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c18428458f6e352", "name": "Possibly dead Python function: quit_app", "shortDescription": {"text": "Possibly dead Python function: quit_app"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21001ab5c5d9d940", "name": "Possibly dead Python function: scan_host", "shortDescription": {"text": "Possibly dead Python function: scan_host"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29b9315624ee43be", "name": "Possibly dead Python function: run_scan", "shortDescription": {"text": "Possibly dead Python function: run_scan"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 3 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3e5157b4a9266e4", "name": "Flask mutation route `add_host` without `@login_required` \u2014 app.py:177", "shortDescription": {"text": "Flask mutation route `add_host` without `@login_required` \u2014 app.py:177"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-397237494c9c4059", "name": "Flask mutation route `remove_host` without `@login_required` \u2014 app.py:195", "shortDescription": {"text": "Flask mutation route `remove_host` without `@login_required` \u2014 app.py:195"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff63341b994caa21", "name": "Flask mutation route `refresh_host` without `@login_required` \u2014 app.py:208", "shortDescription": {"text": "Flask mutation route `refresh_host` without `@login_required` \u2014 app.py:208"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07d36631ece6b8af", "name": "Flask mutation route `add_range` without `@login_required` \u2014 app.py:221", "shortDescription": {"text": "Flask mutation route `add_range` without `@login_required` \u2014 app.py:221"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2baa9ee61a83e8d", "name": "Flask mutation route `remove_range` without `@login_required` \u2014 app.py:238", "shortDescription": {"text": "Flask mutation route `remove_range` without `@login_required` \u2014 app.py:238"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eac683b5e681c1c2", "name": "Flask mutation route `start_scan` without `@login_required` \u2014 app.py:246", "shortDescription": {"text": "Flask mutation route `start_scan` without `@login_required` \u2014 app.py:246"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6c8a4bd3df34903", "name": "Flask mutation route `create_renewal` without `@login_required` \u2014 app.py:282", "shortDescription": {"text": "Flask mutation route `create_renewal` without `@login_required` \u2014 app.py:282"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c83d7862b0a62869", "name": "Flask mutation route `delete_renewal` without `@login_required` \u2014 app.py:319", "shortDescription": {"text": "Flask mutation route `delete_renewal` without `@login_required` \u2014 app.py:319"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5dff9a914eb45190", "name": "Flask mutation route `ca_generate` without `@login_required` \u2014 app.py:517", "shortDescription": {"text": "Flask mutation route `ca_generate` without `@login_required` \u2014 app.py:517"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9ad523435d1a2ac", "name": "Flask mutation route `ca_install` without `@login_required` \u2014 app.py:574", "shortDescription": {"text": "Flask mutation route `ca_install` without `@login_required` \u2014 app.py:574"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83bad3c08d24f01a", "name": "Flask mutation route `ca_issue` without `@login_required` \u2014 app.py:610", "shortDescription": {"text": "Flask mutation route `ca_issue` without `@login_required` \u2014 app.py:610"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed92e6b866de8496", "name": "Flask mutation route `add_upload_device` without `@login_required` \u2014 app.py:799", "shortDescription": {"text": "Flask mutation route `add_upload_device` without `@login_required` \u2014 app.py:799"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d94383982418a728", "name": "Flask mutation route `remove_upload_device` without `@login_required` \u2014 app.py:823", "shortDescription": {"text": "Flask mutation route `remove_upload_device` without `@login_required` \u2014 app.py:823"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f96be44d8412597d", "name": "Flask mutation route `update_upload_device` without `@login_required` \u2014 app.py:831", "shortDescription": {"text": "Flask mutation route `update_upload_device` without `@login_required` \u2014 app.py:831"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-464871db8426b7e7", "name": "Flask mutation route `push_cert` without `@login_required` \u2014 app.py:1017", "shortDescription": {"text": "Flask mutation route `push_cert` without `@login_required` \u2014 app.py:1017"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4350a22de4bb83f", "name": "Flask mutation route `test_device_connection` without `@login_required` \u2014 app.py:1059", "shortDescription": {"text": "Flask mutation route `test_device_connection` without `@login_required` \u2014 app.py:1059"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/30413"}, "properties": {"repository": "wilfreddenijs/certmon", "repoUrl": "https://github.com/wilfreddenijs/certmon", "branch": "main"}, "results": [{"ruleId": "scanner-aeea3f3499cbf65d", "level": "note", "message": {"text": "Possibly dead Python function: start_flask"}, "properties": {"repobilityId": "1a3cce609afc7120", "scanner": "scanner-primary", "fingerprint": "aeea3f3499cbf65d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "launcher.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c81b750d032ba4c", "level": "note", "message": {"text": "Possibly dead Python function: open_browser"}, "properties": {"repobilityId": "d6455af6e78d5e19", "scanner": "scanner-primary", "fingerprint": "9c81b750d032ba4c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "launcher.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2c18428458f6e352", "level": "note", "message": {"text": "Possibly dead Python function: quit_app"}, "properties": {"repobilityId": "b24cb49391fc8fc2", "scanner": "scanner-primary", "fingerprint": "2c18428458f6e352", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "launcher.py:92"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21001ab5c5d9d940", "level": "note", "message": {"text": "Possibly dead Python function: scan_host"}, "properties": {"repobilityId": "a12afff4239c7ea5", "scanner": "scanner-primary", "fingerprint": "21001ab5c5d9d940", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:134"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29b9315624ee43be", "level": "note", "message": {"text": "Possibly dead Python function: run_scan"}, "properties": {"repobilityId": "0fbb17eca833e399", "scanner": "scanner-primary", "fingerprint": "29b9315624ee43be", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py:256"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "9bbddbe9a7250919", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "85dce0fd6e2c61d7", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-a3e5157b4a9266e4", "level": "error", "message": {"text": "Flask mutation route `add_host` without `@login_required` \u2014 app.py:177"}, "properties": {"repobilityId": "41e95554ab606000", "scanner": "scanner-primary", "fingerprint": "a3e5157b4a9266e4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-397237494c9c4059", "level": "error", "message": {"text": "Flask mutation route `remove_host` without `@login_required` \u2014 app.py:195"}, "properties": {"repobilityId": "755603d5b306e8be", "scanner": "scanner-primary", "fingerprint": "397237494c9c4059", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 195}}}]}, {"ruleId": "scanner-ff63341b994caa21", "level": "error", "message": {"text": "Flask mutation route `refresh_host` without `@login_required` \u2014 app.py:208"}, "properties": {"repobilityId": "ad31acd0561e5911", "scanner": "scanner-primary", "fingerprint": "ff63341b994caa21", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-07d36631ece6b8af", "level": "error", "message": {"text": "Flask mutation route `add_range` without `@login_required` \u2014 app.py:221"}, "properties": {"repobilityId": "5b4cc3d46a67adc5", "scanner": "scanner-primary", "fingerprint": "07d36631ece6b8af", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-d2baa9ee61a83e8d", "level": "error", "message": {"text": "Flask mutation route `remove_range` without `@login_required` \u2014 app.py:238"}, "properties": {"repobilityId": "92f3db2c54e46b15", "scanner": "scanner-primary", "fingerprint": "d2baa9ee61a83e8d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 238}}}]}, {"ruleId": "scanner-eac683b5e681c1c2", "level": "error", "message": {"text": "Flask mutation route `start_scan` without `@login_required` \u2014 app.py:246"}, "properties": {"repobilityId": "81a996ba99f34059", "scanner": "scanner-primary", "fingerprint": "eac683b5e681c1c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 246}}}]}, {"ruleId": "scanner-a6c8a4bd3df34903", "level": "error", "message": {"text": "Flask mutation route `create_renewal` without `@login_required` \u2014 app.py:282"}, "properties": {"repobilityId": "c5274cbdba55dead", "scanner": "scanner-primary", "fingerprint": "a6c8a4bd3df34903", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 282}}}]}, {"ruleId": "scanner-c83d7862b0a62869", "level": "error", "message": {"text": "Flask mutation route `delete_renewal` without `@login_required` \u2014 app.py:319"}, "properties": {"repobilityId": "0f20d5326aba70dd", "scanner": "scanner-primary", "fingerprint": "c83d7862b0a62869", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 319}}}]}, {"ruleId": "scanner-5dff9a914eb45190", "level": "error", "message": {"text": "Flask mutation route `ca_generate` without `@login_required` \u2014 app.py:517"}, "properties": {"repobilityId": "3d0213dbab924c3f", "scanner": "scanner-primary", "fingerprint": "5dff9a914eb45190", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 517}}}]}, {"ruleId": "scanner-f9ad523435d1a2ac", "level": "error", "message": {"text": "Flask mutation route `ca_install` without `@login_required` \u2014 app.py:574"}, "properties": {"repobilityId": "ab43a42bff01e5a0", "scanner": "scanner-primary", "fingerprint": "f9ad523435d1a2ac", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 574}}}]}, {"ruleId": "scanner-83bad3c08d24f01a", "level": "error", "message": {"text": "Flask mutation route `ca_issue` without `@login_required` \u2014 app.py:610"}, "properties": {"repobilityId": "1ac3eeee4c76a222", "scanner": "scanner-primary", "fingerprint": "83bad3c08d24f01a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 610}}}]}, {"ruleId": "scanner-ed92e6b866de8496", "level": "error", "message": {"text": "Flask mutation route `add_upload_device` without `@login_required` \u2014 app.py:799"}, "properties": {"repobilityId": "a4d08352434d776f", "scanner": "scanner-primary", "fingerprint": "ed92e6b866de8496", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 799}}}]}, {"ruleId": "scanner-d94383982418a728", "level": "error", "message": {"text": "Flask mutation route `remove_upload_device` without `@login_required` \u2014 app.py:823"}, "properties": {"repobilityId": "d167d269e730d51c", "scanner": "scanner-primary", "fingerprint": "d94383982418a728", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 823}}}]}, {"ruleId": "scanner-f96be44d8412597d", "level": "error", "message": {"text": "Flask mutation route `update_upload_device` without `@login_required` \u2014 app.py:831"}, "properties": {"repobilityId": "8e2ced2541233e52", "scanner": "scanner-primary", "fingerprint": "f96be44d8412597d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 831}}}]}, {"ruleId": "scanner-464871db8426b7e7", "level": "error", "message": {"text": "Flask mutation route `push_cert` without `@login_required` \u2014 app.py:1017"}, "properties": {"repobilityId": "6ef2718d18fbd88e", "scanner": "scanner-primary", "fingerprint": "464871db8426b7e7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 1017}}}]}, {"ruleId": "scanner-c4350a22de4bb83f", "level": "error", "message": {"text": "Flask mutation route `test_device_connection` without `@login_required` \u2014 app.py:1059"}, "properties": {"repobilityId": "284e5f75c856a708", "scanner": "scanner-primary", "fingerprint": "c4350a22de4bb83f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 1059}}}]}]}]}