1 line
22 KiB
JSON
1 line
22 KiB
JSON
{"nodes": [{"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "label": "security.py", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L1"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_generate_subsonic_password", "label": "generate_subsonic_password()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L28", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher", "label": "SubsonicPasswordCipher", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L33", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_init", "label": ".__init__()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L43", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_encrypt", "label": ".encrypt()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L47", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_decrypt", "label": ".decrypt()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L50", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher", "label": "Argon2PasswordHasher", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L58", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher_init", "label": ".__init__()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L61", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher_hash", "label": ".hash()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L64", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher_verify_and_update", "label": ".verify_and_update()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L67", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice", "label": "JwtTokenService", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L71", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_init", "label": ".__init__()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L79", "_callable": true}, {"id": "settings", "label": "Settings", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/core/security.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "label": ".issue()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L87", "_callable": true}, {"id": "uuid", "label": "UUID", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/core/security.py"}, {"id": "tokentype", "label": "TokenType", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/core/security.py"}, {"id": "issuedtoken", "label": "IssuedToken", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/core/security.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "label": ".decode()", "file_type": "code", "source_file": "app/core/security.py", "source_location": "L101", "_callable": true}, {"id": "tokenclaims", "label": "TokenClaims", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/core/security.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_1", "label": "Security adapters: password hashing (argon2 via pwdlib) and JWT (pyjwt). These", "file_type": "rationale", "source_file": "app/core/security.py", "source_location": "L1"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_29", "label": "A fresh, high-entropy Subsonic app-password (url-safe, ~24 chars).", "file_type": "rationale", "source_file": "app/core/security.py", "source_location": "L29"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_34", "label": "Symmetric encrypt/decrypt for the recoverable Subsonic app-password. Subson", "file_type": "rationale", "source_file": "app/core/security.py", "source_location": "L34"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_59", "label": "argon2id hasher with sensible defaults from pwdlib.", "file_type": "rationale", "source_file": "app/core/security.py", "source_location": "L59"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_72", "label": "Issues and verifies HS256 JWTs for access + refresh tokens. TTLs come from", "file_type": "rationale", "source_file": "app/core/security.py", "source_location": "L72"}], "edges": [{"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "base64", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L9", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "datetime", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L10", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "hashlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L11", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "secrets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L12", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L13", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "jwt", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L15", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "cryptography_fernet", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L16", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "pwdlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L17", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L19", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "app_domain_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L20", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "app_domain_tokens", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L21", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_generate_subsonic_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L28", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L33", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L43", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_encrypt", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L47", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_decrypt", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L50", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L58", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L61", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher_hash", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L64", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher_verify_and_update", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L67", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L71", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L79", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_init", "target": "settings", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L79", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L87", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "target": "uuid", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L87", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "target": "tokentype", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L87", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "target": "issuedtoken", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L87", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "relation": "method", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L101", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "target": "tokenclaims", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L101", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_encrypt", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L48", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_decrypt", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L52", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "target": "issuedtoken", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L99", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "target": "tokenclaims", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L104", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "target": "uuid", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L105", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "target": "tokentype", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L106", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_1", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L1", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_29", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_generate_subsonic_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L29", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_34", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L34", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_59", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L59", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_core_security_rationale_72", "target": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/core/security.py", "source_location": "L72", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_generate_subsonic_password", "callee": "token_urlsafe", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L30", "receiver": "secrets"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_generate_subsonic_password", "callee": "_SUBSONIC_PASSWORD_ENTROPY_BYTES", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app/core/security.py", "source_location": "L30"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_init", "callee": "digest", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L44", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_init", "callee": "sha256", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L44", "receiver": "hashlib"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_init", "callee": "encode", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L44", "receiver": "secret_key"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_init", "callee": "Fernet", "is_member_call": false, "source_file": "app/core/security.py", "source_location": "L45", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_init", "callee": "urlsafe_b64encode", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L45", "receiver": "base64"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_encrypt", "callee": "encode", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L48", "receiver": "plaintext"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_decrypt", "callee": "encode", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L52", "receiver": "token"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_subsonicpasswordcipher_decrypt", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/core/security.py", "source_location": "L55", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_argon2passwordhasher_init", "callee": "recommended", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L62", "receiver": "PasswordHash"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_init", "callee": "get_secret_value", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L80", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "callee": "now", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L88", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "callee": "timedelta", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L89", "receiver": "dt"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "callee": "uuid4", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L90", "receiver": "uuid"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "callee": "timestamp", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L95", "receiver": "now"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "callee": "timestamp", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L96", "receiver": "expires_at"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_issue", "callee": "encode", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L98", "receiver": "jwt"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "callee": "fromtimestamp", "is_member_call": true, "source_file": "app/core/security.py", "source_location": "L108", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "callee": "KeyError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "app/core/security.py", "source_location": "L110"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "callee": "ValueError", "is_member_call": false, "indirect": true, "context": "collection", "source_file": "app/core/security.py", "source_location": "L110"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_core_security_jwttokenservice_decode", "callee": "AuthenticationError", "is_member_call": false, "source_file": "app/core/security.py", "source_location": "L111", "receiver": null}]} |