{"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-abb77c0cb1a27273", "name": "Possibly dead Python function: notify_start", "shortDescription": {"text": "Possibly dead Python function: notify_start"}, "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-334049afb8f643c2", "name": "Possibly dead Python function: notify_warning", "shortDescription": {"text": "Possibly dead Python function: notify_warning"}, "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-5247a1d77f7d59c7", "name": "Possibly dead Python function: notify_m3u_extracted", "shortDescription": {"text": "Possibly dead Python function: notify_m3u_extracted"}, "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-63cf0cf744af76b5", "name": "Possibly dead Python function: verify_api_key", "shortDescription": {"text": "Possibly dead Python function: verify_api_key"}, "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-e8943f9cc03cfac3", "name": "Possibly dead Python function: run_in_background", "shortDescription": {"text": "Possibly dead Python function: run_in_background"}, "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-19670a83ae7dbaa9", "name": "Possibly dead Python function: set_progress_step", "shortDescription": {"text": "Possibly dead Python function: set_progress_step"}, "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-5ea60c85bca25c74", "name": "Possibly dead Python function: progress_reporter", "shortDescription": {"text": "Possibly dead Python function: progress_reporter"}, "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-0efe3c3538aba458", "name": "Possibly dead Python function: renew_tor_ip", "shortDescription": {"text": "Possibly dead Python function: renew_tor_ip"}, "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-5987bb29749bf1c2", "name": "Possibly dead Python function: help_command", "shortDescription": {"text": "Possibly dead Python function: help_command"}, "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-3d98fa765d559792", "name": "Possibly dead Python function: run_uzeen", "shortDescription": {"text": "Possibly dead Python function: run_uzeen"}, "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-aee99b2cc8264b1b", "name": "Privileged port 3 in use", "shortDescription": {"text": "Privileged port 3 in use"}, "fullDescription": {"text": "Port 3 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de3c1f217d72a063", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5b5f70089c54044", "name": "Insecure pattern 'direct_innerhtml_assignment' in iptvvcanada_automation.py:1103", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in iptvvcanada_automation.py:1103"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa6c6875061ea307", "name": "Insecure pattern 'direct_innerhtml_assignment' in zazy_playlist_automation.py:549", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in zazy_playlist_automation.py:549"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00c87be8510a6220", "name": "Insecure pattern 'direct_innerhtml_assignment' in viewtvy_automation.py:409", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in viewtvy_automation.py:409"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6519a5e6b4843ff3", "name": "Insecure pattern 'direct_innerhtml_assignment' in layerseven_automation.py:732", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in layerseven_automation.py:732"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f810bdbb6838d98d", "name": "Insecure pattern 'direct_innerhtml_assignment' in ugeen_api_scraper.py:723", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ugeen_api_scraper.py:723"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b77651186109f076", "name": "Insecure pattern 'local_storage_auth_token' in ugeen_api_scraper.py:1672", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in ugeen_api_scraper.py:1672"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1c4269f38723f710", "name": "Insecure pattern 'direct_innerhtml_assignment' in iptvvcanada_automation_with_tor.py:760", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in iptvvcanada_automation_with_tor.py:760"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72397045e9fc8369", "name": "Insecure pattern 'direct_innerhtml_assignment' in iptvtune_automation.py:779", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in iptvtune_automation.py:779"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b865f19a2c843ded", "name": "Very large file: iptvvcanada_automation.py (1670 lines)", "shortDescription": {"text": "Very large file: iptvvcanada_automation.py (1670 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffb3b80f5b06cd38", "name": "Very large file: zazy_playlist_automation.py (1585 lines)", "shortDescription": {"text": "Very large file: zazy_playlist_automation.py (1585 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b38f2c2e6d6bc761", "name": "Very large file: ugeen_api_scraper.py (2225 lines)", "shortDescription": {"text": "Very large file: ugeen_api_scraper.py (2225 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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 18 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1449 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 14 placeholder/mock markers across 3 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-e9f5ccc51877e896", "name": "Legacy-named symbol `solve_recaptcha_v2` in iptvvcanada_automation.py:1068", "shortDescription": {"text": "Legacy-named symbol `solve_recaptcha_v2` in iptvvcanada_automation.py:1068"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68e7b4893bbfad3a", "name": "Legacy-named symbol `solve_recaptcha_v2` in zazy_playlist_automation.py:484", "shortDescription": {"text": "Legacy-named symbol `solve_recaptcha_v2` in zazy_playlist_automation.py:484"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a06a9ef5029baeb", "name": "Legacy-named symbol `solve_recaptcha_v2` in viewtvy_automation.py:383", "shortDescription": {"text": "Legacy-named symbol `solve_recaptcha_v2` in viewtvy_automation.py:383"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-444c4f013f258f7e", "name": "Legacy-named symbol `solve_recaptcha_v2` in layerseven_automation.py:706", "shortDescription": {"text": "Legacy-named symbol `solve_recaptcha_v2` in layerseven_automation.py:706"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dcb50dad9c05d792", "name": "Legacy-named symbol `solve_recaptcha_v2` in iptvvcanada_automation_with_tor.py:725", "shortDescription": {"text": "Legacy-named symbol `solve_recaptcha_v2` in iptvvcanada_automation_with_tor.py:725"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2400be0593d61e31", "name": "Legacy-named symbol `solve_recaptcha_v2` in iptvtune_automation.py:753", "shortDescription": {"text": "Legacy-named symbol `solve_recaptcha_v2` in iptvtune_automation.py:753"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CHROMEDRIVER_PATH`, `DISPLAY`, `IPTVV_BASE_URL`, `IPTVV_CART_URL`, `IPTVV_EMAIL_MAX_WAIT_SECONDS`, `IPTVV_EMAIL_POLL_SECONDS`, `MAILTM_API_BASE`, `TOR_CONTROL_HOST` + 10 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ntelegram_notifier.py:send_notification, telegram_notifier.py:send_notification\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\niptvvcanada_automation.py:notify_success, viewtvy_automation.py:notify_success, layerseven_automation.py:notify_success, iptvvcanada_automation_with_tor.py:notify_success\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi_server.py:run_in_background, api_server.py:run_in_background, api_server.py:run_in_background, api_server.py:run_in_background\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89c8c60aa4ed55f5", "name": "Flask mutation route `generate_account` without `@login_required` \u2014 api_server.py:210", "shortDescription": {"text": "Flask mutation route `generate_account` without `@login_required` \u2014 api_server.py:210"}, "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-7c9d67805dfd4277", "name": "Flask mutation route `generate_account_sync` without `@login_required` \u2014 api_server.py:261", "shortDescription": {"text": "Flask mutation route `generate_account_sync` without `@login_required` \u2014 api_server.py:261"}, "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-6d9e99646959e0ca", "name": "Flask mutation route `generate_ugeen` without `@login_required` \u2014 api_server.py:323", "shortDescription": {"text": "Flask mutation route `generate_ugeen` without `@login_required` \u2014 api_server.py:323"}, "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-d1269c6a27391766", "name": "Flask mutation route `generate_layerseven` without `@login_required` \u2014 api_server.py:444", "shortDescription": {"text": "Flask mutation route `generate_layerseven` without `@login_required` \u2014 api_server.py:444"}, "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-df4cd717e17576fd", "name": "Flask mutation route `generate_layerseven_sync` without `@login_required` \u2014 api_server.py:486", "shortDescription": {"text": "Flask mutation route `generate_layerseven_sync` without `@login_required` \u2014 api_server.py:486"}, "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-1e1b11b4b70b3625", "name": "Flask mutation route `generate_iptvtune` without `@login_required` \u2014 api_server.py:581", "shortDescription": {"text": "Flask mutation route `generate_iptvtune` without `@login_required` \u2014 api_server.py:581"}, "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-90d5450b1912f414", "name": "Flask mutation route `generate_iptvtune_sync` without `@login_required` \u2014 api_server.py:623", "shortDescription": {"text": "Flask mutation route `generate_iptvtune_sync` without `@login_required` \u2014 api_server.py:623"}, "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/26356"}, "properties": {"repository": "hichamkhourge/zazytv", "repoUrl": "https://github.com/hichamkhourge/zazytv", "branch": "main"}, "results": [{"ruleId": "scanner-abb77c0cb1a27273", "level": "note", "message": {"text": "Possibly dead Python function: notify_start"}, "properties": {"repobilityId": "b9b12805ce73a140", "scanner": "scanner-primary", "fingerprint": "abb77c0cb1a27273", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "telegram_notifier.py:94"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-334049afb8f643c2", "level": "note", "message": {"text": "Possibly dead Python function: notify_warning"}, "properties": {"repobilityId": "5aefd7b10916c46c", "scanner": "scanner-primary", "fingerprint": "334049afb8f643c2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "telegram_notifier.py:137"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5247a1d77f7d59c7", "level": "note", "message": {"text": "Possibly dead Python function: notify_m3u_extracted"}, "properties": {"repobilityId": "8766038f3e41fe72", "scanner": "scanner-primary", "fingerprint": "5247a1d77f7d59c7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "telegram_notifier.py:146"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-63cf0cf744af76b5", "level": "note", "message": {"text": "Possibly dead Python function: verify_api_key"}, "properties": {"repobilityId": "7e20521df243db65", "scanner": "scanner-primary", "fingerprint": "63cf0cf744af76b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8943f9cc03cfac3", "level": "note", "message": {"text": "Possibly dead Python function: run_in_background"}, "properties": {"repobilityId": "6d30dde0eba0fcf2", "scanner": "scanner-primary", "fingerprint": "e8943f9cc03cfac3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py:603"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19670a83ae7dbaa9", "level": "note", "message": {"text": "Possibly dead Python function: set_progress_step"}, "properties": {"repobilityId": "80e3bf9623850c3a", "scanner": "scanner-primary", "fingerprint": "19670a83ae7dbaa9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ugeen_api_scraper.py:200"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ea60c85bca25c74", "level": "note", "message": {"text": "Possibly dead Python function: progress_reporter"}, "properties": {"repobilityId": "7ece081f1fa991e4", "scanner": "scanner-primary", "fingerprint": "5ea60c85bca25c74", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ugeen_api_scraper.py:206"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0efe3c3538aba458", "level": "note", "message": {"text": "Possibly dead Python function: renew_tor_ip"}, "properties": {"repobilityId": "1c6b387907769f44", "scanner": "scanner-primary", "fingerprint": "0efe3c3538aba458", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "iptvvcanada_automation_with_tor.py:248"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5987bb29749bf1c2", "level": "note", "message": {"text": "Possibly dead Python function: help_command"}, "properties": {"repobilityId": "f5f479a71bdcf045", "scanner": "scanner-primary", "fingerprint": "5987bb29749bf1c2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "telegram_bot.py:88"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d98fa765d559792", "level": "note", "message": {"text": "Possibly dead Python function: run_uzeen"}, "properties": {"repobilityId": "a2512409d49cc5f0", "scanner": "scanner-primary", "fingerprint": "3d98fa765d559792", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "telegram_bot.py:224"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aee99b2cc8264b1b", "level": "warning", "message": {"text": "Privileged port 3 in use"}, "properties": {"repobilityId": "261b7b1c6a18d412", "scanner": "scanner-primary", "fingerprint": "aee99b2cc8264b1b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker-entrypoint.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-de3c1f217d72a063", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "1de0ecd007803dbd", "scanner": "scanner-primary", "fingerprint": "de3c1f217d72a063", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5b5f70089c54044", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in iptvvcanada_automation.py:1103"}, "properties": {"repobilityId": "f43a6828e57f841d", "scanner": "scanner-primary", "fingerprint": "b5b5f70089c54044", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "iptvvcanada_automation.py"}, "region": {"startLine": 1103}}}]}, {"ruleId": "scanner-aa6c6875061ea307", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in zazy_playlist_automation.py:549"}, "properties": {"repobilityId": "981d5ba8cf38869c", "scanner": "scanner-primary", "fingerprint": "aa6c6875061ea307", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "zazy_playlist_automation.py"}, "region": {"startLine": 549}}}]}, {"ruleId": "scanner-00c87be8510a6220", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in viewtvy_automation.py:409"}, "properties": {"repobilityId": "44547924f0eba883", "scanner": "scanner-primary", "fingerprint": "00c87be8510a6220", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "viewtvy_automation.py"}, "region": {"startLine": 409}}}]}, {"ruleId": "scanner-6519a5e6b4843ff3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in layerseven_automation.py:732"}, "properties": {"repobilityId": "80293080e0dd0f03", "scanner": "scanner-primary", "fingerprint": "6519a5e6b4843ff3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "layerseven_automation.py"}, "region": {"startLine": 732}}}]}, {"ruleId": "scanner-f810bdbb6838d98d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ugeen_api_scraper.py:723"}, "properties": {"repobilityId": "17a3cf59e25254cb", "scanner": "scanner-primary", "fingerprint": "f810bdbb6838d98d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ugeen_api_scraper.py"}, "region": {"startLine": 723}}}]}, {"ruleId": "scanner-b77651186109f076", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in ugeen_api_scraper.py:1672"}, "properties": {"repobilityId": "087347490a8f69b8", "scanner": "scanner-primary", "fingerprint": "b77651186109f076", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ugeen_api_scraper.py"}, "region": {"startLine": 1672}}}]}, {"ruleId": "scanner-1c4269f38723f710", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in iptvvcanada_automation_with_tor.py:760"}, "properties": {"repobilityId": "8a1193a76740f82d", "scanner": "scanner-primary", "fingerprint": "1c4269f38723f710", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "iptvvcanada_automation_with_tor.py"}, "region": {"startLine": 760}}}]}, {"ruleId": "scanner-72397045e9fc8369", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in iptvtune_automation.py:779"}, "properties": {"repobilityId": "17fd3d764051f93e", "scanner": "scanner-primary", "fingerprint": "72397045e9fc8369", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "iptvtune_automation.py"}, "region": {"startLine": 779}}}]}, {"ruleId": "scanner-b865f19a2c843ded", "level": "note", "message": {"text": "Very large file: iptvvcanada_automation.py (1670 lines)"}, "properties": {"repobilityId": "25aff029415515f2", "scanner": "scanner-primary", "fingerprint": "b865f19a2c843ded", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ffb3b80f5b06cd38", "level": "note", "message": {"text": "Very large file: zazy_playlist_automation.py (1585 lines)"}, "properties": {"repobilityId": "4bf59f138a026b03", "scanner": "scanner-primary", "fingerprint": "ffb3b80f5b06cd38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b38f2c2e6d6bc761", "level": "note", "message": {"text": "Very large file: ugeen_api_scraper.py (2225 lines)"}, "properties": {"repobilityId": "4e895902d1275b10", "scanner": "scanner-primary", "fingerprint": "b38f2c2e6d6bc761", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"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": "f85a9e917f166f22", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "4996d9f21fcf3614", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "9c970b14771454a0", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "4fbeec92c35ebbdb", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "44fe8ef5a027e100", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-e9f5ccc51877e896", "level": "note", "message": {"text": "Legacy-named symbol `solve_recaptcha_v2` in iptvvcanada_automation.py:1068"}, "properties": {"repobilityId": "59345b9d9edb09fd", "scanner": "scanner-primary", "fingerprint": "e9f5ccc51877e896", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-68e7b4893bbfad3a", "level": "note", "message": {"text": "Legacy-named symbol `solve_recaptcha_v2` in zazy_playlist_automation.py:484"}, "properties": {"repobilityId": "598bd916385e23ba", "scanner": "scanner-primary", "fingerprint": "68e7b4893bbfad3a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6a06a9ef5029baeb", "level": "note", "message": {"text": "Legacy-named symbol `solve_recaptcha_v2` in viewtvy_automation.py:383"}, "properties": {"repobilityId": "f7f6143f9a18318b", "scanner": "scanner-primary", "fingerprint": "6a06a9ef5029baeb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-444c4f013f258f7e", "level": "note", "message": {"text": "Legacy-named symbol `solve_recaptcha_v2` in layerseven_automation.py:706"}, "properties": {"repobilityId": "99ec91f6bd683017", "scanner": "scanner-primary", "fingerprint": "444c4f013f258f7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dcb50dad9c05d792", "level": "note", "message": {"text": "Legacy-named symbol `solve_recaptcha_v2` in iptvvcanada_automation_with_tor.py:725"}, "properties": {"repobilityId": "b074b9f6e8671b99", "scanner": "scanner-primary", "fingerprint": "dcb50dad9c05d792", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2400be0593d61e31", "level": "note", "message": {"text": "Legacy-named symbol `solve_recaptcha_v2` in iptvtune_automation.py:753"}, "properties": {"repobilityId": "db9a8c34be8ba467", "scanner": "scanner-primary", "fingerprint": "2400be0593d61e31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6bdd8c19e167fc8d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "9c8cd49c6271d1e0", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "53456b5d59381664", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e23c742d7a94c557", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "94d0c03341eaf363", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5431ed51a0e6be1c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c129d833d6881bcd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9218d4379c777969", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "89087a1952e172a2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6c9766404c0d7e50", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5d190bf34a41a277", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8b6f433f44fb6e56", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "57fe04fb2ee2e182", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "41bd49fa56e4a53a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "adcb5755a89d58fd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "d3d2677d5e010184", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8d086934ea0adb99", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a7008a6cf813b780", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "390ef0524407d322", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a4c38ab4240d204a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-89c8c60aa4ed55f5", "level": "error", "message": {"text": "Flask mutation route `generate_account` without `@login_required` \u2014 api_server.py:210"}, "properties": {"repobilityId": "25ef8149ef242c22", "scanner": "scanner-primary", "fingerprint": "89c8c60aa4ed55f5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-7c9d67805dfd4277", "level": "error", "message": {"text": "Flask mutation route `generate_account_sync` without `@login_required` \u2014 api_server.py:261"}, "properties": {"repobilityId": "d488fdc552b7c447", "scanner": "scanner-primary", "fingerprint": "7c9d67805dfd4277", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py"}, "region": {"startLine": 261}}}]}, {"ruleId": "scanner-6d9e99646959e0ca", "level": "error", "message": {"text": "Flask mutation route `generate_ugeen` without `@login_required` \u2014 api_server.py:323"}, "properties": {"repobilityId": "560e1f93248515ca", "scanner": "scanner-primary", "fingerprint": "6d9e99646959e0ca", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py"}, "region": {"startLine": 323}}}]}, {"ruleId": "scanner-d1269c6a27391766", "level": "error", "message": {"text": "Flask mutation route `generate_layerseven` without `@login_required` \u2014 api_server.py:444"}, "properties": {"repobilityId": "a1fb27418a7c2d7d", "scanner": "scanner-primary", "fingerprint": "d1269c6a27391766", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py"}, "region": {"startLine": 444}}}]}, {"ruleId": "scanner-df4cd717e17576fd", "level": "error", "message": {"text": "Flask mutation route `generate_layerseven_sync` without `@login_required` \u2014 api_server.py:486"}, "properties": {"repobilityId": "572515fbe1fce421", "scanner": "scanner-primary", "fingerprint": "df4cd717e17576fd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py"}, "region": {"startLine": 486}}}]}, {"ruleId": "scanner-1e1b11b4b70b3625", "level": "error", "message": {"text": "Flask mutation route `generate_iptvtune` without `@login_required` \u2014 api_server.py:581"}, "properties": {"repobilityId": "b60b32ef78cd5ec6", "scanner": "scanner-primary", "fingerprint": "1e1b11b4b70b3625", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py"}, "region": {"startLine": 581}}}]}, {"ruleId": "scanner-90d5450b1912f414", "level": "error", "message": {"text": "Flask mutation route `generate_iptvtune_sync` without `@login_required` \u2014 api_server.py:623"}, "properties": {"repobilityId": "5d038d9a708de3c8", "scanner": "scanner-primary", "fingerprint": "90d5450b1912f414", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api_server.py"}, "region": {"startLine": 623}}}]}]}]}