cloud-dog-idam 0.5.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. cloud_dog_idam-0.5.2/.docs-manifest.yml +6 -0
  2. cloud_dog_idam-0.5.2/.gitignore +16 -0
  3. cloud_dog_idam-0.5.2/=2.9 +7 -0
  4. cloud_dog_idam-0.5.2/AGENT-INSTRUCTION-FIX-IDAM.md +135 -0
  5. cloud_dog_idam-0.5.2/AGENT-INSTRUCTION-IDAM.md +741 -0
  6. cloud_dog_idam-0.5.2/ARCHITECTURE.md +578 -0
  7. cloud_dog_idam-0.5.2/BUILD.md +74 -0
  8. cloud_dog_idam-0.5.2/CHANGELOG.md +21 -0
  9. cloud_dog_idam-0.5.2/DATA-MODEL.md +33 -0
  10. cloud_dog_idam-0.5.2/LICENCE +190 -0
  11. cloud_dog_idam-0.5.2/LICENSE +176 -0
  12. cloud_dog_idam-0.5.2/NOTICE +7 -0
  13. cloud_dog_idam-0.5.2/PKG-INFO +47 -0
  14. cloud_dog_idam-0.5.2/QUALITY-GATE.md +89 -0
  15. cloud_dog_idam-0.5.2/README.md +126 -0
  16. cloud_dog_idam-0.5.2/REQUIREMENTS.md +457 -0
  17. cloud_dog_idam-0.5.2/TESTS.md +355 -0
  18. cloud_dog_idam-0.5.2/adoption_test.py +113 -0
  19. cloud_dog_idam-0.5.2/cloud_dog_idam/__init__.py +109 -0
  20. cloud_dog_idam-0.5.2/cloud_dog_idam/api/__init__.py +15 -0
  21. cloud_dog_idam-0.5.2/cloud_dog_idam/api/fastapi/__init__.py +15 -0
  22. cloud_dog_idam-0.5.2/cloud_dog_idam/api/fastapi/deps.py +191 -0
  23. cloud_dog_idam-0.5.2/cloud_dog_idam/api/fastapi/middleware.py +235 -0
  24. cloud_dog_idam-0.5.2/cloud_dog_idam/api/fastapi/router.py +399 -0
  25. cloud_dog_idam-0.5.2/cloud_dog_idam/api_keys/__init__.py +21 -0
  26. cloud_dog_idam-0.5.2/cloud_dog_idam/api_keys/hashing.py +31 -0
  27. cloud_dog_idam-0.5.2/cloud_dog_idam/api_keys/manager.py +109 -0
  28. cloud_dog_idam-0.5.2/cloud_dog_idam/approval/__init__.py +15 -0
  29. cloud_dog_idam-0.5.2/cloud_dog_idam/approval/service.py +94 -0
  30. cloud_dog_idam-0.5.2/cloud_dog_idam/audit/__init__.py +15 -0
  31. cloud_dog_idam-0.5.2/cloud_dog_idam/audit/emitter.py +90 -0
  32. cloud_dog_idam-0.5.2/cloud_dog_idam/audit/models.py +34 -0
  33. cloud_dog_idam-0.5.2/cloud_dog_idam/config/__init__.py +15 -0
  34. cloud_dog_idam-0.5.2/cloud_dog_idam/config/models.py +83 -0
  35. cloud_dog_idam-0.5.2/cloud_dog_idam/domain/__init__.py +15 -0
  36. cloud_dog_idam-0.5.2/cloud_dog_idam/domain/enums.py +46 -0
  37. cloud_dog_idam-0.5.2/cloud_dog_idam/domain/errors.py +38 -0
  38. cloud_dog_idam-0.5.2/cloud_dog_idam/domain/models.py +155 -0
  39. cloud_dog_idam-0.5.2/cloud_dog_idam/identity/__init__.py +15 -0
  40. cloud_dog_idam-0.5.2/cloud_dog_idam/identity/linking.py +117 -0
  41. cloud_dog_idam-0.5.2/cloud_dog_idam/identity/provisioning.py +108 -0
  42. cloud_dog_idam-0.5.2/cloud_dog_idam/identity/service.py +104 -0
  43. cloud_dog_idam-0.5.2/cloud_dog_idam/migration/__init__.py +24 -0
  44. cloud_dog_idam-0.5.2/cloud_dog_idam/migration/api_keys.py +128 -0
  45. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/__init__.py +90 -0
  46. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/api_key.py +50 -0
  47. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/api_key_only.py +100 -0
  48. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/base.py +36 -0
  49. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/browser_automation.py +403 -0
  50. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/ldap.py +197 -0
  51. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/local_password.py +61 -0
  52. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/oidc.py +528 -0
  53. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/os_pam.py +51 -0
  54. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/registry.py +78 -0
  55. cloud_dog_idam-0.5.2/cloud_dog_idam/providers/saml.py +76 -0
  56. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/__init__.py +152 -0
  57. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/cache.py +58 -0
  58. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/engine.py +185 -0
  59. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/flat_roles.py +138 -0
  60. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/grants.py +262 -0
  61. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/guard_registry.py +125 -0
  62. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/mappers.py +99 -0
  63. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/membership.py +118 -0
  64. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/permissions.py +43 -0
  65. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/policy_extensions.py +92 -0
  66. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/resource_registry.py +126 -0
  67. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/role_catalog.py +269 -0
  68. cloud_dog_idam-0.5.2/cloud_dog_idam/rbac/secret_masking.py +113 -0
  69. cloud_dog_idam-0.5.2/cloud_dog_idam/security/__init__.py +20 -0
  70. cloud_dog_idam-0.5.2/cloud_dog_idam/security/mfa.py +82 -0
  71. cloud_dog_idam-0.5.2/cloud_dog_idam/security/password_policy.py +93 -0
  72. cloud_dog_idam-0.5.2/cloud_dog_idam/security/rate_limiter.py +73 -0
  73. cloud_dog_idam-0.5.2/cloud_dog_idam/security/totp.py +151 -0
  74. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/__init__.py +15 -0
  75. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/__init__.py +15 -0
  76. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/migrations/__init__.py +15 -0
  77. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/migrations/env.py +66 -0
  78. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/migrations/versions/0001_initial_idam.py +255 -0
  79. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/migrations/versions/__init__.py +15 -0
  80. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/models.py +285 -0
  81. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/repositories.py +303 -0
  82. cloud_dog_idam-0.5.2/cloud_dog_idam/storage/sqlalchemy/role_store.py +237 -0
  83. cloud_dog_idam-0.5.2/cloud_dog_idam/testing/__init__.py +15 -0
  84. cloud_dog_idam-0.5.2/cloud_dog_idam/testing/conformance.py +87 -0
  85. cloud_dog_idam-0.5.2/cloud_dog_idam/testing/fixtures.py +67 -0
  86. cloud_dog_idam-0.5.2/cloud_dog_idam/testing/mock_providers.py +92 -0
  87. cloud_dog_idam-0.5.2/cloud_dog_idam/tokens/__init__.py +41 -0
  88. cloud_dog_idam-0.5.2/cloud_dog_idam/tokens/base.py +46 -0
  89. cloud_dog_idam-0.5.2/cloud_dog_idam/tokens/jwt.py +95 -0
  90. cloud_dog_idam-0.5.2/cloud_dog_idam/tokens/opaque.py +86 -0
  91. cloud_dog_idam-0.5.2/cloud_dog_idam/tokens/refresh.py +73 -0
  92. cloud_dog_idam-0.5.2/cloud_dog_idam/tokens/session_extensions.py +96 -0
  93. cloud_dog_idam-0.5.2/cloud_dog_idam/tokens/sessions.py +62 -0
  94. cloud_dog_idam-0.5.2/cloud_dog_idam/traceability_ids.py +66 -0
  95. cloud_dog_idam-0.5.2/cloud_dog_idam/users/__init__.py +15 -0
  96. cloud_dog_idam-0.5.2/cloud_dog_idam/users/cascade.py +159 -0
  97. cloud_dog_idam-0.5.2/cloud_dog_idam/users/groups.py +86 -0
  98. cloud_dog_idam-0.5.2/cloud_dog_idam/users/roles.py +76 -0
  99. cloud_dog_idam-0.5.2/cloud_dog_idam/users/service.py +130 -0
  100. cloud_dog_idam-0.5.2/defaults.yaml +86 -0
  101. cloud_dog_idam-0.5.2/docs/ARCHITECTURE.md +16 -0
  102. cloud_dog_idam-0.5.2/docs/CONFIGURATION.md +15 -0
  103. cloud_dog_idam-0.5.2/docs/EXAMPLES.md +16 -0
  104. cloud_dog_idam-0.5.2/pyproject.toml +46 -0
  105. cloud_dog_idam-0.5.2/scaffold/cloud_dog_idam/__init__.py +30 -0
  106. cloud_dog_idam-0.5.2/scaffold/defaults.yaml +86 -0
  107. cloud_dog_idam-0.5.2/scaffold/pyproject.toml +29 -0
  108. cloud_dog_idam-0.5.2/scaffold/tests/conftest.py +67 -0
  109. cloud_dog_idam-0.5.2/tests/__init__.py +13 -0
  110. cloud_dog_idam-0.5.2/tests/application/AT1.10_ProxyForwardedPrincipal/__init__.py +15 -0
  111. cloud_dog_idam-0.5.2/tests/application/AT1.10_ProxyForwardedPrincipal/test_forwarded_principal.py +142 -0
  112. cloud_dog_idam-0.5.2/tests/application/AT1.1_FastAPIAuthMiddleware/test_fastapi_auth.py +79 -0
  113. cloud_dog_idam-0.5.2/tests/application/AT1.2_RequirePermissionDep/test_require_permission.py +21 -0
  114. cloud_dog_idam-0.5.2/tests/application/AT1.3_FullLoginToAuthorised/test_full_flow.py +25 -0
  115. cloud_dog_idam-0.5.2/tests/application/AT1.4_ServiceAccountAPIKey/test_service_account.py +21 -0
  116. cloud_dog_idam-0.5.2/tests/application/AT1.5_ConformanceSuite/test_conformance.py +21 -0
  117. cloud_dog_idam-0.5.2/tests/application/AT1.6_MiddlewareAuthEnforcement/test_middleware_auth.py +87 -0
  118. cloud_dog_idam-0.5.2/tests/application/AT1.7_MiddlewareSkipPaths/test_middleware_skip.py +86 -0
  119. cloud_dog_idam-0.5.2/tests/application/AT1.8_APIKeyOnlyIntegration/test_api_key_only_app.py +57 -0
  120. cloud_dog_idam-0.5.2/tests/application/AT1.9_PolicyExtensionIntegration/test_policy_ext_app.py +71 -0
  121. cloud_dog_idam-0.5.2/tests/application/AT1.W28A_741_BindingWriteAPI/test_binding_write_api.py +157 -0
  122. cloud_dog_idam-0.5.2/tests/application/AT1.W28A_741_CascadeResolves/test_cascade_resolves.py +315 -0
  123. cloud_dog_idam-0.5.2/tests/application/AT1.W28A_741_NoUnguardedRoute/test_no_unguarded_route.py +171 -0
  124. cloud_dog_idam-0.5.2/tests/application/AT1.W28A_741_SecretMasking/test_secret_masking.py +141 -0
  125. cloud_dog_idam-0.5.2/tests/application/__init__.py +13 -0
  126. cloud_dog_idam-0.5.2/tests/conftest.py +227 -0
  127. cloud_dog_idam-0.5.2/tests/env-AT +1 -0
  128. cloud_dog_idam-0.5.2/tests/env-IT +1 -0
  129. cloud_dog_idam-0.5.2/tests/env-ST +1 -0
  130. cloud_dog_idam-0.5.2/tests/env-UT +1 -0
  131. cloud_dog_idam-0.5.2/tests/integration/IT1.10_SAMLSPFlow/test_saml_sp.py +26 -0
  132. cloud_dog_idam-0.5.2/tests/integration/IT1.11_OIDCLogoutKeycloak/test_oidc_logout_keycloak.py +38 -0
  133. cloud_dog_idam-0.5.2/tests/integration/IT1.12_OIDCLogoutAuth0/test_oidc_logout_auth0.py +33 -0
  134. cloud_dog_idam-0.5.2/tests/integration/IT1.13_LinkedIdentityE2E/test_linked_identity_e2e.py +41 -0
  135. cloud_dog_idam-0.5.2/tests/integration/IT1.1_KeycloakOIDCLogin/test_keycloak_oidc.py +168 -0
  136. cloud_dog_idam-0.5.2/tests/integration/IT1.2_KeycloakRoleMapping/test_keycloak_roles.py +50 -0
  137. cloud_dog_idam-0.5.2/tests/integration/IT1.3_LDAPBindAuth/test_ldap_bind.py +45 -0
  138. cloud_dog_idam-0.5.2/tests/integration/IT1.4_LDAPGroupResolution/test_ldap_groups.py +44 -0
  139. cloud_dog_idam-0.5.2/tests/integration/IT1.5_MultiProviderUser/test_multi_provider.py +64 -0
  140. cloud_dog_idam-0.5.2/tests/integration/IT1.6_Auth0OIDCLogin/test_auth0_oidc.py +70 -0
  141. cloud_dog_idam-0.5.2/tests/integration/IT1.7_Auth0M2MAuth/test_auth0_m2m.py +37 -0
  142. cloud_dog_idam-0.5.2/tests/integration/IT1.8_GoogleOAuthLogin/test_google_oauth.py +57 -0
  143. cloud_dog_idam-0.5.2/tests/integration/IT1.9_OIDCAuthCodePKCE/test_oidc_pkce.py +43 -0
  144. cloud_dog_idam-0.5.2/tests/integration/__init__.py +13 -0
  145. cloud_dog_idam-0.5.2/tests/quality/QT_PUBLISH_COMPLIANCE/__init__.py +2 -0
  146. cloud_dog_idam-0.5.2/tests/quality/QT_PUBLISH_COMPLIANCE/test_publish_compliance.py +58 -0
  147. cloud_dog_idam-0.5.2/tests/quality/__init__.py +2 -0
  148. cloud_dog_idam-0.5.2/tests/security/QT1.1_JWTValidation/test_jwt_security.py +24 -0
  149. cloud_dog_idam-0.5.2/tests/security/QT1.2_RateLimitLockout/test_rate_limit.py +21 -0
  150. cloud_dog_idam-0.5.2/tests/security/QT1.3_PasswordPolicyEnforcement/test_password_enforcement.py +22 -0
  151. cloud_dog_idam-0.5.2/tests/security/QT1.4_TokenReplay/test_token_replay.py +24 -0
  152. cloud_dog_idam-0.5.2/tests/security/QT1.5_SQLInjection/test_sql_injection.py +22 -0
  153. cloud_dog_idam-0.5.2/tests/security/QT1.6_OIDCStateNonceValidation/test_oidc_state_nonce.py +22 -0
  154. cloud_dog_idam-0.5.2/tests/security/QT1.7_JWKSRotationHandling/test_jwks_rotation.py +20 -0
  155. cloud_dog_idam-0.5.2/tests/security/__init__.py +13 -0
  156. cloud_dog_idam-0.5.2/tests/system/ST1.10_ProvisioningSyncMode/test_provisioning_sync.py +26 -0
  157. cloud_dog_idam-0.5.2/tests/system/ST1.10_SameDatastorePersistence/test_same_datastore_persistence.py +92 -0
  158. cloud_dog_idam-0.5.2/tests/system/ST1.11_ApprovalFullWorkflow/test_approval_workflow.py +24 -0
  159. cloud_dog_idam-0.5.2/tests/system/ST1.11_DefaultDenyAndExpiry/test_default_deny_and_expiry.py +79 -0
  160. cloud_dog_idam-0.5.2/tests/system/ST1.12_RolePermissionsPersistence/test_role_permissions_persistence.py +157 -0
  161. cloud_dog_idam-0.5.2/tests/system/ST1.12_SessionFullLifecycle/test_session_lifecycle_full.py +22 -0
  162. cloud_dog_idam-0.5.2/tests/system/ST1.13_JWTBlacklistRevocation/test_jwt_blacklist.py +27 -0
  163. cloud_dog_idam-0.5.2/tests/system/ST1.14_MultiTenantIsolation/test_multi_tenant.py +35 -0
  164. cloud_dog_idam-0.5.2/tests/system/ST1.1_LocalLoginFlow/test_local_login.py +30 -0
  165. cloud_dog_idam-0.5.2/tests/system/ST1.2_APIKeyFullLifecycle/test_api_key_lifecycle.py +24 -0
  166. cloud_dog_idam-0.5.2/tests/system/ST1.3_JWTIssueVerifyRevoke/test_jwt_lifecycle.py +26 -0
  167. cloud_dog_idam-0.5.2/tests/system/ST1.4_RBACEnforcement/test_rbac_enforcement.py +22 -0
  168. cloud_dog_idam-0.5.2/tests/system/ST1.5_UserGroupCRUD/test_user_group_crud.py +26 -0
  169. cloud_dog_idam-0.5.2/tests/system/ST1.6_SessionLifecycle/test_session_lifecycle.py +22 -0
  170. cloud_dog_idam-0.5.2/tests/system/ST1.7_AlembicMigrations/test_migrations.py +49 -0
  171. cloud_dog_idam-0.5.2/tests/system/ST1.8_AdminBootstrapIdempotent/test_bootstrap_idempotent.py +22 -0
  172. cloud_dog_idam-0.5.2/tests/system/ST1.9_FullCRUDAllEntities/test_crud_all_entities.py +34 -0
  173. cloud_dog_idam-0.5.2/tests/system/__init__.py +13 -0
  174. cloud_dog_idam-0.5.2/tests/test_traceability_ids.py +27 -0
  175. cloud_dog_idam-0.5.2/tests/unit/UT1.10_IdentityLinking/test_identity_linking.py +20 -0
  176. cloud_dog_idam-0.5.2/tests/unit/UT1.11_JITProvisioning/test_jit_provisioning.py +21 -0
  177. cloud_dog_idam-0.5.2/tests/unit/UT1.12_UserService/test_user_service.py +58 -0
  178. cloud_dog_idam-0.5.2/tests/unit/UT1.13_GroupService/test_group_service.py +23 -0
  179. cloud_dog_idam-0.5.2/tests/unit/UT1.14_RoleService/test_role_service.py +23 -0
  180. cloud_dog_idam-0.5.2/tests/unit/UT1.15_PasswordPolicy/test_password_policy.py +22 -0
  181. cloud_dog_idam-0.5.2/tests/unit/UT1.16_AccountLockout/test_account_lockout.py +22 -0
  182. cloud_dog_idam-0.5.2/tests/unit/UT1.17_TOTPEnrolment/test_totp.py +20 -0
  183. cloud_dog_idam-0.5.2/tests/unit/UT1.18_AuditEmitter/test_audit_emitter.py +39 -0
  184. cloud_dog_idam-0.5.2/tests/unit/UT1.19_AdminBootstrap/test_admin_bootstrap.py +22 -0
  185. cloud_dog_idam-0.5.2/tests/unit/UT1.1_LocalPasswordProvider/test_local_password.py +44 -0
  186. cloud_dog_idam-0.5.2/tests/unit/UT1.20_ApprovalWorkflow/test_approval.py +24 -0
  187. cloud_dog_idam-0.5.2/tests/unit/UT1.21_CanonicalUserModel/test_user_model.py +22 -0
  188. cloud_dog_idam-0.5.2/tests/unit/UT1.22_ProviderRegistry/test_provider_registry.py +39 -0
  189. cloud_dog_idam-0.5.2/tests/unit/UT1.23_PKCEChallengeGeneration/test_browser_automation.py +172 -0
  190. cloud_dog_idam-0.5.2/tests/unit/UT1.23_PKCEChallengeGeneration/test_pkce.py +29 -0
  191. cloud_dog_idam-0.5.2/tests/unit/UT1.24_PasswordHistory/test_password_history.py +23 -0
  192. cloud_dog_idam-0.5.2/tests/unit/UT1.25_BannedPasswordList/test_banned_passwords.py +23 -0
  193. cloud_dog_idam-0.5.2/tests/unit/UT1.26_MFAEnrolmentFlow/test_mfa_enrolment.py +22 -0
  194. cloud_dog_idam-0.5.2/tests/unit/UT1.27_OSPAMProvider/test_os_pam.py +28 -0
  195. cloud_dog_idam-0.5.2/tests/unit/UT1.28_ExternalRBACHybrid/test_rbac_hybrid.py +23 -0
  196. cloud_dog_idam-0.5.2/tests/unit/UT1.29_AuditEmitterJSONL/test_audit_jsonl.py +47 -0
  197. cloud_dog_idam-0.5.2/tests/unit/UT1.2_PasswordHashing/test_password_hashing.py +22 -0
  198. cloud_dog_idam-0.5.2/tests/unit/UT1.30_ServiceRepositoryDelegation/test_service_repository.py +145 -0
  199. cloud_dog_idam-0.5.2/tests/unit/UT1.31_ProviderRegistryPriority/test_registry_priority.py +45 -0
  200. cloud_dog_idam-0.5.2/tests/unit/UT1.32_APIKeyMigration/test_api_key_migration.py +63 -0
  201. cloud_dog_idam-0.5.2/tests/unit/UT1.33_SessionMetadataExtensions/test_session_extensions.py +64 -0
  202. cloud_dog_idam-0.5.2/tests/unit/UT1.34_APIKeyOnlyProvider/test_api_key_only.py +63 -0
  203. cloud_dog_idam-0.5.2/tests/unit/UT1.35_PolicyExtensionPoints/test_policy_extensions.py +66 -0
  204. cloud_dog_idam-0.5.2/tests/unit/UT1.36_CascadeDelete/test_cascade_delete.py +88 -0
  205. cloud_dog_idam-0.5.2/tests/unit/UT1.37_TOTPManager/test_totp_manager.py +105 -0
  206. cloud_dog_idam-0.5.2/tests/unit/UT1.38_ResourceRegistry/test_resource_registry.py +44 -0
  207. cloud_dog_idam-0.5.2/tests/unit/UT1.39_RolePermissionRBAC/test_role_rbac.py +85 -0
  208. cloud_dog_idam-0.5.2/tests/unit/UT1.3_APIKeyManager/test_api_key_manager.py +24 -0
  209. cloud_dog_idam-0.5.2/tests/unit/UT1.4_JWTTokenService/test_jwt.py +22 -0
  210. cloud_dog_idam-0.5.2/tests/unit/UT1.5_OpaqueTokenService/test_opaque.py +22 -0
  211. cloud_dog_idam-0.5.2/tests/unit/UT1.6_RefreshTokens/test_refresh.py +26 -0
  212. cloud_dog_idam-0.5.2/tests/unit/UT1.7_RBACEngine/test_rbac_engine.py +38 -0
  213. cloud_dog_idam-0.5.2/tests/unit/UT1.8_PermissionChecker/test_permission_checker.py +22 -0
  214. cloud_dog_idam-0.5.2/tests/unit/UT1.9_ExternalRBACMapper/test_rbac_mapper.py +20 -0
  215. cloud_dog_idam-0.5.2/tests/unit/__init__.py +13 -0
@@ -0,0 +1,6 @@
1
+ schema-version: 1.0
2
+ project: platform-idam
3
+ canon-set: PACKAGE
4
+ canon-template-baseline: 1.0
5
+ conditional-docs: []
6
+ additional-docs: []
@@ -0,0 +1,16 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.pyc
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ .pytest_cache/
8
+ .ruff_cache/
9
+ .coverage
10
+ coverage.xml
11
+ htmlcov/
12
+ working/
13
+ private/
14
+ archive/
15
+ logs/
16
+ *.db
@@ -0,0 +1,7 @@
1
+ Defaulting to user installation because normal site-packages is not writeable
2
+ Collecting pyotp
3
+ Downloading pyotp-2.9.0-py3-none-any.whl.metadata (9.8 kB)
4
+ Downloading pyotp-2.9.0-py3-none-any.whl (13 kB)
5
+ WARNING: Error parsing dependencies of devscripts: Invalid version: '2.22.1ubuntu1'
6
+ Installing collected packages: pyotp
7
+ Successfully installed pyotp-2.9.0
@@ -0,0 +1,135 @@
1
+ # platform-idam — Agent Instruction (v0.2.0)
2
+
3
+ **Package:** `cloud_dog_idam`
4
+ **Version:** 0.2.0
5
+ **Date:** 2026-02-18 (final re-review with source verification)
6
+ **Scope:** v0.1.0 quality issues (8–11) + v0.2.0 features (FR1.33–FR1.36) + TESTS.md — **ALL DELIVERED AND VERIFIED**
7
+
8
+ ---
9
+
10
+ ## Status: ✅ COMPLETE
11
+
12
+ All 11 issues (7 round-1 + 4 round-2 quality + 5 v0.2.0 features/TESTS.md) have been resolved. This document is retained for reference and future maintenance.
13
+
14
+ **Verified on 2026-02-18 (final re-review):**
15
+
16
+ | Check | Result |
17
+ |-------|--------|
18
+ | **Source files** | ✅ **70 .py files** (was 65 before v0.2.0 features) |
19
+ | **v0.1.0 architectural quality** | ✅ **ALL 4 issues (8–11) RESOLVED** — see below |
20
+ | **v0.2.0 feature files** (5 files) | ✅ **4/4 delivered**: `migration/api_keys.py` (112L), `tokens/session_extensions.py` (81L), `providers/api_key_only.py` (84L), `rbac/policy_extensions.py` (78L) + `migration/__init__.py` (10L) |
21
+ | **Test directories** (78 on disk) | ✅ 6 new v0.2.0 dirs: UT1.32–UT1.35, AT1.8–AT1.9 |
22
+ | **TESTS.md v0.2.0 entries** | ✅ Updated with FR1.33–FR1.36 coverage map and UT1.32–UT1.35, AT1.8–AT1.9 descriptions |
23
+ | **Config delegation** | ✅ Zero violations (`os.environ`/`hvac`/Vault grep clean) |
24
+ | **Lint / format** | ✅ Clean |
25
+ | **Build** | ✅ v0.2.0 wheel + sdist |
26
+
27
+ **Total outstanding: 0.**
28
+
29
+ ---
30
+
31
+ ## Previously Fixed Issues (ALL RESOLVED — do not re-fix)
32
+
33
+ ### Round 1 (2026-02-17 audit) — 7 issues, all fixed
34
+
35
+ | # | Issue | Status |
36
+ |---|-------|--------|
37
+ | 1 | `ruff format` failure on `browser_automation.py` | ✅ RESOLVED |
38
+ | 2 | ARCHITECTURE.md missing `browser_automation.py` | ✅ RESOLVED |
39
+ | 3 | 11 IT tests skipped (Vault creds) | ✅ RESOLVED |
40
+ | 4 | QUALITY-GATE.md inaccurate claims | ✅ RESOLVED |
41
+ | 5 | `testing/conformance.py` stub | ✅ RESOLVED |
42
+ | 6 | `testing/fixtures.py` stub | ✅ RESOLVED |
43
+ | 7 | `testing/mock_providers.py` minimal | ✅ RESOLVED |
44
+
45
+ ### Round 2 (2026-02-18 quality audit) — 4 issues, all fixed
46
+
47
+ | # | Issue | Status | Evidence |
48
+ |---|-------|--------|----------|
49
+ | 8 | `middleware.py` was 13-line stub | ✅ RESOLVED | Now **133 lines**: bearer + API-key auth, skip_paths, request.state population, 401 on failure, audit emission. Matches CC1.9 spec. |
50
+ | 9 | `audit/emitter.py` was in-memory only | ✅ RESOLVED | Now **74 lines**: JSONL file output via `log_path`, `also_log_to_memory`, `_redact()`, flush-after-write, graceful OSError handling. Matches CC1.8 / FR1.23. |
51
+ | 10 | Service classes used in-memory dicts only | ✅ RESOLVED | `UserService` (95L), `GroupService` (46L), `RoleService` (45L), `IdentityService` (68L) — all accept optional `Repository` Protocol, delegate when provided, fallback to in-memory. Matches CC1.10 / FR1.31. |
52
+ | 11 | `providers/registry.py` had no priority | ✅ RESOLVED | Now **60 lines**: `_ProviderEntry` with priority + insertion order, sorted dispatch, `deregister()`, `list_providers()`, stderr logging. Matches CC1.2 / FR1.32. |
53
+
54
+ ---
55
+
56
+ ## RULES
57
+
58
+ 1. Read `RULES.md`, `ARCHITECTURE.md`, `REQUIREMENTS.md`, and `TESTS.md` before making any changes.
59
+ 2. UK English throughout.
60
+ 3. Every source file MUST have a file header comment: `# cloud_dog_idam — <description>`.
61
+ 4. No hardcoded secrets, URLs, or credentials.
62
+ 5. Run ALL verification commands after EVERY change and confirm they pass before reporting done.
63
+ 6. Do NOT delete or weaken any existing passing test. All 72 existing tests MUST continue to pass.
64
+ 7. New or modified modules MUST pass `ruff check` and `ruff format --check`.
65
+
66
+ ---
67
+
68
+ ## v0.2.0 Features — Delivery Summary (ALL RESOLVED)
69
+
70
+ ### Issue 12 — API Key Migration Helper (FR1.33, CC1.11) ✅ DELIVERED
71
+
72
+ - `cloud_dog_idam/migration/__init__.py` — **10 lines**
73
+ - `cloud_dog_idam/migration/api_keys.py` — **112 lines**
74
+ - Test: `tests/unit/UT1.32_APIKeyMigration/`
75
+
76
+ ---
77
+
78
+ ### Issue 13 — Session Metadata Extension Hooks (FR1.34, CC1.12) ✅ DELIVERED
79
+
80
+ - `cloud_dog_idam/tokens/session_extensions.py` — **81 lines**
81
+ - Test: `tests/unit/UT1.33_SessionMetadataExtensions/`
82
+
83
+ ---
84
+
85
+ ### Issue 14 — Lightweight API-Key-Only Provider (FR1.35, CC1.13) ✅ DELIVERED
86
+
87
+ - `cloud_dog_idam/providers/api_key_only.py` — **84 lines**
88
+ - Tests: `tests/unit/UT1.34_APIKeyOnlyProvider/`, `tests/application/AT1.8_APIKeyOnlyIntegration/`
89
+
90
+ ---
91
+
92
+ ### Issue 15 — Policy Extension Points (FR1.36, CC1.14) ✅ DELIVERED
93
+
94
+ - `cloud_dog_idam/rbac/policy_extensions.py` — **78 lines**
95
+ - Tests: `tests/unit/UT1.35_PolicyExtensionPoints/`, `tests/application/AT1.9_PolicyExtensionIntegration/`
96
+
97
+ ---
98
+
99
+ ### Issue 16 — TESTS.md v0.2.0 Entries ✅ DELIVERED
100
+
101
+ - TESTS.md updated with v0.2.0 test directory entries (UT1.32–UT1.35, AT1.8–AT1.9)
102
+ - Coverage map updated with FR1.33–FR1.36 mappings
103
+ - "New Tests (v0.2.0)" section added
104
+
105
+ ---
106
+
107
+ ## Verification — Full Suite
108
+
109
+ ```bash
110
+ cd /opt/iac/Development/cloud-dog-ai/cloud-dog-ai-platform-standards/packages/backend/platform-idam
111
+
112
+ # 1. Config delegation check — MUST return zero hits
113
+ grep -rn "os.environ\|import hvac\|overlay_secrets\|from cloud_dog_idam.secrets" cloud_dog_idam/ --include="*.py" | grep -v __pycache__
114
+ # → zero results
115
+
116
+ # 2. Lint
117
+ .venv/bin/ruff check cloud_dog_idam tests
118
+
119
+ # 3. Format
120
+ .venv/bin/ruff format --check cloud_dog_idam tests
121
+
122
+ # 4. Tests
123
+ .venv/bin/pytest tests -v \
124
+ --env UT --env ST --env IT --env AT --env QT \
125
+ --env /opt/iac/Development/cloud-dog-ai/env-vault-admin
126
+
127
+ # 5. Build
128
+ .venv/bin/python -m build --no-isolation
129
+ ```
130
+
131
+ ## pyproject.toml version
132
+
133
+ ```toml
134
+ version = "0.2.0"
135
+ ```