{"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-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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2559e3b82c117e00", "name": "Very large file: game.py (1515 lines)", "shortDescription": {"text": "Very large file: game.py (1515 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 4 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-1b5a76780c3df9aa", "name": "1 env vars used in code but missing from .env.example", "shortDescription": {"text": "1 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CLIENT_HOST`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "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:\ngame.py:zug_wuerfeln, game.py:zug_ziehen\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-a6d629effe151bb0", "name": "Flask mutation route `api_load_save` without `@login_required` \u2014 game.py:878", "shortDescription": {"text": "Flask mutation route `api_load_save` without `@login_required` \u2014 game.py:878"}, "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-93bad6d165d834c5", "name": "Flask mutation route `api_save_current` without `@login_required` \u2014 game.py:919", "shortDescription": {"text": "Flask mutation route `api_save_current` without `@login_required` \u2014 game.py:919"}, "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-4f01d377a042b373", "name": "Flask mutation route `api_exit_game` without `@login_required` \u2014 game.py:965", "shortDescription": {"text": "Flask mutation route `api_exit_game` without `@login_required` \u2014 game.py:965"}, "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-735b9174bec78522", "name": "Flask mutation route `api_rename_save` without `@login_required` \u2014 game.py:988", "shortDescription": {"text": "Flask mutation route `api_rename_save` without `@login_required` \u2014 game.py:988"}, "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-ae85e80ef9353918", "name": "Flask mutation route `api_delete_save` without `@login_required` \u2014 game.py:1022", "shortDescription": {"text": "Flask mutation route `api_delete_save` without `@login_required` \u2014 game.py:1022"}, "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-914feef888411536", "name": "Flask mutation route `api_duplicate_save` without `@login_required` \u2014 game.py:1050", "shortDescription": {"text": "Flask mutation route `api_duplicate_save` without `@login_required` \u2014 game.py:1050"}, "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-b3261eb6e31d554f", "name": "Flask mutation route `api_settings` without `@login_required` \u2014 game.py:1090", "shortDescription": {"text": "Flask mutation route `api_settings` without `@login_required` \u2014 game.py:1090"}, "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-4f7a442f10b19304", "name": "Flask mutation route `index` without `@login_required` \u2014 game.py:1118", "shortDescription": {"text": "Flask mutation route `index` without `@login_required` \u2014 game.py:1118"}, "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-9585fcd554707e07", "name": "Flask mutation route `continue_game` without `@login_required` \u2014 game.py:1139", "shortDescription": {"text": "Flask mutation route `continue_game` without `@login_required` \u2014 game.py:1139"}, "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-0b847c5732da12a2", "name": "Flask mutation route `rejoin_page` without `@login_required` \u2014 game.py:1148", "shortDescription": {"text": "Flask mutation route `rejoin_page` without `@login_required` \u2014 game.py:1148"}, "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-b0f74ec7935ebff5", "name": "Flask mutation route `lobby_join` without `@login_required` \u2014 game.py:1184", "shortDescription": {"text": "Flask mutation route `lobby_join` without `@login_required` \u2014 game.py:1184"}, "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-5c9be6f1cbfb0ef3", "name": "Flask mutation route `lobby_ready` without `@login_required` \u2014 game.py:1251", "shortDescription": {"text": "Flask mutation route `lobby_ready` without `@login_required` \u2014 game.py:1251"}, "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-f97356c1eea2ea25", "name": "Flask mutation route `lobby_start` without `@login_required` \u2014 game.py:1271", "shortDescription": {"text": "Flask mutation route `lobby_start` without `@login_required` \u2014 game.py:1271"}, "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-3dad55372adcf0b8", "name": "Flask mutation route `lobby_continue` without `@login_required` \u2014 game.py:1294", "shortDescription": {"text": "Flask mutation route `lobby_continue` without `@login_required` \u2014 game.py:1294"}, "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-628a2a674935dd7a", "name": "Flask mutation route `lobby_new` without `@login_required` \u2014 game.py:1314", "shortDescription": {"text": "Flask mutation route `lobby_new` without `@login_required` \u2014 game.py:1314"}, "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-c62119d3afe051fd", "name": "Flask mutation route `namen` without `@login_required` \u2014 game.py:1330", "shortDescription": {"text": "Flask mutation route `namen` without `@login_required` \u2014 game.py:1330"}, "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-e5fd0a63689333f0", "name": "Flask mutation route `zug_wuerfeln` without `@login_required` \u2014 game.py:1372", "shortDescription": {"text": "Flask mutation route `zug_wuerfeln` without `@login_required` \u2014 game.py:1372"}, "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-0817a80764f996ae", "name": "Flask mutation route `zug_ziehen` without `@login_required` \u2014 game.py:1405", "shortDescription": {"text": "Flask mutation route `zug_ziehen` without `@login_required` \u2014 game.py:1405"}, "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-e733170a4a16942f", "name": "Flask mutation route `feld_aktion` without `@login_required` \u2014 game.py:1438", "shortDescription": {"text": "Flask mutation route `feld_aktion` without `@login_required` \u2014 game.py:1438"}, "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-c9389517206b1fd0", "name": "Flask mutation route `neues_spiel` without `@login_required` \u2014 game.py:1479", "shortDescription": {"text": "Flask mutation route `neues_spiel` without `@login_required` \u2014 game.py:1479"}, "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/29268"}, "properties": {"repository": "samuel3050/Spassmonopoly-Deluxe", "repoUrl": "https://github.com/samuel3050/Spassmonopoly-Deluxe", "branch": "main"}, "results": [{"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-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-2559e3b82c117e00", "level": "note", "message": {"text": "Very large file: game.py (1515 lines)"}, "properties": {"repobilityId": "40cf76953c89af3b", "scanner": "scanner-primary", "fingerprint": "2559e3b82c117e00", "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": "608756e113827772", "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": "46ac641ca718a12c", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-1b5a76780c3df9aa", "level": "none", "message": {"text": "1 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d04379b337b44a15", "scanner": "scanner-primary", "fingerprint": "1b5a76780c3df9aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9c26b2aa586703c1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-a6d629effe151bb0", "level": "error", "message": {"text": "Flask mutation route `api_load_save` without `@login_required` \u2014 game.py:878"}, "properties": {"repobilityId": "f1b06bb90ddf1ed7", "scanner": "scanner-primary", "fingerprint": "a6d629effe151bb0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 878}}}]}, {"ruleId": "scanner-93bad6d165d834c5", "level": "error", "message": {"text": "Flask mutation route `api_save_current` without `@login_required` \u2014 game.py:919"}, "properties": {"repobilityId": "7f91957c77cb1cd7", "scanner": "scanner-primary", "fingerprint": "93bad6d165d834c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 919}}}]}, {"ruleId": "scanner-4f01d377a042b373", "level": "error", "message": {"text": "Flask mutation route `api_exit_game` without `@login_required` \u2014 game.py:965"}, "properties": {"repobilityId": "6df1b64d4afbd683", "scanner": "scanner-primary", "fingerprint": "4f01d377a042b373", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 965}}}]}, {"ruleId": "scanner-735b9174bec78522", "level": "error", "message": {"text": "Flask mutation route `api_rename_save` without `@login_required` \u2014 game.py:988"}, "properties": {"repobilityId": "d6411e7fcb5f987a", "scanner": "scanner-primary", "fingerprint": "735b9174bec78522", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 988}}}]}, {"ruleId": "scanner-ae85e80ef9353918", "level": "error", "message": {"text": "Flask mutation route `api_delete_save` without `@login_required` \u2014 game.py:1022"}, "properties": {"repobilityId": "37033f444e063129", "scanner": "scanner-primary", "fingerprint": "ae85e80ef9353918", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1022}}}]}, {"ruleId": "scanner-914feef888411536", "level": "error", "message": {"text": "Flask mutation route `api_duplicate_save` without `@login_required` \u2014 game.py:1050"}, "properties": {"repobilityId": "e44858ce1e111af1", "scanner": "scanner-primary", "fingerprint": "914feef888411536", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1050}}}]}, {"ruleId": "scanner-b3261eb6e31d554f", "level": "error", "message": {"text": "Flask mutation route `api_settings` without `@login_required` \u2014 game.py:1090"}, "properties": {"repobilityId": "21f02e56f0999225", "scanner": "scanner-primary", "fingerprint": "b3261eb6e31d554f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1090}}}]}, {"ruleId": "scanner-4f7a442f10b19304", "level": "error", "message": {"text": "Flask mutation route `index` without `@login_required` \u2014 game.py:1118"}, "properties": {"repobilityId": "600659c2c3e99998", "scanner": "scanner-primary", "fingerprint": "4f7a442f10b19304", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1118}}}]}, {"ruleId": "scanner-9585fcd554707e07", "level": "error", "message": {"text": "Flask mutation route `continue_game` without `@login_required` \u2014 game.py:1139"}, "properties": {"repobilityId": "973071f7ae554dfe", "scanner": "scanner-primary", "fingerprint": "9585fcd554707e07", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1139}}}]}, {"ruleId": "scanner-0b847c5732da12a2", "level": "error", "message": {"text": "Flask mutation route `rejoin_page` without `@login_required` \u2014 game.py:1148"}, "properties": {"repobilityId": "01c368e843b5b49e", "scanner": "scanner-primary", "fingerprint": "0b847c5732da12a2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1148}}}]}, {"ruleId": "scanner-b0f74ec7935ebff5", "level": "error", "message": {"text": "Flask mutation route `lobby_join` without `@login_required` \u2014 game.py:1184"}, "properties": {"repobilityId": "d6b838ed6090581b", "scanner": "scanner-primary", "fingerprint": "b0f74ec7935ebff5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1184}}}]}, {"ruleId": "scanner-5c9be6f1cbfb0ef3", "level": "error", "message": {"text": "Flask mutation route `lobby_ready` without `@login_required` \u2014 game.py:1251"}, "properties": {"repobilityId": "64d168d9dbd33e70", "scanner": "scanner-primary", "fingerprint": "5c9be6f1cbfb0ef3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1251}}}]}, {"ruleId": "scanner-f97356c1eea2ea25", "level": "error", "message": {"text": "Flask mutation route `lobby_start` without `@login_required` \u2014 game.py:1271"}, "properties": {"repobilityId": "b6b497ae38c33f09", "scanner": "scanner-primary", "fingerprint": "f97356c1eea2ea25", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1271}}}]}, {"ruleId": "scanner-3dad55372adcf0b8", "level": "error", "message": {"text": "Flask mutation route `lobby_continue` without `@login_required` \u2014 game.py:1294"}, "properties": {"repobilityId": "9b2a4a0ef2f6ba30", "scanner": "scanner-primary", "fingerprint": "3dad55372adcf0b8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1294}}}]}, {"ruleId": "scanner-628a2a674935dd7a", "level": "error", "message": {"text": "Flask mutation route `lobby_new` without `@login_required` \u2014 game.py:1314"}, "properties": {"repobilityId": "c6956fa243d44374", "scanner": "scanner-primary", "fingerprint": "628a2a674935dd7a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1314}}}]}, {"ruleId": "scanner-c62119d3afe051fd", "level": "error", "message": {"text": "Flask mutation route `namen` without `@login_required` \u2014 game.py:1330"}, "properties": {"repobilityId": "67dcad98172ccd1b", "scanner": "scanner-primary", "fingerprint": "c62119d3afe051fd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1330}}}]}, {"ruleId": "scanner-e5fd0a63689333f0", "level": "error", "message": {"text": "Flask mutation route `zug_wuerfeln` without `@login_required` \u2014 game.py:1372"}, "properties": {"repobilityId": "b70cf065a12190de", "scanner": "scanner-primary", "fingerprint": "e5fd0a63689333f0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1372}}}]}, {"ruleId": "scanner-0817a80764f996ae", "level": "error", "message": {"text": "Flask mutation route `zug_ziehen` without `@login_required` \u2014 game.py:1405"}, "properties": {"repobilityId": "5ede17d97fc1af49", "scanner": "scanner-primary", "fingerprint": "0817a80764f996ae", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1405}}}]}, {"ruleId": "scanner-e733170a4a16942f", "level": "error", "message": {"text": "Flask mutation route `feld_aktion` without `@login_required` \u2014 game.py:1438"}, "properties": {"repobilityId": "339fe0eafcb2d29a", "scanner": "scanner-primary", "fingerprint": "e733170a4a16942f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1438}}}]}, {"ruleId": "scanner-c9389517206b1fd0", "level": "error", "message": {"text": "Flask mutation route `neues_spiel` without `@login_required` \u2014 game.py:1479"}, "properties": {"repobilityId": "72364f2b7997876f", "scanner": "scanner-primary", "fingerprint": "c9389517206b1fd0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "game.py"}, "region": {"startLine": 1479}}}]}]}]}