@authup/server-core 1.0.0-beta.37 → 1.0.0-beta.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/dist/adapters/database/data-source/options/module.mjs +16 -16
  2. package/dist/adapters/database/domains/client/index.d.ts +0 -1
  3. package/dist/adapters/database/domains/client/index.d.ts.map +1 -1
  4. package/dist/adapters/database/domains/client/index.mjs +1 -2
  5. package/dist/adapters/database/domains/index.mjs +26 -28
  6. package/dist/adapters/database/domains/policy/repository.mjs +1 -1
  7. package/dist/adapters/database/domains/robot/index.d.ts +0 -1
  8. package/dist/adapters/database/domains/robot/index.d.ts.map +1 -1
  9. package/dist/adapters/database/domains/robot/index.mjs +1 -2
  10. package/dist/adapters/database/domains/role/repository.d.ts +0 -6
  11. package/dist/adapters/database/domains/role/repository.d.ts.map +1 -1
  12. package/dist/adapters/database/domains/role/repository.mjs +1 -58
  13. package/dist/adapters/database/domains/role/repository.mjs.map +1 -1
  14. package/dist/adapters/database/domains/role-permission/entity.mjs +1 -1
  15. package/dist/adapters/database/domains/user/repository.d.ts +1 -5
  16. package/dist/adapters/database/domains/user/repository.d.ts.map +1 -1
  17. package/dist/adapters/database/domains/user/repository.mjs +0 -60
  18. package/dist/adapters/database/domains/user/repository.mjs.map +1 -1
  19. package/dist/adapters/database/extra-attribute-repository/tree/repository.d.ts.map +1 -1
  20. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs +1 -0
  21. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs.map +1 -1
  22. package/dist/adapters/database/index.mjs +18 -20
  23. package/dist/adapters/http/adapters/index.mjs +2 -1
  24. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +2 -1
  25. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
  26. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +10 -1
  27. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  28. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
  29. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +5 -13
  30. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  31. package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -1
  32. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +2 -1
  33. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
  34. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +11 -2
  35. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  36. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +5 -1
  37. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
  38. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +19 -1
  39. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  40. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +6 -1
  41. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
  42. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts +15 -0
  43. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts.map +1 -0
  44. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +57 -0
  45. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs.map +1 -0
  46. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -1
  47. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
  48. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
  49. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
  50. package/dist/adapters/http/adapters/oauth2/index.mjs +2 -1
  51. package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
  52. package/dist/adapters/http/controllers/entities/client/module.mjs +1 -1
  53. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  54. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +1 -1
  55. package/dist/adapters/http/controllers/entities/permission/module.mjs +1 -1
  56. package/dist/adapters/http/controllers/entities/policy/module.mjs +1 -1
  57. package/dist/adapters/http/controllers/entities/policy/utils/attributes-validator.mjs +1 -1
  58. package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts.map +1 -1
  59. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs +1 -1
  60. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs.map +1 -1
  61. package/dist/adapters/http/controllers/entities/robot/module.d.ts.map +1 -1
  62. package/dist/adapters/http/controllers/entities/robot/module.mjs +1 -1
  63. package/dist/adapters/http/controllers/entities/robot/module.mjs.map +1 -1
  64. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  65. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +5 -6
  66. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  67. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  68. package/dist/adapters/http/controllers/workflows/token/module.mjs +4 -1
  69. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  70. package/dist/adapters/http/controllers/workflows/token/types.d.ts +2 -1
  71. package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
  72. package/dist/adapters/http/index.mjs +2 -1
  73. package/dist/adapters/http/middleware/built-in/assets.mjs +3 -3
  74. package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
  75. package/dist/app/modules/database/repositories/bindings.d.ts +17 -0
  76. package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -0
  77. package/dist/app/modules/database/repositories/bindings.mjs +40 -0
  78. package/dist/app/modules/database/repositories/bindings.mjs.map +1 -0
  79. package/dist/app/modules/database/repositories/client/repository.d.ts +5 -1
  80. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  81. package/dist/app/modules/database/repositories/client/repository.mjs +69 -1
  82. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  83. package/dist/app/modules/database/repositories/permission/repository.mjs +1 -1
  84. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  85. package/dist/app/modules/database/repositories/policy/repository.mjs +1 -1
  86. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  87. package/dist/app/modules/database/repositories/realm/repository.mjs +1 -1
  88. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  89. package/dist/app/modules/database/repositories/robot/repository.d.ts +5 -1
  90. package/dist/app/modules/database/repositories/robot/repository.d.ts.map +1 -1
  91. package/dist/app/modules/database/repositories/robot/repository.mjs +61 -1
  92. package/dist/app/modules/database/repositories/robot/repository.mjs.map +1 -1
  93. package/dist/app/modules/database/repositories/role/repository.d.ts +3 -0
  94. package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
  95. package/dist/app/modules/database/repositories/role/repository.mjs +17 -1
  96. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  97. package/dist/app/modules/database/repositories/scope/repository.mjs +1 -1
  98. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  99. package/dist/app/modules/database/repositories/user/repository.d.ts +4 -1
  100. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  101. package/dist/app/modules/database/repositories/user/repository.mjs +31 -2
  102. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  103. package/dist/app/modules/http/modules/controller.d.ts +1 -2
  104. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  105. package/dist/app/modules/http/modules/controller.mjs +32 -34
  106. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  107. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  108. package/dist/app/modules/http/modules/middleware.mjs +2 -15
  109. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  110. package/dist/app/modules/identity/constants.d.ts +3 -1
  111. package/dist/app/modules/identity/constants.d.ts.map +1 -1
  112. package/dist/app/modules/identity/constants.mjs +2 -0
  113. package/dist/app/modules/identity/constants.mjs.map +1 -1
  114. package/dist/app/modules/identity/module.d.ts.map +1 -1
  115. package/dist/app/modules/identity/module.mjs +42 -5
  116. package/dist/app/modules/identity/module.mjs.map +1 -1
  117. package/dist/app/modules/identity/repositories/client.d.ts +2 -2
  118. package/dist/app/modules/identity/repositories/client.d.ts.map +1 -1
  119. package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
  120. package/dist/app/modules/identity/repositories/robot.d.ts +2 -2
  121. package/dist/app/modules/identity/repositories/robot.d.ts.map +1 -1
  122. package/dist/app/modules/identity/repositories/robot.mjs.map +1 -1
  123. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  124. package/dist/app/modules/oauth2/module.mjs +5 -2
  125. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  126. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  127. package/dist/app/modules/provisioning/module.mjs +14 -9
  128. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  129. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  130. package/dist/app/modules/provisioning/sources/default/module.mjs +66 -10
  131. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  132. package/dist/components/database/unique-entries/module.mjs +1 -1
  133. package/dist/core/entities/client/service.d.ts +1 -1
  134. package/dist/core/entities/client/service.d.ts.map +1 -1
  135. package/dist/core/entities/client/service.mjs +27 -23
  136. package/dist/core/entities/client/service.mjs.map +1 -1
  137. package/dist/core/entities/client/types.d.ts +6 -2
  138. package/dist/core/entities/client/types.d.ts.map +1 -1
  139. package/dist/core/entities/client-scope/service.d.ts.map +1 -1
  140. package/dist/core/entities/client-scope/service.mjs +2 -0
  141. package/dist/core/entities/client-scope/service.mjs.map +1 -1
  142. package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
  143. package/dist/core/entities/identity-provider-role-mapping/service.mjs +2 -0
  144. package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
  145. package/dist/core/entities/permission/service.mjs +1 -1
  146. package/dist/core/entities/policy/attributes-validator.mjs +1 -1
  147. package/dist/core/entities/policy/service.mjs +1 -1
  148. package/dist/core/entities/realm/service.mjs +1 -1
  149. package/dist/core/entities/robot/service.d.ts +1 -1
  150. package/dist/core/entities/robot/service.d.ts.map +1 -1
  151. package/dist/core/entities/robot/service.mjs +41 -26
  152. package/dist/core/entities/robot/service.mjs.map +1 -1
  153. package/dist/core/entities/robot/types.d.ts +6 -2
  154. package/dist/core/entities/robot/types.d.ts.map +1 -1
  155. package/dist/core/entities/role/service.mjs +1 -1
  156. package/dist/core/entities/role/types.d.ts +3 -0
  157. package/dist/core/entities/role/types.d.ts.map +1 -1
  158. package/dist/core/entities/role-attribute/service.d.ts +2 -0
  159. package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
  160. package/dist/core/entities/role-attribute/service.mjs +7 -3
  161. package/dist/core/entities/role-attribute/service.mjs.map +1 -1
  162. package/dist/core/entities/scope/service.mjs +1 -1
  163. package/dist/core/entities/user/service.d.ts.map +1 -1
  164. package/dist/core/entities/user/service.mjs +20 -25
  165. package/dist/core/entities/user/service.mjs.map +1 -1
  166. package/dist/core/entities/user/types.d.ts +4 -1
  167. package/dist/core/entities/user/types.d.ts.map +1 -1
  168. package/dist/core/entities/user-attribute/service.d.ts +3 -1
  169. package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
  170. package/dist/core/entities/user-attribute/service.mjs +44 -17
  171. package/dist/core/entities/user-attribute/service.mjs.map +1 -1
  172. package/dist/core/identity/index.d.ts +1 -0
  173. package/dist/core/identity/index.d.ts.map +1 -1
  174. package/dist/core/identity/index.mjs +2 -1
  175. package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
  176. package/dist/core/identity/password-recovery/service.mjs +4 -4
  177. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  178. package/dist/core/identity/permission/module.d.ts +12 -6
  179. package/dist/core/identity/permission/module.d.ts.map +1 -1
  180. package/dist/core/identity/permission/module.mjs +11 -19
  181. package/dist/core/identity/permission/module.mjs.map +1 -1
  182. package/dist/core/identity/permission/types.d.ts +11 -13
  183. package/dist/core/identity/permission/types.d.ts.map +1 -1
  184. package/dist/core/identity/provider/account/module.d.ts.map +1 -1
  185. package/dist/core/identity/provider/account/module.mjs +3 -2
  186. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  187. package/dist/core/identity/role/index.d.ts +3 -0
  188. package/dist/core/identity/role/index.d.ts.map +1 -0
  189. package/dist/core/identity/role/index.mjs +2 -0
  190. package/dist/core/identity/role/module.d.ts +15 -0
  191. package/dist/core/identity/role/module.d.ts.map +1 -0
  192. package/dist/core/identity/role/module.mjs +27 -0
  193. package/dist/core/identity/role/module.mjs.map +1 -0
  194. package/dist/core/identity/role/types.d.ts +14 -0
  195. package/dist/core/identity/role/types.d.ts.map +1 -0
  196. package/dist/core/identity/role/types.mjs +1 -0
  197. package/dist/core/index.mjs +3 -1
  198. package/dist/core/oauth2/authorization/code/verifier/module.d.ts.map +1 -1
  199. package/dist/core/oauth2/authorization/code/verifier/module.mjs +8 -4
  200. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  201. package/dist/core/oauth2/authorization/code/verifier/types.d.ts +2 -0
  202. package/dist/core/oauth2/authorization/code/verifier/types.d.ts.map +1 -1
  203. package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
  204. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +7 -1
  205. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  206. package/dist/core/oauth2/client/authenticator.d.ts +17 -0
  207. package/dist/core/oauth2/client/authenticator.d.ts.map +1 -0
  208. package/dist/core/oauth2/client/authenticator.mjs +34 -0
  209. package/dist/core/oauth2/client/authenticator.mjs.map +1 -0
  210. package/dist/core/oauth2/client/index.d.ts +1 -0
  211. package/dist/core/oauth2/client/index.d.ts.map +1 -1
  212. package/dist/core/oauth2/client/index.mjs +2 -1
  213. package/dist/core/oauth2/grant-types/password.d.ts +7 -3
  214. package/dist/core/oauth2/grant-types/password.d.ts.map +1 -1
  215. package/dist/core/oauth2/grant-types/password.mjs +9 -7
  216. package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
  217. package/dist/core/oauth2/index.mjs +3 -1
  218. package/dist/core/oauth2/token/issuer/access/module.d.ts +4 -1
  219. package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
  220. package/dist/core/oauth2/token/issuer/access/module.mjs +24 -2
  221. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  222. package/dist/core/oauth2/token/issuer/base.d.ts.map +1 -1
  223. package/dist/core/oauth2/token/issuer/base.mjs +3 -2
  224. package/dist/core/oauth2/token/issuer/base.mjs.map +1 -1
  225. package/dist/core/provisioning/entities/permission/types.d.ts +8 -0
  226. package/dist/core/provisioning/entities/permission/types.d.ts.map +1 -1
  227. package/dist/core/provisioning/synchronizer/permission/module.d.ts +5 -1
  228. package/dist/core/provisioning/synchronizer/permission/module.d.ts.map +1 -1
  229. package/dist/core/provisioning/synchronizer/permission/module.mjs +23 -0
  230. package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
  231. package/dist/core/provisioning/synchronizer/permission/types.d.ts +4 -1
  232. package/dist/core/provisioning/synchronizer/permission/types.d.ts.map +1 -1
  233. package/dist/core/provisioning/synchronizer/policy/module.d.ts.map +1 -1
  234. package/dist/core/provisioning/synchronizer/policy/module.mjs +4 -2
  235. package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
  236. package/dist/index.mjs +19 -20
  237. package/dist/path.d.ts +2 -1
  238. package/dist/path.d.ts.map +1 -1
  239. package/dist/path.mjs +3 -2
  240. package/dist/path.mjs.map +1 -1
  241. package/dist/swagger.json +14 -0
  242. package/dist/ui/client/.vite/ssr-manifest.json +2777 -0
  243. package/dist/ui/client/assets/fa-brands-400-BP5tdqmh.woff2 +0 -0
  244. package/dist/ui/client/assets/fa-regular-400-nyy7hhHF.woff2 +0 -0
  245. package/dist/ui/client/assets/fa-solid-900-DRAAbZTg.woff2 +0 -0
  246. package/dist/ui/client/assets/index-BVfayRKv.css +1 -0
  247. package/dist/ui/client/assets/index-Noe7uiOY.js +41 -0
  248. package/dist/ui/client/index.html +22 -0
  249. package/dist/ui/server/assets/multipart-parser-pHQi-kA6.js +166 -0
  250. package/dist/ui/server/server.js +79116 -0
  251. package/package.json +30 -13
  252. package/dist/adapters/database/domains/client/repository.d.ts +0 -13
  253. package/dist/adapters/database/domains/client/repository.d.ts.map +0 -1
  254. package/dist/adapters/database/domains/client/repository.mjs +0 -75
  255. package/dist/adapters/database/domains/client/repository.mjs.map +0 -1
  256. package/dist/adapters/database/domains/robot/repository.d.ts +0 -13
  257. package/dist/adapters/database/domains/robot/repository.d.ts.map +0 -1
  258. package/dist/adapters/database/domains/robot/repository.mjs +0 -75
  259. package/dist/adapters/database/domains/robot/repository.mjs.map +0 -1
  260. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts +0 -4
  261. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts.map +0 -1
  262. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs +0 -35
  263. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["OAuth2SubKind","DBody","DController","DDelete","DGet","DPath","DPost","DPut","DRequest","DResponse","DTags","NotFoundError","send","sendAccepted","sendCreated","useRequestParam","useRequestQuery","OAuth2ScopeAttributesResolver","ForceLoggedInMiddleware","isSelfToken","buildActorContext","useRequestIdentity","useRequestScopes","ClientController","service","repository","ctx","getMany","req","res","actor","data","meta","get","id","identity","isMe","type","attributesResolver","attributes","resolveFor","CLIENT","entity","findOneByIdOrName","attribute","attr","withSecret","findOneWithSecret","secret","getOne","add","create","edit","update","put","created","save","undefined","drop","delete"],"sources":["../../../../../../src/adapters/http/controllers/entities/client/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { OAuth2SubKind } from '@authup/specs';\nimport {\n DBody, \n DController, \n DDelete, \n DGet, \n DPath, \n DPost, \n DPut, \n DRequest, \n DResponse, \n DTags,\n} from '@routup/decorators';\nimport { NotFoundError } from '@ebec/http';\nimport type { Client } from '@authup/core-kit';\nimport {\n send, \n sendAccepted, \n sendCreated, \n useRequestParam,\n} from 'routup';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { IClientRepository, IClientService } from '../../../../../core/index.ts';\nimport { OAuth2ScopeAttributesResolver } from '../../../../../core/index.ts';\nimport { ForceLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { isSelfToken } from '../../../../../utils/index.ts';\nimport {\n buildActorContext,\n useRequestIdentity,\n useRequestScopes,\n} from '../../../request/index.ts';\n\nexport type ClientControllerContext = {\n service: IClientService,\n repository: IClientRepository,\n};\n\n@DTags('oauth2')\n@DController('/clients')\nexport class ClientController {\n protected service: IClientService;\n\n protected repository: IClientRepository;\n\n constructor(ctx: ClientControllerContext) {\n this.service = ctx.service;\n this.repository = ctx.repository;\n }\n\n @DGet('', [])\n async getMany(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n data, \n meta, \n } = await this.service.getMany(useRequestQuery(req), actor);\n\n return send(res, {\n data,\n meta, \n });\n }\n\n @DGet('/:id', [])\n async get(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const identity = useRequestIdentity(req);\n\n let isMe = false;\n if (\n identity &&\n identity.type === 'client'\n ) {\n isMe = isSelfToken(id) || identity.id === id;\n }\n\n if (isMe) {\n const attributesResolver = new OAuth2ScopeAttributesResolver();\n const attributes = attributesResolver.resolveFor(OAuth2SubKind.CLIENT, useRequestScopes(req));\n\n const entity = await this.repository.findOneByIdOrName(\n identity!.id,\n useRequestParam(req, 'realmId'),\n );\n\n if (!entity) {\n throw new NotFoundError();\n }\n\n for (const attribute of attributes) {\n const attr = attribute as keyof Client;\n if (attr === 'secret') {\n const withSecret = await this.repository.findOneWithSecret({ id: entity.id });\n if (withSecret) {\n entity.secret = withSecret.secret;\n }\n }\n }\n\n return send(res, entity);\n }\n\n const actor = buildActorContext(req);\n const entity = await this.service.getOne(id, actor, useRequestParam(req, 'realmId'));\n\n return send(res, entity);\n }\n\n @DPost('', [ForceLoggedInMiddleware])\n async add(\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.create(data, actor);\n\n return sendCreated(res, entity);\n }\n\n @DPost('/:id', [ForceLoggedInMiddleware])\n async edit(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.update(id, data, actor);\n\n return sendAccepted(res, entity);\n }\n\n @DPut('/:id', [ForceLoggedInMiddleware])\n async put(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n entity, \n created, \n } = await this.service.save(\n id || undefined,\n data,\n actor,\n );\n\n if (created) {\n return sendCreated(res, entity);\n }\n\n return sendAccepted(res, entity);\n }\n\n @DDelete('/:id', [ForceLoggedInMiddleware])\n async drop(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.delete(id, actor);\n\n return sendAccepted(res, entity);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,IAAauB,mBAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYC,KAA8B;AACtC,OAAKF,UAAUE,IAAIF;AACnB,OAAKC,aAAaC,IAAID;;CAG1B,MACME,QACF,KACA,KACY;EACZ,MAAMG,QAAQV,kBAAkBQ,IAAAA;EAChC,MAAM,EACFG,MACAC,SACA,MAAM,KAAKR,QAAQG,QAAQX,gBAAgBY,IAAAA,EAAME,MAAAA;AAErD,SAAOlB,KAAKiB,KAAK;GACbE;GACAC;GACJ,CAAA;;CAGJ,MACMC,IACF,IACA,KACA,KACY;EACZ,MAAME,WAAWd,mBAAmBO,IAAAA;EAEpC,IAAIQ,OAAO;AACX,MACID,YACAA,SAASE,SAAS,SAElBD,QAAOjB,YAAYe,GAAAA,IAAOC,SAASD,OAAOA;AAG9C,MAAIE,MAAM;GAEN,MAAMG,aAAaD,IADYrB,+BACZqB,CAAmBE,WAAWxC,cAAcyC,QAAQnB,iBAAiBM,IAAAA,CAAAA;GAExF,MAAMc,SAAS,MAAM,KAAKjB,WAAWkB,kBACjCR,SAAUD,IACVnB,gBAAgBa,KAAK,UAAA,CAAA;AAGzB,OAAI,CAACc,OACD,OAAM,IAAI/B,eAAAA;AAGd,QAAK,MAAMiC,aAAaL,WAEpB,KAAIM,cAAS,UAAU;IACnB,MAAMC,aAAa,MAAM,KAAKrB,WAAWsB,kBAAkB,EAAEb,IAAIQ,OAAOR,IAAG,CAAA;AAC3E,QAAIY,WACAJ,QAAOM,SAASF,WAAWE;;AAKvC,UAAOpC,KAAKiB,KAAKa,OAAAA;;EAGrB,MAAMZ,QAAQV,kBAAkBQ,IAAAA;AAGhC,SAAOhB,KAAKiB,KAAKa,MAFI,KAAKlB,QAAQyB,OAAOf,IAAIJ,OAAOf,gBAAgBa,KAAK,UAAA,CAAA,CAExDc;;CAGrB,MACMQ,IACF,MACA,KACA,KACY;EACZ,MAAMpB,QAAQV,kBAAkBQ,IAAAA;AAGhC,SAAOd,YAAYe,KAAKa,MAFH,KAAKlB,QAAQ2B,OAAOpB,MAAMD,MAAAA,CAEvBY;;CAG5B,MACMU,KACF,IACA,MACA,KACA,KACY;EACZ,MAAMtB,QAAQV,kBAAkBQ,IAAAA;AAGhC,SAAOf,aAAagB,KAAKa,MAFJ,KAAKlB,QAAQ6B,OAAOnB,IAAIH,MAAMD,MAAAA,CAE1BY;;CAG7B,MACMY,IACF,IACA,MACA,KACA,KACY;EACZ,MAAMxB,QAAQV,kBAAkBQ,IAAAA;EAChC,MAAM,EACFc,QACAa,YACA,MAAM,KAAK/B,QAAQgC,KACnBtB,MAAMuB,KAAAA,GACN1B,MACAD,MAAAA;AAGJ,MAAIyB,QACA,QAAOzC,YAAYe,KAAKa,OAAAA;AAG5B,SAAO7B,aAAagB,KAAKa,OAAAA;;CAG7B,MACMgB,KACF,IACA,KACA,KACY;EACZ,MAAM5B,QAAQV,kBAAkBQ,IAAAA;AAGhC,SAAOf,aAAagB,KAAKa,MAFJ,KAAKlB,QAAQmC,OAAOzB,IAAIJ,MAAAA,CAEpBY;;;;;;;;;;;;;;;;;;;;;;;;;YA1DjBxB,wBAAAA,CAAAA;;;;;;;;;;;;;gBAYIA,wBAAAA,CAAAA;;;;;;;;;;;;;;;eAaDA,wBAAAA,CAAAA;;;;;;;;;;;;;;;kBAwBGA,wBAAAA,CAAAA"}
1
+ {"version":3,"file":"module.mjs","names":["OAuth2SubKind","DBody","DController","DDelete","DGet","DPath","DPost","DPut","DRequest","DResponse","DTags","NotFoundError","send","sendAccepted","sendCreated","useRequestParam","useRequestQuery","OAuth2ScopeAttributesResolver","ForceLoggedInMiddleware","isSelfToken","buildActorContext","useRequestIdentity","useRequestScopes","ClientController","service","repository","ctx","getMany","req","res","actor","data","meta","get","id","identity","isMe","type","attributesResolver","attributes","resolveFor","CLIENT","entity","findOneByIdOrName","attribute","attr","withSecret","findOneWithSecret","secret","getOne","add","create","edit","update","put","created","save","undefined","drop","delete"],"sources":["../../../../../../src/adapters/http/controllers/entities/client/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { OAuth2SubKind } from '@authup/specs';\nimport {\n DBody, \n DController, \n DDelete, \n DGet, \n DPath, \n DPost, \n DPut, \n DRequest, \n DResponse, \n DTags,\n} from '@routup/decorators';\nimport { NotFoundError } from '@ebec/http';\nimport type { Client } from '@authup/core-kit';\nimport {\n send, \n sendAccepted, \n sendCreated, \n useRequestParam,\n} from 'routup';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { IClientRepository, IClientService } from '../../../../../core/index.ts';\nimport { OAuth2ScopeAttributesResolver } from '../../../../../core/index.ts';\nimport { ForceLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { isSelfToken } from '../../../../../utils/index.ts';\nimport {\n buildActorContext,\n useRequestIdentity,\n useRequestScopes,\n} from '../../../request/index.ts';\n\nexport type ClientControllerContext = {\n service: IClientService,\n repository: IClientRepository,\n};\n\n@DTags('oauth2')\n@DController('/clients')\nexport class ClientController {\n protected service: IClientService;\n\n protected repository: IClientRepository;\n\n constructor(ctx: ClientControllerContext) {\n this.service = ctx.service;\n this.repository = ctx.repository;\n }\n\n @DGet('', [])\n async getMany(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n data, \n meta, \n } = await this.service.getMany(useRequestQuery(req), actor);\n\n return send(res, {\n data,\n meta, \n });\n }\n\n @DGet('/:id', [])\n async get(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const identity = useRequestIdentity(req);\n\n let isMe = false;\n if (\n identity &&\n identity.type === 'client'\n ) {\n isMe = isSelfToken(id) || identity.id === id;\n }\n\n if (isMe) {\n const attributesResolver = new OAuth2ScopeAttributesResolver();\n const attributes = attributesResolver.resolveFor(OAuth2SubKind.CLIENT, useRequestScopes(req));\n\n const entity = await this.repository.findOneByIdOrName(\n identity!.id,\n useRequestParam(req, 'realmId'),\n );\n\n if (!entity) {\n throw new NotFoundError();\n }\n\n for (const attribute of attributes) {\n const attr = attribute as keyof Client;\n if (attr === 'secret') {\n const withSecret = await this.repository.findOneWithSecret({ id: entity.id });\n if (withSecret) {\n entity.secret = withSecret.secret;\n }\n }\n }\n\n return send(res, entity);\n }\n\n const actor = buildActorContext(req);\n const entity = await this.service.getOne(\n id,\n actor,\n useRequestQuery(req),\n useRequestParam(req, 'realmId'),\n );\n\n return send(res, entity);\n }\n\n @DPost('', [ForceLoggedInMiddleware])\n async add(\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.create(data, actor);\n\n return sendCreated(res, entity);\n }\n\n @DPost('/:id', [ForceLoggedInMiddleware])\n async edit(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.update(id, data, actor);\n\n return sendAccepted(res, entity);\n }\n\n @DPut('/:id', [ForceLoggedInMiddleware])\n async put(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n entity, \n created, \n } = await this.service.save(\n id || undefined,\n data,\n actor,\n );\n\n if (created) {\n return sendCreated(res, entity);\n }\n\n return sendAccepted(res, entity);\n }\n\n @DDelete('/:id', [ForceLoggedInMiddleware])\n async drop(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.delete(id, actor);\n\n return sendAccepted(res, entity);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,IAAauB,mBAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYC,KAA8B;AACtC,OAAKF,UAAUE,IAAIF;AACnB,OAAKC,aAAaC,IAAID;;CAG1B,MACME,QACF,KACA,KACY;EACZ,MAAMG,QAAQV,kBAAkBQ,IAAAA;EAChC,MAAM,EACFG,MACAC,SACA,MAAM,KAAKR,QAAQG,QAAQX,gBAAgBY,IAAAA,EAAME,MAAAA;AAErD,SAAOlB,KAAKiB,KAAK;GACbE;GACAC;GACJ,CAAA;;CAGJ,MACMC,IACF,IACA,KACA,KACY;EACZ,MAAME,WAAWd,mBAAmBO,IAAAA;EAEpC,IAAIQ,OAAO;AACX,MACID,YACAA,SAASE,SAAS,SAElBD,QAAOjB,YAAYe,GAAAA,IAAOC,SAASD,OAAOA;AAG9C,MAAIE,MAAM;GAEN,MAAMG,aAAaD,IADYrB,+BACZqB,CAAmBE,WAAWxC,cAAcyC,QAAQnB,iBAAiBM,IAAAA,CAAAA;GAExF,MAAMc,SAAS,MAAM,KAAKjB,WAAWkB,kBACjCR,SAAUD,IACVnB,gBAAgBa,KAAK,UAAA,CAAA;AAGzB,OAAI,CAACc,OACD,OAAM,IAAI/B,eAAAA;AAGd,QAAK,MAAMiC,aAAaL,WAEpB,KAAIM,cAAS,UAAU;IACnB,MAAMC,aAAa,MAAM,KAAKrB,WAAWsB,kBAAkB,EAAEb,IAAIQ,OAAOR,IAAG,CAAA;AAC3E,QAAIY,WACAJ,QAAOM,SAASF,WAAWE;;AAKvC,UAAOpC,KAAKiB,KAAKa,OAAAA;;EAGrB,MAAMZ,QAAQV,kBAAkBQ,IAAAA;AAQhC,SAAOhB,KAAKiB,KAAKa,MAPI,KAAKlB,QAAQyB,OAC9Bf,IACAJ,OACAd,gBAAgBY,IAAAA,EAChBb,gBAAgBa,KAAK,UAAA,CAAA,CAGRc;;CAGrB,MACMQ,IACF,MACA,KACA,KACY;EACZ,MAAMpB,QAAQV,kBAAkBQ,IAAAA;AAGhC,SAAOd,YAAYe,KAAKa,MAFH,KAAKlB,QAAQ2B,OAAOpB,MAAMD,MAAAA,CAEvBY;;CAG5B,MACMU,KACF,IACA,MACA,KACA,KACY;EACZ,MAAMtB,QAAQV,kBAAkBQ,IAAAA;AAGhC,SAAOf,aAAagB,KAAKa,MAFJ,KAAKlB,QAAQ6B,OAAOnB,IAAIH,MAAMD,MAAAA,CAE1BY;;CAG7B,MACMY,IACF,IACA,MACA,KACA,KACY;EACZ,MAAMxB,QAAQV,kBAAkBQ,IAAAA;EAChC,MAAM,EACFc,QACAa,YACA,MAAM,KAAK/B,QAAQgC,KACnBtB,MAAMuB,KAAAA,GACN1B,MACAD,MAAAA;AAGJ,MAAIyB,QACA,QAAOzC,YAAYe,KAAKa,OAAAA;AAG5B,SAAO7B,aAAagB,KAAKa,OAAAA;;CAG7B,MACMgB,KACF,IACA,KACA,KACY;EACZ,MAAM5B,QAAQV,kBAAkBQ,IAAAA;AAGhC,SAAOf,aAAagB,KAAKa,MAFJ,KAAKlB,QAAQmC,OAAOzB,IAAIJ,MAAAA,CAEpBY;;;;;;;;;;;;;;;;;;;;;;;;;YA1DjBxB,wBAAAA,CAAAA;;;;;;;;;;;;;gBAYIA,wBAAAA,CAAAA;;;;;;;;;;;;;;;eAaDA,wBAAAA,CAAAA;;;;;;;;;;;;;;;kBAwBGA,wBAAAA,CAAAA"}
@@ -9,8 +9,8 @@ import "../../../request/index.mjs";
9
9
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
10
10
  import "../../../middleware/index.mjs";
11
11
  import { IdentityProviderAttributesValidator, IdentityProviderValidator, IdentityType, PermissionName, ValidatorGroup, isOAuth2IdentityProvider, isOpenIDIdentityProvider } from "@authup/core-kit";
12
- import { BuiltInPolicyType, PolicyData } from "@authup/access";
13
12
  import { base64URLDecode, isUUID } from "@authup/kit";
13
+ import { BuiltInPolicyType, PolicyData } from "@authup/access";
14
14
  import { OAuth2Error } from "@authup/specs";
15
15
  import { BadRequestError, NotFoundError } from "@ebec/http";
16
16
  import { getRequestHeader, getRequestIP, send, sendAccepted, sendCreated, sendRedirect, useRequestParam } from "routup";
@@ -5,8 +5,8 @@ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import "../../../request/index.mjs";
6
6
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
7
  import "../../../middleware/index.mjs";
8
- import { BuiltInPolicyType, PermissionEvaluator, PolicyData } from "@authup/access";
9
8
  import { isUUID } from "@authup/kit";
9
+ import { BuiltInPolicyType, PermissionEvaluator, PolicyData } from "@authup/access";
10
10
  import { NotFoundError } from "@ebec/http";
11
11
  import { send, sendAccepted, sendCreated, useRequestParam } from "routup";
12
12
  import { useRequestQuery } from "@routup/basic/query";
@@ -5,8 +5,8 @@ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import "../../../request/index.mjs";
6
6
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
7
  import "../../../middleware/index.mjs";
8
- import { BuiltInPolicyType, PolicyData, definePolicyEvaluationContext } from "@authup/access";
9
8
  import { isUUID } from "@authup/kit";
9
+ import { BuiltInPolicyType, PolicyData, definePolicyEvaluationContext } from "@authup/access";
10
10
  import { NotFoundError } from "@ebec/http";
11
11
  import { send, sendAccepted, sendCreated, useRequestParam } from "routup";
12
12
  import { useRequestQuery } from "@routup/basic/query";
@@ -1,5 +1,5 @@
1
- import { AttributeNamesPolicyValidator, AttributesPolicyValidator, BuiltInPolicyType, DatePolicyValidator, TimePolicyValidator } from "@authup/access";
2
1
  import { omitRecord } from "@authup/kit";
2
+ import { AttributeNamesPolicyValidator, AttributesPolicyValidator, BuiltInPolicyType, DatePolicyValidator, TimePolicyValidator } from "@authup/access";
3
3
  import { Container } from "validup";
4
4
  //#region src/adapters/http/controllers/entities/policy/utils/attributes-validator.ts
5
5
  var PolicyAttributesValidator = class extends Container {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../src/adapters/http/controllers/entities/policy/utils/validation.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAI7E,qBAAa,eAAgB,SAAQ,SAAS,CAAC,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;IACxF,SAAS,CAAC,UAAU;CAkHvB"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../../../src/adapters/http/controllers/entities/policy/utils/validation.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAI7E,qBAAa,eAAgB,SAAQ,SAAS,CAAC,YAAY,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;IACxF,SAAS,CAAC,UAAU;CAoHvB"}
@@ -11,7 +11,7 @@ var PolicyValidator = class extends Container {
11
11
  initialize() {
12
12
  super.initialize();
13
13
  const nameValidator = createValidator(() => {
14
- return createValidationChain().exists().notEmpty().isString().isLength({
14
+ return createValidationChain().exists().notEmpty().isString().trim().toLowerCase().isLength({
15
15
  min: 3,
16
16
  max: 128
17
17
  }).custom((value) => isPolicyNameValid(value, { throwOnFailure: true }));
@@ -1 +1 @@
1
- {"version":3,"file":"validation.mjs","names":["BuiltInPolicyType","isPolicyNameValid","isObject","Container","createValidationChain","createValidator","RequestHandlerOperation","PolicyAttributesValidator","PolicyValidator","initialize","nameValidator","chain","exists","notEmpty","isString","isLength","min","max","custom","value","throwOnFailure","mount","group","CREATE","UPDATE","optional","values","isBoolean","isUUID","ctx","Array","isArray","undefined","data","type","COMPOSITE","promises","map","child","run","flat","path","Promise","all"],"sources":["../../../../../../../src/adapters/http/controllers/entities/policy/utils/validation.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { BuiltInPolicyType } from '@authup/access';\nimport { isPolicyNameValid } from '@authup/core-kit';\nimport { isObject } from 'smob';\nimport type { ValidatorContext } from 'validup';\nimport { Container } from 'validup';\nimport { createValidationChain, createValidator } from '@validup/adapter-validator';\nimport type { PolicyEntity } from '../../../../../database/domains/index.ts';\nimport { RequestHandlerOperation } from '../../../../request/index.ts';\nimport { PolicyAttributesValidator } from './attributes-validator.ts';\n\nexport class PolicyValidator extends Container<PolicyEntity & { parent_id?: string | null }> {\n protected initialize() {\n super.initialize();\n\n const nameValidator = createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .notEmpty()\n .isString()\n .isLength({\n min: 3,\n max: 128,\n })\n .custom((value) => isPolicyNameValid(value, { throwOnFailure: true }));\n });\n\n this.mount('name', { group: RequestHandlerOperation.CREATE }, nameValidator);\n this.mount('name', {\n group: RequestHandlerOperation.UPDATE,\n optional: true, \n }, nameValidator);\n\n this.mount(\n 'display_name',\n { optional: true },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .isString()\n .isLength({\n min: 3,\n max: 256, \n })\n .optional({ values: 'null' });\n }),\n );\n\n this.mount(\n 'invert',\n { optional: true },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .isBoolean();\n }),\n );\n\n this.mount(\n 'type',\n { group: RequestHandlerOperation.CREATE },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .isString()\n .isLength({\n min: 3,\n max: 128, \n });\n }),\n );\n\n this.mount(\n 'parent_id',\n { optional: true },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .isUUID()\n .optional({ values: 'null' });\n }),\n );\n\n this.mount(\n 'realm_id',\n { group: RequestHandlerOperation.CREATE },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .isUUID()\n .optional({ values: 'null' });\n }),\n );\n\n this.mount({ optional: true }, new PolicyAttributesValidator({}));\n\n this.mount(\n 'children',\n { optional: true },\n async (ctx: ValidatorContext) => {\n if (!Array.isArray(ctx.value)) {\n // todo: throw error\n return undefined;\n }\n\n if (\n isObject(ctx.data) &&\n ctx.data.type !== BuiltInPolicyType.COMPOSITE\n ) {\n return undefined;\n }\n\n const promises = ctx.value.map((child) => this.run(child, {\n group: ctx.group,\n flat: false,\n path: ctx.path,\n }));\n\n return Promise.all(promises);\n },\n );\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaQ,kBAAb,cAAqCL,UAAAA;CACvBM,aAAa;AACnB,QAAMA,YAAAA;EAEN,MAAMC,gBAAgBL,sBAAgB;AAElC,UADcD,uBACPO,CACFC,QAAM,CACNC,UAAQ,CACRC,UAAQ,CACRC,SAAS;IACNC,KAAK;IACLC,KAAK;IACT,CAAA,CACCC,QAAQC,UAAUlB,kBAAkBkB,OAAO,EAAEC,gBAAgB,MAAK,CAAA,CAAA;IAC3E;AAEA,OAAKC,MAAM,QAAQ,EAAEC,OAAOhB,wBAAwBiB,QAAO,EAAGb,cAAAA;AAC9D,OAAKW,MAAM,QAAQ;GACfC,OAAOhB,wBAAwBkB;GAC/BC,UAAU;GACd,EAAGf,cAAAA;AAEH,OAAKW,MACD,gBACA,EAAEI,UAAU,MAAK,EACjBpB,sBAAgB;AAEZ,UADcD,uBACPO,CACFG,UAAQ,CACRC,SAAS;IACNC,KAAK;IACLC,KAAK;IACT,CAAA,CACCQ,SAAS,EAAEC,QAAQ,QAAO,CAAA;IACnC,CAAA;AAGJ,OAAKL,MACD,UACA,EAAEI,UAAU,MAAK,EACjBpB,sBAAgB;AAEZ,UADcD,uBACPO,CACFgB,WAAS;IAClB,CAAA;AAGJ,OAAKN,MACD,QACA,EAAEC,OAAOhB,wBAAwBiB,QAAO,EACxClB,sBAAgB;AAEZ,UADcD,uBACPO,CACFC,QAAM,CACNE,UAAQ,CACRC,SAAS;IACNC,KAAK;IACLC,KAAK;IACT,CAAA;IACR,CAAA;AAGJ,OAAKI,MACD,aACA,EAAEI,UAAU,MAAK,EACjBpB,sBAAgB;AAEZ,UADcD,uBACPO,CACFC,QAAM,CACNgB,QAAM,CACNH,SAAS,EAAEC,QAAQ,QAAO,CAAA;IACnC,CAAA;AAGJ,OAAKL,MACD,YACA,EAAEC,OAAOhB,wBAAwBiB,QAAO,EACxClB,sBAAgB;AAEZ,UADcD,uBACPO,CACFC,QAAM,CACNgB,QAAM,CACNH,SAAS,EAAEC,QAAQ,QAAO,CAAA;IACnC,CAAA;AAGJ,OAAKL,MAAM,EAAEI,UAAU,MAAK,EAAG,IAAIlB,0BAA0B,EAAC,CAAA,CAAA;AAE9D,OAAKc,MACD,YACA,EAAEI,UAAU,MAAK,EACjB,OAAOI,QAAAA;AACH,OAAI,CAACC,MAAMC,QAAQF,IAAIV,MAAK,CAExB;AAGJ,OACIjB,SAAS2B,IAAII,KAAI,IACjBJ,IAAII,KAAKC,SAASlC,kBAAkBmC,UAEpC;GAGJ,MAAMC,WAAWP,IAAIV,MAAMkB,KAAKC,UAAU,KAAKC,IAAID,OAAO;IACtDhB,OAAOO,IAAIP;IACXkB,MAAM;IACNC,MAAMZ,IAAIY;IACd,CAAA,CAAA;AAEA,UAAOC,QAAQC,IAAIP,SAAAA;IACvB"}
1
+ {"version":3,"file":"validation.mjs","names":["BuiltInPolicyType","isPolicyNameValid","isObject","Container","createValidationChain","createValidator","RequestHandlerOperation","PolicyAttributesValidator","PolicyValidator","initialize","nameValidator","chain","exists","notEmpty","isString","trim","toLowerCase","isLength","min","max","custom","value","throwOnFailure","mount","group","CREATE","UPDATE","optional","values","isBoolean","isUUID","ctx","Array","isArray","undefined","data","type","COMPOSITE","promises","map","child","run","flat","path","Promise","all"],"sources":["../../../../../../../src/adapters/http/controllers/entities/policy/utils/validation.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { BuiltInPolicyType } from '@authup/access';\nimport { isPolicyNameValid } from '@authup/core-kit';\nimport { isObject } from 'smob';\nimport type { ValidatorContext } from 'validup';\nimport { Container } from 'validup';\nimport { createValidationChain, createValidator } from '@validup/adapter-validator';\nimport type { PolicyEntity } from '../../../../../database/domains/index.ts';\nimport { RequestHandlerOperation } from '../../../../request/index.ts';\nimport { PolicyAttributesValidator } from './attributes-validator.ts';\n\nexport class PolicyValidator extends Container<PolicyEntity & { parent_id?: string | null }> {\n protected initialize() {\n super.initialize();\n\n const nameValidator = createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .notEmpty()\n .isString()\n .trim()\n .toLowerCase()\n .isLength({\n min: 3,\n max: 128,\n })\n .custom((value) => isPolicyNameValid(value, { throwOnFailure: true }));\n });\n\n this.mount('name', { group: RequestHandlerOperation.CREATE }, nameValidator);\n this.mount('name', {\n group: RequestHandlerOperation.UPDATE,\n optional: true, \n }, nameValidator);\n\n this.mount(\n 'display_name',\n { optional: true },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .isString()\n .isLength({\n min: 3,\n max: 256, \n })\n .optional({ values: 'null' });\n }),\n );\n\n this.mount(\n 'invert',\n { optional: true },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .isBoolean();\n }),\n );\n\n this.mount(\n 'type',\n { group: RequestHandlerOperation.CREATE },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .isString()\n .isLength({\n min: 3,\n max: 128, \n });\n }),\n );\n\n this.mount(\n 'parent_id',\n { optional: true },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .isUUID()\n .optional({ values: 'null' });\n }),\n );\n\n this.mount(\n 'realm_id',\n { group: RequestHandlerOperation.CREATE },\n createValidator(() => {\n const chain = createValidationChain();\n return chain\n .exists()\n .isUUID()\n .optional({ values: 'null' });\n }),\n );\n\n this.mount({ optional: true }, new PolicyAttributesValidator({}));\n\n this.mount(\n 'children',\n { optional: true },\n async (ctx: ValidatorContext) => {\n if (!Array.isArray(ctx.value)) {\n // todo: throw error\n return undefined;\n }\n\n if (\n isObject(ctx.data) &&\n ctx.data.type !== BuiltInPolicyType.COMPOSITE\n ) {\n return undefined;\n }\n\n const promises = ctx.value.map((child) => this.run(child, {\n group: ctx.group,\n flat: false,\n path: ctx.path,\n }));\n\n return Promise.all(promises);\n },\n );\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaQ,kBAAb,cAAqCL,UAAAA;CACvBM,aAAa;AACnB,QAAMA,YAAAA;EAEN,MAAMC,gBAAgBL,sBAAgB;AAElC,UADcD,uBACPO,CACFC,QAAM,CACNC,UAAQ,CACRC,UAAQ,CACRC,MAAI,CACJC,aAAW,CACXC,SAAS;IACNC,KAAK;IACLC,KAAK;IACT,CAAA,CACCC,QAAQC,UAAUpB,kBAAkBoB,OAAO,EAAEC,gBAAgB,MAAK,CAAA,CAAA;IAC3E;AAEA,OAAKC,MAAM,QAAQ,EAAEC,OAAOlB,wBAAwBmB,QAAO,EAAGf,cAAAA;AAC9D,OAAKa,MAAM,QAAQ;GACfC,OAAOlB,wBAAwBoB;GAC/BC,UAAU;GACd,EAAGjB,cAAAA;AAEH,OAAKa,MACD,gBACA,EAAEI,UAAU,MAAK,EACjBtB,sBAAgB;AAEZ,UADcD,uBACPO,CACFG,UAAQ,CACRG,SAAS;IACNC,KAAK;IACLC,KAAK;IACT,CAAA,CACCQ,SAAS,EAAEC,QAAQ,QAAO,CAAA;IACnC,CAAA;AAGJ,OAAKL,MACD,UACA,EAAEI,UAAU,MAAK,EACjBtB,sBAAgB;AAEZ,UADcD,uBACPO,CACFkB,WAAS;IAClB,CAAA;AAGJ,OAAKN,MACD,QACA,EAAEC,OAAOlB,wBAAwBmB,QAAO,EACxCpB,sBAAgB;AAEZ,UADcD,uBACPO,CACFC,QAAM,CACNE,UAAQ,CACRG,SAAS;IACNC,KAAK;IACLC,KAAK;IACT,CAAA;IACR,CAAA;AAGJ,OAAKI,MACD,aACA,EAAEI,UAAU,MAAK,EACjBtB,sBAAgB;AAEZ,UADcD,uBACPO,CACFC,QAAM,CACNkB,QAAM,CACNH,SAAS,EAAEC,QAAQ,QAAO,CAAA;IACnC,CAAA;AAGJ,OAAKL,MACD,YACA,EAAEC,OAAOlB,wBAAwBmB,QAAO,EACxCpB,sBAAgB;AAEZ,UADcD,uBACPO,CACFC,QAAM,CACNkB,QAAM,CACNH,SAAS,EAAEC,QAAQ,QAAO,CAAA;IACnC,CAAA;AAGJ,OAAKL,MAAM,EAAEI,UAAU,MAAK,EAAG,IAAIpB,0BAA0B,EAAC,CAAA,CAAA;AAE9D,OAAKgB,MACD,YACA,EAAEI,UAAU,MAAK,EACjB,OAAOI,QAAAA;AACH,OAAI,CAACC,MAAMC,QAAQF,IAAIV,MAAK,CAExB;AAGJ,OACInB,SAAS6B,IAAII,KAAI,IACjBJ,IAAII,KAAKC,SAASpC,kBAAkBqC,UAEpC;GAGJ,MAAMC,WAAWP,IAAIV,MAAMkB,KAAKC,UAAU,KAAKC,IAAID,OAAO;IACtDhB,OAAOO,IAAIP;IACXkB,MAAM;IACNC,MAAMZ,IAAIY;IACd,CAAA,CAAA;AAEA,UAAOC,QAAQC,IAAIP,SAAAA;IACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/entities/robot/module.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAWtG,MAAM,MAAM,sBAAsB,GAAG;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,EAAE,gBAAgB,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;CAC1B,CAAC;AAEF,qBAEa,eAAe;IACxB,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC;IAEjC,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAEvC,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;gBAErB,GAAG,EAAE,sBAAsB;IAQjC,OAAO,CACG,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAcT,GAAG,CACI,IAAI,EAAE,GAAG,EACN,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAQT,MAAM,CACK,EAAE,EAAE,MAAM,EACX,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IA8ET,IAAI,CACO,EAAE,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EACN,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAaT,GAAG,CACQ,EAAE,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EACN,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAmBT,IAAI,CACO,EAAE,EAAE,MAAM,EACX,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;CAMlB"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/entities/robot/module.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAWtG,MAAM,MAAM,sBAAsB,GAAG;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,EAAE,gBAAgB,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC;CAC1B,CAAC;AAEF,qBAEa,eAAe;IACxB,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC;IAEjC,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAEvC,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;gBAErB,GAAG,EAAE,sBAAsB;IAQjC,OAAO,CACG,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAcT,GAAG,CACI,IAAI,EAAE,GAAG,EACN,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAQT,MAAM,CACK,EAAE,EAAE,MAAM,EACX,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IA+ET,IAAI,CACO,EAAE,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EACN,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAaT,GAAG,CACQ,EAAE,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EACN,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;IAmBT,IAAI,CACO,EAAE,EAAE,MAAM,EACX,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,GAAG,CAAC;CAMlB"}
@@ -79,7 +79,7 @@ var RobotController = class {
79
79
  }
80
80
  } else {
81
81
  const actor = buildActorContext(req);
82
- entity = await this.service.getOne(id, actor, useRequestParam(req, "realmId"));
82
+ entity = await this.service.getOne(id, actor, useRequestQuery(req), useRequestParam(req, "realmId"));
83
83
  return send(res, entity);
84
84
  }
85
85
  if (!entity) throw new NotFoundError();
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["OAuth2SubKind","DBody","DController","DDelete","DGet","DPath","DPost","DPut","DRequest","DResponse","DTags","isUUID","NotFoundError","send","sendAccepted","sendCreated","useRequestParam","useRequestQuery","OAuth2ScopeAttributesResolver","RobotEntity","ForceLoggedInMiddleware","isSelfToken","buildActorContext","useRequestIdentity","useRequestScopes","RobotController","service","repository","realmRepository","dataSource","ctx","getMany","req","res","actor","data","meta","add","entity","save","undefined","getOne","id","identity","isMe","type","realm","resolve","realmId","name","attributesResolver","attributes","resolveFor","ROBOT","resolvedId","findOneByIdOrName","robotRepository","getRepository","validAttributes","metadata","columns","map","column","databaseName","attribute","isValid","includes","withSecret","findOneWithSecret","secret","edit","updateOnly","put","created","drop","delete"],"sources":["../../../../../../src/adapters/http/controllers/entities/robot/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { OAuth2SubKind } from '@authup/specs';\nimport {\n DBody, \n DController, \n DDelete, \n DGet, \n DPath, \n DPost, \n DPut, \n DRequest, \n DResponse, \n DTags,\n} from '@routup/decorators';\nimport { isUUID } from '@authup/kit';\nimport { NotFoundError } from '@ebec/http';\nimport type { Robot } from '@authup/core-kit';\nimport {\n send, \n sendAccepted, \n sendCreated, \n useRequestParam,\n} from 'routup';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { DataSource } from 'typeorm';\nimport type { IRealmRepository, IRobotRepository, IRobotService } from '../../../../../core/index.ts';\nimport { OAuth2ScopeAttributesResolver } from '../../../../../core/index.ts';\nimport { RobotEntity } from '../../../../database/domains/index.ts';\nimport { ForceLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { isSelfToken } from '../../../../../utils/index.ts';\nimport {\n buildActorContext,\n useRequestIdentity,\n useRequestScopes,\n} from '../../../request/index.ts';\n\nexport type RobotControllerContext = {\n service: IRobotService,\n repository: IRobotRepository,\n realmRepository: IRealmRepository,\n dataSource: DataSource,\n};\n\n@DTags('robot')\n@DController('/robots')\nexport class RobotController {\n protected service: IRobotService;\n\n protected repository: IRobotRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected dataSource: DataSource;\n\n constructor(ctx: RobotControllerContext) {\n this.service = ctx.service;\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.dataSource = ctx.dataSource;\n }\n\n @DGet('', [ForceLoggedInMiddleware])\n async getMany(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n data, \n meta, \n } = await this.service.getMany(useRequestQuery(req), actor);\n\n return send(res, {\n data,\n meta, \n });\n }\n\n @DPost('', [ForceLoggedInMiddleware])\n async add(\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const { entity } = await this.service.save(undefined, data, actor);\n\n return sendCreated(res, entity);\n }\n\n @DGet('/:id', [ForceLoggedInMiddleware])\n async getOne(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const identity = useRequestIdentity(req);\n let isMe = false;\n\n if (\n isSelfToken(id) &&\n identity &&\n identity.type === 'robot'\n ) {\n isMe = true;\n } else if (isUUID(id)) {\n if (\n identity &&\n identity.type === 'robot' &&\n id === identity.id\n ) {\n isMe = true;\n }\n } else if (\n identity &&\n identity.type === 'robot'\n ) {\n const realm = await this.realmRepository.resolve(useRequestParam(req, 'realmId'), true);\n if (\n identity.realmId === realm.id &&\n identity.data &&\n identity.data.name === id\n ) {\n isMe = true;\n }\n }\n\n let entity: Robot | null;\n\n if (isMe) {\n const attributesResolver = new OAuth2ScopeAttributesResolver();\n const attributes = attributesResolver.resolveFor(OAuth2SubKind.ROBOT, useRequestScopes(req));\n\n const resolvedId = isSelfToken(id) ? identity!.id : id;\n entity = await this.repository.findOneByIdOrName(\n resolvedId,\n useRequestParam(req, 'realmId'),\n );\n\n if (entity) {\n const robotRepository = this.dataSource.getRepository(RobotEntity);\n const validAttributes = robotRepository.metadata.columns.map(\n (column) => column.databaseName,\n );\n for (const attribute of attributes) {\n const isValid = validAttributes.includes(attribute);\n if (isValid && attribute === 'secret') {\n const withSecret = await this.repository.findOneWithSecret({ id: entity.id });\n if (withSecret) {\n entity.secret = withSecret.secret;\n }\n }\n }\n }\n } else {\n const actor = buildActorContext(req);\n entity = await this.service.getOne(\n id,\n actor,\n useRequestParam(req, 'realmId'),\n );\n\n return send(res, entity);\n }\n\n if (!entity) {\n throw new NotFoundError();\n }\n\n return send(res, entity);\n }\n\n @DPost('/:id', [ForceLoggedInMiddleware])\n async edit(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const { entity } = await this.service.save(\n id,\n data,\n actor,\n { updateOnly: true },\n );\n\n return sendAccepted(res, entity);\n }\n\n @DPut('/:id', [ForceLoggedInMiddleware])\n async put(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n entity, \n created, \n } = await this.service.save(\n id || undefined,\n data,\n actor,\n );\n\n if (created) {\n return sendCreated(res, entity);\n }\n\n return sendAccepted(res, entity);\n }\n\n @DDelete('/:id', [ForceLoggedInMiddleware])\n async drop(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.delete(id, actor);\n\n return sendAccepted(res, entity);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"module.mjs","names":["OAuth2SubKind","DBody","DController","DDelete","DGet","DPath","DPost","DPut","DRequest","DResponse","DTags","isUUID","NotFoundError","send","sendAccepted","sendCreated","useRequestParam","useRequestQuery","OAuth2ScopeAttributesResolver","RobotEntity","ForceLoggedInMiddleware","isSelfToken","buildActorContext","useRequestIdentity","useRequestScopes","RobotController","service","repository","realmRepository","dataSource","ctx","getMany","req","res","actor","data","meta","add","entity","save","undefined","getOne","id","identity","isMe","type","realm","resolve","realmId","name","attributesResolver","attributes","resolveFor","ROBOT","resolvedId","findOneByIdOrName","robotRepository","getRepository","validAttributes","metadata","columns","map","column","databaseName","attribute","isValid","includes","withSecret","findOneWithSecret","secret","edit","updateOnly","put","created","drop","delete"],"sources":["../../../../../../src/adapters/http/controllers/entities/robot/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { OAuth2SubKind } from '@authup/specs';\nimport {\n DBody, \n DController, \n DDelete, \n DGet, \n DPath, \n DPost, \n DPut, \n DRequest, \n DResponse, \n DTags,\n} from '@routup/decorators';\nimport { isUUID } from '@authup/kit';\nimport { NotFoundError } from '@ebec/http';\nimport type { Robot } from '@authup/core-kit';\nimport {\n send, \n sendAccepted, \n sendCreated, \n useRequestParam,\n} from 'routup';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { DataSource } from 'typeorm';\nimport type { IRealmRepository, IRobotRepository, IRobotService } from '../../../../../core/index.ts';\nimport { OAuth2ScopeAttributesResolver } from '../../../../../core/index.ts';\nimport { RobotEntity } from '../../../../database/domains/index.ts';\nimport { ForceLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { isSelfToken } from '../../../../../utils/index.ts';\nimport {\n buildActorContext,\n useRequestIdentity,\n useRequestScopes,\n} from '../../../request/index.ts';\n\nexport type RobotControllerContext = {\n service: IRobotService,\n repository: IRobotRepository,\n realmRepository: IRealmRepository,\n dataSource: DataSource,\n};\n\n@DTags('robot')\n@DController('/robots')\nexport class RobotController {\n protected service: IRobotService;\n\n protected repository: IRobotRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected dataSource: DataSource;\n\n constructor(ctx: RobotControllerContext) {\n this.service = ctx.service;\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.dataSource = ctx.dataSource;\n }\n\n @DGet('', [ForceLoggedInMiddleware])\n async getMany(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n data, \n meta, \n } = await this.service.getMany(useRequestQuery(req), actor);\n\n return send(res, {\n data,\n meta, \n });\n }\n\n @DPost('', [ForceLoggedInMiddleware])\n async add(\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const { entity } = await this.service.save(undefined, data, actor);\n\n return sendCreated(res, entity);\n }\n\n @DGet('/:id', [ForceLoggedInMiddleware])\n async getOne(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const identity = useRequestIdentity(req);\n let isMe = false;\n\n if (\n isSelfToken(id) &&\n identity &&\n identity.type === 'robot'\n ) {\n isMe = true;\n } else if (isUUID(id)) {\n if (\n identity &&\n identity.type === 'robot' &&\n id === identity.id\n ) {\n isMe = true;\n }\n } else if (\n identity &&\n identity.type === 'robot'\n ) {\n const realm = await this.realmRepository.resolve(useRequestParam(req, 'realmId'), true);\n if (\n identity.realmId === realm.id &&\n identity.data &&\n identity.data.name === id\n ) {\n isMe = true;\n }\n }\n\n let entity: Robot | null;\n\n if (isMe) {\n const attributesResolver = new OAuth2ScopeAttributesResolver();\n const attributes = attributesResolver.resolveFor(OAuth2SubKind.ROBOT, useRequestScopes(req));\n\n const resolvedId = isSelfToken(id) ? identity!.id : id;\n entity = await this.repository.findOneByIdOrName(\n resolvedId,\n useRequestParam(req, 'realmId'),\n );\n\n if (entity) {\n const robotRepository = this.dataSource.getRepository(RobotEntity);\n const validAttributes = robotRepository.metadata.columns.map(\n (column) => column.databaseName,\n );\n for (const attribute of attributes) {\n const isValid = validAttributes.includes(attribute);\n if (isValid && attribute === 'secret') {\n const withSecret = await this.repository.findOneWithSecret({ id: entity.id });\n if (withSecret) {\n entity.secret = withSecret.secret;\n }\n }\n }\n }\n } else {\n const actor = buildActorContext(req);\n entity = await this.service.getOne(\n id,\n actor,\n useRequestQuery(req),\n useRequestParam(req, 'realmId'),\n );\n\n return send(res, entity);\n }\n\n if (!entity) {\n throw new NotFoundError();\n }\n\n return send(res, entity);\n }\n\n @DPost('/:id', [ForceLoggedInMiddleware])\n async edit(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const { entity } = await this.service.save(\n id,\n data,\n actor,\n { updateOnly: true },\n );\n\n return sendAccepted(res, entity);\n }\n\n @DPut('/:id', [ForceLoggedInMiddleware])\n async put(\n @DPath('id') id: string,\n @DBody() data: any,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const {\n entity, \n created, \n } = await this.service.save(\n id || undefined,\n data,\n actor,\n );\n\n if (created) {\n return sendCreated(res, entity);\n }\n\n return sendAccepted(res, entity);\n }\n\n @DDelete('/:id', [ForceLoggedInMiddleware])\n async drop(\n @DPath('id') id: string,\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<any> {\n const actor = buildActorContext(req);\n const entity = await this.service.delete(id, actor);\n\n return sendAccepted(res, entity);\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAU,8BAA8B,EAAS,MAAM,kBAAkB,CAAC;AAItF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AAG5F,OAAO,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAEzF,qBACa,mBAAmB;IAI5B,SAAS,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAE9C,SAAS,CAAC,mBAAmB,EAAG,uCAAuC,CAAC;IAExE,SAAS,CAAC,oBAAoB,EAAG,sBAAsB,CAAC,8BAA8B,CAAC,CAAC;IAExF,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC;gBAI/B,GAAG,EAAE,0BAA0B;IAoBrC,OAAO,CACG,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,IAAI,CAAC;IAwBV,KAAK,CACK,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,IAAI,CAAC;CAkFnB"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAU,8BAA8B,EAAS,MAAM,kBAAkB,CAAC;AAItF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AAG5F,OAAO,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAEzF,qBACa,mBAAmB;IAI5B,SAAS,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAE9C,SAAS,CAAC,mBAAmB,EAAG,uCAAuC,CAAC;IAExE,SAAS,CAAC,oBAAoB,EAAG,sBAAsB,CAAC,8BAA8B,CAAC,CAAC;IAExF,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC;gBAI/B,GAAG,EAAE,0BAA0B;IAoBrC,OAAO,CACG,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,IAAI,CAAC;IAwBV,KAAK,CACK,GAAG,EAAE,GAAG,EACP,GAAG,EAAE,GAAG,GACtB,OAAO,CAAC,IAAI,CAAC;CAgFnB"}
@@ -3,7 +3,7 @@ import "../../../../../core/index.mjs";
3
3
  import { HTTPOAuth2Authorizer } from "../../../adapters/oauth2/authorization/module.mjs";
4
4
  import "../../../adapters/index.mjs";
5
5
  import { ForceUserLoggedInMiddleware } from "../../../middleware/built-in/loggedin/user.mjs";
6
- import { CLIENT_WEB_SLIM_PACKAGE_PATH } from "../../../../../path.mjs";
6
+ import { UI_DIST_PATH, UI_SOURCE_PATH } from "../../../../../path.mjs";
7
7
  import { sanitizeError } from "../../../../../utils/error.mjs";
8
8
  import "../../../../../utils/index.mjs";
9
9
  import "../../../middleware/index.mjs";
@@ -88,19 +88,18 @@ var AuthorizeController = class {
88
88
  let html;
89
89
  let manifest;
90
90
  let render;
91
- const clientWebSlimPackagePath = CLIENT_WEB_SLIM_PACKAGE_PATH;
92
91
  if (isJIT) {
93
92
  /**
94
93
  * @type {import('vite').ViteDevServer}
95
94
  */ const vite = useRequestParam(req, "viteServer");
96
- html = await fs.promises.readFile(path.join(clientWebSlimPackagePath, "index.html"), "utf-8");
95
+ html = await fs.promises.readFile(path.join(UI_SOURCE_PATH, "index.html"), "utf-8");
97
96
  html = await vite.transformIndexHtml("/", html);
98
97
  manifest = {};
99
98
  render = (await vite.ssrLoadModule("/src/server.ts")).render;
100
99
  } else {
101
- html = await fs.promises.readFile(path.join(clientWebSlimPackagePath, "dist", "client", "index.html"), "utf-8");
102
- manifest = JSON.parse(await fs.promises.readFile(path.join(clientWebSlimPackagePath, "dist", "client", ".vite", "ssr-manifest.json"), "utf-8"));
103
- render = (await load(path.join(clientWebSlimPackagePath, "dist", "server", "server.js"))).render;
100
+ html = await fs.promises.readFile(path.join(UI_DIST_PATH, "client", "index.html"), "utf-8");
101
+ manifest = JSON.parse(await fs.promises.readFile(path.join(UI_DIST_PATH, "client", ".vite", "ssr-manifest.json"), "utf-8"));
102
+ render = (await load(path.join(UI_DIST_PATH, "server", "server.js"))).render;
104
103
  }
105
104
  const [appHtml, preloadLinks] = await render({
106
105
  url: "/authorize",
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["DController","DGet","DPost","DRequest","DResponse","load","fs","path","URL","send","useRequestParam","RoutupContainerAdapter","CodeTransformation","isCodeTransformation","CLIENT_WEB_SLIM_PACKAGE_PATH","ForceUserLoggedInMiddleware","HTTPOAuth2Authorizer","OAuth2AuthorizationCodeRequestValidator","sanitizeError","AuthorizeController","options","codeRequestVerifier","codeRequestValidator","authorizer","ctx","validator","accessTokenIssuer","openIdTokenIssuer","codeIssuer","identityResolver","confirm","req","res","result","authorizeWithRequest","url","redirectUri","state","searchParams","set","authorizationCode","accessToken","idToken","href","serve","codeRequest","client","scopes","error","data","run","locations","verify","e","normalized","message","isJIT","JUST_IN_TIME","payload","config","baseURL","html","manifest","render","clientWebSlimPackagePath","vite","promises","readFile","join","transformIndexHtml","ssrLoadModule","JSON","parse","appHtml","preloadLinks","replace"],"sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\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 {\n DController, \n DGet, \n DPost, \n DRequest, \n DResponse,\n} from '@routup/decorators';\nimport { load } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { URL } from 'node:url';\nimport { send, useRequestParam } from 'routup';\nimport { RoutupContainerAdapter } from '@validup/adapter-routup';\nimport type { Client, OAuth2AuthorizationCodeRequest, Scope } from '@authup/core-kit';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport { CLIENT_WEB_SLIM_PACKAGE_PATH } from '../../../../../path.ts';\nimport { ForceUserLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { HTTPOAuth2Authorizer } from '../../../adapters/index.ts';\nimport type { IOAuth2AuthorizationCodeRequestVerifier } from '../../../../../core/index.ts';\nimport { OAuth2AuthorizationCodeRequestValidator } from '../../../../../core/index.ts';\nimport { sanitizeError } from '../../../../../utils/index.ts';\nimport type { AuthorizeControllerContext, AuthorizeControllerOptions } from './types.ts';\n\n@DController('/authorize')\nexport class AuthorizeController {\n // todo: maybe /realms/<realm>/protocol/openid-connect/authorize\n // todo: maybe /realms/<realm>/[...]/authorize\n\n protected options: AuthorizeControllerOptions;\n\n protected codeRequestVerifier : IOAuth2AuthorizationCodeRequestVerifier;\n\n protected codeRequestValidator : RoutupContainerAdapter<OAuth2AuthorizationCodeRequest>;\n\n protected authorizer: HTTPOAuth2Authorizer;\n\n // ---------------------------------------------------------\n\n constructor(ctx: AuthorizeControllerContext) {\n this.options = ctx.options;\n\n this.codeRequestVerifier = ctx.codeRequestVerifier;\n\n const validator = new OAuth2AuthorizationCodeRequestValidator();\n this.codeRequestValidator = new RoutupContainerAdapter(validator);\n\n this.authorizer = new HTTPOAuth2Authorizer({\n codeRequestVerifier: this.codeRequestVerifier,\n accessTokenIssuer: ctx.accessTokenIssuer,\n openIdTokenIssuer: ctx.openIdTokenIssuer,\n codeIssuer: ctx.codeIssuer,\n identityResolver: ctx.identityResolver,\n });\n }\n\n // ---------------------------------------------------------\n\n @DPost('', [ForceUserLoggedInMiddleware])\n async confirm(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<void> {\n const result = await this.authorizer.authorizeWithRequest(req);\n\n const url = new URL(result.redirectUri);\n if (result.state) {\n url.searchParams.set('state', result.state);\n }\n\n if (result.authorizationCode) {\n url.searchParams.set('code', result.authorizationCode);\n }\n\n if (result.accessToken) {\n url.searchParams.set('access_token', result.accessToken);\n }\n\n if (result.idToken) {\n url.searchParams.set('id_token', result.idToken);\n }\n\n return send(res, { url: url.href });\n }\n\n @DGet('', [])\n async serve(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<void> {\n let codeRequest : OAuth2AuthorizationCodeRequest | undefined;\n\n let client : Client | undefined;\n let scopes : Scope[] | undefined;\n\n let error : Error | undefined;\n\n try {\n const data = await this.codeRequestValidator.run(req, { locations: ['body', 'query'] });\n\n const result = await this.codeRequestVerifier.verify(data);\n client = result.client;\n scopes = result.scopes;\n\n codeRequest = result.data;\n } catch (e) {\n const normalized = sanitizeError(e);\n error = {\n ...normalized,\n message: normalized.message,\n };\n }\n\n const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);\n\n const payload = {\n config: { baseURL: this.options.baseURL },\n data: {\n codeRequest,\n error,\n client,\n scopes,\n },\n };\n\n let html : string;\n let manifest : Record<string, any>;\n let render : CallableFunction;\n\n const clientWebSlimPackagePath = CLIENT_WEB_SLIM_PACKAGE_PATH;\n\n if (isJIT) {\n /**\n * @type {import('vite').ViteDevServer}\n */\n const vite = useRequestParam(req, 'viteServer');\n\n html = await fs.promises.readFile(\n path.join(clientWebSlimPackagePath, 'index.html'),\n 'utf-8',\n );\n html = await vite.transformIndexHtml('/', html);\n manifest = {};\n render = (await vite.ssrLoadModule('/src/server.ts')).render;\n } else {\n html = await fs.promises.readFile(\n path.join(clientWebSlimPackagePath, 'dist', 'client', 'index.html'),\n 'utf-8',\n );\n\n manifest = JSON.parse(await fs.promises.readFile(\n path.join(clientWebSlimPackagePath, 'dist', 'client', '.vite', 'ssr-manifest.json'),\n 'utf-8',\n ));\n\n render = (await load(path.join(clientWebSlimPackagePath, 'dist', 'server', 'server.js'))).render;\n }\n\n const [appHtml, preloadLinks] = await render({\n url: '/authorize',\n manifest,\n payload,\n });\n\n return send(\n res,\n html\n .replace('<!--preload-links-->', preloadLinks)\n .replace('<!--app-html-->', appHtml),\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"module.mjs","names":["DController","DGet","DPost","DRequest","DResponse","load","fs","path","URL","send","useRequestParam","RoutupContainerAdapter","CodeTransformation","isCodeTransformation","UI_DIST_PATH","UI_SOURCE_PATH","ForceUserLoggedInMiddleware","HTTPOAuth2Authorizer","OAuth2AuthorizationCodeRequestValidator","sanitizeError","AuthorizeController","options","codeRequestVerifier","codeRequestValidator","authorizer","ctx","validator","accessTokenIssuer","openIdTokenIssuer","codeIssuer","identityResolver","confirm","req","res","result","authorizeWithRequest","url","redirectUri","state","searchParams","set","authorizationCode","accessToken","idToken","href","serve","codeRequest","client","scopes","error","data","run","locations","verify","e","normalized","message","isJIT","JUST_IN_TIME","payload","config","baseURL","html","manifest","render","vite","promises","readFile","join","transformIndexHtml","ssrLoadModule","JSON","parse","appHtml","preloadLinks","replace"],"sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\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 {\n DController, \n DGet, \n DPost, \n DRequest, \n DResponse,\n} from '@routup/decorators';\nimport { load } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { URL } from 'node:url';\nimport { send, useRequestParam } from 'routup';\nimport { RoutupContainerAdapter } from '@validup/adapter-routup';\nimport type { Client, OAuth2AuthorizationCodeRequest, Scope } from '@authup/core-kit';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport { UI_DIST_PATH, UI_SOURCE_PATH } from '../../../../../path.ts';\nimport { ForceUserLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { HTTPOAuth2Authorizer } from '../../../adapters/index.ts';\nimport type { IOAuth2AuthorizationCodeRequestVerifier } from '../../../../../core/index.ts';\nimport { OAuth2AuthorizationCodeRequestValidator } from '../../../../../core/index.ts';\nimport { sanitizeError } from '../../../../../utils/index.ts';\nimport type { AuthorizeControllerContext, AuthorizeControllerOptions } from './types.ts';\n\n@DController('/authorize')\nexport class AuthorizeController {\n // todo: maybe /realms/<realm>/protocol/openid-connect/authorize\n // todo: maybe /realms/<realm>/[...]/authorize\n\n protected options: AuthorizeControllerOptions;\n\n protected codeRequestVerifier : IOAuth2AuthorizationCodeRequestVerifier;\n\n protected codeRequestValidator : RoutupContainerAdapter<OAuth2AuthorizationCodeRequest>;\n\n protected authorizer: HTTPOAuth2Authorizer;\n\n // ---------------------------------------------------------\n\n constructor(ctx: AuthorizeControllerContext) {\n this.options = ctx.options;\n\n this.codeRequestVerifier = ctx.codeRequestVerifier;\n\n const validator = new OAuth2AuthorizationCodeRequestValidator();\n this.codeRequestValidator = new RoutupContainerAdapter(validator);\n\n this.authorizer = new HTTPOAuth2Authorizer({\n codeRequestVerifier: this.codeRequestVerifier,\n accessTokenIssuer: ctx.accessTokenIssuer,\n openIdTokenIssuer: ctx.openIdTokenIssuer,\n codeIssuer: ctx.codeIssuer,\n identityResolver: ctx.identityResolver,\n });\n }\n\n // ---------------------------------------------------------\n\n @DPost('', [ForceUserLoggedInMiddleware])\n async confirm(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<void> {\n const result = await this.authorizer.authorizeWithRequest(req);\n\n const url = new URL(result.redirectUri);\n if (result.state) {\n url.searchParams.set('state', result.state);\n }\n\n if (result.authorizationCode) {\n url.searchParams.set('code', result.authorizationCode);\n }\n\n if (result.accessToken) {\n url.searchParams.set('access_token', result.accessToken);\n }\n\n if (result.idToken) {\n url.searchParams.set('id_token', result.idToken);\n }\n\n return send(res, { url: url.href });\n }\n\n @DGet('', [])\n async serve(\n @DRequest() req: any,\n @DResponse() res: any,\n ): Promise<void> {\n let codeRequest : OAuth2AuthorizationCodeRequest | undefined;\n\n let client : Client | undefined;\n let scopes : Scope[] | undefined;\n\n let error : Error | undefined;\n\n try {\n const data = await this.codeRequestValidator.run(req, { locations: ['body', 'query'] });\n\n const result = await this.codeRequestVerifier.verify(data);\n client = result.client;\n scopes = result.scopes;\n\n codeRequest = result.data;\n } catch (e) {\n const normalized = sanitizeError(e);\n error = {\n ...normalized,\n message: normalized.message,\n };\n }\n\n const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);\n\n const payload = {\n config: { baseURL: this.options.baseURL },\n data: {\n codeRequest,\n error,\n client,\n scopes,\n },\n };\n\n let html : string;\n let manifest : Record<string, any>;\n let render : CallableFunction;\n\n if (isJIT) {\n /**\n * @type {import('vite').ViteDevServer}\n */\n const vite = useRequestParam(req, 'viteServer');\n\n html = await fs.promises.readFile(\n path.join(UI_SOURCE_PATH, 'index.html'),\n 'utf-8',\n );\n html = await vite.transformIndexHtml('/', html);\n manifest = {};\n render = (await vite.ssrLoadModule('/src/server.ts')).render;\n } else {\n html = await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', 'index.html'),\n 'utf-8',\n );\n\n manifest = JSON.parse(await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', '.vite', 'ssr-manifest.json'),\n 'utf-8',\n ));\n\n render = (await load(path.join(UI_DIST_PATH, 'server', 'server.js'))).render;\n }\n\n const [appHtml, preloadLinks] = await render({\n url: '/authorize',\n manifest,\n payload,\n });\n\n return send(\n res,\n html\n .replace('<!--preload-links-->', preloadLinks)\n .replace('<!--app-html-->', appHtml),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAaoB,sBAAb,MAAaA;CAICC;CAEAC;CAEAC;CAEAC;CAIV,YAAYC,KAAiC;AACzC,OAAKJ,UAAUI,IAAIJ;AAEnB,OAAKC,sBAAsBG,IAAIH;EAE/B,MAAMI,YAAY,IAAIR,yCAAAA;AACtB,OAAKK,uBAAuB,IAAIZ,uBAAuBe,UAAAA;AAEvD,OAAKF,aAAa,IAAIP,qBAAqB;GACvCK,qBAAqB,KAAKA;GAC1BK,mBAAmBF,IAAIE;GACvBC,mBAAmBH,IAAIG;GACvBC,YAAYJ,IAAII;GAChBC,kBAAkBL,IAAIK;GAC1B,CAAA;;CAKJ,MACMC,QACF,KACA,KACa;EACb,MAAMG,SAAS,MAAM,KAAKV,WAAWW,qBAAqBH,IAAAA;EAE1D,MAAMI,MAAM,IAAI5B,IAAI0B,OAAOG,YAAW;AACtC,MAAIH,OAAOI,MACPF,KAAIG,aAAaC,IAAI,SAASN,OAAOI,MAAK;AAG9C,MAAIJ,OAAOO,kBACPL,KAAIG,aAAaC,IAAI,QAAQN,OAAOO,kBAAiB;AAGzD,MAAIP,OAAOQ,YACPN,KAAIG,aAAaC,IAAI,gBAAgBN,OAAOQ,YAAW;AAG3D,MAAIR,OAAOS,QACPP,KAAIG,aAAaC,IAAI,YAAYN,OAAOS,QAAO;AAGnD,SAAOlC,KAAKwB,KAAK,EAAEG,KAAKA,IAAIQ,MAAK,CAAA;;CAGrC,MACMC,MACF,KACA,KACa;EACb,IAAIC;EAEJ,IAAIC;EACJ,IAAIC;EAEJ,IAAIC;AAEJ,MAAI;GACA,MAAMC,OAAO,MAAM,KAAK3B,qBAAqB4B,IAAInB,KAAK,EAAEoB,WAAW,CAAC,QAAQ,QAAQ,EAAC,CAAA;GAErF,MAAMlB,SAAS,MAAM,KAAKZ,oBAAoB+B,OAAOH,KAAAA;AACrDH,YAASb,OAAOa;AAChBC,YAASd,OAAOc;AAEhBF,iBAAcZ,OAAOgB;WAChBI,GAAG;GACR,MAAMC,aAAapC,cAAcmC,EAAAA;AACjCL,WAAQ;IACJ,GAAGM;IACHC,SAASD,WAAWC;IACxB;;EAGJ,MAAMC,QAAQ5C,qBAAqBD,mBAAmB8C,aAAY;EAElE,MAAMC,UAAU;GACZC,QAAQ,EAAEC,SAAS,KAAKxC,QAAQwC,SAAQ;GACxCX,MAAM;IACFJ;IACAG;IACAF;IACAC;IACJ;GACJ;EAEA,IAAIc;EACJ,IAAIC;EACJ,IAAIC;AAEJ,MAAIP,OAAO;;;MAIP,MAAMQ,OAAOvD,gBAAgBsB,KAAK,aAAA;AAElC8B,UAAO,MAAMxD,GAAG4D,SAASC,SACrB5D,KAAK6D,KAAKrD,gBAAgB,aAAA,EAC1B,QAAA;AAEJ+C,UAAO,MAAMG,KAAKI,mBAAmB,KAAKP,KAAAA;AAC1CC,cAAW,EAAC;AACZC,aAAU,MAAMC,KAAKK,cAAc,iBAAgB,EAAGN;SACnD;AACHF,UAAO,MAAMxD,GAAG4D,SAASC,SACrB5D,KAAK6D,KAAKtD,cAAc,UAAU,aAAA,EAClC,QAAA;AAGJiD,cAAWQ,KAAKC,MAAM,MAAMlE,GAAG4D,SAASC,SACpC5D,KAAK6D,KAAKtD,cAAc,UAAU,SAAS,oBAAA,EAC3C,QAAA,CAAA;AAGJkD,aAAU,MAAM3D,KAAKE,KAAK6D,KAAKtD,cAAc,UAAU,YAAA,CAAY,EAAGkD;;EAG1E,MAAM,CAACS,SAASC,gBAAgB,MAAMV,OAAO;GACzC5B,KAAK;GACL2B;GACAJ;GACJ,CAAA;AAEA,SAAOlD,KACHwB,KACA6B,KACKa,QAAQ,wBAAwBD,aAAAA,CAChCC,QAAQ,mBAAmBF,QAAAA,CAAAA;;;;YA5G5BzD,4BAAAA,CAAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/token/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,wBAAwB,EAAE,gCAAgC,EAAyB,MAAM,eAAe,CAAC;AACvH,OAAO,EAAe,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAS9D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIhD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EACR,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE,qBAEa,eAAe;IACxB,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAEjD,SAAS,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAEhD,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAE9C,SAAS,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAE5C,SAAS,CAAC,gBAAgB,EAAG,iBAAiB,CAAC;IAE/C,SAAS,CAAC,0BAA0B,EAAG,2BAA2B,CAAC;IAEnE,SAAS,CAAC,WAAW,EAAG,MAAM,CAAC,GAAG,gBAAgB,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBAI5D,GAAG,EAAE,sBAAsB;IA4CjC,aAAa,CACH,GAAG,EAAE,OAAO,GACzB,OAAO,CAAC,gCAAgC,CAAC;IAKtC,cAAc,CACJ,GAAG,EAAE,OAAO,GACzB,OAAO,CAAC,gCAAgC,CAAC;IA4DtC,WAAW,CACD,GAAG,EAAE,OAAO,EACX,GAAG,EAAE,QAAQ;IAkBxB,WAAW,CACD,GAAG,EAAE,OAAO,GACzB,OAAO,CAAC,wBAAwB,CAAC;CAavC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/token/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,wBAAwB,EAAE,gCAAgC,EAAyB,MAAM,eAAe,CAAC;AACvH,OAAO,EAAe,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAS9D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIhD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EACR,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAWnE,qBAEa,eAAe;IACxB,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAEjD,SAAS,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAEhD,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAE9C,SAAS,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAE5C,SAAS,CAAC,gBAAgB,EAAG,iBAAiB,CAAC;IAE/C,SAAS,CAAC,0BAA0B,EAAG,2BAA2B,CAAC;IAEnE,SAAS,CAAC,WAAW,EAAG,MAAM,CAAC,GAAG,gBAAgB,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBAI5D,GAAG,EAAE,sBAAsB;IA+CjC,aAAa,CACH,GAAG,EAAE,OAAO,GACzB,OAAO,CAAC,gCAAgC,CAAC;IAKtC,cAAc,CACJ,GAAG,EAAE,OAAO,GACzB,OAAO,CAAC,gCAAgC,CAAC;IA4DtC,WAAW,CACD,GAAG,EAAE,OAAO,EACX,GAAG,EAAE,QAAQ;IAkBxB,WAAW,CACD,GAAG,EAAE,OAAO,GACzB,OAAO,CAAC,wBAAwB,CAAC;CAavC"}
@@ -48,6 +48,7 @@ var TokenController = class {
48
48
  this.tokenGrants = {
49
49
  [OAuth2TokenGrant.AUTHORIZATION_CODE]: new HTTPOAuth2AuthorizeGrant({
50
50
  codeVerifier: ctx.codeVerifier,
51
+ clientAuthenticator: ctx.oauth2ClientAuthenticator,
51
52
  accessTokenIssuer: ctx.accessTokenIssuer,
52
53
  refreshTokenIssuer: ctx.refreshTokenIssuer,
53
54
  sessionManager: ctx.sessionManager
@@ -66,6 +67,7 @@ var TokenController = class {
66
67
  accessTokenIssuer: ctx.accessTokenIssuer,
67
68
  refreshTokenIssuer: ctx.refreshTokenIssuer,
68
69
  authenticator: ctx.userAuthenticator,
70
+ clientAuthenticator: ctx.oauth2ClientAuthenticator,
69
71
  sessionManager: ctx.sessionManager
70
72
  }),
71
73
  [OAuth2TokenGrant.REFRESH_TOKEN]: new HTTPOAuth2RefreshTokenGrant({
@@ -73,7 +75,8 @@ var TokenController = class {
73
75
  refreshTokenIssuer: ctx.refreshTokenIssuer,
74
76
  tokenVerifier: ctx.tokenVerifier,
75
77
  tokenRevoker: ctx.tokenRevoker,
76
- sessionManager: ctx.sessionManager
78
+ sessionManager: ctx.sessionManager,
79
+ clientAuthenticator: ctx.oauth2ClientAuthenticator
77
80
  })
78
81
  };
79
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["OAuth2Error","OAuth2TokenGrant","DController","DGet","DPost","DRequest","DResponse","DTags","sendAccepted","buildPermissionKey","toOAuth2Error","OAuth2OpenIDClaimsBuilder","HTTPClientCredentialsGrant","HTTPOAuth2AuthorizeGrant","HTTPOAuth2RefreshTokenGrant","HTTPPasswordGrant","HTTPRobotCredentialsGrant","guessOauth2GrantTypeByRequest","extractTokenFromRequest","TokenController","refreshTokenIssuer","accessTokenIssuer","tokenVerifier","tokenRevoker","identityResolver","identityPermissionProvider","tokenGrants","ctx","AUTHORIZATION_CODE","codeVerifier","sessionManager","CLIENT_CREDENTIALS","authenticator","clientAuthenticator","ROBOT_CREDENTIALS","robotAuthenticator","PASSWORD","userAuthenticator","REFRESH_TOKEN","getIntrospect","req","postIntrospect","token","payload","verify","skipActiveCheck","sub","sub_kind","identityInvalid","permissions","getFor","id","type","clientId","client_id","realmId","realm_id","identity","resolve","claimsBuilder","claims","fromIdentity","active","jti","isInactive","Object","values","reduce","acc","binding","key","permission","name","e","revokeToken","res","revoke","createToken","grantType","grantInvalid","grant","runWithRequest"],"sources":["../../../../../../src/adapters/http/controllers/workflows/token/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { OAuth2TokenGrantResponse, OAuth2TokenIntrospectionResponse, OAuth2TokenPermission } from '@authup/specs';\nimport { OAuth2Error, OAuth2TokenGrant } from '@authup/specs';\nimport {\n DController,\n DGet,\n DPost,\n DRequest,\n DResponse,\n DTags,\n} from '@routup/decorators';\nimport type { Request, Response } from 'routup';\nimport { sendAccepted } from 'routup';\nimport { buildPermissionKey } from '@authup/access';\nimport { toOAuth2Error } from '../../../../../core/oauth2/helpers/index.ts';\nimport type { TokenControllerContext } from './types.ts';\nimport type {\n IIdentityPermissionProvider,\n IIdentityResolver,\n IOAuth2TokenIssuer,\n IOAuth2TokenRevoker,\n IOAuth2TokenVerifier,\n} from '../../../../../core/index.ts';\nimport { OAuth2OpenIDClaimsBuilder } from '../../../../../core/index.ts';\nimport type { IHTTPOAuth2Grant } from '../../../adapters/index.ts';\nimport {\n HTTPClientCredentialsGrant,\n HTTPOAuth2AuthorizeGrant,\n HTTPOAuth2RefreshTokenGrant,\n HTTPPasswordGrant,\n HTTPRobotCredentialsGrant,\n guessOauth2GrantTypeByRequest,\n} from '../../../adapters/index.ts';\nimport { extractTokenFromRequest } from './utils/index.ts';\n\n@DTags('auth')\n@DController('/token')\nexport class TokenController {\n protected refreshTokenIssuer: IOAuth2TokenIssuer;\n\n protected accessTokenIssuer: IOAuth2TokenIssuer;\n\n protected tokenVerifier: IOAuth2TokenVerifier;\n\n protected tokenRevoker: IOAuth2TokenRevoker;\n\n protected identityResolver : IIdentityResolver;\n\n protected identityPermissionProvider : IIdentityPermissionProvider;\n\n protected tokenGrants : Record<`${OAuth2TokenGrant}`, IHTTPOAuth2Grant>;\n\n // -------------------------------------------\n\n constructor(ctx: TokenControllerContext) {\n this.refreshTokenIssuer = ctx.refreshTokenIssuer;\n this.accessTokenIssuer = ctx.accessTokenIssuer;\n this.tokenVerifier = ctx.tokenVerifier;\n this.tokenRevoker = ctx.tokenRevoker;\n this.identityResolver = ctx.identityResolver;\n this.identityPermissionProvider = ctx.identityPermissionProvider;\n\n this.tokenGrants = {\n [OAuth2TokenGrant.AUTHORIZATION_CODE]: new HTTPOAuth2AuthorizeGrant({\n codeVerifier: ctx.codeVerifier,\n accessTokenIssuer: ctx.accessTokenIssuer,\n refreshTokenIssuer: ctx.refreshTokenIssuer,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.CLIENT_CREDENTIALS]: new HTTPClientCredentialsGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n authenticator: ctx.clientAuthenticator,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.ROBOT_CREDENTIALS]: new HTTPRobotCredentialsGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n authenticator: ctx.robotAuthenticator,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.PASSWORD]: new HTTPPasswordGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n refreshTokenIssuer: ctx.refreshTokenIssuer,\n authenticator: ctx.userAuthenticator,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.REFRESH_TOKEN]: new HTTPOAuth2RefreshTokenGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n refreshTokenIssuer: ctx.refreshTokenIssuer,\n tokenVerifier: ctx.tokenVerifier,\n tokenRevoker: ctx.tokenRevoker,\n sessionManager: ctx.sessionManager,\n }),\n };\n }\n\n // -------------------------------------------\n\n @DGet('/introspect', [])\n async getIntrospect(\n @DRequest() req: Request,\n ): Promise<OAuth2TokenIntrospectionResponse> {\n return this.postIntrospect(req);\n }\n\n @DPost('/introspect', [])\n async postIntrospect(\n @DRequest() req: Request,\n ): Promise<OAuth2TokenIntrospectionResponse> {\n try {\n const token = await extractTokenFromRequest(req);\n const payload = await this.tokenVerifier.verify(token, { skipActiveCheck: true });\n if (!payload.sub || !payload.sub_kind) {\n throw OAuth2Error.identityInvalid();\n }\n\n // todo: only receive client specific permissions\n const permissions = await this.identityPermissionProvider.getFor({\n id: payload.sub,\n type: payload.sub_kind,\n clientId: payload.client_id,\n realmId: payload.realm_id,\n });\n\n const identity = await this.identityResolver.resolve(payload.sub_kind, payload.sub);\n if (!identity) {\n // todo: differentiate between client, robot & user\n throw OAuth2Error.identityInvalid();\n }\n\n const claimsBuilder = new OAuth2OpenIDClaimsBuilder();\n const claims = claimsBuilder.fromIdentity(identity);\n\n let active : boolean;\n if (payload.jti) {\n const isInactive = await this.tokenVerifier.isInactive(payload.jti);\n active = !isInactive;\n } else {\n active = false;\n }\n\n return {\n active,\n // todo: permissions property should be removed.\n permissions: Object.values(\n permissions.reduce((acc, binding) => {\n const key = buildPermissionKey(binding.permission);\n if (!acc[key]) {\n acc[key] = {\n name: binding.permission.name,\n client_id: binding.permission.client_id,\n realm_id: binding.permission.realm_id,\n } as OAuth2TokenPermission;\n }\n return acc;\n }, {} as Record<string, OAuth2TokenPermission>),\n ),\n ...payload,\n ...claims,\n };\n } catch (e) {\n throw toOAuth2Error(e);\n }\n }\n\n // ----------------------------------------------------------\n\n @DPost('/revoke', [])\n async revokeToken(\n @DRequest() req: Request,\n @DResponse() res: Response,\n ) {\n try {\n const token = await extractTokenFromRequest(req);\n\n const payload = await this.tokenVerifier.verify(token);\n\n await this.tokenRevoker.revoke(payload);\n\n return await sendAccepted(res);\n } catch (e) {\n throw toOAuth2Error(e);\n }\n }\n\n // ----------------------------------------------------------\n\n @DPost('', [])\n async createToken(\n @DRequest() req: Request,\n ): Promise<OAuth2TokenGrantResponse> {\n const grantType = guessOauth2GrantTypeByRequest(req);\n if (!grantType) {\n throw OAuth2Error.grantInvalid();\n }\n\n const grant = this.tokenGrants[grantType];\n if (!grant) {\n throw OAuth2Error.grantInvalid();\n }\n\n return grant.runWithRequest(req);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"module.mjs","names":["OAuth2Error","OAuth2TokenGrant","DController","DGet","DPost","DRequest","DResponse","DTags","sendAccepted","buildPermissionKey","toOAuth2Error","OAuth2OpenIDClaimsBuilder","HTTPClientCredentialsGrant","HTTPOAuth2AuthorizeGrant","HTTPOAuth2RefreshTokenGrant","HTTPPasswordGrant","HTTPRobotCredentialsGrant","guessOauth2GrantTypeByRequest","extractTokenFromRequest","TokenController","refreshTokenIssuer","accessTokenIssuer","tokenVerifier","tokenRevoker","identityResolver","identityPermissionProvider","tokenGrants","ctx","AUTHORIZATION_CODE","codeVerifier","clientAuthenticator","oauth2ClientAuthenticator","sessionManager","CLIENT_CREDENTIALS","authenticator","ROBOT_CREDENTIALS","robotAuthenticator","PASSWORD","userAuthenticator","REFRESH_TOKEN","getIntrospect","req","postIntrospect","token","payload","verify","skipActiveCheck","sub","sub_kind","identityInvalid","permissions","getFor","id","type","clientId","client_id","realmId","realm_id","identity","resolve","claimsBuilder","claims","fromIdentity","active","jti","isInactive","Object","values","reduce","acc","binding","key","permission","name","e","revokeToken","res","revoke","createToken","grantType","grantInvalid","grant","runWithRequest"],"sources":["../../../../../../src/adapters/http/controllers/workflows/token/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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 { OAuth2TokenGrantResponse, OAuth2TokenIntrospectionResponse, OAuth2TokenPermission } from '@authup/specs';\nimport { OAuth2Error, OAuth2TokenGrant } from '@authup/specs';\nimport {\n DController,\n DGet,\n DPost,\n DRequest,\n DResponse,\n DTags,\n} from '@routup/decorators';\nimport type { Request, Response } from 'routup';\nimport { sendAccepted } from 'routup';\nimport { buildPermissionKey } from '@authup/access';\nimport { toOAuth2Error } from '../../../../../core/oauth2/helpers/index.ts';\nimport type { TokenControllerContext } from './types.ts';\nimport type {\n IIdentityPermissionProvider,\n IIdentityResolver,\n IOAuth2TokenIssuer,\n IOAuth2TokenRevoker,\n IOAuth2TokenVerifier,\n} from '../../../../../core/index.ts';\nimport { OAuth2OpenIDClaimsBuilder } from '../../../../../core/index.ts';\nimport type { IHTTPOAuth2Grant } from '../../../adapters/index.ts';\nimport {\n HTTPClientCredentialsGrant,\n HTTPOAuth2AuthorizeGrant,\n HTTPOAuth2RefreshTokenGrant,\n HTTPPasswordGrant,\n HTTPRobotCredentialsGrant,\n guessOauth2GrantTypeByRequest,\n} from '../../../adapters/index.ts';\nimport { extractTokenFromRequest } from './utils/index.ts';\n\n@DTags('auth')\n@DController('/token')\nexport class TokenController {\n protected refreshTokenIssuer: IOAuth2TokenIssuer;\n\n protected accessTokenIssuer: IOAuth2TokenIssuer;\n\n protected tokenVerifier: IOAuth2TokenVerifier;\n\n protected tokenRevoker: IOAuth2TokenRevoker;\n\n protected identityResolver : IIdentityResolver;\n\n protected identityPermissionProvider : IIdentityPermissionProvider;\n\n protected tokenGrants : Record<`${OAuth2TokenGrant}`, IHTTPOAuth2Grant>;\n\n // -------------------------------------------\n\n constructor(ctx: TokenControllerContext) {\n this.refreshTokenIssuer = ctx.refreshTokenIssuer;\n this.accessTokenIssuer = ctx.accessTokenIssuer;\n this.tokenVerifier = ctx.tokenVerifier;\n this.tokenRevoker = ctx.tokenRevoker;\n this.identityResolver = ctx.identityResolver;\n this.identityPermissionProvider = ctx.identityPermissionProvider;\n\n this.tokenGrants = {\n [OAuth2TokenGrant.AUTHORIZATION_CODE]: new HTTPOAuth2AuthorizeGrant({\n codeVerifier: ctx.codeVerifier,\n clientAuthenticator: ctx.oauth2ClientAuthenticator,\n accessTokenIssuer: ctx.accessTokenIssuer,\n refreshTokenIssuer: ctx.refreshTokenIssuer,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.CLIENT_CREDENTIALS]: new HTTPClientCredentialsGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n authenticator: ctx.clientAuthenticator,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.ROBOT_CREDENTIALS]: new HTTPRobotCredentialsGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n authenticator: ctx.robotAuthenticator,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.PASSWORD]: new HTTPPasswordGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n refreshTokenIssuer: ctx.refreshTokenIssuer,\n authenticator: ctx.userAuthenticator,\n clientAuthenticator: ctx.oauth2ClientAuthenticator,\n sessionManager: ctx.sessionManager,\n }),\n [OAuth2TokenGrant.REFRESH_TOKEN]: new HTTPOAuth2RefreshTokenGrant({\n accessTokenIssuer: ctx.accessTokenIssuer,\n refreshTokenIssuer: ctx.refreshTokenIssuer,\n tokenVerifier: ctx.tokenVerifier,\n tokenRevoker: ctx.tokenRevoker,\n sessionManager: ctx.sessionManager,\n clientAuthenticator: ctx.oauth2ClientAuthenticator,\n }),\n };\n }\n\n // -------------------------------------------\n\n @DGet('/introspect', [])\n async getIntrospect(\n @DRequest() req: Request,\n ): Promise<OAuth2TokenIntrospectionResponse> {\n return this.postIntrospect(req);\n }\n\n @DPost('/introspect', [])\n async postIntrospect(\n @DRequest() req: Request,\n ): Promise<OAuth2TokenIntrospectionResponse> {\n try {\n const token = await extractTokenFromRequest(req);\n const payload = await this.tokenVerifier.verify(token, { skipActiveCheck: true });\n if (!payload.sub || !payload.sub_kind) {\n throw OAuth2Error.identityInvalid();\n }\n\n // todo: only receive client specific permissions\n const permissions = await this.identityPermissionProvider.getFor({\n id: payload.sub,\n type: payload.sub_kind,\n clientId: payload.client_id,\n realmId: payload.realm_id,\n });\n\n const identity = await this.identityResolver.resolve(payload.sub_kind, payload.sub);\n if (!identity) {\n // todo: differentiate between client, robot & user\n throw OAuth2Error.identityInvalid();\n }\n\n const claimsBuilder = new OAuth2OpenIDClaimsBuilder();\n const claims = claimsBuilder.fromIdentity(identity);\n\n let active : boolean;\n if (payload.jti) {\n const isInactive = await this.tokenVerifier.isInactive(payload.jti);\n active = !isInactive;\n } else {\n active = false;\n }\n\n return {\n active,\n // todo: permissions property should be removed.\n permissions: Object.values(\n permissions.reduce((acc, binding) => {\n const key = buildPermissionKey(binding.permission);\n if (!acc[key]) {\n acc[key] = {\n name: binding.permission.name,\n client_id: binding.permission.client_id,\n realm_id: binding.permission.realm_id,\n } as OAuth2TokenPermission;\n }\n return acc;\n }, {} as Record<string, OAuth2TokenPermission>),\n ),\n ...payload,\n ...claims,\n };\n } catch (e) {\n throw toOAuth2Error(e);\n }\n }\n\n // ----------------------------------------------------------\n\n @DPost('/revoke', [])\n async revokeToken(\n @DRequest() req: Request,\n @DResponse() res: Response,\n ) {\n try {\n const token = await extractTokenFromRequest(req);\n\n const payload = await this.tokenVerifier.verify(token);\n\n await this.tokenRevoker.revoke(payload);\n\n return await sendAccepted(res);\n } catch (e) {\n throw toOAuth2Error(e);\n }\n }\n\n // ----------------------------------------------------------\n\n @DPost('', [])\n async createToken(\n @DRequest() req: Request,\n ): Promise<OAuth2TokenGrantResponse> {\n const grantType = guessOauth2GrantTypeByRequest(req);\n if (!grantType) {\n throw OAuth2Error.grantInvalid();\n }\n\n const grant = this.tokenGrants[grantType];\n if (!grant) {\n throw OAuth2Error.grantInvalid();\n }\n\n return grant.runWithRequest(req);\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Client, Robot, User } from '@authup/core-kit';
2
- import type { ICredentialsAuthenticator, IIdentityPermissionProvider, IIdentityResolver, IOAuth2AuthorizationCodeVerifier, IOAuth2TokenIssuer, IOAuth2TokenRevoker, IOAuth2TokenVerifier, ISessionManager } from '../../../../../core/index.ts';
2
+ import type { ICredentialsAuthenticator, IIdentityPermissionProvider, IIdentityResolver, IOAuth2AuthorizationCodeVerifier, IOAuth2TokenIssuer, IOAuth2TokenRevoker, IOAuth2TokenVerifier, ISessionManager, OAuth2ClientAuthenticator } from '../../../../../core/index.ts';
3
3
  export type TokenControllerContext = {
4
4
  codeVerifier: IOAuth2AuthorizationCodeVerifier;
5
5
  accessTokenIssuer: IOAuth2TokenIssuer;
@@ -12,5 +12,6 @@ export type TokenControllerContext = {
12
12
  clientAuthenticator: ICredentialsAuthenticator<Client>;
13
13
  robotAuthenticator: ICredentialsAuthenticator<Robot>;
14
14
  userAuthenticator: ICredentialsAuthenticator<User>;
15
+ oauth2ClientAuthenticator: OAuth2ClientAuthenticator;
15
16
  };
16
17
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/token/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EACR,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,gCAAgC,EAChC,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAClB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG;IACjC,YAAY,EAAE,gCAAgC,CAAC;IAE/C,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,oBAAoB,CAAC;IACpC,YAAY,EAAE,mBAAmB,CAAC;IAElC,cAAc,EAAE,eAAe,CAAC;IAEhC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,0BAA0B,EAAE,2BAA2B,CAAC;IAExD,mBAAmB,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACtD,kBAAkB,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAA;IACpD,iBAAiB,EAAE,yBAAyB,CAAC,IAAI,CAAC,CAAA;CACrD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/token/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EACR,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,gCAAgC,EAChC,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,EAC5B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG;IACjC,YAAY,EAAE,gCAAgC,CAAC;IAE/C,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,oBAAoB,CAAC;IACpC,YAAY,EAAE,mBAAmB,CAAC;IAElC,cAAc,EAAE,eAAe,CAAC;IAEhC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,0BAA0B,EAAE,2BAA2B,CAAC;IAExD,mBAAmB,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACtD,kBAAkB,EAAE,yBAAyB,CAAC,KAAK,CAAC,CAAA;IACpD,iBAAiB,EAAE,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAElD,yBAAyB,EAAE,yBAAyB,CAAA;CACvD,CAAC"}
@@ -9,6 +9,7 @@ import { setRequestToken, useRequestToken } from "./request/helpers/token.mjs";
9
9
  import { RequestPermissionEvaluator } from "./request/permission/module.mjs";
10
10
  import "./request/index.mjs";
11
11
  import { HTTPOAuth2Authorizer } from "./adapters/oauth2/authorization/module.mjs";
12
+ import { extractClientCredentialsFromRequest } from "./adapters/oauth2/grant-types/utils/credentials.mjs";
12
13
  import { guessOauth2GrantTypeByRequest } from "./adapters/oauth2/grant-types/utils/guess.mjs";
13
14
  import { HTTPOAuth2AuthorizeGrant } from "./adapters/oauth2/grant-types/authorize.mjs";
14
15
  import { HTTPClientCredentialsGrant } from "./adapters/oauth2/grant-types/client-credentials.mjs";
@@ -78,4 +79,4 @@ import { createHttpServer } from "./server/module.mjs";
78
79
  import "./server/index.mjs";
79
80
  import { Swagger } from "./swagger/module.mjs";
80
81
  import "./swagger/index.mjs";
81
- export { ActivateController, AuthorizationMiddleware, AuthorizeController, ClientController, ClientPermissionController, ClientPermissionRequestValidator, ClientRoleController, ClientRoleRequestValidator, ClientScopeController, ClientScopeRequestValidator, ForceLoggedInMiddleware, ForceUserLoggedInMiddleware, HTTPClientCredentialsGrant, HTTPOAuth2AuthorizeGrant, HTTPOAuth2Authorizer, HTTPOAuth2IdentityGrantType, HTTPOAuth2RefreshTokenGrant, HTTPPasswordGrant, HTTPRobotCredentialsGrant, IdentityProviderController, IdentityProviderRoleMappingController, JwkController, OpenIDController, PasswordForgotController, PasswordResetController, PermissionController, PermissionPolicyController, PolicyAttributesValidator, PolicyController, PolicyValidator, RealmController, RegisterController, RequestHandlerOperation, RequestIdentity, RequestPermissionEvaluator, RobotController, RobotPermissionController, RobotPermissionRequestValidator, RobotRoleController, RobotRoleRequestValidator, RoleAttributeController, RoleAttributeRequestValidator, RoleController, RolePermissionController, RolePermissionRequestValidator, ScopeController, StatusController, Swagger, TokenController, UserAttributeController, UserAttributeRequestValidator, UserController, UserPermissionController, UserPermissionRequestValidator, UserRoleController, UserRoleRequestValidator, buildActorContext, createAuthorizationMiddleware, createHttpServer, createLoggerMiddleware, createSwaggerMiddleware, getJwkRouteHandler, getJwksRouteHandler, getRequestBodyRealmID, getRequestParamID, getRequestStringParam, getRequestStringParamOrFail, guessOauth2GrantTypeByRequest, isRequestIdentityMasterRealmMember, registerAssetsMiddleware, registerBasicMiddleware, registerCorsMiddleware, registerErrorMiddleware, registerPrometheusMiddleware, registerRateLimitMiddleware, setRequestIdentity, setRequestPermissionEvaluator, setRequestScopes, setRequestToken, useRequestIdentity, useRequestIdentityOrFail, useRequestParamID, useRequestPermissionEvaluator, useRequestScopes, useRequestToken };
82
+ export { ActivateController, AuthorizationMiddleware, AuthorizeController, ClientController, ClientPermissionController, ClientPermissionRequestValidator, ClientRoleController, ClientRoleRequestValidator, ClientScopeController, ClientScopeRequestValidator, ForceLoggedInMiddleware, ForceUserLoggedInMiddleware, HTTPClientCredentialsGrant, HTTPOAuth2AuthorizeGrant, HTTPOAuth2Authorizer, HTTPOAuth2IdentityGrantType, HTTPOAuth2RefreshTokenGrant, HTTPPasswordGrant, HTTPRobotCredentialsGrant, IdentityProviderController, IdentityProviderRoleMappingController, JwkController, OpenIDController, PasswordForgotController, PasswordResetController, PermissionController, PermissionPolicyController, PolicyAttributesValidator, PolicyController, PolicyValidator, RealmController, RegisterController, RequestHandlerOperation, RequestIdentity, RequestPermissionEvaluator, RobotController, RobotPermissionController, RobotPermissionRequestValidator, RobotRoleController, RobotRoleRequestValidator, RoleAttributeController, RoleAttributeRequestValidator, RoleController, RolePermissionController, RolePermissionRequestValidator, ScopeController, StatusController, Swagger, TokenController, UserAttributeController, UserAttributeRequestValidator, UserController, UserPermissionController, UserPermissionRequestValidator, UserRoleController, UserRoleRequestValidator, buildActorContext, createAuthorizationMiddleware, createHttpServer, createLoggerMiddleware, createSwaggerMiddleware, extractClientCredentialsFromRequest, getJwkRouteHandler, getJwksRouteHandler, getRequestBodyRealmID, getRequestParamID, getRequestStringParam, getRequestStringParamOrFail, guessOauth2GrantTypeByRequest, isRequestIdentityMasterRealmMember, registerAssetsMiddleware, registerBasicMiddleware, registerCorsMiddleware, registerErrorMiddleware, registerPrometheusMiddleware, registerRateLimitMiddleware, setRequestIdentity, setRequestPermissionEvaluator, setRequestScopes, setRequestToken, useRequestIdentity, useRequestIdentityOrFail, useRequestParamID, useRequestPermissionEvaluator, useRequestScopes, useRequestToken };
@@ -1,4 +1,4 @@
1
- import { CLIENT_WEB_SLIM_PACKAGE_PATH, DIST_PATH, PACKAGE_PATH } from "../../../../path.mjs";
1
+ import { PACKAGE_PATH, UI_DIST_PATH, UI_SOURCE_PATH } from "../../../../path.mjs";
2
2
  import path from "node:path";
3
3
  import { CodeTransformation, isCodeTransformation } from "typeorm-extension";
4
4
  import { coreHandler, setRequestParam } from "routup";
@@ -11,7 +11,7 @@ async function registerAssetsMiddleware(router) {
11
11
  fallthrough: true,
12
12
  scan: false
13
13
  }));
14
- router.use("public", createHandler(path.posix.join(DIST_PATH, "client"), {
14
+ router.use("public", createHandler(path.posix.join(UI_DIST_PATH, "client"), {
15
15
  fallthrough: false,
16
16
  scan: false
17
17
  }));
@@ -20,7 +20,7 @@ async function registerAssetsMiddleware(router) {
20
20
  /**
21
21
  * @type {import('vite').ViteDevServer}
22
22
  */ const server = await (await load("vite")).createServer({
23
- root: CLIENT_WEB_SLIM_PACKAGE_PATH,
23
+ root: UI_SOURCE_PATH,
24
24
  base: "/public/",
25
25
  logLevel: "error",
26
26
  server: {
@@ -1 +1 @@
1
- {"version":3,"file":"assets.mjs","names":["load","CodeTransformation","isCodeTransformation","createHandler","path","coreHandler","setRequestParam","CLIENT_WEB_SLIM_PACKAGE_PATH","DIST_PATH","PACKAGE_PATH","registerAssetsMiddleware","router","JUST_IN_TIME","use","posix","join","fallthrough","scan","vite","server","createServer","root","base","logLevel","middlewareMode","watch","usePolling","interval","appType","req","res","next","middlewares"],"sources":["../../../../../src/adapters/http/middleware/built-in/assets.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\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 { load } from 'locter';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport { createHandler } from '@routup/assets';\nimport path from 'node:path';\nimport type { Router } from 'routup';\nimport { coreHandler, setRequestParam } from 'routup';\nimport { CLIENT_WEB_SLIM_PACKAGE_PATH, DIST_PATH, PACKAGE_PATH } from '../../../../path.ts';\n\nexport async function registerAssetsMiddleware(router: Router) {\n if (!isCodeTransformation(CodeTransformation.JUST_IN_TIME)) {\n router.use('public', createHandler(\n path.posix.join(PACKAGE_PATH, 'public'),\n {\n fallthrough: true,\n scan: false,\n },\n ));\n\n router.use('public', createHandler(\n path.posix.join(DIST_PATH, 'client'),\n {\n fallthrough: false,\n scan: false,\n },\n ));\n return;\n }\n\n /**\n * @type import('vite')\n */\n const vite = await load('vite');\n\n /**\n * @type {import('vite').ViteDevServer}\n */\n const server = await vite.createServer({\n root: CLIENT_WEB_SLIM_PACKAGE_PATH,\n base: '/public/',\n logLevel: 'error',\n server: {\n middlewareMode: true,\n watch: {\n usePolling: true,\n interval: 100,\n },\n },\n appType: 'custom',\n });\n\n router.use('public', coreHandler((req, res, next) => server.middlewares(req, res, next)));\n router.use(coreHandler((req, res, next) => {\n setRequestParam(req, 'viteServer', server);\n\n next();\n }));\n}\n"],"mappings":";;;;;;;AAeA,eAAsBU,yBAAyBC,QAAc;AACzD,KAAI,CAACT,qBAAqBD,mBAAmBW,aAAY,EAAG;AACxDD,SAAOE,IAAI,UAAUV,cACjBC,KAAKU,MAAMC,KAAKN,cAAc,SAAA,EAC9B;GACIO,aAAa;GACbC,MAAM;GACV,CAAA,CAAA;AAGJN,SAAOE,IAAI,UAAUV,cACjBC,KAAKU,MAAMC,KAAKP,WAAW,SAAA,EAC3B;GACIQ,aAAa;GACbC,MAAM;GACV,CAAA,CAAA;AAEJ;;;;IAWJ,MAAME,SAAS,OAAMD,MALFlB,KAAK,OAAA,EAKEoB,aAAa;EACnCC,MAAMd;EACNe,MAAM;EACNC,UAAU;EACVJ,QAAQ;GACJK,gBAAgB;GAChBC,OAAO;IACHC,YAAY;IACZC,UAAU;IACd;GACJ;EACAC,SAAS;EACb,CAAA;AAEAjB,QAAOE,IAAI,UAAUR,aAAawB,KAAKC,KAAKC,SAASZ,OAAOa,YAAYH,KAAKC,KAAKC,KAAAA,CAAAA,CAAAA;AAClFpB,QAAOE,IAAIR,aAAawB,KAAKC,KAAKC,SAAAA;AAC9BzB,kBAAgBuB,KAAK,cAAcV,OAAAA;AAEnCY,QAAAA;GACJ,CAAA"}
1
+ {"version":3,"file":"assets.mjs","names":["load","CodeTransformation","isCodeTransformation","createHandler","path","coreHandler","setRequestParam","PACKAGE_PATH","UI_DIST_PATH","UI_SOURCE_PATH","registerAssetsMiddleware","router","JUST_IN_TIME","use","posix","join","fallthrough","scan","vite","server","createServer","root","base","logLevel","middlewareMode","watch","usePolling","interval","appType","req","res","next","middlewares"],"sources":["../../../../../src/adapters/http/middleware/built-in/assets.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\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 { load } from 'locter';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport { createHandler } from '@routup/assets';\nimport path from 'node:path';\nimport type { Router } from 'routup';\nimport { coreHandler, setRequestParam } from 'routup';\nimport { PACKAGE_PATH, UI_DIST_PATH, UI_SOURCE_PATH } from '../../../../path.ts';\n\nexport async function registerAssetsMiddleware(router: Router) {\n if (!isCodeTransformation(CodeTransformation.JUST_IN_TIME)) {\n router.use('public', createHandler(\n path.posix.join(PACKAGE_PATH, 'public'),\n {\n fallthrough: true,\n scan: false,\n },\n ));\n\n router.use('public', createHandler(\n path.posix.join(UI_DIST_PATH, 'client'),\n {\n fallthrough: false,\n scan: false,\n },\n ));\n return;\n }\n\n /**\n * @type import('vite')\n */\n const vite = await load('vite');\n\n /**\n * @type {import('vite').ViteDevServer}\n */\n const server = await vite.createServer({\n root: UI_SOURCE_PATH,\n base: '/public/',\n logLevel: 'error',\n server: {\n middlewareMode: true,\n watch: {\n usePolling: true,\n interval: 100,\n },\n },\n appType: 'custom',\n });\n\n router.use('public', coreHandler((req, res, next) => server.middlewares(req, res, next)));\n router.use(coreHandler((req, res, next) => {\n setRequestParam(req, 'viteServer', server);\n\n next();\n }));\n}\n"],"mappings":";;;;;;;AAeA,eAAsBU,yBAAyBC,QAAc;AACzD,KAAI,CAACT,qBAAqBD,mBAAmBW,aAAY,EAAG;AACxDD,SAAOE,IAAI,UAAUV,cACjBC,KAAKU,MAAMC,KAAKR,cAAc,SAAA,EAC9B;GACIS,aAAa;GACbC,MAAM;GACV,CAAA,CAAA;AAGJN,SAAOE,IAAI,UAAUV,cACjBC,KAAKU,MAAMC,KAAKP,cAAc,SAAA,EAC9B;GACIQ,aAAa;GACbC,MAAM;GACV,CAAA,CAAA;AAEJ;;;;IAWJ,MAAME,SAAS,OAAMD,MALFlB,KAAK,OAAA,EAKEoB,aAAa;EACnCC,MAAMZ;EACNa,MAAM;EACNC,UAAU;EACVJ,QAAQ;GACJK,gBAAgB;GAChBC,OAAO;IACHC,YAAY;IACZC,UAAU;IACd;GACJ;EACAC,SAAS;EACb,CAAA;AAEAjB,QAAOE,IAAI,UAAUR,aAAawB,KAAKC,KAAKC,SAASZ,OAAOa,YAAYH,KAAKC,KAAKC,KAAAA,CAAAA,CAAAA;AAClFpB,QAAOE,IAAIR,aAAawB,KAAKC,KAAKC,SAAAA;AAC9BzB,kBAAgBuB,KAAK,cAAcV,OAAAA;AAEnCY,QAAAA;GACJ,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { EntityManager, EntityTarget, FindOptionsWhere, ObjectLiteral } from 'typeorm';
2
+ import type { PermissionPolicyBinding } from '@authup/access';
3
+ import type { Permission } from '@authup/core-kit';
4
+ export type LoadBoundPermissionsOptions<E extends ObjectLiteral> = {
5
+ manager: EntityManager;
6
+ junctionTarget: EntityTarget<E>;
7
+ where: FindOptionsWhere<E>;
8
+ cachePrefix: string;
9
+ cacheKey: string;
10
+ };
11
+ type PermissionJunction = {
12
+ permission: Permission;
13
+ policy_id?: string | null;
14
+ };
15
+ export declare function loadBoundPermissions<E extends PermissionJunction & ObjectLiteral>(options: LoadBoundPermissionsOptions<E>): Promise<PermissionPolicyBinding[]>;
16
+ export {};
17
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/bindings.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,aAAa,EACb,YAAY,EAEZ,gBAAgB,EAChB,aAAa,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAc,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,aAAa,IAAI;IAC/D,OAAO,EAAE,aAAa,CAAC;IACvB,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,CAAC,SAAS,kBAAkB,GAAG,aAAa,EACnF,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAiCpC"}
@@ -0,0 +1,40 @@
1
+ import { PolicyRepository } from "../../../../adapters/database/domains/policy/repository.mjs";
2
+ import "../../../../adapters/database/domains/policy/index.mjs";
3
+ import { buildRedisKeyPath } from "@authup/server-kit";
4
+ //#region src/app/modules/database/repositories/bindings.ts
5
+ async function loadBoundPermissions(options) {
6
+ const entries = await options.manager.getRepository(options.junctionTarget).find({
7
+ where: options.where,
8
+ relations: { permission: true },
9
+ cache: {
10
+ id: buildRedisKeyPath({
11
+ prefix: options.cachePrefix,
12
+ key: options.cacheKey
13
+ }),
14
+ milliseconds: 6e4
15
+ }
16
+ });
17
+ const policyIds = /* @__PURE__ */ new Set();
18
+ for (const entry of entries) if (entry.policy_id) policyIds.add(entry.policy_id);
19
+ const policyTrees = await loadPolicyTrees(options.manager, [...policyIds]);
20
+ return entries.map((entry) => {
21
+ const policies = [];
22
+ if (entry.policy_id && policyTrees[entry.policy_id]) policies.push(policyTrees[entry.policy_id]);
23
+ return {
24
+ permission: entry.permission,
25
+ policies: policies.length > 0 ? policies : void 0
26
+ };
27
+ });
28
+ }
29
+ async function loadPolicyTrees(manager, policyIds) {
30
+ if (policyIds.length === 0) return {};
31
+ const policyRepository = new PolicyRepository(manager);
32
+ const trees = await Promise.all(policyIds.map((id) => policyRepository.findDescendantsTreeById(id).then((tree) => [id, tree])));
33
+ const result = {};
34
+ for (const [id, tree] of trees) if (tree) result[id] = tree;
35
+ return result;
36
+ }
37
+ //#endregion
38
+ export { loadBoundPermissions };
39
+
40
+ //# sourceMappingURL=bindings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.mjs","names":["buildRedisKeyPath","PolicyRepository","loadBoundPermissions","options","repository","manager","getRepository","junctionTarget","relations","permission","entries","find","where","cache","id","prefix","cachePrefix","key","cacheKey","milliseconds","policyIds","Set","entry","policy_id","add","policyTrees","loadPolicyTrees","map","policies","push","length","undefined","policyRepository","trees","Promise","all","findDescendantsTreeById","then","tree","result"],"sources":["../../../../../src/app/modules/database/repositories/bindings.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 {\n EntityManager,\n EntityTarget,\n FindOptionsRelations,\n FindOptionsWhere,\n ObjectLiteral,\n} from 'typeorm';\nimport type { BasePolicy, PermissionPolicyBinding } from '@authup/access';\nimport type { Permission } from '@authup/core-kit';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { PolicyRepository } from '../../../../adapters/database/domains/policy/index.ts';\n\nexport type LoadBoundPermissionsOptions<E extends ObjectLiteral> = {\n manager: EntityManager;\n junctionTarget: EntityTarget<E>;\n where: FindOptionsWhere<E>;\n cachePrefix: string;\n cacheKey: string;\n};\n\ntype PermissionJunction = {\n permission: Permission;\n policy_id?: string | null;\n};\n\nexport async function loadBoundPermissions<E extends PermissionJunction & ObjectLiteral>(\n options: LoadBoundPermissionsOptions<E>,\n): Promise<PermissionPolicyBinding[]> {\n const repository = options.manager.getRepository(options.junctionTarget);\n const relations = { permission: true } as FindOptionsRelations<E>;\n\n const entries = await repository.find({\n where: options.where,\n relations,\n cache: {\n id: buildRedisKeyPath({ prefix: options.cachePrefix, key: options.cacheKey }),\n milliseconds: 60_000,\n },\n });\n\n const policyIds = new Set<string>();\n for (const entry of entries) {\n if (entry.policy_id) {\n policyIds.add(entry.policy_id);\n }\n }\n\n const policyTrees = await loadPolicyTrees(options.manager, [...policyIds]);\n\n return entries.map((entry) => {\n const policies: BasePolicy[] = [];\n if (entry.policy_id && policyTrees[entry.policy_id]) {\n policies.push(policyTrees[entry.policy_id]);\n }\n\n return {\n permission: entry.permission,\n policies: policies.length > 0 ? policies : undefined,\n };\n });\n}\n\nasync function loadPolicyTrees(\n manager: EntityManager,\n policyIds: string[],\n): Promise<Record<string, BasePolicy>> {\n if (policyIds.length === 0) {\n return {};\n }\n\n const policyRepository = new PolicyRepository(manager);\n const trees = await Promise.all(\n policyIds.map((id) => policyRepository.findDescendantsTreeById(id)\n .then((tree) => [id, tree] as const)),\n );\n\n const result: Record<string, BasePolicy> = {};\n for (const [id, tree] of trees) {\n if (tree) {\n result[id] = tree;\n }\n }\n return result;\n}\n"],"mappings":";;;;AAgCA,eAAsBE,qBAClBC,SAAuC;CAKvC,MAAMO,UAAU,MAHGP,QAAQE,QAAQC,cAAcH,QAAQI,eAGnCH,CAAWO,KAAK;EAClCC,OAAOT,QAAQS;EACfJ,WAAAA,EAJgBC,YAAY,MAI5BD;EACAK,OAAO;GACHC,IAAId,kBAAkB;IAAEe,QAAQZ,QAAQa;IAAaC,KAAKd,QAAQe;IAAS,CAAA;GAC3EC,cAAc;GAClB;EACJ,CAAA;CAEA,MAAMC,4BAAY,IAAIC,KAAAA;AACtB,MAAK,MAAMC,SAASZ,QAChB,KAAIY,MAAMC,UACNH,WAAUI,IAAIF,MAAMC,UAAS;CAIrC,MAAME,cAAc,MAAMC,gBAAgBvB,QAAQE,SAAS,CAAA,GAAIe,UAAU,CAAA;AAEzE,QAAOV,QAAQiB,KAAKL,UAAAA;EAChB,MAAMM,WAAyB,EAAE;AACjC,MAAIN,MAAMC,aAAaE,YAAYH,MAAMC,WACrCK,UAASC,KAAKJ,YAAYH,MAAMC,WAAU;AAG9C,SAAO;GACHd,YAAYa,MAAMb;GAClBmB,UAAUA,SAASE,SAAS,IAAIF,WAAWG,KAAAA;GAC/C;GACJ;;AAGJ,eAAeL,gBACXrB,SACAe,WAAmB;AAEnB,KAAIA,UAAUU,WAAW,EACrB,QAAO,EAAC;CAGZ,MAAME,mBAAmB,IAAI/B,iBAAiBI,QAAAA;CAC9C,MAAM4B,QAAQ,MAAMC,QAAQC,IACxBf,UAAUO,KAAKb,OAAOkB,iBAAiBI,wBAAwBtB,GAAAA,CAC1DuB,MAAMC,SAAS,CAACxB,IAAIwB,KAAK,CAAA,CAAA,CAAA;CAGlC,MAAMC,SAAqC,EAAC;AAC5C,MAAK,MAAM,CAACzB,IAAIwB,SAASL,MACrB,KAAIK,KACAC,QAAOzB,MAAMwB;AAGrB,QAAOC"}