@authup/server-core 1.0.0-beta.50 → 1.0.0-beta.51
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.
- package/dist/adapters/database/domains/client-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/client-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/client-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/robot-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/robot-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/robot-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/robot-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/robot-role/entity.mjs +1 -1
- package/dist/adapters/database/domains/robot-role/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/role-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/role-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/role-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/role-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/user-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/user-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/user-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.d.ts +7 -0
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.d.ts.map +1 -0
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.mjs +85 -0
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.mjs.map +1 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.d.ts +7 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.d.ts.map +1 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.mjs +87 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.mjs.map +1 -0
- package/dist/adapters/http/adapters/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +12 -4
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/index.mjs +2 -2
- package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +24 -9
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs +2 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts +2 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
- package/dist/adapters/http/index.mjs +3 -3
- package/dist/adapters/http/request/helpers/identity.d.ts +0 -1
- package/dist/adapters/http/request/helpers/identity.d.ts.map +1 -1
- package/dist/adapters/http/request/helpers/identity.mjs +2 -5
- package/dist/adapters/http/request/helpers/identity.mjs.map +1 -1
- package/dist/adapters/http/request/helpers/index.mjs +2 -2
- package/dist/adapters/http/request/index.mjs +2 -2
- package/dist/adapters/http/request/permission/module.mjs +2 -2
- package/dist/adapters/http/request/permission/module.mjs.map +1 -1
- package/dist/app/modules/database/repositories/bindings.d.ts +2 -0
- package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/bindings.mjs +3 -1
- package/dist/app/modules/database/repositories/bindings.mjs.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs +4 -2
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/permission-provider/module.d.ts +2 -2
- package/dist/app/modules/database/repositories/permission-provider/module.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/permission-provider/module.mjs +4 -3
- package/dist/app/modules/database/repositories/permission-provider/module.mjs.map +1 -1
- package/dist/app/modules/database/repositories/realm/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/realm/repository.mjs +6 -2
- package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
- package/dist/app/modules/http/modules/controller.d.ts +2 -0
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +18 -0
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/client.mjs +2 -2
- package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/robot.mjs +2 -2
- package/dist/app/modules/identity/repositories/robot.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/user.mjs +2 -2
- package/dist/app/modules/identity/repositories/user.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/client/repository.mjs +2 -2
- package/dist/app/modules/oauth2/repositories/client/repository.mjs.map +1 -1
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +0 -1
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.mjs +14 -56
- package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
- package/dist/core/entities/client/service.mjs +25 -7
- package/dist/core/entities/client/service.mjs.map +1 -1
- package/dist/core/entities/client-permission/service.d.ts +7 -4
- package/dist/core/entities/client-permission/service.d.ts.map +1 -1
- package/dist/core/entities/client-permission/service.mjs +59 -19
- package/dist/core/entities/client-permission/service.mjs.map +1 -1
- package/dist/core/entities/client-role/service.d.ts +3 -2
- package/dist/core/entities/client-role/service.d.ts.map +1 -1
- package/dist/core/entities/client-role/service.mjs +12 -5
- package/dist/core/entities/client-role/service.mjs.map +1 -1
- package/dist/core/entities/client-scope/service.d.ts +3 -2
- package/dist/core/entities/client-scope/service.d.ts.map +1 -1
- package/dist/core/entities/client-scope/service.mjs +12 -5
- package/dist/core/entities/client-scope/service.mjs.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.d.ts +7 -4
- package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.mjs +29 -6
- package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
- package/dist/core/entities/permission/service.d.ts +3 -5
- package/dist/core/entities/permission/service.d.ts.map +1 -1
- package/dist/core/entities/permission/service.mjs +30 -24
- package/dist/core/entities/permission/service.mjs.map +1 -1
- package/dist/core/entities/permission-policy/service.d.ts +3 -2
- package/dist/core/entities/permission-policy/service.d.ts.map +1 -1
- package/dist/core/entities/permission-policy/service.mjs +12 -5
- package/dist/core/entities/permission-policy/service.mjs.map +1 -1
- package/dist/core/entities/policy/service.d.ts.map +1 -1
- package/dist/core/entities/policy/service.mjs +16 -7
- package/dist/core/entities/policy/service.mjs.map +1 -1
- package/dist/core/entities/realm/service.mjs +4 -4
- package/dist/core/entities/realm/service.mjs.map +1 -1
- package/dist/core/entities/realm/types.d.ts +4 -0
- package/dist/core/entities/realm/types.d.ts.map +1 -1
- package/dist/core/entities/robot/service.d.ts.map +1 -1
- package/dist/core/entities/robot/service.mjs +29 -11
- package/dist/core/entities/robot/service.mjs.map +1 -1
- package/dist/core/entities/robot-permission/service.d.ts +7 -4
- package/dist/core/entities/robot-permission/service.d.ts.map +1 -1
- package/dist/core/entities/robot-permission/service.mjs +59 -19
- package/dist/core/entities/robot-permission/service.mjs.map +1 -1
- package/dist/core/entities/robot-role/service.d.ts +3 -2
- package/dist/core/entities/robot-role/service.d.ts.map +1 -1
- package/dist/core/entities/robot-role/service.mjs +12 -5
- package/dist/core/entities/robot-role/service.mjs.map +1 -1
- package/dist/core/entities/role/service.d.ts.map +1 -1
- package/dist/core/entities/role/service.mjs +16 -7
- package/dist/core/entities/role/service.mjs.map +1 -1
- package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/role-attribute/service.mjs +24 -6
- package/dist/core/entities/role-attribute/service.mjs.map +1 -1
- package/dist/core/entities/role-permission/service.d.ts +7 -4
- package/dist/core/entities/role-permission/service.d.ts.map +1 -1
- package/dist/core/entities/role-permission/service.mjs +61 -21
- package/dist/core/entities/role-permission/service.mjs.map +1 -1
- package/dist/core/entities/scope/service.d.ts.map +1 -1
- package/dist/core/entities/scope/service.mjs +16 -7
- package/dist/core/entities/scope/service.mjs.map +1 -1
- package/dist/core/entities/user/service.d.ts.map +1 -1
- package/dist/core/entities/user/service.mjs +28 -10
- package/dist/core/entities/user/service.mjs.map +1 -1
- package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/user-attribute/service.mjs +18 -6
- package/dist/core/entities/user-attribute/service.mjs.map +1 -1
- package/dist/core/entities/user-permission/service.d.ts +7 -4
- package/dist/core/entities/user-permission/service.d.ts.map +1 -1
- package/dist/core/entities/user-permission/service.mjs +59 -19
- package/dist/core/entities/user-permission/service.mjs.map +1 -1
- package/dist/core/entities/user-role/service.d.ts +3 -2
- package/dist/core/entities/user-role/service.d.ts.map +1 -1
- package/dist/core/entities/user-role/service.mjs +12 -5
- package/dist/core/entities/user-role/service.mjs.map +1 -1
- package/dist/core/identity/index.mjs +2 -1
- package/dist/core/identity/permission/checker/service.d.ts.map +1 -1
- package/dist/core/identity/permission/checker/service.mjs +6 -4
- package/dist/core/identity/permission/checker/service.mjs.map +1 -1
- package/dist/core/identity/permission/index.d.ts +1 -0
- package/dist/core/identity/permission/index.d.ts.map +1 -1
- package/dist/core/identity/permission/index.mjs +2 -1
- package/dist/core/identity/permission/junction-grant.d.ts +49 -0
- package/dist/core/identity/permission/junction-grant.d.ts.map +1 -0
- package/dist/core/identity/permission/junction-grant.mjs +57 -0
- package/dist/core/identity/permission/junction-grant.mjs.map +1 -0
- package/dist/core/identity/permission/module.d.ts +2 -3
- package/dist/core/identity/permission/module.d.ts.map +1 -1
- package/dist/core/identity/permission/module.mjs +52 -14
- package/dist/core/identity/permission/module.mjs.map +1 -1
- package/dist/core/identity/permission/types.d.ts +22 -2
- package/dist/core/identity/permission/types.d.ts.map +1 -1
- package/dist/core/index.mjs +2 -1
- package/dist/core/provisioning/entities/role/types.d.ts +8 -5
- package/dist/core/provisioning/entities/role/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/base.d.ts +3 -0
- package/dist/core/provisioning/synchronizer/base.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/base.mjs +3 -0
- package/dist/core/provisioning/synchronizer/base.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/client/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/client/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs +3 -0
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/index.mjs +1 -0
- package/dist/core/provisioning/synchronizer/permission/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs +2 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/policy/module.d.ts +2 -0
- package/dist/core/provisioning/synchronizer/policy/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/policy/module.mjs +19 -1
- package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/robot/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/robot/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/robot/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/role/module.d.ts +2 -3
- package/dist/core/provisioning/synchronizer/role/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/role/module.mjs +14 -20
- package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/role/types.d.ts +1 -2
- package/dist/core/provisioning/synchronizer/role/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/scope/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/user/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/user/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
- package/dist/core/security/policy/evaluator.d.ts +4 -4
- package/dist/core/security/policy/evaluator.d.ts.map +1 -1
- package/dist/core/security/policy/evaluator.mjs +19 -18
- package/dist/core/security/policy/evaluator.mjs.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/swagger.json +54 -0
- package/dist/ui/client/.vite/ssr-manifest.json +1017 -639
- package/dist/ui/client/assets/index-Cd3uWit-.js +127 -0
- package/dist/ui/client/assets/index-DoCTwJ8M.css +2 -0
- package/dist/ui/client/index.html +2 -2
- package/dist/ui/server/server.js +11086 -2362
- package/package.json +37 -35
- package/dist/ui/client/assets/index-BFXs98mu.js +0 -102
- package/dist/ui/client/assets/index-C_-HM1P-.css +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.mjs","names":["decorators","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","IdentityProviderRepository","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyRepository","RealmEntity","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserAttributeEntity","UserEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","ClientScopeRepositoryAdapter","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","IdentityProviderRoleMappingRepositoryAdapter","PermissionDatabaseProvider","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RobotPermissionRepositoryAdapter","RobotRepositoryAdapter","RobotRoleRepositoryAdapter","RoleAttributeRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","UserAttributeRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","ClientController","ClientPermissionController","ClientRoleController","ClientScopeController","IdentityProviderController","IdentityProviderRoleMappingController","PermissionController","PermissionPolicyController","PolicyController","RealmController","RobotController","RobotPermissionController","RobotRoleController","RoleAttributeController","RoleController","RolePermissionController","ScopeController","UserAttributeController","UserController","UserPermissionController","UserRoleController","ActivateController","AuthorizeController","JwkController","OpenIDController","PasswordForgotController","PasswordResetController","RegisterController","StatusController","TokenController","ClientAuthenticator","ClientPermissionService","ClientRoleService","ClientScopeService","ClientService","CredentialsAuthenticator","IdentityProviderRoleMappingService","OAuth2ClientAuthenticator","PasswordRecoveryService","PermissionCheckerService","PermissionPolicyService","PermissionService","PolicyCheckerService","PolicyService","RealmService","RegistrationService","RobotAuthenticator","RobotPermissionService","RobotRoleService","RobotService","RoleAttributeService","RolePermissionService","RoleService","ScopeService","UserAttributeService","UserAuthenticator","UserPermissionService","UserRoleService","UserService","WebClientProvisioner","AuthenticationInjectionKey","OAuth2InjectionToken","IdentityInjectionKey","ConfigInjectionKey","getAppOrigins","LoggerInjectionKey","MailInjectionKey","MailTemplateRendererInjectionKey","HTTPControllerModule","mount","router","container","realmController","createRealmController","roleController","createRoleController","permissionController","createPermissionController","permissionPolicyController","createPermissionPolicyController","clientController","createClientController","robotController","createRobotController","clientPermissionController","createClientPermissionController","clientRoleController","createClientRoleController","clientScopeController","createClientScopeController","robotPermissionController","createRobotPermissionController","robotRoleController","createRobotRoleController","roleAttributeController","createRoleAttributeController","rolePermissionController","createRolePermissionController","scopeController","createScopeController","userController","createUserController","userAttributeController","createUserAttributeController","userPermissionController","createUserPermissionController","userRoleController","createUserRoleController","policyController","createPolicyController","identityProviderRoleController","createIdentityProviderRoleController","use","controllers","createAuthorize","createToken","createJwkController","createOpenIDController","createActivateController","createPasswordForgotController","createPasswordResetController","createRegisterController","createStatusController","createIdentityProvider","config","resolve","accessTokenIssuer","AccessTokenIssuer","openIdTokenIssuer","OpenIDTokenIssuer","codeIssuer","AuthorizationCodeIssuer","codeRequestVerifier","AuthorizationCodeRequestVerifier","identityResolver","Resolver","options","baseURL","publicUrl","features","buildUIFeatures","sessionManager","SessionManager","codeVerifier","AuthorizationCodeVerifier","refreshTokenIssuer","RefreshTokenIssuer","tokenRevoker","TokenRevoker","tokenVerifier","TokenVerifier","identityProviderLdapCollectionAuthenticator","ProviderLdapCollectionAuthenticator","identityPermissionProvider","PermissionProvider","clientAuthenticator","robotAuthenticator","userAuthenticator","oauth2ClientAuthenticator","service","createRegistrationService","createPasswordRecoveryService","dataSource","DataSource","realmRepository","repository","mailClient","mailTemplateRenderer","passwordRecoveryEnabled","emailVerificationEnabled","registration","registrationEnabled","passwordRecovery","emailVerification","accountManager","ProviderAccountManager","stateManager","AuthorizationStateManager","realmRepositoryAdapter","roleRepository","rolePermissionRepository","policyRepository","permissionPolicyRepository","permissionProvider","checkerService","reservedNames","Set","getMetadata","columns","map","c","propertyName","getRepository","clientRepository","logger","webClientProvisioner","appOrigins","keyRepository"],"sources":["../../../../../src/app/modules/http/modules/controller.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'routup';\nimport { decorators } from '@routup/decorators';\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n ClientScope,\n Permission,\n PermissionPolicy,\n Realm,\n Robot,\n RobotPermission,\n RobotRole,\n Role,\n RoleAttribute,\n RolePermission,\n Scope,\n UserAttribute,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n IdentityProviderRepository,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyRepository,\n RealmEntity,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserAttributeEntity,\n UserEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n ClientScopeRepositoryAdapter,\n DatabaseInjectionKey,\n IdentityProviderRepositoryAdapter,\n IdentityProviderRoleMappingRepositoryAdapter,\n PermissionDatabaseProvider,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RobotPermissionRepositoryAdapter,\n RobotRepositoryAdapter,\n RobotRoleRepositoryAdapter,\n RoleAttributeRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n UserAttributeRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../../database/index.ts';\nimport {\n ClientController,\n ClientPermissionController,\n ClientRoleController,\n ClientScopeController, \n IdentityProviderController,\n IdentityProviderRoleMappingController,\n PermissionController,\n PermissionPolicyController,\n PolicyController,\n RealmController,\n RobotController,\n RobotPermissionController,\n RobotRoleController,\n RoleAttributeController,\n RoleController,\n RolePermissionController,\n ScopeController,\n UserAttributeController,\n UserController,\n UserPermissionController,\n UserRoleController,\n} from '../../../../adapters/http/index.ts';\nimport {\n ActivateController,\n AuthorizeController,\n JwkController,\n OpenIDController,\n PasswordForgotController,\n PasswordResetController,\n RegisterController,\n StatusController,\n TokenController,\n} from '../../../../adapters/http/controllers/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientAuthenticator,\n ClientPermissionService,\n ClientRoleService,\n ClientScopeService,\n ClientService,\n CredentialsAuthenticator,\n IdentityProviderRoleMappingService,\n OAuth2ClientAuthenticator,\n PasswordRecoveryService,\n PermissionCheckerService,\n PermissionPolicyService,\n PermissionService,\n PolicyCheckerService,\n PolicyService,\n RealmService,\n RegistrationService,\n RobotAuthenticator,\n RobotPermissionService,\n RobotRoleService,\n RobotService,\n RoleAttributeService,\n RolePermissionService,\n RoleService,\n ScopeService,\n UserAttributeService,\n UserAuthenticator,\n UserPermissionService,\n UserRoleService,\n UserService,\n WebClientProvisioner,\n} from '../../../../core/index.ts';\nimport { AuthenticationInjectionKey } from '../../authentication/index.ts';\nimport { OAuth2InjectionToken } from '../../oauth2/index.ts';\nimport { IdentityInjectionKey } from '../../identity/index.ts';\nimport type { StatusResponseFeatures } from '@authup/core-http-kit';\nimport type { Config } from '../../config/index.ts';\nimport { ConfigInjectionKey, getAppOrigins } from '../../config/index.ts';\nimport { LoggerInjectionKey } from '../../logger/index.ts';\nimport { MailInjectionKey, MailTemplateRendererInjectionKey } from '../../mail/index.ts';\n\nexport class HTTPControllerModule {\n async mount(router: App, container: IContainer): Promise<void> {\n const realmController = this.createRealmController(container);\n const roleController = this.createRoleController(container);\n const permissionController = await this.createPermissionController(container);\n const permissionPolicyController = this.createPermissionPolicyController(container);\n const clientController = this.createClientController(container);\n const robotController = this.createRobotController(container);\n const clientPermissionController = this.createClientPermissionController(container);\n const clientRoleController = this.createClientRoleController(container);\n const clientScopeController = this.createClientScopeController(container);\n const robotPermissionController = this.createRobotPermissionController(container);\n const robotRoleController = this.createRobotRoleController(container);\n const roleAttributeController = this.createRoleAttributeController(container);\n const rolePermissionController = this.createRolePermissionController(container);\n const scopeController = this.createScopeController(container);\n const userController = this.createUserController(container);\n const userAttributeController = this.createUserAttributeController(container);\n const userPermissionController = this.createUserPermissionController(container);\n const userRoleController = this.createUserRoleController(container);\n const policyController = this.createPolicyController(container);\n const identityProviderRoleController = this.createIdentityProviderRoleController(container);\n\n router.use(decorators({\n controllers: [\n this.createAuthorize(container),\n this.createToken(container),\n this.createJwkController(container),\n this.createOpenIDController(container),\n this.createActivateController(container),\n this.createPasswordForgotController(container),\n this.createPasswordResetController(container),\n this.createRegisterController(container),\n\n this.createStatusController(container),\n\n clientController,\n clientPermissionController,\n clientRoleController,\n clientScopeController,\n identityProviderRoleController,\n this.createIdentityProvider(container),\n permissionController,\n permissionPolicyController,\n policyController,\n robotController,\n robotPermissionController,\n robotRoleController,\n realmController,\n roleController,\n roleAttributeController,\n rolePermissionController,\n scopeController,\n userController,\n userAttributeController,\n userPermissionController,\n userRoleController,\n ],\n }));\n }\n\n // ----------------------------------------------------\n\n createAuthorize(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const openIdTokenIssuer = container.resolve(OAuth2InjectionToken.OpenIDTokenIssuer);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n\n return new AuthorizeController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n\n accessTokenIssuer,\n openIdTokenIssuer,\n\n codeIssuer,\n codeRequestVerifier,\n\n identityResolver,\n });\n }\n\n createToken(container: IContainer) {\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const codeVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeVerifier);\n\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const refreshTokenIssuer = container.resolve(OAuth2InjectionToken.RefreshTokenIssuer);\n\n const tokenRevoker = container.resolve(OAuth2InjectionToken.TokenRevoker);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n const identityProviderLdapCollectionAuthenticator = container.resolve(IdentityInjectionKey.ProviderLdapCollectionAuthenticator);\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n\n const clientAuthenticator = new ClientAuthenticator(identityResolver);\n const robotAuthenticator = new RobotAuthenticator(identityResolver);\n\n const userAuthenticator = new CredentialsAuthenticator([\n identityProviderLdapCollectionAuthenticator,\n new UserAuthenticator(identityResolver),\n ]);\n\n const oauth2ClientAuthenticator = new OAuth2ClientAuthenticator(identityResolver);\n\n return new TokenController({\n codeVerifier,\n\n accessTokenIssuer,\n refreshTokenIssuer,\n\n tokenVerifier,\n tokenRevoker,\n\n identityResolver,\n identityPermissionProvider,\n\n clientAuthenticator,\n robotAuthenticator,\n userAuthenticator,\n\n oauth2ClientAuthenticator,\n\n sessionManager,\n });\n }\n\n createOpenIDController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new OpenIDController({ baseURL: config.publicUrl });\n }\n\n createActivateController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new ActivateController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createPasswordForgotController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordForgotController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordResetController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordResetController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordRecoveryService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new PasswordRecoveryService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n passwordRecoveryEnabled: config.passwordRecoveryEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n },\n });\n }\n\n createRegisterController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new RegisterController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createStatusController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new StatusController({ options: { features: this.buildUIFeatures(config) } });\n }\n\n buildUIFeatures(config: Config) : StatusResponseFeatures {\n return {\n registration: config.registrationEnabled,\n passwordRecovery: config.passwordRecoveryEnabled,\n emailVerification: config.emailVerificationEnabled,\n };\n }\n\n createRegistrationService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new RegistrationService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n registrationEnabled: config.registrationEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n },\n });\n }\n\n createIdentityProvider(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const accountManager = container.resolve(IdentityInjectionKey.ProviderAccountManager);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const stateManager = container.resolve(OAuth2InjectionToken.AuthorizationStateManager);\n\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const repository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository,\n });\n\n return new IdentityProviderController({\n options: { baseURL: config.publicUrl },\n\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n\n accountManager,\n\n codeIssuer,\n codeRequestVerifier,\n stateManager,\n });\n }\n\n createClientController(container: IContainer) {\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new ClientService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new ClientController({\n service,\n repository, \n });\n }\n\n createRobotController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RobotRepositoryAdapter({\n repository: container.resolve<Repository<Robot>>(RobotEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new RobotService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new RobotController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n dataSource,\n });\n }\n\n async createPermissionController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository,\n });\n\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const rolePermissionRepository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const service = new PermissionService({\n repository,\n realmRepository: realmRepositoryAdapter,\n roleRepository,\n rolePermissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const permissionProvider = new PermissionDatabaseProvider(dataSource);\n\n const checkerService = new PermissionCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n permissionProvider,\n identityPermissionProvider,\n });\n\n return new PermissionController({\n service,\n checkerService,\n });\n }\n\n createRoleController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new RoleService({\n repository,\n realmRepository, \n });\n return new RoleController({ service });\n }\n\n createClientPermissionController(container: IContainer) {\n const repository = new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new ClientPermissionController({ service });\n }\n\n createClientRoleController(container: IContainer) {\n const repository = new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientRoleService({ repository, identityPermissionProvider });\n return new ClientRoleController({ service });\n }\n\n createClientScopeController(container: IContainer) {\n const repository = new ClientScopeRepositoryAdapter(\n container.resolve<Repository<ClientScope>>(ClientScopeEntity),\n );\n const service = new ClientScopeService({ repository });\n return new ClientScopeController({ service });\n }\n\n createRobotPermissionController(container: IContainer) {\n const repository = new RobotPermissionRepositoryAdapter(\n container.resolve<Repository<RobotPermission>>(RobotPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new RobotPermissionController({ service });\n }\n\n createRobotRoleController(container: IContainer) {\n const repository = new RobotRoleRepositoryAdapter(\n container.resolve<Repository<RobotRole>>(RobotRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotRoleService({ repository, identityPermissionProvider });\n return new RobotRoleController({ service });\n }\n\n createRoleAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RoleAttributeRepositoryAdapter(\n container.resolve<Repository<RoleAttribute>>(RoleAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName),\n );\n const service = new RoleAttributeService({ repository, reservedNames });\n return new RoleAttributeController({ service });\n }\n\n createRolePermissionController(container: IContainer) {\n const repository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RolePermissionService({\n repository,\n identityPermissionProvider, \n });\n return new RolePermissionController({ service });\n }\n\n createPermissionPolicyController(container: IContainer) {\n const repository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n const service = new PermissionPolicyService({ repository });\n return new PermissionPolicyController({ service });\n }\n\n createScopeController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new ScopeService({\n repository,\n realmRepository, \n });\n return new ScopeController({ service });\n }\n\n createUserController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new UserService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new UserController({ service });\n }\n\n createUserAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new UserAttributeRepositoryAdapter(\n container.resolve<Repository<UserAttribute>>(UserAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName),\n );\n const service = new UserAttributeService({ repository, reservedNames });\n return new UserAttributeController({ service });\n }\n\n createUserPermissionController(container: IContainer) {\n const repository = new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new UserPermissionController({ service });\n }\n\n createUserRoleController(container: IContainer) {\n const repository = new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserRoleService({ repository, identityPermissionProvider });\n return new UserRoleController({ service });\n }\n\n createPolicyController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new PolicyService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const checkerService = new PolicyCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider,\n });\n\n return new PolicyController({\n service,\n checkerService,\n });\n }\n\n createIdentityProviderRoleController(container: IContainer) {\n const repository = new IdentityProviderRoleMappingRepositoryAdapter(\n container.resolve<Repository<any>>(IdentityProviderRoleMappingEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new IdentityProviderRoleMappingService({ repository, identityPermissionProvider });\n return new IdentityProviderRoleMappingController({ service });\n }\n\n createJwkController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = dataSource.getRepository(KeyEntity);\n return new JwkController({ repository });\n }\n\n createRealmController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RealmRepositoryAdapter(realmRepository);\n\n const clientRepository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const logger = container.resolve(LoggerInjectionKey);\n const webClientProvisioner = new WebClientProvisioner({\n clientRepository,\n appOrigins: getAppOrigins(config),\n logger,\n });\n\n const service = new RealmService({\n repository, \n webClientProvisioner, \n logger, \n });\n const keyRepository = dataSource.getRepository(KeyEntity);\n\n return new RealmController({\n options: { baseURL: config.publicUrl },\n service,\n keyRepository,\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"controller.mjs","names":["decorators","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","IdentityProviderRepository","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyRepository","RealmEntity","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserAttributeEntity","UserEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","ClientScopeRepositoryAdapter","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","IdentityProviderRoleMappingRepositoryAdapter","PermissionDatabaseProvider","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RobotPermissionRepositoryAdapter","RobotRepositoryAdapter","RobotRoleRepositoryAdapter","RoleAttributeRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","UserAttributeRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","ClientController","ClientPermissionController","ClientRoleController","ClientScopeController","IdentityProviderController","IdentityProviderRoleMappingController","PermissionController","PermissionPolicyController","PolicyController","RealmController","RobotController","RobotPermissionController","RobotRoleController","RoleAttributeController","RoleController","RolePermissionController","ScopeController","UserAttributeController","UserController","UserPermissionController","UserRoleController","ActivateController","AuthorizeController","JwkController","OpenIDController","PasswordForgotController","PasswordResetController","RegisterController","StatusController","TokenController","ClientAuthenticator","ClientPermissionService","ClientRoleService","ClientScopeService","ClientService","CredentialsAuthenticator","IdentityProviderRoleMappingService","OAuth2ClientAuthenticator","PasswordRecoveryService","PermissionCheckerService","PermissionPolicyService","PermissionService","PolicyCheckerService","PolicyService","RealmService","RegistrationService","RobotAuthenticator","RobotPermissionService","RobotRoleService","RobotService","RoleAttributeService","RolePermissionService","RoleService","ScopeService","UserAttributeService","UserAuthenticator","UserPermissionService","UserRoleService","UserService","WebClientProvisioner","AuthenticationInjectionKey","OAuth2InjectionToken","IdentityInjectionKey","ConfigInjectionKey","getAppOrigins","LoggerInjectionKey","MailInjectionKey","MailTemplateRendererInjectionKey","HTTPControllerModule","mount","router","container","realmController","createRealmController","roleController","createRoleController","permissionController","createPermissionController","permissionPolicyController","createPermissionPolicyController","clientController","createClientController","robotController","createRobotController","clientPermissionController","createClientPermissionController","clientRoleController","createClientRoleController","clientScopeController","createClientScopeController","robotPermissionController","createRobotPermissionController","robotRoleController","createRobotRoleController","roleAttributeController","createRoleAttributeController","rolePermissionController","createRolePermissionController","scopeController","createScopeController","userController","createUserController","userAttributeController","createUserAttributeController","userPermissionController","createUserPermissionController","userRoleController","createUserRoleController","policyController","createPolicyController","identityProviderRoleController","createIdentityProviderRoleController","use","controllers","createAuthorize","createToken","createJwkController","createOpenIDController","createActivateController","createPasswordForgotController","createPasswordResetController","createRegisterController","createStatusController","createIdentityProvider","config","resolve","accessTokenIssuer","AccessTokenIssuer","openIdTokenIssuer","OpenIDTokenIssuer","codeIssuer","AuthorizationCodeIssuer","codeRequestVerifier","AuthorizationCodeRequestVerifier","identityResolver","Resolver","options","baseURL","publicUrl","features","buildUIFeatures","sessionManager","SessionManager","codeVerifier","AuthorizationCodeVerifier","refreshTokenIssuer","RefreshTokenIssuer","tokenRevoker","TokenRevoker","tokenVerifier","TokenVerifier","identityProviderLdapCollectionAuthenticator","ProviderLdapCollectionAuthenticator","identityPermissionProvider","PermissionProvider","clientAuthenticator","robotAuthenticator","userAuthenticator","oauth2ClientAuthenticator","realmRepository","service","createRegistrationService","createPasswordRecoveryService","dataSource","DataSource","repository","mailClient","mailTemplateRenderer","passwordRecoveryEnabled","emailVerificationEnabled","registration","registrationEnabled","passwordRecovery","emailVerification","accountManager","ProviderAccountManager","stateManager","AuthorizationStateManager","realmRepositoryAdapter","createPermissionRepository","createRoleRepository","roleRepository","rolePermissionRepository","policyRepository","permissionPolicyRepository","permissionProvider","checkerService","permissionRepository","reservedNames","Set","getMetadata","columns","map","c","propertyName","getRepository","clientRepository","logger","webClientProvisioner","appOrigins","keyRepository"],"sources":["../../../../../src/app/modules/http/modules/controller.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'routup';\nimport { decorators } from '@routup/decorators';\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n ClientScope,\n Permission,\n PermissionPolicy,\n Realm,\n Robot,\n RobotPermission,\n RobotRole,\n Role,\n RoleAttribute,\n RolePermission,\n Scope,\n UserAttribute,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n IdentityProviderRepository,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyRepository,\n RealmEntity,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserAttributeEntity,\n UserEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n ClientScopeRepositoryAdapter,\n DatabaseInjectionKey,\n IdentityProviderRepositoryAdapter,\n IdentityProviderRoleMappingRepositoryAdapter,\n PermissionDatabaseProvider,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RobotPermissionRepositoryAdapter,\n RobotRepositoryAdapter,\n RobotRoleRepositoryAdapter,\n RoleAttributeRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n UserAttributeRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../../database/index.ts';\nimport {\n ClientController,\n ClientPermissionController,\n ClientRoleController,\n ClientScopeController, \n IdentityProviderController,\n IdentityProviderRoleMappingController,\n PermissionController,\n PermissionPolicyController,\n PolicyController,\n RealmController,\n RobotController,\n RobotPermissionController,\n RobotRoleController,\n RoleAttributeController,\n RoleController,\n RolePermissionController,\n ScopeController,\n UserAttributeController,\n UserController,\n UserPermissionController,\n UserRoleController,\n} from '../../../../adapters/http/index.ts';\nimport {\n ActivateController,\n AuthorizeController,\n JwkController,\n OpenIDController,\n PasswordForgotController,\n PasswordResetController,\n RegisterController,\n StatusController,\n TokenController,\n} from '../../../../adapters/http/controllers/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientAuthenticator,\n ClientPermissionService,\n ClientRoleService,\n ClientScopeService,\n ClientService,\n CredentialsAuthenticator,\n IdentityProviderRoleMappingService,\n OAuth2ClientAuthenticator,\n PasswordRecoveryService,\n PermissionCheckerService,\n PermissionPolicyService,\n PermissionService,\n PolicyCheckerService,\n PolicyService,\n RealmService,\n RegistrationService,\n RobotAuthenticator,\n RobotPermissionService,\n RobotRoleService,\n RobotService,\n RoleAttributeService,\n RolePermissionService,\n RoleService,\n ScopeService,\n UserAttributeService,\n UserAuthenticator,\n UserPermissionService,\n UserRoleService,\n UserService,\n WebClientProvisioner,\n} from '../../../../core/index.ts';\nimport { AuthenticationInjectionKey } from '../../authentication/index.ts';\nimport { OAuth2InjectionToken } from '../../oauth2/index.ts';\nimport { IdentityInjectionKey } from '../../identity/index.ts';\nimport type { StatusResponseFeatures } from '@authup/core-http-kit';\nimport type { Config } from '../../config/index.ts';\nimport { ConfigInjectionKey, getAppOrigins } from '../../config/index.ts';\nimport { LoggerInjectionKey } from '../../logger/index.ts';\nimport { MailInjectionKey, MailTemplateRendererInjectionKey } from '../../mail/index.ts';\n\nexport class HTTPControllerModule {\n async mount(router: App, container: IContainer): Promise<void> {\n const realmController = this.createRealmController(container);\n const roleController = this.createRoleController(container);\n const permissionController = await this.createPermissionController(container);\n const permissionPolicyController = this.createPermissionPolicyController(container);\n const clientController = this.createClientController(container);\n const robotController = this.createRobotController(container);\n const clientPermissionController = this.createClientPermissionController(container);\n const clientRoleController = this.createClientRoleController(container);\n const clientScopeController = this.createClientScopeController(container);\n const robotPermissionController = this.createRobotPermissionController(container);\n const robotRoleController = this.createRobotRoleController(container);\n const roleAttributeController = this.createRoleAttributeController(container);\n const rolePermissionController = this.createRolePermissionController(container);\n const scopeController = this.createScopeController(container);\n const userController = this.createUserController(container);\n const userAttributeController = this.createUserAttributeController(container);\n const userPermissionController = this.createUserPermissionController(container);\n const userRoleController = this.createUserRoleController(container);\n const policyController = this.createPolicyController(container);\n const identityProviderRoleController = this.createIdentityProviderRoleController(container);\n\n router.use(decorators({\n controllers: [\n this.createAuthorize(container),\n this.createToken(container),\n this.createJwkController(container),\n this.createOpenIDController(container),\n this.createActivateController(container),\n this.createPasswordForgotController(container),\n this.createPasswordResetController(container),\n this.createRegisterController(container),\n\n this.createStatusController(container),\n\n clientController,\n clientPermissionController,\n clientRoleController,\n clientScopeController,\n identityProviderRoleController,\n this.createIdentityProvider(container),\n permissionController,\n permissionPolicyController,\n policyController,\n robotController,\n robotPermissionController,\n robotRoleController,\n realmController,\n roleController,\n roleAttributeController,\n rolePermissionController,\n scopeController,\n userController,\n userAttributeController,\n userPermissionController,\n userRoleController,\n ],\n }));\n }\n\n // ----------------------------------------------------\n\n createAuthorize(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const openIdTokenIssuer = container.resolve(OAuth2InjectionToken.OpenIDTokenIssuer);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n\n return new AuthorizeController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n\n accessTokenIssuer,\n openIdTokenIssuer,\n\n codeIssuer,\n codeRequestVerifier,\n\n identityResolver,\n });\n }\n\n createToken(container: IContainer) {\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const codeVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeVerifier);\n\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const refreshTokenIssuer = container.resolve(OAuth2InjectionToken.RefreshTokenIssuer);\n\n const tokenRevoker = container.resolve(OAuth2InjectionToken.TokenRevoker);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n const identityProviderLdapCollectionAuthenticator = container.resolve(IdentityInjectionKey.ProviderLdapCollectionAuthenticator);\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n\n const clientAuthenticator = new ClientAuthenticator(identityResolver);\n const robotAuthenticator = new RobotAuthenticator(identityResolver);\n\n const userAuthenticator = new CredentialsAuthenticator([\n identityProviderLdapCollectionAuthenticator,\n new UserAuthenticator(identityResolver),\n ]);\n\n const oauth2ClientAuthenticator = new OAuth2ClientAuthenticator(identityResolver);\n\n return new TokenController({\n codeVerifier,\n\n accessTokenIssuer,\n refreshTokenIssuer,\n\n tokenVerifier,\n tokenRevoker,\n\n identityResolver,\n identityPermissionProvider,\n\n clientAuthenticator,\n robotAuthenticator,\n userAuthenticator,\n\n oauth2ClientAuthenticator,\n\n realmRepository: new RealmRepositoryAdapter(container.resolve<Repository<Realm>>(RealmEntity)),\n\n sessionManager,\n });\n }\n\n createOpenIDController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new OpenIDController({ baseURL: config.publicUrl });\n }\n\n createActivateController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new ActivateController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createPasswordForgotController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordForgotController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordResetController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordResetController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordRecoveryService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new PasswordRecoveryService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n passwordRecoveryEnabled: config.passwordRecoveryEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n },\n });\n }\n\n createRegisterController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new RegisterController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createStatusController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new StatusController({ options: { features: this.buildUIFeatures(config) } });\n }\n\n buildUIFeatures(config: Config) : StatusResponseFeatures {\n return {\n registration: config.registrationEnabled,\n passwordRecovery: config.passwordRecoveryEnabled,\n emailVerification: config.emailVerificationEnabled,\n };\n }\n\n createRegistrationService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new RegistrationService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n registrationEnabled: config.registrationEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n },\n });\n }\n\n createIdentityProvider(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const accountManager = container.resolve(IdentityInjectionKey.ProviderAccountManager);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const stateManager = container.resolve(OAuth2InjectionToken.AuthorizationStateManager);\n\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const repository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository,\n });\n\n return new IdentityProviderController({\n options: { baseURL: config.publicUrl },\n\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n\n accountManager,\n\n codeIssuer,\n codeRequestVerifier,\n stateManager,\n });\n }\n\n createClientController(container: IContainer) {\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new ClientService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new ClientController({\n service,\n repository, \n });\n }\n\n createRobotController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RobotRepositoryAdapter({\n repository: container.resolve<Repository<Robot>>(RobotEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new RobotService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new RobotController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n dataSource,\n });\n }\n\n private createPermissionRepository(container: IContainer): PermissionRepositoryAdapter {\n return new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n }\n\n private createRoleRepository(container: IContainer): RoleRepositoryAdapter {\n return new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n }\n\n async createPermissionController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository,\n });\n\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const rolePermissionRepository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const service = new PermissionService({\n repository,\n realmRepository: realmRepositoryAdapter,\n roleRepository,\n rolePermissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const permissionProvider = new PermissionDatabaseProvider(dataSource);\n\n const checkerService = new PermissionCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n permissionProvider,\n identityPermissionProvider,\n });\n\n return new PermissionController({\n service,\n checkerService,\n });\n }\n\n createRoleController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new RoleService({\n repository,\n realmRepository, \n });\n return new RoleController({ service });\n }\n\n createClientPermissionController(container: IContainer) {\n const repository = new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientPermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new ClientPermissionController({ service });\n }\n\n createClientRoleController(container: IContainer) {\n const repository = new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientRoleService({ repository, identityPermissionProvider });\n return new ClientRoleController({ service });\n }\n\n createClientScopeController(container: IContainer) {\n const repository = new ClientScopeRepositoryAdapter(\n container.resolve<Repository<ClientScope>>(ClientScopeEntity),\n );\n const service = new ClientScopeService({ repository });\n return new ClientScopeController({ service });\n }\n\n createRobotPermissionController(container: IContainer) {\n const repository = new RobotPermissionRepositoryAdapter(\n container.resolve<Repository<RobotPermission>>(RobotPermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotPermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new RobotPermissionController({ service });\n }\n\n createRobotRoleController(container: IContainer) {\n const repository = new RobotRoleRepositoryAdapter(\n container.resolve<Repository<RobotRole>>(RobotRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotRoleService({ repository, identityPermissionProvider });\n return new RobotRoleController({ service });\n }\n\n createRoleAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RoleAttributeRepositoryAdapter(\n container.resolve<Repository<RoleAttribute>>(RoleAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName),\n );\n const service = new RoleAttributeService({ repository, reservedNames });\n return new RoleAttributeController({ service });\n }\n\n createRolePermissionController(container: IContainer) {\n const repository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RolePermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new RolePermissionController({ service });\n }\n\n createPermissionPolicyController(container: IContainer) {\n const repository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n const service = new PermissionPolicyService({ repository });\n return new PermissionPolicyController({ service });\n }\n\n createScopeController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new ScopeService({\n repository,\n realmRepository, \n });\n return new ScopeController({ service });\n }\n\n createUserController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new UserService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new UserController({ service });\n }\n\n createUserAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new UserAttributeRepositoryAdapter(\n container.resolve<Repository<UserAttribute>>(UserAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName),\n );\n const service = new UserAttributeService({ repository, reservedNames });\n return new UserAttributeController({ service });\n }\n\n createUserPermissionController(container: IContainer) {\n const repository = new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserPermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new UserPermissionController({ service });\n }\n\n createUserRoleController(container: IContainer) {\n const repository = new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserRoleService({ repository, identityPermissionProvider });\n return new UserRoleController({ service });\n }\n\n createPolicyController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new PolicyService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const checkerService = new PolicyCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider,\n });\n\n return new PolicyController({\n service,\n checkerService,\n });\n }\n\n createIdentityProviderRoleController(container: IContainer) {\n const repository = new IdentityProviderRoleMappingRepositoryAdapter(\n container.resolve<Repository<any>>(IdentityProviderRoleMappingEntity),\n );\n const roleRepository = this.createRoleRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new IdentityProviderRoleMappingService({\n repository, \n roleRepository, \n identityPermissionProvider, \n });\n return new IdentityProviderRoleMappingController({ service });\n }\n\n createJwkController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = dataSource.getRepository(KeyEntity);\n return new JwkController({ repository });\n }\n\n createRealmController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RealmRepositoryAdapter(realmRepository);\n\n const clientRepository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const logger = container.resolve(LoggerInjectionKey);\n const webClientProvisioner = new WebClientProvisioner({\n clientRepository,\n appOrigins: getAppOrigins(config),\n logger,\n });\n\n const service = new RealmService({\n repository, \n webClientProvisioner, \n logger, \n });\n const keyRepository = dataSource.getRepository(KeyEntity);\n\n return new RealmController({\n options: { baseURL: config.publicUrl },\n service,\n keyRepository,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -28,9 +28,9 @@ var ClientIdentityRepository = class {
|
|
|
28
28
|
const isId = isUUID(key);
|
|
29
29
|
if (isId) query.where("client.id = :id", { id: key });
|
|
30
30
|
else {
|
|
31
|
-
query.where("client.name = :name", { name: key });
|
|
31
|
+
query.where("client.name = :name", { name: key.trim().toLowerCase() });
|
|
32
32
|
if (realmKey) if (isUUID(realmKey)) query.andWhere("client.realm_id = :realmId", { realmId: realmKey });
|
|
33
|
-
else query.andWhere("realm.name = :realmName", { realmName: realmKey });
|
|
33
|
+
else query.andWhere("realm.name = :realmName", { realmName: realmKey.trim().toLowerCase() });
|
|
34
34
|
}
|
|
35
35
|
const { columns } = this.repository.metadata;
|
|
36
36
|
for (const column of columns) if (!column.isSelect) query.addSelect(`client.${column.databaseName}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.mjs","names":["buildRedisKeyPath","isUUID","CachePrefix","ClientIdentityRepository","repository","findOneById","id","find","findOneByName","realm","findOneByIdOrName","idOrName","findOneBy","where","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","isId","name","andWhere","realmId","realmName","columns","metadata","column","isSelect","addSelect","databaseName","cache","prefix","CLIENT","getOne"],"sources":["../../../../../src/app/modules/identity/repositories/client.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Client } from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport type { IClientIdentityRepository } from '../../../../core/index.ts';\nimport { CachePrefix } from '../../../../adapters/database/domains/index.ts';\n\nexport class ClientIdentityRepository implements IClientIdentityRepository {\n private readonly repository: Repository<Client>;\n\n constructor(repository: Repository<Client>) {\n this.repository = repository;\n }\n\n async findOneById(id: string): Promise<Client | null> {\n return this.find(id);\n }\n\n async findOneByName(id: string, realm?: string): Promise<Client | null> {\n return this.find(id, realm);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Client | null> {\n return this.find(idOrName, realm);\n }\n\n async findOneBy(where: Record<string, any>): Promise<Client | null> {\n return this.repository.findOneBy(where);\n }\n\n private async find(key: string, realmKey?: string) : Promise<Client | null> {\n const query = this.repository.createQueryBuilder('client')\n .leftJoinAndSelect('client.realm', 'realm');\n\n const isId = isUUID(key);\n if (isId) {\n query.where('client.id = :id', { id: key });\n } else {\n query.where('client.name = :name', { name: key });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('client.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey });\n }\n }\n }\n const { columns } = this.repository.metadata;\n for (const column of columns) {\n if (!column.isSelect) {\n query.addSelect(`client.${column.databaseName}`);\n }\n }\n\n if (isId) {\n query.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.CLIENT,\n key,\n }),\n 60_000,\n );\n }\n\n return query.getOne();\n }\n}\n"],"mappings":";;;;;;;;AAcA,IAAaG,2BAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAgC;EACxC,KAAKA,aAAaA;CACtB;CAEA,MAAMC,YAAYC,IAAoC;EAClD,OAAO,KAAKC,KAAKD,EAAAA;CACrB;CAEA,MAAME,cAAcF,IAAYG,OAAwC;EACpE,OAAO,KAAKF,KAAKD,IAAIG,KAAAA;CACzB;CAEA,MAAMC,kBAAkBC,UAAkBF,OAAwC;EAC9E,OAAO,KAAKF,KAAKI,UAAUF,KAAAA;CAC/B;CAEA,MAAMG,UAAUC,OAAoD;EAChE,OAAO,KAAKT,WAAWQ,UAAUC,KAAAA;CACrC;CAEA,MAAcN,KAAKO,KAAaC,UAA4C;EACxE,MAAMC,QAAQ,KAAKZ,WAAWa,mBAAmB,QAAA,CAAA,CAC5CC,kBAAkB,gBAAgB,OAAA;EAEvC,MAAMC,OAAOlB,OAAOa,GAAAA;EACpB,IAAIK,MACAH,MAAMH,MAAM,mBAAmB,EAAEP,IAAIQ,IAAI,CAAA;OACtC;GACHE,MAAMH,MAAM,uBAAuB,EAAEO,MAAMN,
|
|
1
|
+
{"version":3,"file":"client.mjs","names":["buildRedisKeyPath","isUUID","CachePrefix","ClientIdentityRepository","repository","findOneById","id","find","findOneByName","realm","findOneByIdOrName","idOrName","findOneBy","where","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","isId","name","trim","toLowerCase","andWhere","realmId","realmName","columns","metadata","column","isSelect","addSelect","databaseName","cache","prefix","CLIENT","getOne"],"sources":["../../../../../src/app/modules/identity/repositories/client.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Client } from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport type { IClientIdentityRepository } from '../../../../core/index.ts';\nimport { CachePrefix } from '../../../../adapters/database/domains/index.ts';\n\nexport class ClientIdentityRepository implements IClientIdentityRepository {\n private readonly repository: Repository<Client>;\n\n constructor(repository: Repository<Client>) {\n this.repository = repository;\n }\n\n async findOneById(id: string): Promise<Client | null> {\n return this.find(id);\n }\n\n async findOneByName(id: string, realm?: string): Promise<Client | null> {\n return this.find(id, realm);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Client | null> {\n return this.find(idOrName, realm);\n }\n\n async findOneBy(where: Record<string, any>): Promise<Client | null> {\n return this.repository.findOneBy(where);\n }\n\n private async find(key: string, realmKey?: string) : Promise<Client | null> {\n const query = this.repository.createQueryBuilder('client')\n .leftJoinAndSelect('client.realm', 'realm');\n\n const isId = isUUID(key);\n if (isId) {\n query.where('client.id = :id', { id: key });\n } else {\n query.where('client.name = :name', { name: key.trim().toLowerCase() });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('client.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey.trim().toLowerCase() });\n }\n }\n }\n const { columns } = this.repository.metadata;\n for (const column of columns) {\n if (!column.isSelect) {\n query.addSelect(`client.${column.databaseName}`);\n }\n }\n\n if (isId) {\n query.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.CLIENT,\n key,\n }),\n 60_000,\n );\n }\n\n return query.getOne();\n }\n}\n"],"mappings":";;;;;;;;AAcA,IAAaG,2BAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAgC;EACxC,KAAKA,aAAaA;CACtB;CAEA,MAAMC,YAAYC,IAAoC;EAClD,OAAO,KAAKC,KAAKD,EAAAA;CACrB;CAEA,MAAME,cAAcF,IAAYG,OAAwC;EACpE,OAAO,KAAKF,KAAKD,IAAIG,KAAAA;CACzB;CAEA,MAAMC,kBAAkBC,UAAkBF,OAAwC;EAC9E,OAAO,KAAKF,KAAKI,UAAUF,KAAAA;CAC/B;CAEA,MAAMG,UAAUC,OAAoD;EAChE,OAAO,KAAKT,WAAWQ,UAAUC,KAAAA;CACrC;CAEA,MAAcN,KAAKO,KAAaC,UAA4C;EACxE,MAAMC,QAAQ,KAAKZ,WAAWa,mBAAmB,QAAA,CAAA,CAC5CC,kBAAkB,gBAAgB,OAAA;EAEvC,MAAMC,OAAOlB,OAAOa,GAAAA;EACpB,IAAIK,MACAH,MAAMH,MAAM,mBAAmB,EAAEP,IAAIQ,IAAI,CAAA;OACtC;GACHE,MAAMH,MAAM,uBAAuB,EAAEO,MAAMN,IAAIO,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;GAEpE,IAAIP,UACA,IAAId,OAAOc,QAAAA,GACPC,MAAMO,SAAS,8BAA8B,EAAEC,SAAST,SAAS,CAAA;QAEjEC,MAAMO,SAAS,2BAA2B,EAAEE,WAAWV,SAASM,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;EAGjG;EACA,MAAM,EAAEI,YAAY,KAAKtB,WAAWuB;EACpC,KAAK,MAAMC,UAAUF,SACjB,IAAI,CAACE,OAAOC,UACRb,MAAMc,UAAU,UAAUF,OAAOG,cAAc;EAIvD,IAAIZ,MACAH,MAAMgB,MACFhC,kBAAkB;GACdiC,QAAQ/B,YAAYgC;GACpBpB;EACJ,CAAA,GACA,GAAA;EAIR,OAAOE,MAAMmB,OAAM;CACvB;AACJ"}
|
|
@@ -28,9 +28,9 @@ var RobotIdentityRepository = class {
|
|
|
28
28
|
const isId = isUUID(key);
|
|
29
29
|
if (isId) query.where("robot.id = :id", { id: key });
|
|
30
30
|
else {
|
|
31
|
-
query.where("robot.name = :name", { name: key });
|
|
31
|
+
query.where("robot.name = :name", { name: key.trim().toLowerCase() });
|
|
32
32
|
if (realmKey) if (isUUID(realmKey)) query.andWhere("robot.realm_id = :realmId", { realmId: realmKey });
|
|
33
|
-
else query.andWhere("realm.name = :realmName", { realmName: realmKey });
|
|
33
|
+
else query.andWhere("realm.name = :realmName", { realmName: realmKey.trim().toLowerCase() });
|
|
34
34
|
}
|
|
35
35
|
const { columns } = this.repository.metadata;
|
|
36
36
|
for (const column of columns) if (!column.isSelect) query.addSelect(`robot.${column.databaseName}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robot.mjs","names":["buildRedisKeyPath","isUUID","CachePrefix","RobotIdentityRepository","repository","findOneById","id","find","findOneByName","realm","findOneByIdOrName","idOrName","findOneBy","where","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","isId","name","andWhere","realmId","realmName","columns","metadata","column","isSelect","addSelect","databaseName","cache","prefix","ROBOT","getOne"],"sources":["../../../../../src/app/modules/identity/repositories/robot.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Robot } from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport type { IRobotIdentityRepository } from '../../../../core/index.ts';\nimport { CachePrefix } from '../../../../adapters/database/domains/index.ts';\n\nexport class RobotIdentityRepository implements IRobotIdentityRepository {\n private readonly repository: Repository<Robot>;\n\n constructor(repository: Repository<Robot>) {\n this.repository = repository;\n }\n\n async findOneById(id: string): Promise<Robot | null> {\n return this.find(id);\n }\n\n async findOneByName(id: string, realm?: string): Promise<Robot | null> {\n return this.find(id, realm);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Robot | null> {\n return this.find(idOrName, realm);\n }\n\n async findOneBy(where: Record<string, any>): Promise<Robot | null> {\n return this.repository.findOneBy(where);\n }\n\n private async find(key: string, realmKey?: string) : Promise<Robot | null> {\n const query = this.repository.createQueryBuilder('robot')\n .leftJoinAndSelect('robot.realm', 'realm');\n\n const isId = isUUID(key);\n if (isId) {\n query.where('robot.id = :id', { id: key });\n } else {\n query.where('robot.name = :name', { name: key });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('robot.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey });\n }\n }\n }\n\n const { columns } = this.repository.metadata;\n for (const column of columns) {\n if (!column.isSelect) {\n query.addSelect(`robot.${column.databaseName}`);\n }\n }\n\n if (isId) {\n query.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.ROBOT,\n key,\n }),\n 60_000,\n );\n }\n\n return query.getOne();\n }\n}\n"],"mappings":";;;;;;;;AAcA,IAAaG,0BAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA+B;EACvC,KAAKA,aAAaA;CACtB;CAEA,MAAMC,YAAYC,IAAmC;EACjD,OAAO,KAAKC,KAAKD,EAAAA;CACrB;CAEA,MAAME,cAAcF,IAAYG,OAAuC;EACnE,OAAO,KAAKF,KAAKD,IAAIG,KAAAA;CACzB;CAEA,MAAMC,kBAAkBC,UAAkBF,OAAuC;EAC7E,OAAO,KAAKF,KAAKI,UAAUF,KAAAA;CAC/B;CAEA,MAAMG,UAAUC,OAAmD;EAC/D,OAAO,KAAKT,WAAWQ,UAAUC,KAAAA;CACrC;CAEA,MAAcN,KAAKO,KAAaC,UAA2C;EACvE,MAAMC,QAAQ,KAAKZ,WAAWa,mBAAmB,OAAA,CAAA,CAC5CC,kBAAkB,eAAe,OAAA;EAEtC,MAAMC,OAAOlB,OAAOa,GAAAA;EACpB,IAAIK,MACAH,MAAMH,MAAM,kBAAkB,EAAEP,IAAIQ,IAAI,CAAA;OACrC;GACHE,MAAMH,MAAM,sBAAsB,EAAEO,MAAMN,
|
|
1
|
+
{"version":3,"file":"robot.mjs","names":["buildRedisKeyPath","isUUID","CachePrefix","RobotIdentityRepository","repository","findOneById","id","find","findOneByName","realm","findOneByIdOrName","idOrName","findOneBy","where","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","isId","name","trim","toLowerCase","andWhere","realmId","realmName","columns","metadata","column","isSelect","addSelect","databaseName","cache","prefix","ROBOT","getOne"],"sources":["../../../../../src/app/modules/identity/repositories/robot.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Robot } from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport type { IRobotIdentityRepository } from '../../../../core/index.ts';\nimport { CachePrefix } from '../../../../adapters/database/domains/index.ts';\n\nexport class RobotIdentityRepository implements IRobotIdentityRepository {\n private readonly repository: Repository<Robot>;\n\n constructor(repository: Repository<Robot>) {\n this.repository = repository;\n }\n\n async findOneById(id: string): Promise<Robot | null> {\n return this.find(id);\n }\n\n async findOneByName(id: string, realm?: string): Promise<Robot | null> {\n return this.find(id, realm);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Robot | null> {\n return this.find(idOrName, realm);\n }\n\n async findOneBy(where: Record<string, any>): Promise<Robot | null> {\n return this.repository.findOneBy(where);\n }\n\n private async find(key: string, realmKey?: string) : Promise<Robot | null> {\n const query = this.repository.createQueryBuilder('robot')\n .leftJoinAndSelect('robot.realm', 'realm');\n\n const isId = isUUID(key);\n if (isId) {\n query.where('robot.id = :id', { id: key });\n } else {\n query.where('robot.name = :name', { name: key.trim().toLowerCase() });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('robot.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey.trim().toLowerCase() });\n }\n }\n }\n\n const { columns } = this.repository.metadata;\n for (const column of columns) {\n if (!column.isSelect) {\n query.addSelect(`robot.${column.databaseName}`);\n }\n }\n\n if (isId) {\n query.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.ROBOT,\n key,\n }),\n 60_000,\n );\n }\n\n return query.getOne();\n }\n}\n"],"mappings":";;;;;;;;AAcA,IAAaG,0BAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA+B;EACvC,KAAKA,aAAaA;CACtB;CAEA,MAAMC,YAAYC,IAAmC;EACjD,OAAO,KAAKC,KAAKD,EAAAA;CACrB;CAEA,MAAME,cAAcF,IAAYG,OAAuC;EACnE,OAAO,KAAKF,KAAKD,IAAIG,KAAAA;CACzB;CAEA,MAAMC,kBAAkBC,UAAkBF,OAAuC;EAC7E,OAAO,KAAKF,KAAKI,UAAUF,KAAAA;CAC/B;CAEA,MAAMG,UAAUC,OAAmD;EAC/D,OAAO,KAAKT,WAAWQ,UAAUC,KAAAA;CACrC;CAEA,MAAcN,KAAKO,KAAaC,UAA2C;EACvE,MAAMC,QAAQ,KAAKZ,WAAWa,mBAAmB,OAAA,CAAA,CAC5CC,kBAAkB,eAAe,OAAA;EAEtC,MAAMC,OAAOlB,OAAOa,GAAAA;EACpB,IAAIK,MACAH,MAAMH,MAAM,kBAAkB,EAAEP,IAAIQ,IAAI,CAAA;OACrC;GACHE,MAAMH,MAAM,sBAAsB,EAAEO,MAAMN,IAAIO,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;GAEnE,IAAIP,UACA,IAAId,OAAOc,QAAAA,GACPC,MAAMO,SAAS,6BAA6B,EAAEC,SAAST,SAAS,CAAA;QAEhEC,MAAMO,SAAS,2BAA2B,EAAEE,WAAWV,SAASM,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;EAGjG;EAEA,MAAM,EAAEI,YAAY,KAAKtB,WAAWuB;EACpC,KAAK,MAAMC,UAAUF,SACjB,IAAI,CAACE,OAAOC,UACRb,MAAMc,UAAU,SAASF,OAAOG,cAAc;EAItD,IAAIZ,MACAH,MAAMgB,MACFhC,kBAAkB;GACdiC,QAAQ/B,YAAYgC;GACpBpB;EACJ,CAAA,GACA,GAAA;EAIR,OAAOE,MAAMmB,OAAM;CACvB;AACJ"}
|
|
@@ -35,9 +35,9 @@ var UserIdentityRepository = class {
|
|
|
35
35
|
const isId = isUUID(key);
|
|
36
36
|
if (isId) query.where("user.id = :id", { id: key });
|
|
37
37
|
else {
|
|
38
|
-
query.where("user.name = :name", { name: key });
|
|
38
|
+
query.where("user.name = :name", { name: key.trim().toLowerCase() });
|
|
39
39
|
if (realmKey) if (isUUID(realmKey)) query.andWhere("user.realm_id = :realmId", { realmId: realmKey });
|
|
40
|
-
else query.andWhere("realm.name = :realmName", { realmName: realmKey });
|
|
40
|
+
else query.andWhere("realm.name = :realmName", { realmName: realmKey.trim().toLowerCase() });
|
|
41
41
|
}
|
|
42
42
|
const { columns } = this.repository.metadata;
|
|
43
43
|
for (const column of columns) if (!column.isSelect) query.addSelect(`user.${column.databaseName}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.mjs","names":["isUUID","buildRedisKeyPath","In","IdentityProviderMapperOperation","CachePrefix","UserIdentityRepository","repository","userPermissionRepository","userRoleRepository","ctx","findOneById","id","find","findOneByName","realm","findOneByIdOrName","idOrName","findOneBy","where","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","isId","name","andWhere","realmId","realmName","columns","metadata","column","isSelect","addSelect","databaseName","cache","prefix","USER","entity","getOne","extendOneWithEA","saveOneWithEA","user","extraAttributes","create","savePermissions","items","ids","map","item","value","idsToDelete","filter","operation","DELETE","entities","findBy","user_id","permission_id","entitiesToDelete","index","indexOf","push","length","remove","entitiesToCreate","CREATE","findIndex","user_realm_id","realm_id","permission_realm_id","save","saveRoles","role_id","role_realm_id"],"sources":["../../../../../src/app/modules/identity/repositories/user.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { User, UserPermission, UserRole } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport type { Repository } from 'typeorm';\nimport { In } from 'typeorm';\nimport type { IUserIdentityRepository, IdentityProviderMapperElement } from '../../../../core/index.ts';\nimport { IdentityProviderMapperOperation } from '../../../../core/index.ts';\nimport type { UserRepository } from '../../../../adapters/database/domains/index.ts';\nimport { CachePrefix } from '../../../../adapters/database/domains/index.ts';\n\nexport type UserIdentityRepositoryContext = {\n repository: UserRepository,\n userPermissionRepository: Repository<UserPermission>,\n userRoleRepository: Repository<UserRole>,\n};\n\nexport class UserIdentityRepository implements IUserIdentityRepository {\n private readonly repository: UserRepository;\n\n private readonly userPermissionRepository: Repository<UserPermission>;\n\n private readonly userRoleRepository: Repository<UserRole>;\n\n constructor(ctx: UserIdentityRepositoryContext) {\n this.repository = ctx.repository;\n this.userPermissionRepository = ctx.userPermissionRepository;\n this.userRoleRepository = ctx.userRoleRepository;\n }\n\n async findOneById(id: string): Promise<User | null> {\n return this.find(id);\n }\n\n async findOneByName(id: string, realm?: string): Promise<User | null> {\n return this.find(id, realm);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<User | null> {\n return this.find(idOrName, realm);\n }\n\n async findOneBy(where: Record<string, any>): Promise<User | null> {\n return this.repository.findOneBy(where);\n }\n\n private async find(key: string, realmKey?: string) : Promise<User | null> {\n const query = this.repository.createQueryBuilder('user')\n .leftJoinAndSelect('user.realm', 'realm');\n\n const isId = isUUID(key);\n if (isId) {\n query.where('user.id = :id', { id: key });\n } else {\n query.where('user.name = :name', { name: key });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('user.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey });\n }\n }\n }\n\n const { columns } = this.repository.metadata;\n for (const column of columns) {\n if (!column.isSelect) {\n query.addSelect(`user.${column.databaseName}`);\n }\n }\n\n if (isId) {\n query.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.USER,\n key,\n }),\n 60_000,\n );\n }\n\n const entity = await query.getOne();\n if (entity) {\n return this.repository.extendOneWithEA(entity);\n }\n\n return null;\n }\n\n async saveOneWithEA(user: Partial<User>, extraAttributes: Record<string, any>): Promise<User> {\n const entity = this.repository.create(user);\n return this.repository.saveOneWithEA(entity, extraAttributes);\n }\n\n async savePermissions(user: User, items: IdentityProviderMapperElement[]): Promise<void> {\n const { userPermissionRepository: repository } = this;\n\n const ids = items.map((item) => item.value);\n\n const idsToDelete = items\n .filter((item) => item.operation === IdentityProviderMapperOperation.DELETE)\n .map((item) => item.value);\n\n const entities = await repository.findBy({\n user_id: user.id,\n permission_id: In(ids),\n });\n\n const entitiesToDelete : UserPermission[] = [];\n for (const entity of entities) {\n const index = idsToDelete.indexOf(entity.permission_id);\n if (index === -1) {\n continue;\n }\n\n entitiesToDelete.push(entity);\n }\n\n if (entitiesToDelete.length > 0) {\n await repository.remove(entitiesToDelete);\n }\n\n const entitiesToCreate : UserPermission[] = [];\n for (const item of items) {\n if (item.operation !== IdentityProviderMapperOperation.CREATE) {\n continue;\n }\n\n const index = entities.findIndex(\n (entity) => entity.permission_id === item.value,\n );\n if (index !== -1) {\n continue;\n }\n\n const entity = repository.create({\n user_id: user.id,\n user_realm_id: user.realm_id,\n permission_id: item.value as string,\n permission_realm_id: item.realmId as string,\n });\n\n entitiesToCreate.push(entity);\n }\n\n if (entitiesToCreate.length > 0) {\n await repository.save(entitiesToCreate);\n }\n }\n\n async saveRoles(user: User, items: IdentityProviderMapperElement[]): Promise<void> {\n const { userRoleRepository: repository } = this;\n\n const ids = items.map((item) => item.value);\n\n const idsToDelete = items\n .filter((item) => item.operation === IdentityProviderMapperOperation.DELETE)\n .map((item) => item.value);\n\n const entities = await repository.findBy({\n user_id: user.id,\n role_id: In(ids),\n });\n\n const entitiesToDelete : UserRole[] = [];\n for (const entity of entities) {\n const index = idsToDelete.indexOf(entity.role_id);\n if (index === -1) {\n continue;\n }\n\n entitiesToDelete.push(entity);\n }\n\n if (entitiesToDelete.length > 0) {\n await repository.remove(entitiesToDelete);\n }\n\n const entitiesToCreate : UserRole[] = [];\n for (const item of items) {\n if (item.operation !== IdentityProviderMapperOperation.CREATE) {\n continue;\n }\n\n const index = entities.findIndex((entity) => entity.role_id === item.value);\n if (index !== -1) {\n continue;\n }\n\n const entity = repository.create({\n user_id: user.id,\n user_realm_id: user.realm_id,\n role_id: item.value as string,\n role_realm_id: item.realmId as string,\n });\n\n entitiesToCreate.push(entity);\n }\n\n if (entitiesToCreate.length > 0) {\n await repository.save(entitiesToCreate);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;AAuBA,IAAaK,yBAAb,MAAaA;CACQC;CAEAC;CAEAC;CAEjB,YAAYC,KAAoC;EAC5C,KAAKH,aAAaG,IAAIH;EACtB,KAAKC,2BAA2BE,IAAIF;EACpC,KAAKC,qBAAqBC,IAAID;CAClC;CAEA,MAAME,YAAYC,IAAkC;EAChD,OAAO,KAAKC,KAAKD,EAAAA;CACrB;CAEA,MAAME,cAAcF,IAAYG,OAAsC;EAClE,OAAO,KAAKF,KAAKD,IAAIG,KAAAA;CACzB;CAEA,MAAMC,kBAAkBC,UAAkBF,OAAsC;EAC5E,OAAO,KAAKF,KAAKI,UAAUF,KAAAA;CAC/B;CAEA,MAAMG,UAAUC,OAAkD;EAC9D,OAAO,KAAKZ,WAAWW,UAAUC,KAAAA;CACrC;CAEA,MAAcN,KAAKO,KAAaC,UAA0C;EACtE,MAAMC,QAAQ,KAAKf,WAAWgB,mBAAmB,MAAA,CAAA,CAC5CC,kBAAkB,cAAc,OAAA;EAErC,MAAMC,OAAOxB,OAAOmB,GAAAA;EACpB,IAAIK,MACAH,MAAMH,MAAM,iBAAiB,EAAEP,IAAIQ,IAAI,CAAA;OACpC;GACHE,MAAMH,MAAM,qBAAqB,EAAEO,MAAMN,IAAI,CAAA;GAE7C,IAAIC,UACA,IAAIpB,OAAOoB,QAAAA,GACPC,MAAMK,SAAS,4BAA4B,EAAEC,SAASP,SAAS,CAAA;QAE/DC,MAAMK,SAAS,2BAA2B,EAAEE,WAAWR,SAAS,CAAA;EAG5E;EAEA,MAAM,EAAES,YAAY,KAAKvB,WAAWwB;EACpC,KAAK,MAAMC,UAAUF,SACjB,IAAI,CAACE,OAAOC,UACRX,MAAMY,UAAU,QAAQF,OAAOG,cAAc;EAIrD,IAAIV,MACAH,MAAMc,MACFlC,kBAAkB;GACdmC,QAAQhC,YAAYiC;GACpBlB;EACJ,CAAA,GACA,GAAA;EAIR,MAAMmB,SAAS,MAAMjB,MAAMkB,OAAM;EACjC,IAAID,QACA,OAAO,KAAKhC,WAAWkC,gBAAgBF,MAAAA;EAG3C,OAAO;CACX;CAEA,MAAMG,cAAcC,MAAqBC,iBAAqD;EAC1F,MAAML,SAAS,KAAKhC,WAAWsC,OAAOF,IAAAA;EACtC,OAAO,KAAKpC,WAAWmC,cAAcH,QAAQK,eAAAA;CACjD;CAEA,MAAME,gBAAgBH,MAAYI,OAAuD;EACrF,MAAM,EAAEvC,0BAA0BD,eAAe;EAEjD,MAAMyC,MAAMD,MAAME,KAAKC,SAASA,KAAKC,KAAK;EAE1C,MAAMC,cAAcL,MACfM,QAAQH,SAASA,KAAKI,cAAclD,gCAAgCmD,MAAM,CAAA,CAC1EN,KAAKC,SAASA,KAAKC,KAAK;EAE7B,MAAMK,WAAW,MAAMjD,WAAWkD,OAAO;GACrCC,SAASf,KAAK/B;GACd+C,eAAexD,GAAG6C,GAAAA;EACtB,CAAA;EAEA,MAAMY,mBAAsC,CAAA;EAC5C,KAAK,MAAMrB,UAAUiB,UAAU;GAE3B,IADcJ,YAAYU,QAAQvB,OAAOoB,aACrCE,MAAU,IACV;GAGJD,iBAAiBG,KAAKxB,MAAAA;EAC1B;EAEA,IAAIqB,iBAAiBI,SAAS,GAC1B,MAAMzD,WAAW0D,OAAOL,gBAAAA;EAG5B,MAAMM,mBAAsC,CAAA;EAC5C,KAAK,MAAMhB,QAAQH,OAAO;GACtB,IAAIG,KAAKI,cAAclD,gCAAgC+D,QACnD;GAMJ,IAHcX,SAASY,WAClB7B,WAAWA,OAAOoB,kBAAkBT,KAAKC,KAE1CU,MAAU,IACV;GAGJ,MAAMtB,SAAShC,WAAWsC,OAAO;IAC7Ba,SAASf,KAAK/B;IACdyD,eAAe1B,KAAK2B;IACpBX,eAAeT,KAAKC;IACpBoB,qBAAqBrB,KAAKtB;GAC9B,CAAA;GAEAsC,iBAAiBH,KAAKxB,MAAAA;EAC1B;EAEA,IAAI2B,iBAAiBF,SAAS,GAC1B,MAAMzD,WAAWiE,KAAKN,gBAAAA;CAE9B;CAEA,MAAMO,UAAU9B,MAAYI,OAAuD;EAC/E,MAAM,EAAEtC,oBAAoBF,eAAe;EAE3C,MAAMyC,MAAMD,MAAME,KAAKC,SAASA,KAAKC,KAAK;EAE1C,MAAMC,cAAcL,MACfM,QAAQH,SAASA,KAAKI,cAAclD,gCAAgCmD,MAAM,CAAA,CAC1EN,KAAKC,SAASA,KAAKC,KAAK;EAE7B,MAAMK,WAAW,MAAMjD,WAAWkD,OAAO;GACrCC,SAASf,KAAK/B;GACd8D,SAASvE,GAAG6C,GAAAA;EAChB,CAAA;EAEA,MAAMY,mBAAgC,CAAA;EACtC,KAAK,MAAMrB,UAAUiB,UAAU;GAE3B,IADcJ,YAAYU,QAAQvB,OAAOmC,OACrCb,MAAU,IACV;GAGJD,iBAAiBG,KAAKxB,MAAAA;EAC1B;EAEA,IAAIqB,iBAAiBI,SAAS,GAC1B,MAAMzD,WAAW0D,OAAOL,gBAAAA;EAG5B,MAAMM,mBAAgC,CAAA;EACtC,KAAK,MAAMhB,QAAQH,OAAO;GACtB,IAAIG,KAAKI,cAAclD,gCAAgC+D,QACnD;GAIJ,IADcX,SAASY,WAAW7B,WAAWA,OAAOmC,YAAYxB,KAAKC,KACjEU,MAAU,IACV;GAGJ,MAAMtB,SAAShC,WAAWsC,OAAO;IAC7Ba,SAASf,KAAK/B;IACdyD,eAAe1B,KAAK2B;IACpBI,SAASxB,KAAKC;IACdwB,eAAezB,KAAKtB;GACxB,CAAA;GAEAsC,iBAAiBH,KAAKxB,MAAAA;EAC1B;EAEA,IAAI2B,iBAAiBF,SAAS,GAC1B,MAAMzD,WAAWiE,KAAKN,gBAAAA;CAE9B;AACJ"}
|
|
1
|
+
{"version":3,"file":"user.mjs","names":["isUUID","buildRedisKeyPath","In","IdentityProviderMapperOperation","CachePrefix","UserIdentityRepository","repository","userPermissionRepository","userRoleRepository","ctx","findOneById","id","find","findOneByName","realm","findOneByIdOrName","idOrName","findOneBy","where","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","isId","name","trim","toLowerCase","andWhere","realmId","realmName","columns","metadata","column","isSelect","addSelect","databaseName","cache","prefix","USER","entity","getOne","extendOneWithEA","saveOneWithEA","user","extraAttributes","create","savePermissions","items","ids","map","item","value","idsToDelete","filter","operation","DELETE","entities","findBy","user_id","permission_id","entitiesToDelete","index","indexOf","push","length","remove","entitiesToCreate","CREATE","findIndex","user_realm_id","realm_id","permission_realm_id","save","saveRoles","role_id","role_realm_id"],"sources":["../../../../../src/app/modules/identity/repositories/user.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { User, UserPermission, UserRole } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport type { Repository } from 'typeorm';\nimport { In } from 'typeorm';\nimport type { IUserIdentityRepository, IdentityProviderMapperElement } from '../../../../core/index.ts';\nimport { IdentityProviderMapperOperation } from '../../../../core/index.ts';\nimport type { UserRepository } from '../../../../adapters/database/domains/index.ts';\nimport { CachePrefix } from '../../../../adapters/database/domains/index.ts';\n\nexport type UserIdentityRepositoryContext = {\n repository: UserRepository,\n userPermissionRepository: Repository<UserPermission>,\n userRoleRepository: Repository<UserRole>,\n};\n\nexport class UserIdentityRepository implements IUserIdentityRepository {\n private readonly repository: UserRepository;\n\n private readonly userPermissionRepository: Repository<UserPermission>;\n\n private readonly userRoleRepository: Repository<UserRole>;\n\n constructor(ctx: UserIdentityRepositoryContext) {\n this.repository = ctx.repository;\n this.userPermissionRepository = ctx.userPermissionRepository;\n this.userRoleRepository = ctx.userRoleRepository;\n }\n\n async findOneById(id: string): Promise<User | null> {\n return this.find(id);\n }\n\n async findOneByName(id: string, realm?: string): Promise<User | null> {\n return this.find(id, realm);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<User | null> {\n return this.find(idOrName, realm);\n }\n\n async findOneBy(where: Record<string, any>): Promise<User | null> {\n return this.repository.findOneBy(where);\n }\n\n private async find(key: string, realmKey?: string) : Promise<User | null> {\n const query = this.repository.createQueryBuilder('user')\n .leftJoinAndSelect('user.realm', 'realm');\n\n const isId = isUUID(key);\n if (isId) {\n query.where('user.id = :id', { id: key });\n } else {\n query.where('user.name = :name', { name: key.trim().toLowerCase() });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('user.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey.trim().toLowerCase() });\n }\n }\n }\n\n const { columns } = this.repository.metadata;\n for (const column of columns) {\n if (!column.isSelect) {\n query.addSelect(`user.${column.databaseName}`);\n }\n }\n\n if (isId) {\n query.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.USER,\n key,\n }),\n 60_000,\n );\n }\n\n const entity = await query.getOne();\n if (entity) {\n return this.repository.extendOneWithEA(entity);\n }\n\n return null;\n }\n\n async saveOneWithEA(user: Partial<User>, extraAttributes: Record<string, any>): Promise<User> {\n const entity = this.repository.create(user);\n return this.repository.saveOneWithEA(entity, extraAttributes);\n }\n\n async savePermissions(user: User, items: IdentityProviderMapperElement[]): Promise<void> {\n const { userPermissionRepository: repository } = this;\n\n const ids = items.map((item) => item.value);\n\n const idsToDelete = items\n .filter((item) => item.operation === IdentityProviderMapperOperation.DELETE)\n .map((item) => item.value);\n\n const entities = await repository.findBy({\n user_id: user.id,\n permission_id: In(ids),\n });\n\n const entitiesToDelete : UserPermission[] = [];\n for (const entity of entities) {\n const index = idsToDelete.indexOf(entity.permission_id);\n if (index === -1) {\n continue;\n }\n\n entitiesToDelete.push(entity);\n }\n\n if (entitiesToDelete.length > 0) {\n await repository.remove(entitiesToDelete);\n }\n\n const entitiesToCreate : UserPermission[] = [];\n for (const item of items) {\n if (item.operation !== IdentityProviderMapperOperation.CREATE) {\n continue;\n }\n\n const index = entities.findIndex(\n (entity) => entity.permission_id === item.value,\n );\n if (index !== -1) {\n continue;\n }\n\n const entity = repository.create({\n user_id: user.id,\n user_realm_id: user.realm_id,\n permission_id: item.value as string,\n permission_realm_id: item.realmId as string,\n });\n\n entitiesToCreate.push(entity);\n }\n\n if (entitiesToCreate.length > 0) {\n await repository.save(entitiesToCreate);\n }\n }\n\n async saveRoles(user: User, items: IdentityProviderMapperElement[]): Promise<void> {\n const { userRoleRepository: repository } = this;\n\n const ids = items.map((item) => item.value);\n\n const idsToDelete = items\n .filter((item) => item.operation === IdentityProviderMapperOperation.DELETE)\n .map((item) => item.value);\n\n const entities = await repository.findBy({\n user_id: user.id,\n role_id: In(ids),\n });\n\n const entitiesToDelete : UserRole[] = [];\n for (const entity of entities) {\n const index = idsToDelete.indexOf(entity.role_id);\n if (index === -1) {\n continue;\n }\n\n entitiesToDelete.push(entity);\n }\n\n if (entitiesToDelete.length > 0) {\n await repository.remove(entitiesToDelete);\n }\n\n const entitiesToCreate : UserRole[] = [];\n for (const item of items) {\n if (item.operation !== IdentityProviderMapperOperation.CREATE) {\n continue;\n }\n\n const index = entities.findIndex((entity) => entity.role_id === item.value);\n if (index !== -1) {\n continue;\n }\n\n const entity = repository.create({\n user_id: user.id,\n user_realm_id: user.realm_id,\n role_id: item.value as string,\n role_realm_id: item.realmId as string,\n });\n\n entitiesToCreate.push(entity);\n }\n\n if (entitiesToCreate.length > 0) {\n await repository.save(entitiesToCreate);\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -12,9 +12,9 @@ var OAuth2ClientRepository = class {
|
|
|
12
12
|
const query = this.repository.createQueryBuilder("client").leftJoinAndSelect("client.realm", "realm");
|
|
13
13
|
if (isUUID(key)) query.where("client.id = :id", { id: key });
|
|
14
14
|
else {
|
|
15
|
-
query.where("client.name = :name", { name: key });
|
|
15
|
+
query.where("client.name = :name", { name: key.trim().toLowerCase() });
|
|
16
16
|
if (realmKey) if (isUUID(realmKey)) query.andWhere("client.realm_id = :realmId", { realmId: realmKey });
|
|
17
|
-
else query.andWhere("realm.name = :realmName", { realmName: realmKey });
|
|
17
|
+
else query.andWhere("realm.name = :realmName", { realmName: realmKey.trim().toLowerCase() });
|
|
18
18
|
}
|
|
19
19
|
return query.getOne();
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["isUUID","OAuth2ClientRepository","repository","findOneByIdOrName","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","where","id","name","andWhere","realmId","realmName","getOne"],"sources":["../../../../../../src/app/modules/oauth2/repositories/client/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport type { IOAuth2ClientRepository } from '../../../../../core/index.ts';\n\nexport class OAuth2ClientRepository implements IOAuth2ClientRepository {\n private readonly repository: Repository<Client>;\n\n constructor(\n repository: Repository<Client>,\n ) {\n this.repository = repository;\n }\n\n async findOneByIdOrName(key: string, realmKey?: string): Promise<Client | null> {\n const query = this.repository.createQueryBuilder('client')\n .leftJoinAndSelect('client.realm', 'realm');\n\n if (isUUID(key)) {\n query.where('client.id = :id', { id: key });\n } else {\n query.where('client.name = :name', { name: key });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('client.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey });\n }\n }\n }\n\n return query.getOne();\n }\n}\n"],"mappings":";;;;;AAYA,IAAaC,yBAAb,MAAaA;CACQC;CAEjB,YACIA,YACF;EACE,KAAKA,aAAaA;CACtB;CAEA,MAAMC,kBAAkBC,KAAaC,UAA2C;EAC5E,MAAMC,QAAQ,KAAKJ,WAAWK,mBAAmB,QAAA,CAAA,CAC5CC,kBAAkB,gBAAgB,OAAA;EAEvC,IAAIR,OAAOI,GAAAA,GACPE,MAAMG,MAAM,mBAAmB,EAAEC,IAAIN,IAAI,CAAA;OACtC;GACHE,MAAMG,MAAM,uBAAuB,EAAEE,MAAMP,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["isUUID","OAuth2ClientRepository","repository","findOneByIdOrName","key","realmKey","query","createQueryBuilder","leftJoinAndSelect","where","id","name","trim","toLowerCase","andWhere","realmId","realmName","getOne"],"sources":["../../../../../../src/app/modules/oauth2/repositories/client/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport type { IOAuth2ClientRepository } from '../../../../../core/index.ts';\n\nexport class OAuth2ClientRepository implements IOAuth2ClientRepository {\n private readonly repository: Repository<Client>;\n\n constructor(\n repository: Repository<Client>,\n ) {\n this.repository = repository;\n }\n\n async findOneByIdOrName(key: string, realmKey?: string): Promise<Client | null> {\n const query = this.repository.createQueryBuilder('client')\n .leftJoinAndSelect('client.realm', 'realm');\n\n if (isUUID(key)) {\n query.where('client.id = :id', { id: key });\n } else {\n query.where('client.name = :name', { name: key.trim().toLowerCase() });\n\n if (realmKey) {\n if (isUUID(realmKey)) {\n query.andWhere('client.realm_id = :realmId', { realmId: realmKey });\n } else {\n query.andWhere('realm.name = :realmName', { realmName: realmKey.trim().toLowerCase() });\n }\n }\n }\n\n return query.getOne();\n }\n}\n"],"mappings":";;;;;AAYA,IAAaC,yBAAb,MAAaA;CACQC;CAEjB,YACIA,YACF;EACE,KAAKA,aAAaA;CACtB;CAEA,MAAMC,kBAAkBC,KAAaC,UAA2C;EAC5E,MAAMC,QAAQ,KAAKJ,WAAWK,mBAAmB,QAAA,CAAA,CAC5CC,kBAAkB,gBAAgB,OAAA;EAEvC,IAAIR,OAAOI,GAAAA,GACPE,MAAMG,MAAM,mBAAmB,EAAEC,IAAIN,IAAI,CAAA;OACtC;GACHE,MAAMG,MAAM,uBAAuB,EAAEE,MAAMP,IAAIQ,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;GAEpE,IAAIR,UACA,IAAIL,OAAOK,QAAAA,GACPC,MAAMQ,SAAS,8BAA8B,EAAEC,SAASV,SAAS,CAAA;QAEjEC,MAAMQ,SAAS,2BAA2B,EAAEE,WAAWX,SAASO,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;EAGjG;EAEA,OAAOP,MAAMW,OAAM;CACvB;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/provisioning/module.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAsBtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAYxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAMH,uBAAuB,EAW1B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AASrC,qBAAa,iBAAkB,YAAW,OAAO;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEhC,SAAS,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC;gBAE7B,OAAO,GAAE,mBAAmB,EAAO;IAMzC,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/provisioning/module.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAsBtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAYxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAMH,uBAAuB,EAW1B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AASrC,qBAAa,iBAAkB,YAAW,OAAO;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEhC,SAAS,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC;gBAE7B,OAAO,GAAE,mBAAmB,EAAO;IAMzC,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;cA+JjC,mBAAmB,CAC/B,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,uBAAuB,GAC1C,OAAO,CAAC,IAAI,CAAC;CAuBnB"}
|
|
@@ -109,7 +109,6 @@ var ProvisionerModule = class {
|
|
|
109
109
|
const roleSynchronizer = new RoleProvisioningSynchronizer({
|
|
110
110
|
repository: roleRepository,
|
|
111
111
|
permissionRepository,
|
|
112
|
-
policyRepository,
|
|
113
112
|
rolePermissionRepository: new RolePermissionRepositoryAdapter(container.resolve(RolePermissionEntity))
|
|
114
113
|
});
|
|
115
114
|
const clientSynchronizer = new ClientProvisioningSynchronizer({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["ClientEntity","ClientPermissionEntity","ClientRoleEntity","PermissionEntity","RealmEntity","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserPermissionEntity","UserRoleEntity","SystemPolicyName","PermissionPolicyEntity","PolicyRepository","UserRepository","ClientProvisioningSynchronizer","GraphProvisioningSynchronizer","PermissionProvisioningSynchronizer","PolicyProvisioningSynchronizer","RealmProvisioningSynchronizer","RobotProvisioningSynchronizer","RoleProvisioningSynchronizer","ScopeProvisioningSynchronizer","UserProvisioningSynchronizer","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RobotPermissionRepositoryAdapter","RobotRepositoryAdapter","RobotRoleRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","DatabaseInjectionKey","ModuleName","fs","path","ConfigInjectionKey","getAppOrigins","LoggerInjectionKey","WebClientProvisioner","CompositeProvisioningSource","FileProvisioningSource","ProvisionerModule","name","dependencies","sources","PROVISIONING","CONFIG","DATABASE","setup","container","config","resolve","provisioningDir","join","writableDirectoryPath","existsSync","push","cwd","composite","data","load","dataSource","DataSource","realmRepository","permissionRepository","repository","policyRepository","permissionPolicyRepository","policySynchronizer","roleRepository","clientRepository","permissionSynchronizer","roleSynchronizer","rolePermissionRepository","clientSynchronizer","clientRoleRepository","clientPermissionRepository","userSynchronizer","userRepository","userRoleRepository","userPermissionRepository","robotSynchronizer","robotRepository","robotRoleRepository","robotPermissionRepository","scopeRepository","scopeSynchronizer","realmSynchronizer","rootSynchronizer","synchronize","webClientProvisioner","appOrigins","logger","realms","find","realm","ensureForRealm","permissionsDefaultPolicyAssignment","assignDefaultPolicy","defaultPolicy","findOneByName","DEFAULT","permissionRepo","getRepository","junctionRepo","permissions","permission","hasAnyPolicy","findOneBy","permission_id","id","save","create","permission_realm_id","realm_id","policy_id","policy_realm_id"],"sources":["../../../../src/app/modules/provisioning/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n PermissionPolicy,\n Realm,\n Robot,\n RobotPermission,\n RobotRole,\n Role,\n RolePermission,\n Scope,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { DataSource, Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n PermissionEntity,\n RealmEntity,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../adapters/database/index.ts';\nimport { SystemPolicyName } from '@authup/access';\nimport {\n PermissionPolicyEntity,\n PolicyRepository,\n UserRepository,\n} from '../../../adapters/database/domains/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientProvisioningSynchronizer,\n GraphProvisioningSynchronizer,\n PermissionProvisioningSynchronizer,\n PolicyProvisioningSynchronizer,\n RealmProvisioningSynchronizer,\n RobotProvisioningSynchronizer,\n RoleProvisioningSynchronizer,\n ScopeProvisioningSynchronizer,\n UserProvisioningSynchronizer,\n} from '../../../core/provisioning/synchronizer/index.ts';\nimport type { IProvisioningSource } from '../../../core/provisioning/types.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RobotPermissionRepositoryAdapter,\n RobotRepositoryAdapter,\n RobotRoleRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../database/repositories/index.ts';\nimport { DatabaseInjectionKey } from '../database/index.ts';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { ConfigInjectionKey, getAppOrigins } from '../config/index.ts';\nimport { LoggerInjectionKey } from '../logger/index.ts';\nimport { WebClientProvisioner } from '../../../core/entities/client/index.ts';\nimport { CompositeProvisioningSource, FileProvisioningSource } from './sources/index.ts';\n\nexport class ProvisionerModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n protected sources: IProvisioningSource[];\n\n constructor(sources: IProvisioningSource[] = []) {\n this.name = ModuleName.PROVISIONING;\n this.dependencies = [ModuleName.CONFIG, ModuleName.DATABASE];\n this.sources = sources;\n }\n\n async setup(container: IContainer): Promise<void> {\n const sources = [...this.sources];\n\n const config = container.resolve(ConfigInjectionKey);\n const provisioningDir = path.join(config.writableDirectoryPath, 'provisioning');\n if (fs.existsSync(provisioningDir)) {\n sources.push(new FileProvisioningSource({ cwd: provisioningDir }));\n }\n\n const composite = new CompositeProvisioningSource(sources);\n const data = await composite.load(container);\n\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const permissionRepository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<PermissionEntity>>(PermissionEntity),\n realmRepository,\n });\n\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n // ---------------------------------------------------------------\n // Synchronize all entities (policies → permissions → roles → ...)\n // ---------------------------------------------------------------\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const policySynchronizer = new PolicyProvisioningSynchronizer({\n repository: policyRepository,\n permissionPolicyRepository,\n });\n\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const clientRepository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n\n const permissionSynchronizer = new PermissionProvisioningSynchronizer({\n repository: permissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const roleSynchronizer = new RoleProvisioningSynchronizer({\n repository: roleRepository,\n permissionRepository,\n policyRepository,\n rolePermissionRepository: new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n ),\n });\n\n const clientSynchronizer = new ClientProvisioningSynchronizer({\n clientRepository,\n clientRoleRepository: new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n ),\n clientPermissionRepository: new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n ),\n\n roleRepository,\n permissionRepository,\n\n roleSynchronizer,\n permissionSynchronizer,\n });\n\n const userSynchronizer = new UserProvisioningSynchronizer({\n userRepository: new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n }),\n userRoleRepository: new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n ),\n userPermissionRepository: new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n ),\n\n clientRepository,\n roleRepository,\n permissionRepository,\n });\n\n const robotSynchronizer = new RobotProvisioningSynchronizer({\n robotRepository: new RobotRepositoryAdapter({\n repository: container.resolve<Repository<Robot>>(RobotEntity),\n realmRepository,\n }),\n robotRoleRepository: new RobotRoleRepositoryAdapter(\n container.resolve<Repository<RobotRole>>(RobotRoleEntity),\n ),\n robotPermissionRepository: new RobotPermissionRepositoryAdapter(\n container.resolve<Repository<RobotPermission>>(RobotPermissionEntity),\n ),\n\n roleRepository,\n permissionRepository,\n });\n\n const scopeRepository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository,\n });\n\n const scopeSynchronizer = new ScopeProvisioningSynchronizer({ repository: scopeRepository });\n\n const realmSynchronizer = new RealmProvisioningSynchronizer({\n repository: new RealmRepositoryAdapter(realmRepository),\n\n clientSynchronizer,\n roleSynchronizer,\n permissionSynchronizer,\n userSynchronizer,\n robotSynchronizer,\n scopeSynchronizer,\n });\n\n const rootSynchronizer = new GraphProvisioningSynchronizer({\n policySynchronizer,\n permissionSynchronizer,\n roleSynchronizer,\n realmSynchronizer,\n scopeSynchronizer,\n });\n\n await rootSynchronizer.synchronize(data);\n\n // ---------------------------------------------------------------\n // Per-realm public `web` client. Single provisioning mechanism:\n // list every realm (incl. pre-existing) and upsert its web client.\n // Idempotent; guarded on built_in inside the provisioner.\n // ---------------------------------------------------------------\n const webClientProvisioner = new WebClientProvisioner({\n clientRepository,\n appOrigins: getAppOrigins(config),\n logger: container.resolve(LoggerInjectionKey),\n });\n\n const realms = await realmRepository.find();\n for (const realm of realms) {\n await webClientProvisioner.ensureForRealm(realm);\n }\n\n if (config.permissionsDefaultPolicyAssignment) {\n await this.assignDefaultPolicy(dataSource, policyRepository);\n }\n }\n\n protected async assignDefaultPolicy(\n dataSource: DataSource,\n policyRepository: PolicyRepositoryAdapter,\n ): Promise<void> {\n const defaultPolicy = await policyRepository.findOneByName(SystemPolicyName.DEFAULT);\n if (!defaultPolicy) {\n return;\n }\n\n const permissionRepo = dataSource.getRepository(PermissionEntity);\n const junctionRepo = dataSource.getRepository(PermissionPolicyEntity);\n\n const permissions = await permissionRepo.find();\n for (const permission of permissions) {\n const hasAnyPolicy = await junctionRepo.findOneBy({ permission_id: permission.id });\n\n if (!hasAnyPolicy) {\n await junctionRepo.save(junctionRepo.create({\n permission_id: permission.id,\n permission_realm_id: permission.realm_id,\n policy_id: defaultPolicy.id,\n policy_realm_id: defaultPolicy.realm_id,\n }));\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["ClientEntity","ClientPermissionEntity","ClientRoleEntity","PermissionEntity","RealmEntity","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserPermissionEntity","UserRoleEntity","SystemPolicyName","PermissionPolicyEntity","PolicyRepository","UserRepository","ClientProvisioningSynchronizer","GraphProvisioningSynchronizer","PermissionProvisioningSynchronizer","PolicyProvisioningSynchronizer","RealmProvisioningSynchronizer","RobotProvisioningSynchronizer","RoleProvisioningSynchronizer","ScopeProvisioningSynchronizer","UserProvisioningSynchronizer","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RobotPermissionRepositoryAdapter","RobotRepositoryAdapter","RobotRoleRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","DatabaseInjectionKey","ModuleName","fs","path","ConfigInjectionKey","getAppOrigins","LoggerInjectionKey","WebClientProvisioner","CompositeProvisioningSource","FileProvisioningSource","ProvisionerModule","name","dependencies","sources","PROVISIONING","CONFIG","DATABASE","setup","container","config","resolve","provisioningDir","join","writableDirectoryPath","existsSync","push","cwd","composite","data","load","dataSource","DataSource","realmRepository","permissionRepository","repository","policyRepository","permissionPolicyRepository","policySynchronizer","roleRepository","clientRepository","permissionSynchronizer","roleSynchronizer","rolePermissionRepository","clientSynchronizer","clientRoleRepository","clientPermissionRepository","userSynchronizer","userRepository","userRoleRepository","userPermissionRepository","robotSynchronizer","robotRepository","robotRoleRepository","robotPermissionRepository","scopeRepository","scopeSynchronizer","realmSynchronizer","rootSynchronizer","synchronize","webClientProvisioner","appOrigins","logger","realms","find","realm","ensureForRealm","permissionsDefaultPolicyAssignment","assignDefaultPolicy","defaultPolicy","findOneByName","DEFAULT","permissionRepo","getRepository","junctionRepo","permissions","permission","hasAnyPolicy","findOneBy","permission_id","id","save","create","permission_realm_id","realm_id","policy_id","policy_realm_id"],"sources":["../../../../src/app/modules/provisioning/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n PermissionPolicy,\n Realm,\n Robot,\n RobotPermission,\n RobotRole,\n Role,\n RolePermission,\n Scope,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { DataSource, Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n PermissionEntity,\n RealmEntity,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../adapters/database/index.ts';\nimport { SystemPolicyName } from '@authup/access';\nimport {\n PermissionPolicyEntity,\n PolicyRepository,\n UserRepository,\n} from '../../../adapters/database/domains/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientProvisioningSynchronizer,\n GraphProvisioningSynchronizer,\n PermissionProvisioningSynchronizer,\n PolicyProvisioningSynchronizer,\n RealmProvisioningSynchronizer,\n RobotProvisioningSynchronizer,\n RoleProvisioningSynchronizer,\n ScopeProvisioningSynchronizer,\n UserProvisioningSynchronizer,\n} from '../../../core/provisioning/synchronizer/index.ts';\nimport type { IProvisioningSource } from '../../../core/provisioning/types.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RobotPermissionRepositoryAdapter,\n RobotRepositoryAdapter,\n RobotRoleRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../database/repositories/index.ts';\nimport { DatabaseInjectionKey } from '../database/index.ts';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { ConfigInjectionKey, getAppOrigins } from '../config/index.ts';\nimport { LoggerInjectionKey } from '../logger/index.ts';\nimport { WebClientProvisioner } from '../../../core/entities/client/index.ts';\nimport { CompositeProvisioningSource, FileProvisioningSource } from './sources/index.ts';\n\nexport class ProvisionerModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n protected sources: IProvisioningSource[];\n\n constructor(sources: IProvisioningSource[] = []) {\n this.name = ModuleName.PROVISIONING;\n this.dependencies = [ModuleName.CONFIG, ModuleName.DATABASE];\n this.sources = sources;\n }\n\n async setup(container: IContainer): Promise<void> {\n const sources = [...this.sources];\n\n const config = container.resolve(ConfigInjectionKey);\n const provisioningDir = path.join(config.writableDirectoryPath, 'provisioning');\n if (fs.existsSync(provisioningDir)) {\n sources.push(new FileProvisioningSource({ cwd: provisioningDir }));\n }\n\n const composite = new CompositeProvisioningSource(sources);\n const data = await composite.load(container);\n\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const permissionRepository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<PermissionEntity>>(PermissionEntity),\n realmRepository,\n });\n\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n // ---------------------------------------------------------------\n // Synchronize all entities (policies → permissions → roles → ...)\n // ---------------------------------------------------------------\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const policySynchronizer = new PolicyProvisioningSynchronizer({\n repository: policyRepository,\n permissionPolicyRepository,\n });\n\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const clientRepository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n\n const permissionSynchronizer = new PermissionProvisioningSynchronizer({\n repository: permissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const roleSynchronizer = new RoleProvisioningSynchronizer({\n repository: roleRepository,\n permissionRepository,\n rolePermissionRepository: new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n ),\n });\n\n const clientSynchronizer = new ClientProvisioningSynchronizer({\n clientRepository,\n clientRoleRepository: new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n ),\n clientPermissionRepository: new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n ),\n\n roleRepository,\n permissionRepository,\n\n roleSynchronizer,\n permissionSynchronizer,\n });\n\n const userSynchronizer = new UserProvisioningSynchronizer({\n userRepository: new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n }),\n userRoleRepository: new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n ),\n userPermissionRepository: new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n ),\n\n clientRepository,\n roleRepository,\n permissionRepository,\n });\n\n const robotSynchronizer = new RobotProvisioningSynchronizer({\n robotRepository: new RobotRepositoryAdapter({\n repository: container.resolve<Repository<Robot>>(RobotEntity),\n realmRepository,\n }),\n robotRoleRepository: new RobotRoleRepositoryAdapter(\n container.resolve<Repository<RobotRole>>(RobotRoleEntity),\n ),\n robotPermissionRepository: new RobotPermissionRepositoryAdapter(\n container.resolve<Repository<RobotPermission>>(RobotPermissionEntity),\n ),\n\n roleRepository,\n permissionRepository,\n });\n\n const scopeRepository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository,\n });\n\n const scopeSynchronizer = new ScopeProvisioningSynchronizer({ repository: scopeRepository });\n\n const realmSynchronizer = new RealmProvisioningSynchronizer({\n repository: new RealmRepositoryAdapter(realmRepository),\n\n clientSynchronizer,\n roleSynchronizer,\n permissionSynchronizer,\n userSynchronizer,\n robotSynchronizer,\n scopeSynchronizer,\n });\n\n const rootSynchronizer = new GraphProvisioningSynchronizer({\n policySynchronizer,\n permissionSynchronizer,\n roleSynchronizer,\n realmSynchronizer,\n scopeSynchronizer,\n });\n\n await rootSynchronizer.synchronize(data);\n\n // ---------------------------------------------------------------\n // Per-realm public `web` client. Single provisioning mechanism:\n // list every realm (incl. pre-existing) and upsert its web client.\n // Idempotent; guarded on built_in inside the provisioner.\n // ---------------------------------------------------------------\n const webClientProvisioner = new WebClientProvisioner({\n clientRepository,\n appOrigins: getAppOrigins(config),\n logger: container.resolve(LoggerInjectionKey),\n });\n\n const realms = await realmRepository.find();\n for (const realm of realms) {\n await webClientProvisioner.ensureForRealm(realm);\n }\n\n if (config.permissionsDefaultPolicyAssignment) {\n await this.assignDefaultPolicy(dataSource, policyRepository);\n }\n }\n\n protected async assignDefaultPolicy(\n dataSource: DataSource,\n policyRepository: PolicyRepositoryAdapter,\n ): Promise<void> {\n const defaultPolicy = await policyRepository.findOneByName(SystemPolicyName.DEFAULT);\n if (!defaultPolicy) {\n return;\n }\n\n const permissionRepo = dataSource.getRepository(PermissionEntity);\n const junctionRepo = dataSource.getRepository(PermissionPolicyEntity);\n\n const permissions = await permissionRepo.find();\n for (const permission of permissions) {\n const hasAnyPolicy = await junctionRepo.findOneBy({ permission_id: permission.id });\n\n if (!hasAnyPolicy) {\n await junctionRepo.save(junctionRepo.create({\n permission_id: permission.id,\n permission_realm_id: permission.realm_id,\n policy_id: defaultPolicy.id,\n policy_realm_id: defaultPolicy.realm_id,\n }));\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/provisioning/sources/default/module.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+DAA+D,CAAC;AAClH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AACxG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AAGxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAErF,qBAAa,yBAA0B,YAAW,mBAAmB;IACjE,aAAa,IAAI,wBAAwB,EAAE;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/provisioning/sources/default/module.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+DAA+D,CAAC;AAClH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AACxG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0DAA0D,CAAC;AAGxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAErF,qBAAa,yBAA0B,YAAW,mBAAmB;IACjE,aAAa,IAAI,wBAAwB,EAAE;IA6F3C,gBAAgB,IAAI,4BAA4B,EAAE;IA6BlD,WAAW,IAAI,uBAAuB,EAAE;IAcxC,UAAU,IAAI,sBAAsB,EAAE;IAmEhC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IA8F/D,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAWrE"}
|