@strapi/admin 4.14.2 → 4.14.3

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 (378) hide show
  1. package/admin/src/content-manager/hooks/useRelation/useRelation.js +1 -0
  2. package/build/{Admin-authenticatedApp.08f32723.chunk.js → Admin-authenticatedApp.a16cdc37.chunk.js} +1 -1
  3. package/build/{content-manager.0d2b4a60.chunk.js → content-manager.e1e49cc9.chunk.js} +1 -1
  4. package/build/index.html +1 -1
  5. package/build/{runtime~main.cec66cd9.js → runtime~main.377a22d0.js} +1 -1
  6. package/dist/server/admin/server/src/bootstrap.d.ts +2 -0
  7. package/dist/server/admin/server/src/controllers/admin.d.ts +42 -0
  8. package/dist/server/admin/server/src/controllers/api-token.d.ts +10 -0
  9. package/dist/server/admin/server/src/controllers/authenticated-user.d.ts +6 -0
  10. package/dist/server/admin/server/src/controllers/authentication.d.ts +12 -0
  11. package/dist/server/admin/server/src/controllers/permission.d.ts +13 -0
  12. package/dist/server/admin/server/src/controllers/role.d.ts +43 -0
  13. package/dist/server/admin/server/src/controllers/transfer/token.d.ts +9 -0
  14. package/dist/server/admin/server/src/controllers/user.d.ts +13 -0
  15. package/dist/server/admin/server/src/destroy.d.ts +2 -0
  16. package/dist/server/admin/server/src/domain/condition/index.d.ts +56 -0
  17. package/dist/server/admin/server/src/domain/condition/index.js +53 -0
  18. package/dist/server/admin/server/src/domain/condition/index.js.map +1 -0
  19. package/dist/server/admin/server/src/domain/condition/provider.d.ts +30 -0
  20. package/dist/server/admin/server/src/domain/condition/provider.js +37 -0
  21. package/dist/server/admin/server/src/domain/condition/provider.js.map +1 -0
  22. package/dist/server/admin/server/src/index.d.ts +10 -0
  23. package/dist/server/admin/server/src/middlewares/data-transfer.d.ts +2 -0
  24. package/dist/server/admin/server/src/services/action.d.ts +9 -0
  25. package/dist/server/admin/server/src/services/auth.d.ts +42 -0
  26. package/dist/server/admin/server/src/services/condition.d.ts +2 -0
  27. package/dist/server/admin/server/src/services/content-type.d.ts +51 -0
  28. package/dist/server/admin/server/src/services/index.d.ts +61 -0
  29. package/dist/server/admin/server/src/services/metrics.d.ts +7 -0
  30. package/dist/server/admin/server/src/services/permission/engine.d.ts +15 -0
  31. package/dist/server/admin/server/src/services/permission/queries.d.ts +44 -0
  32. package/dist/server/admin/server/src/services/permission.d.ts +67 -0
  33. package/dist/server/admin/server/src/services/role.d.ts +116 -0
  34. package/dist/server/admin/server/src/services/transfer/token.d.ts +103 -0
  35. package/dist/server/admin/server/src/services/transfer/utils.d.ts +19 -0
  36. package/dist/server/admin/server/src/services/user.d.ts +96 -0
  37. package/dist/server/admin/server/src/strategies/admin.d.ts +25 -0
  38. package/dist/server/admin/server/src/strategies/api-token.d.ts +60 -0
  39. package/dist/server/admin/server/src/strategies/data-transfer.d.ts +50 -0
  40. package/dist/server/admin/server/src/validation/common-validators.d.ts +59 -0
  41. package/dist/server/admin/server/src/validation/permission.d.ts +9 -0
  42. package/dist/server/bootstrap.d.ts +2 -0
  43. package/dist/server/bootstrap.js +84 -0
  44. package/dist/server/bootstrap.js.map +1 -0
  45. package/dist/server/config/admin-actions.d.ts +33 -0
  46. package/dist/server/config/admin-actions.js +219 -0
  47. package/dist/server/config/admin-actions.js.map +1 -0
  48. package/dist/server/config/admin-conditions.d.ts +46 -0
  49. package/dist/server/config/admin-conditions.js +29 -0
  50. package/dist/server/config/admin-conditions.js.map +1 -0
  51. package/dist/server/config/email-templates/forgot-password.d.ts +6 -0
  52. package/dist/server/config/email-templates/forgot-password.js +19 -0
  53. package/dist/server/config/email-templates/forgot-password.js.map +1 -0
  54. package/dist/server/config/index.d.ts +17 -0
  55. package/dist/server/config/index.js +14 -0
  56. package/dist/server/config/index.js.map +1 -0
  57. package/dist/server/config/settings.d.ts +7 -0
  58. package/dist/server/config/settings.js +11 -0
  59. package/dist/server/config/settings.js.map +1 -0
  60. package/dist/server/content-types/Permission.d.ts +62 -0
  61. package/dist/server/content-types/Permission.js +64 -0
  62. package/dist/server/content-types/Permission.js.map +1 -0
  63. package/dist/server/content-types/Role.d.ts +57 -0
  64. package/dist/server/content-types/Role.js +59 -0
  65. package/dist/server/content-types/Role.js.map +1 -0
  66. package/dist/server/content-types/User.d.ts +106 -0
  67. package/dist/server/content-types/User.js +109 -0
  68. package/dist/server/content-types/User.js.map +1 -0
  69. package/dist/server/content-types/api-token-permission.d.ts +35 -0
  70. package/dist/server/content-types/api-token-permission.js +37 -0
  71. package/dist/server/content-types/api-token-permission.js.map +1 -0
  72. package/dist/server/content-types/api-token.d.ts +73 -0
  73. package/dist/server/content-types/api-token.js +79 -0
  74. package/dist/server/content-types/api-token.js.map +1 -0
  75. package/dist/server/content-types/index.d.ts +437 -0
  76. package/dist/server/content-types/index.js +22 -0
  77. package/dist/server/content-types/index.js.map +1 -0
  78. package/dist/server/content-types/transfer-token-permission.d.ts +35 -0
  79. package/dist/server/content-types/transfer-token-permission.js +37 -0
  80. package/dist/server/content-types/transfer-token-permission.js.map +1 -0
  81. package/dist/server/content-types/transfer-token.d.ts +65 -0
  82. package/dist/server/content-types/transfer-token.js +67 -0
  83. package/dist/server/content-types/transfer-token.js.map +1 -0
  84. package/dist/server/controllers/admin.d.ts +42 -0
  85. package/dist/server/controllers/admin.js +131 -0
  86. package/dist/server/controllers/admin.js.map +1 -0
  87. package/dist/server/controllers/api-token.d.ts +10 -0
  88. package/dist/server/controllers/api-token.js +106 -0
  89. package/dist/server/controllers/api-token.js.map +1 -0
  90. package/dist/server/controllers/authenticated-user.d.ts +6 -0
  91. package/dist/server/controllers/authenticated-user.js +41 -0
  92. package/dist/server/controllers/authenticated-user.js.map +1 -0
  93. package/dist/server/controllers/authentication.d.ts +12 -0
  94. package/dist/server/controllers/authentication.js +130 -0
  95. package/dist/server/controllers/authentication.js.map +1 -0
  96. package/dist/server/controllers/content-api.d.ts +5 -0
  97. package/dist/server/controllers/content-api.js +13 -0
  98. package/dist/server/controllers/content-api.js.map +1 -0
  99. package/dist/server/controllers/formatters/conditions.d.ts +3 -0
  100. package/dist/server/controllers/formatters/conditions.js +9 -0
  101. package/dist/server/controllers/formatters/conditions.js.map +1 -0
  102. package/dist/server/controllers/formatters/format-actions-by-sections.d.ts +7 -0
  103. package/dist/server/controllers/formatters/format-actions-by-sections.js +36 -0
  104. package/dist/server/controllers/formatters/format-actions-by-sections.js.map +1 -0
  105. package/dist/server/controllers/formatters/index.d.ts +2 -0
  106. package/dist/server/controllers/formatters/index.js +11 -0
  107. package/dist/server/controllers/formatters/index.js.map +1 -0
  108. package/dist/server/controllers/index.d.ts +68 -0
  109. package/dist/server/controllers/index.js +51 -0
  110. package/dist/server/controllers/index.js.map +1 -0
  111. package/dist/server/controllers/permission.d.ts +13 -0
  112. package/dist/server/controllers/permission.js +38 -0
  113. package/dist/server/controllers/permission.js.map +1 -0
  114. package/dist/server/controllers/role.d.ts +43 -0
  115. package/dist/server/controllers/role.js +148 -0
  116. package/dist/server/controllers/role.js.map +1 -0
  117. package/dist/server/controllers/transfer/index.d.ts +4 -0
  118. package/dist/server/controllers/transfer/index.js +14 -0
  119. package/dist/server/controllers/transfer/index.js.map +1 -0
  120. package/dist/server/controllers/transfer/runner.d.ts +6 -0
  121. package/dist/server/controllers/transfer/runner.js +25 -0
  122. package/dist/server/controllers/transfer/runner.js.map +1 -0
  123. package/dist/server/controllers/transfer/token.d.ts +9 -0
  124. package/dist/server/controllers/transfer/token.js +100 -0
  125. package/dist/server/controllers/transfer/token.js.map +1 -0
  126. package/dist/server/controllers/user.d.ts +13 -0
  127. package/dist/server/controllers/user.js +105 -0
  128. package/dist/server/controllers/user.js.map +1 -0
  129. package/dist/server/controllers/webhooks.d.ts +10 -0
  130. package/dist/server/controllers/webhooks.js +100 -0
  131. package/dist/server/controllers/webhooks.js.map +1 -0
  132. package/dist/server/destroy.d.ts +2 -0
  133. package/dist/server/destroy.js +9 -0
  134. package/dist/server/destroy.js.map +1 -0
  135. package/dist/server/domain/action/index.d.ts +33 -0
  136. package/dist/server/domain/action/index.js +98 -0
  137. package/dist/server/domain/action/index.js.map +1 -0
  138. package/dist/server/domain/action/provider.d.ts +38 -0
  139. package/dist/server/domain/action/provider.js +66 -0
  140. package/dist/server/domain/action/provider.js.map +1 -0
  141. package/dist/server/domain/condition/index.d.ts +53 -0
  142. package/dist/server/domain/condition/index.js +56 -0
  143. package/dist/server/domain/condition/index.js.map +1 -0
  144. package/dist/server/domain/condition/provider.d.ts +30 -0
  145. package/dist/server/domain/condition/provider.js +37 -0
  146. package/dist/server/domain/condition/provider.js.map +1 -0
  147. package/dist/server/domain/permission/index.d.ts +77 -0
  148. package/dist/server/domain/permission/index.js +119 -0
  149. package/dist/server/domain/permission/index.js.map +1 -0
  150. package/dist/server/domain/user.d.ts +32 -0
  151. package/dist/server/domain/user.js +28 -0
  152. package/dist/server/domain/user.js.map +1 -0
  153. package/dist/server/index.d.ts +10 -0
  154. package/dist/server/index.js +27 -0
  155. package/dist/server/index.js.map +1 -0
  156. package/dist/server/middlewares/data-transfer.d.ts +2 -0
  157. package/dist/server/middlewares/data-transfer.js +21 -0
  158. package/dist/server/middlewares/data-transfer.js.map +1 -0
  159. package/dist/server/middlewares/index.d.ts +9 -0
  160. package/dist/server/middlewares/index.js +17 -0
  161. package/dist/server/middlewares/index.js.map +1 -0
  162. package/dist/server/middlewares/rateLimit.d.ts +5 -0
  163. package/dist/server/middlewares/rateLimit.js +42 -0
  164. package/dist/server/middlewares/rateLimit.js.map +1 -0
  165. package/dist/server/policies/hasPermissions.d.ts +6 -0
  166. package/dist/server/policies/hasPermissions.js +38 -0
  167. package/dist/server/policies/hasPermissions.js.map +1 -0
  168. package/dist/server/policies/index.d.ts +14 -0
  169. package/dist/server/policies/index.js +10 -0
  170. package/dist/server/policies/index.js.map +1 -0
  171. package/dist/server/policies/isAuthenticatedAdmin.d.ts +2 -0
  172. package/dist/server/policies/isAuthenticatedAdmin.js +6 -0
  173. package/dist/server/policies/isAuthenticatedAdmin.js.map +1 -0
  174. package/dist/server/policies/isTelemetryEnabled.d.ts +10 -0
  175. package/dist/server/policies/isTelemetryEnabled.js +18 -0
  176. package/dist/server/policies/isTelemetryEnabled.js.map +1 -0
  177. package/dist/server/register.d.ts +2 -0
  178. package/dist/server/register.js +18 -0
  179. package/dist/server/register.js.map +1 -0
  180. package/dist/server/routes/admin.d.ts +23 -0
  181. package/dist/server/routes/admin.js +72 -0
  182. package/dist/server/routes/admin.js.map +1 -0
  183. package/dist/server/routes/api-tokens.d.ts +14 -0
  184. package/dist/server/routes/api-tokens.js +71 -0
  185. package/dist/server/routes/api-tokens.js.map +1 -0
  186. package/dist/server/routes/authentication.d.ts +29 -0
  187. package/dist/server/routes/authentication.js +58 -0
  188. package/dist/server/routes/authentication.js.map +1 -0
  189. package/dist/server/routes/content-api.d.ts +9 -0
  190. package/dist/server/routes/content-api.js +21 -0
  191. package/dist/server/routes/content-api.js.map +1 -0
  192. package/dist/server/routes/index.d.ts +66 -0
  193. package/dist/server/routes/index.js +32 -0
  194. package/dist/server/routes/index.js.map +1 -0
  195. package/dist/server/routes/permissions.d.ts +9 -0
  196. package/dist/server/routes/permissions.js +21 -0
  197. package/dist/server/routes/permissions.js.map +1 -0
  198. package/dist/server/routes/roles.d.ts +14 -0
  199. package/dist/server/routes/roles.js +108 -0
  200. package/dist/server/routes/roles.js.map +1 -0
  201. package/dist/server/routes/serve-admin-panel.d.ts +5 -0
  202. package/dist/server/routes/serve-admin-panel.js +65 -0
  203. package/dist/server/routes/serve-admin-panel.js.map +1 -0
  204. package/dist/server/routes/transfer.d.ts +55 -0
  205. package/dist/server/routes/transfer.js +105 -0
  206. package/dist/server/routes/transfer.js.map +1 -0
  207. package/dist/server/routes/users.d.ts +14 -0
  208. package/dist/server/routes/users.js +89 -0
  209. package/dist/server/routes/users.js.map +1 -0
  210. package/dist/server/routes/webhooks.d.ts +14 -0
  211. package/dist/server/routes/webhooks.js +82 -0
  212. package/dist/server/routes/webhooks.js.map +1 -0
  213. package/dist/server/services/action.d.ts +9 -0
  214. package/dist/server/services/action.js +29 -0
  215. package/dist/server/services/action.js.map +1 -0
  216. package/dist/server/services/api-token.d.ts +102 -0
  217. package/dist/server/services/api-token.js +378 -0
  218. package/dist/server/services/api-token.js.map +1 -0
  219. package/dist/server/services/auth.d.ts +42 -0
  220. package/dist/server/services/auth.js +98 -0
  221. package/dist/server/services/auth.js.map +1 -0
  222. package/dist/server/services/condition.d.ts +2 -0
  223. package/dist/server/services/condition.js +11 -0
  224. package/dist/server/services/condition.js.map +1 -0
  225. package/dist/server/services/constants.d.ts +33 -0
  226. package/dist/server/services/constants.js +37 -0
  227. package/dist/server/services/constants.js.map +1 -0
  228. package/dist/server/services/content-type.d.ts +51 -0
  229. package/dist/server/services/content-type.js +158 -0
  230. package/dist/server/services/content-type.js.map +1 -0
  231. package/dist/server/services/index.d.ts +61 -0
  232. package/dist/server/services/index.js +57 -0
  233. package/dist/server/services/index.js.map +1 -0
  234. package/dist/server/services/metrics.d.ts +7 -0
  235. package/dist/server/services/metrics.js +37 -0
  236. package/dist/server/services/metrics.js.map +1 -0
  237. package/dist/server/services/passport/local-strategy.d.ts +3 -0
  238. package/dist/server/services/passport/local-strategy.js +28 -0
  239. package/dist/server/services/passport/local-strategy.js.map +1 -0
  240. package/dist/server/services/passport.d.ts +7 -0
  241. package/dist/server/services/passport.js +40 -0
  242. package/dist/server/services/passport.js.map +1 -0
  243. package/dist/server/services/permission/engine.d.ts +15 -0
  244. package/dist/server/services/permission/engine.js +67 -0
  245. package/dist/server/services/permission/engine.js.map +1 -0
  246. package/dist/server/services/permission/permissions-manager/index.d.ts +16 -0
  247. package/dist/server/services/permission/permissions-manager/index.js +48 -0
  248. package/dist/server/services/permission/permissions-manager/index.js.map +1 -0
  249. package/dist/server/services/permission/permissions-manager/query-builders.d.ts +3 -0
  250. package/dist/server/services/permission/permissions-manager/query-builders.js +66 -0
  251. package/dist/server/services/permission/permissions-manager/query-builders.js.map +1 -0
  252. package/dist/server/services/permission/permissions-manager/sanitize.d.ts +6 -0
  253. package/dist/server/services/permission/permissions-manager/sanitize.js +184 -0
  254. package/dist/server/services/permission/permissions-manager/sanitize.js.map +1 -0
  255. package/dist/server/services/permission/permissions-manager/validate.d.ts +5 -0
  256. package/dist/server/services/permission/permissions-manager/validate.js +134 -0
  257. package/dist/server/services/permission/permissions-manager/validate.js.map +1 -0
  258. package/dist/server/services/permission/queries.d.ts +44 -0
  259. package/dist/server/services/permission/queries.js +159 -0
  260. package/dist/server/services/permission/queries.js.map +1 -0
  261. package/dist/server/services/permission/sections-builder/builder.d.ts +39 -0
  262. package/dist/server/services/permission/sections-builder/builder.js +75 -0
  263. package/dist/server/services/permission/sections-builder/builder.js.map +1 -0
  264. package/dist/server/services/permission/sections-builder/handlers.d.ts +44 -0
  265. package/dist/server/services/permission/sections-builder/handlers.js +124 -0
  266. package/dist/server/services/permission/sections-builder/handlers.js.map +1 -0
  267. package/dist/server/services/permission/sections-builder/index.d.ts +8 -0
  268. package/dist/server/services/permission/sections-builder/index.js +39 -0
  269. package/dist/server/services/permission/sections-builder/index.js.map +1 -0
  270. package/dist/server/services/permission/sections-builder/section.d.ts +38 -0
  271. package/dist/server/services/permission/sections-builder/section.js +56 -0
  272. package/dist/server/services/permission/sections-builder/section.js.map +1 -0
  273. package/dist/server/services/permission/sections-builder/utils.d.ts +12 -0
  274. package/dist/server/services/permission/sections-builder/utils.js +23 -0
  275. package/dist/server/services/permission/sections-builder/utils.js.map +1 -0
  276. package/dist/server/services/permission.d.ts +67 -0
  277. package/dist/server/services/permission.js +33 -0
  278. package/dist/server/services/permission.js.map +1 -0
  279. package/dist/server/services/project-settings.d.ts +5 -0
  280. package/dist/server/services/project-settings.js +139 -0
  281. package/dist/server/services/project-settings.js.map +1 -0
  282. package/dist/server/services/role.d.ts +116 -0
  283. package/dist/server/services/role.js +382 -0
  284. package/dist/server/services/role.js.map +1 -0
  285. package/dist/server/services/token.d.ts +35 -0
  286. package/dist/server/services/token.js +58 -0
  287. package/dist/server/services/token.js.map +1 -0
  288. package/dist/server/services/transfer/index.d.ts +4 -0
  289. package/dist/server/services/transfer/index.js +33 -0
  290. package/dist/server/services/transfer/index.js.map +1 -0
  291. package/dist/server/services/transfer/permission.d.ts +6 -0
  292. package/dist/server/services/transfer/permission.js +20 -0
  293. package/dist/server/services/transfer/permission.js.map +1 -0
  294. package/dist/server/services/transfer/token.d.ts +84 -0
  295. package/dist/server/services/transfer/token.js +273 -0
  296. package/dist/server/services/transfer/token.js.map +1 -0
  297. package/dist/server/services/transfer/utils.d.ts +13 -0
  298. package/dist/server/services/transfer/utils.js +29 -0
  299. package/dist/server/services/transfer/utils.js.map +1 -0
  300. package/dist/server/services/user.d.ts +96 -0
  301. package/dist/server/services/user.js +311 -0
  302. package/dist/server/services/user.js.map +1 -0
  303. package/dist/server/strategies/admin.d.ts +25 -0
  304. package/dist/server/strategies/admin.js +44 -0
  305. package/dist/server/strategies/admin.js.map +1 -0
  306. package/dist/server/strategies/api-token.d.ts +60 -0
  307. package/dist/server/strategies/api-token.js +121 -0
  308. package/dist/server/strategies/api-token.js.map +1 -0
  309. package/dist/server/strategies/data-transfer.d.ts +66 -0
  310. package/dist/server/strategies/data-transfer.js +94 -0
  311. package/dist/server/strategies/data-transfer.js.map +1 -0
  312. package/dist/server/strategies/index.d.ts +17 -0
  313. package/dist/server/strategies/index.js +27 -0
  314. package/dist/server/strategies/index.js.map +1 -0
  315. package/dist/server/types/src/types/utils/object.d.ts +58 -0
  316. package/dist/server/types/src/types/utils/object.js +3 -0
  317. package/dist/server/types/src/types/utils/object.js.map +1 -0
  318. package/dist/server/utils/index.d.ts +1 -0
  319. package/dist/server/utils/index.js +9 -0
  320. package/dist/server/utils/index.js.map +1 -0
  321. package/dist/server/utils/types.d.ts +14 -0
  322. package/dist/server/utils/types.js +3 -0
  323. package/dist/server/utils/types.js.map +1 -0
  324. package/dist/server/validation/action-provider.d.ts +5 -0
  325. package/dist/server/validation/action-provider.js +58 -0
  326. package/dist/server/validation/action-provider.js.map +1 -0
  327. package/dist/server/validation/api-tokens.d.ts +7 -0
  328. package/dist/server/validation/api-tokens.js +36 -0
  329. package/dist/server/validation/api-tokens.js.map +1 -0
  330. package/dist/server/validation/authentication/forgot-password.d.ts +2 -0
  331. package/dist/server/validation/authentication/forgot-password.js +16 -0
  332. package/dist/server/validation/authentication/forgot-password.js.map +1 -0
  333. package/dist/server/validation/authentication/index.d.ts +5 -0
  334. package/dist/server/validation/authentication/index.js +17 -0
  335. package/dist/server/validation/authentication/index.js.map +1 -0
  336. package/dist/server/validation/authentication/register.d.ts +9 -0
  337. package/dist/server/validation/authentication/register.js +49 -0
  338. package/dist/server/validation/authentication/register.js.map +1 -0
  339. package/dist/server/validation/authentication/renew-token.d.ts +2 -0
  340. package/dist/server/validation/authentication/renew-token.js +6 -0
  341. package/dist/server/validation/authentication/renew-token.js.map +1 -0
  342. package/dist/server/validation/authentication/reset-password.d.ts +2 -0
  343. package/dist/server/validation/authentication/reset-password.js +17 -0
  344. package/dist/server/validation/authentication/reset-password.js.map +1 -0
  345. package/dist/server/validation/common-functions/check-fields-are-correctly-nested.d.ts +2 -0
  346. package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js +26 -0
  347. package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -0
  348. package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.d.ts +2 -0
  349. package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js +18 -0
  350. package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -0
  351. package/dist/server/validation/common-functions/index.d.ts +3 -0
  352. package/dist/server/validation/common-functions/index.js +11 -0
  353. package/dist/server/validation/common-functions/index.js.map +1 -0
  354. package/dist/server/validation/common-validators.d.ts +59 -0
  355. package/dist/server/validation/common-validators.js +162 -0
  356. package/dist/server/validation/common-validators.js.map +1 -0
  357. package/dist/server/validation/permission.d.ts +9 -0
  358. package/dist/server/validation/permission.js +46 -0
  359. package/dist/server/validation/permission.js.map +1 -0
  360. package/dist/server/validation/policies/hasPermissions.d.ts +5 -0
  361. package/dist/server/validation/policies/hasPermissions.js +29 -0
  362. package/dist/server/validation/policies/hasPermissions.js.map +1 -0
  363. package/dist/server/validation/project-settings.d.ts +9 -0
  364. package/dist/server/validation/project-settings.js +44 -0
  365. package/dist/server/validation/project-settings.js.map +1 -0
  366. package/dist/server/validation/role.d.ts +11 -0
  367. package/dist/server/validation/role.js +62 -0
  368. package/dist/server/validation/role.js.map +1 -0
  369. package/dist/server/validation/transfer/index.d.ts +1 -0
  370. package/dist/server/validation/transfer/index.js +9 -0
  371. package/dist/server/validation/transfer/index.js.map +1 -0
  372. package/dist/server/validation/transfer/token.d.ts +7 -0
  373. package/dist/server/validation/transfer/token.js +46 -0
  374. package/dist/server/validation/transfer/token.js.map +1 -0
  375. package/dist/server/validation/user.d.ts +117 -0
  376. package/dist/server/validation/user.js +69 -0
  377. package/dist/server/validation/user.js.map +1 -0
  378. package/package.json +9 -9
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Remove private user fields
3
+ * @param {Object} user - user to sanitize
4
+ */
5
+ declare const sanitizeUser: (user: any) => {
6
+ roles: any;
7
+ };
8
+ /**
9
+ * Create and save a user in database
10
+ * @param attributes A partial user object
11
+ * @returns {Promise<user>}
12
+ */
13
+ declare const create: (attributes: any) => Promise<any>;
14
+ /**
15
+ * Update a user in database
16
+ * @param id query params to find the user to update
17
+ * @param attributes A partial user object
18
+ * @returns {Promise<user>}
19
+ */
20
+ declare const updateById: (id: any, attributes: any) => Promise<any>;
21
+ /**
22
+ * Reset a user password by email. (Used in admin:reset CLI)
23
+ * @param {string} email - user email
24
+ * @param {string} password - new password
25
+ */
26
+ declare const resetPasswordByEmail: (email: string, password: string) => Promise<void>;
27
+ /**
28
+ * Check if a user with specific attributes exists in the database
29
+ * @param attributes A partial user object
30
+ * @returns {Promise<boolean>}
31
+ */
32
+ declare const exists: (attributes?: {}) => Promise<boolean>;
33
+ /**
34
+ * Returns a user registration info
35
+ * @param {string} registrationToken - a user registration token
36
+ * @returns {Promise<registrationInfo>} - Returns user email, firstname and lastname
37
+ */
38
+ declare const findRegistrationInfo: (registrationToken: string) => Promise<Pick<any, "email" | "firstname" | "lastname"> | undefined>;
39
+ /**
40
+ * Registers a user based on a registrationToken and some informations to update
41
+ * @param {Object} params
42
+ * @param {Object} params.registrationToken registration token
43
+ * @param {Object} params.userInfo user info
44
+ */
45
+ declare const register: ({ registrationToken, userInfo }: any) => Promise<any>;
46
+ /**
47
+ * Find one user
48
+ */
49
+ declare const findOne: (id: any, populate?: string[]) => Promise<import("@strapi/types/dist/types/core/attributes").GetValues<"admin::user", string> | null>;
50
+ /**
51
+ * Find one user by its email
52
+ * @param {string} id email
53
+ * @param {string || string[] || object} populate
54
+ * @returns
55
+ */
56
+ declare const findOneByEmail: (email: string, populate?: never[]) => Promise<any>;
57
+ /** Find many users (paginated)
58
+ * @param query
59
+ * @returns {Promise<user>}
60
+ */
61
+ declare const findPage: (query?: {}) => Promise<import("@strapi/types/dist/modules/entity-service").PaginatedResult<"admin::user", {
62
+ populate: string[];
63
+ }>>;
64
+ /** Delete a user
65
+ * @param id id of the user to delete
66
+ * @returns {Promise<user>}
67
+ */
68
+ declare const deleteById: (id: any) => Promise<any>;
69
+ /** Delete a user
70
+ * @param ids ids of the users to delete
71
+ * @returns {Promise<user>}
72
+ */
73
+ declare const deleteByIds: (ids: any[]) => Promise<any[]>;
74
+ /** Count the users that don't have any associated roles
75
+ * @returns {Promise<number>}
76
+ */
77
+ declare const countUsersWithoutRole: () => Promise<number>;
78
+ /**
79
+ * Count the number of users based on search params
80
+ * @param params params used for the query
81
+ * @returns {Promise<number>}
82
+ */
83
+ declare const count: (where?: {}) => Promise<number>;
84
+ /** Assign some roles to several users
85
+ * @returns {undefined}
86
+ */
87
+ declare const assignARoleToAll: (roleId: any) => Promise<void>;
88
+ /** Display a warning if some users don't have at least one role
89
+ * @returns {Promise<>}
90
+ */
91
+ declare const displayWarningIfUsersDontHaveRole: () => Promise<void>;
92
+ /** Returns an array of interface languages currently used by users
93
+ * @returns {Promise<Array<string>>}
94
+ */
95
+ declare const getLanguagesInUse: () => Promise<any[]>;
96
+ export { create, updateById, exists, findRegistrationInfo, register, sanitizeUser, findOne, findOneByEmail, findPage, deleteById, deleteByIds, countUsersWithoutRole, count, assignARoleToAll, displayWarningIfUsersDontHaveRole, resetPasswordByEmail, getLanguagesInUse, };
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getLanguagesInUse = exports.resetPasswordByEmail = exports.displayWarningIfUsersDontHaveRole = exports.assignARoleToAll = exports.count = exports.countUsersWithoutRole = exports.deleteByIds = exports.deleteById = exports.findPage = exports.findOneByEmail = exports.findOne = exports.sanitizeUser = exports.register = exports.findRegistrationInfo = exports.exists = exports.updateById = exports.create = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const fp_1 = require("lodash/fp");
9
+ const utils_1 = require("@strapi/utils");
10
+ const user_1 = require("../domain/user");
11
+ const common_validators_1 = require("../validation/common-validators");
12
+ const utils_2 = require("../utils");
13
+ const constants_1 = require("./constants");
14
+ const { ValidationError } = utils_1.errors;
15
+ const sanitizeUserRoles = (role) => lodash_1.default.pick(role, ['id', 'name', 'description', 'code']);
16
+ /**
17
+ * Remove private user fields
18
+ * @param {Object} user - user to sanitize
19
+ */
20
+ const sanitizeUser = (user) => {
21
+ return {
22
+ ...lodash_1.default.omit(user, ['password', 'resetPasswordToken', 'registrationToken', 'roles']),
23
+ roles: user.roles && user.roles.map(sanitizeUserRoles),
24
+ };
25
+ };
26
+ exports.sanitizeUser = sanitizeUser;
27
+ /**
28
+ * Create and save a user in database
29
+ * @param attributes A partial user object
30
+ * @returns {Promise<user>}
31
+ */
32
+ const create = async (attributes) => {
33
+ const userInfo = {
34
+ registrationToken: (0, utils_2.getService)('token').createToken(),
35
+ ...attributes,
36
+ };
37
+ if (lodash_1.default.has(attributes, 'password')) {
38
+ userInfo.password = await (0, utils_2.getService)('auth').hashPassword(attributes.password);
39
+ }
40
+ const user = (0, user_1.createUser)(userInfo);
41
+ const createdUser = await strapi.query('admin::user').create({ data: user, populate: ['roles'] });
42
+ (0, utils_2.getService)('metrics').sendDidInviteUser();
43
+ strapi.eventHub.emit('user.create', { user: sanitizeUser(createdUser) });
44
+ return createdUser;
45
+ };
46
+ exports.create = create;
47
+ /**
48
+ * Update a user in database
49
+ * @param id query params to find the user to update
50
+ * @param attributes A partial user object
51
+ * @returns {Promise<user>}
52
+ */
53
+ const updateById = async (id, attributes) => {
54
+ // Check at least one super admin remains
55
+ if (lodash_1.default.has(attributes, 'roles')) {
56
+ const lastAdminUser = await isLastSuperAdminUser(id);
57
+ const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
58
+ const willRemoveSuperAdminRole = !(0, utils_1.stringIncludes)(attributes.roles, superAdminRole.id);
59
+ if (lastAdminUser && willRemoveSuperAdminRole) {
60
+ throw new ValidationError('You must have at least one user with super admin role.');
61
+ }
62
+ }
63
+ // cannot disable last super admin
64
+ if (attributes.isActive === false) {
65
+ const lastAdminUser = await isLastSuperAdminUser(id);
66
+ if (lastAdminUser) {
67
+ throw new ValidationError('You must have at least one user with super admin role.');
68
+ }
69
+ }
70
+ // hash password if a new one is sent
71
+ if (lodash_1.default.has(attributes, 'password')) {
72
+ const hashedPassword = await (0, utils_2.getService)('auth').hashPassword(attributes.password);
73
+ const updatedUser = await strapi.query('admin::user').update({
74
+ where: { id },
75
+ data: {
76
+ ...attributes,
77
+ password: hashedPassword,
78
+ },
79
+ populate: ['roles'],
80
+ });
81
+ strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });
82
+ return updatedUser;
83
+ }
84
+ const updatedUser = await strapi.query('admin::user').update({
85
+ where: { id },
86
+ data: attributes,
87
+ populate: ['roles'],
88
+ });
89
+ if (updatedUser) {
90
+ strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });
91
+ }
92
+ return updatedUser;
93
+ };
94
+ exports.updateById = updateById;
95
+ /**
96
+ * Reset a user password by email. (Used in admin:reset CLI)
97
+ * @param {string} email - user email
98
+ * @param {string} password - new password
99
+ */
100
+ const resetPasswordByEmail = async (email, password) => {
101
+ const user = await strapi.query('admin::user').findOne({ where: { email }, populate: ['roles'] });
102
+ if (!user) {
103
+ throw new Error(`User not found for email: ${email}`);
104
+ }
105
+ try {
106
+ await common_validators_1.password.validate(password);
107
+ }
108
+ catch (error) {
109
+ throw new ValidationError('Invalid password. Expected a minimum of 8 characters with at least one number and one uppercase letter');
110
+ }
111
+ await updateById(user.id, { password });
112
+ };
113
+ exports.resetPasswordByEmail = resetPasswordByEmail;
114
+ /**
115
+ * Check if a user is the last super admin
116
+ * @param {int|string} userId user's id to look for
117
+ */
118
+ const isLastSuperAdminUser = async (userId) => {
119
+ const user = await findOne(userId);
120
+ const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
121
+ // @ts-expect-error
122
+ return superAdminRole.usersCount === 1 && (0, user_1.hasSuperAdminRole)(user);
123
+ };
124
+ /**
125
+ * Check if a user with specific attributes exists in the database
126
+ * @param attributes A partial user object
127
+ * @returns {Promise<boolean>}
128
+ */
129
+ const exists = async (attributes = {}) => {
130
+ return (await strapi.query('admin::user').count({ where: attributes })) > 0;
131
+ };
132
+ exports.exists = exists;
133
+ /**
134
+ * Returns a user registration info
135
+ * @param {string} registrationToken - a user registration token
136
+ * @returns {Promise<registrationInfo>} - Returns user email, firstname and lastname
137
+ */
138
+ const findRegistrationInfo = async (registrationToken) => {
139
+ const user = await strapi.query('admin::user').findOne({ where: { registrationToken } });
140
+ if (!user) {
141
+ return undefined;
142
+ }
143
+ return lodash_1.default.pick(user, ['email', 'firstname', 'lastname']);
144
+ };
145
+ exports.findRegistrationInfo = findRegistrationInfo;
146
+ /**
147
+ * Registers a user based on a registrationToken and some informations to update
148
+ * @param {Object} params
149
+ * @param {Object} params.registrationToken registration token
150
+ * @param {Object} params.userInfo user info
151
+ */
152
+ const register = async ({ registrationToken, userInfo }) => {
153
+ const matchingUser = await strapi.query('admin::user').findOne({ where: { registrationToken } });
154
+ if (!matchingUser) {
155
+ throw new ValidationError('Invalid registration info');
156
+ }
157
+ return (0, utils_2.getService)('user').updateById(matchingUser.id, {
158
+ password: userInfo.password,
159
+ firstname: userInfo.firstname,
160
+ lastname: userInfo.lastname,
161
+ registrationToken: null,
162
+ isActive: true,
163
+ });
164
+ };
165
+ exports.register = register;
166
+ /**
167
+ * Find one user
168
+ */
169
+ const findOne = async (id, populate = ['roles']) => {
170
+ return strapi.entityService.findOne('admin::user', id, { populate });
171
+ };
172
+ exports.findOne = findOne;
173
+ /**
174
+ * Find one user by its email
175
+ * @param {string} id email
176
+ * @param {string || string[] || object} populate
177
+ * @returns
178
+ */
179
+ const findOneByEmail = async (email, populate = []) => {
180
+ return strapi.query('admin::user').findOne({
181
+ where: { email },
182
+ populate,
183
+ });
184
+ };
185
+ exports.findOneByEmail = findOneByEmail;
186
+ /** Find many users (paginated)
187
+ * @param query
188
+ * @returns {Promise<user>}
189
+ */
190
+ const findPage = async (query = {}) => {
191
+ const enrichedQuery = (0, fp_1.defaults)({ populate: ['roles'] }, query);
192
+ return strapi.entityService.findPage('admin::user', enrichedQuery);
193
+ };
194
+ exports.findPage = findPage;
195
+ /** Delete a user
196
+ * @param id id of the user to delete
197
+ * @returns {Promise<user>}
198
+ */
199
+ const deleteById = async (id) => {
200
+ // Check at least one super admin remains
201
+ const userToDelete = await strapi.query('admin::user').findOne({
202
+ where: { id },
203
+ populate: ['roles'],
204
+ });
205
+ if (!userToDelete) {
206
+ return null;
207
+ }
208
+ if (userToDelete) {
209
+ if (userToDelete.roles.some((r) => r.code === constants_1.SUPER_ADMIN_CODE)) {
210
+ const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
211
+ if (superAdminRole.usersCount === 1) {
212
+ throw new ValidationError('You must have at least one user with super admin role.');
213
+ }
214
+ }
215
+ }
216
+ const deletedUser = await strapi
217
+ .query('admin::user')
218
+ .delete({ where: { id }, populate: ['roles'] });
219
+ strapi.eventHub.emit('user.delete', { user: sanitizeUser(deletedUser) });
220
+ return deletedUser;
221
+ };
222
+ exports.deleteById = deleteById;
223
+ /** Delete a user
224
+ * @param ids ids of the users to delete
225
+ * @returns {Promise<user>}
226
+ */
227
+ const deleteByIds = async (ids) => {
228
+ // Check at least one super admin remains
229
+ const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
230
+ const nbOfSuperAdminToDelete = await strapi.query('admin::user').count({
231
+ where: {
232
+ id: ids,
233
+ roles: { id: superAdminRole.id },
234
+ },
235
+ });
236
+ if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {
237
+ throw new ValidationError('You must have at least one user with super admin role.');
238
+ }
239
+ const deletedUsers = [];
240
+ for (const id of ids) {
241
+ const deletedUser = await strapi.query('admin::user').delete({
242
+ where: { id },
243
+ populate: ['roles'],
244
+ });
245
+ deletedUsers.push(deletedUser);
246
+ }
247
+ strapi.eventHub.emit('user.delete', {
248
+ users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser)),
249
+ });
250
+ return deletedUsers;
251
+ };
252
+ exports.deleteByIds = deleteByIds;
253
+ /** Count the users that don't have any associated roles
254
+ * @returns {Promise<number>}
255
+ */
256
+ const countUsersWithoutRole = async () => {
257
+ return strapi.query('admin::user').count({
258
+ where: {
259
+ roles: {
260
+ id: { $null: true },
261
+ },
262
+ },
263
+ });
264
+ };
265
+ exports.countUsersWithoutRole = countUsersWithoutRole;
266
+ /**
267
+ * Count the number of users based on search params
268
+ * @param params params used for the query
269
+ * @returns {Promise<number>}
270
+ */
271
+ const count = async (where = {}) => {
272
+ return strapi.query('admin::user').count({ where });
273
+ };
274
+ exports.count = count;
275
+ /** Assign some roles to several users
276
+ * @returns {undefined}
277
+ */
278
+ const assignARoleToAll = async (roleId) => {
279
+ const users = await strapi.query('admin::user').findMany({
280
+ select: ['id'],
281
+ where: {
282
+ roles: { id: { $null: true } },
283
+ },
284
+ });
285
+ await Promise.all(users.map((user) => {
286
+ return strapi.query('admin::user').update({
287
+ where: { id: user.id },
288
+ data: { roles: [roleId] },
289
+ });
290
+ }));
291
+ };
292
+ exports.assignARoleToAll = assignARoleToAll;
293
+ /** Display a warning if some users don't have at least one role
294
+ * @returns {Promise<>}
295
+ */
296
+ const displayWarningIfUsersDontHaveRole = async () => {
297
+ const count = await countUsersWithoutRole();
298
+ if (count > 0) {
299
+ strapi.log.warn(`Some users (${count}) don't have any role.`);
300
+ }
301
+ };
302
+ exports.displayWarningIfUsersDontHaveRole = displayWarningIfUsersDontHaveRole;
303
+ /** Returns an array of interface languages currently used by users
304
+ * @returns {Promise<Array<string>>}
305
+ */
306
+ const getLanguagesInUse = async () => {
307
+ const users = await strapi.query('admin::user').findMany({ select: ['preferedLanguage'] });
308
+ return users.map((user) => user.preferedLanguage || 'en');
309
+ };
310
+ exports.getLanguagesInUse = getLanguagesInUse;
311
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../server/src/services/user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** @type {import('.').AuthenticateFunction} */
2
+ export declare const authenticate: (ctx: any) => Promise<{
3
+ authenticated: boolean;
4
+ credentials?: undefined;
5
+ ability?: undefined;
6
+ } | {
7
+ authenticated: boolean;
8
+ credentials: any;
9
+ ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
10
+ }>;
11
+ export declare const name = "admin";
12
+ /** @type {import('.').AuthStrategy} */
13
+ declare const _default: {
14
+ name: string;
15
+ authenticate: (ctx: any) => Promise<{
16
+ authenticated: boolean;
17
+ credentials?: undefined;
18
+ ability?: undefined;
19
+ } | {
20
+ authenticated: boolean;
21
+ credentials: any;
22
+ ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
23
+ }>;
24
+ };
25
+ export default _default;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.name = exports.authenticate = void 0;
4
+ const utils_1 = require("../utils");
5
+ /** @type {import('.').AuthenticateFunction} */
6
+ const authenticate = async (ctx) => {
7
+ const { authorization } = ctx.request.header;
8
+ if (!authorization) {
9
+ return { authenticated: false };
10
+ }
11
+ const parts = authorization.split(/\s+/);
12
+ if (parts[0].toLowerCase() !== 'bearer' || parts.length !== 2) {
13
+ return { authenticated: false };
14
+ }
15
+ const token = parts[1];
16
+ const { payload, isValid } = (0, utils_1.getService)('token').decodeJwtToken(token);
17
+ if (!isValid) {
18
+ return { authenticated: false };
19
+ }
20
+ const user = await strapi
21
+ .query('admin::user')
22
+ .findOne({ where: { id: payload.id }, populate: ['roles'] });
23
+ if (!user || !(user.isActive === true)) {
24
+ return { authenticated: false };
25
+ }
26
+ const userAbility = await (0, utils_1.getService)('permission').engine.generateUserAbility(user);
27
+ // TODO: use the ability from ctx.state.auth instead of
28
+ // ctx.state.userAbility, and remove the assign below
29
+ ctx.state.userAbility = userAbility;
30
+ ctx.state.user = user;
31
+ return {
32
+ authenticated: true,
33
+ credentials: user,
34
+ ability: userAbility,
35
+ };
36
+ };
37
+ exports.authenticate = authenticate;
38
+ exports.name = 'admin';
39
+ /** @type {import('.').AuthStrategy} */
40
+ exports.default = {
41
+ name: exports.name,
42
+ authenticate: exports.authenticate,
43
+ };
44
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../server/src/strategies/admin.ts"],"names":[],"mappings":";;;AAAA,oCAAsC;AAEtC,+CAA+C;AACxC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAQ,EAAE,EAAE;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAE7C,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAEvE,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM;SACtB,KAAK,CAAC,aAAa,CAAC;SACpB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE/D,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;QACtC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,WAAW,GAAG,MAAM,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEpF,uDAAuD;IACvD,qDAAqD;IACrD,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IACpC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAEtB,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,WAAW;KACrB,CAAC;AACJ,CAAC,CAAC;AAxCW,QAAA,YAAY,gBAwCvB;AAEW,QAAA,IAAI,GAAG,OAAO,CAAC;AAE5B,uCAAuC;AACvC,kBAAe;IACb,IAAI,EAAJ,YAAI;IACJ,YAAY,EAAZ,oBAAY;CACb,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Authenticate the validity of the token
3
+ *
4
+ * @type {import('.').AuthenticateFunction}
5
+ */
6
+ export declare const authenticate: (ctx: any) => Promise<{
7
+ authenticated: boolean;
8
+ error?: undefined;
9
+ ability?: undefined;
10
+ credentials?: undefined;
11
+ } | {
12
+ authenticated: boolean;
13
+ error: import("@strapi/utils/dist/errors").UnauthorizedError;
14
+ ability?: undefined;
15
+ credentials?: undefined;
16
+ } | {
17
+ authenticated: boolean;
18
+ ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
19
+ credentials: any;
20
+ error?: undefined;
21
+ } | {
22
+ authenticated: boolean;
23
+ credentials: any;
24
+ error?: undefined;
25
+ ability?: undefined;
26
+ }>;
27
+ /**
28
+ * Verify the token has the required abilities for the requested scope
29
+ *
30
+ * @type {import('.').VerifyFunction}
31
+ */
32
+ export declare const verify: (auth: any, config: any) => void;
33
+ export declare const name = "api-token";
34
+ /** @type {import('.').AuthStrategy} */
35
+ declare const _default: {
36
+ name: string;
37
+ authenticate: (ctx: any) => Promise<{
38
+ authenticated: boolean;
39
+ error?: undefined;
40
+ ability?: undefined;
41
+ credentials?: undefined;
42
+ } | {
43
+ authenticated: boolean;
44
+ error: import("@strapi/utils/dist/errors").UnauthorizedError;
45
+ ability?: undefined;
46
+ credentials?: undefined;
47
+ } | {
48
+ authenticated: boolean;
49
+ ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
50
+ credentials: any;
51
+ error?: undefined;
52
+ } | {
53
+ authenticated: boolean;
54
+ credentials: any;
55
+ error?: undefined;
56
+ ability?: undefined;
57
+ }>;
58
+ verify: (auth: any, config: any) => void;
59
+ };
60
+ export default _default;
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.name = exports.verify = exports.authenticate = void 0;
7
+ const fp_1 = require("lodash/fp");
8
+ const date_fns_1 = require("date-fns");
9
+ const utils_1 = require("@strapi/utils");
10
+ const constants_1 = __importDefault(require("../services/constants"));
11
+ const utils_2 = require("../utils");
12
+ const { UnauthorizedError, ForbiddenError } = utils_1.errors;
13
+ const isReadScope = (scope) => scope.endsWith('find') || scope.endsWith('findOne');
14
+ const extractToken = (ctx) => {
15
+ if (ctx.request && ctx.request.header && ctx.request.header.authorization) {
16
+ const parts = ctx.request.header.authorization.split(/\s+/);
17
+ if (parts[0].toLowerCase() !== 'bearer' || parts.length !== 2) {
18
+ return null;
19
+ }
20
+ return parts[1];
21
+ }
22
+ return null;
23
+ };
24
+ /**
25
+ * Authenticate the validity of the token
26
+ *
27
+ * @type {import('.').AuthenticateFunction}
28
+ */
29
+ const authenticate = async (ctx) => {
30
+ const apiTokenService = (0, utils_2.getService)('api-token');
31
+ const token = extractToken(ctx);
32
+ if (!token) {
33
+ return { authenticated: false };
34
+ }
35
+ // @ts-ignore
36
+ const apiToken = await apiTokenService.getBy({
37
+ accessKey: apiTokenService.hash(token),
38
+ });
39
+ // token not found
40
+ if (!apiToken) {
41
+ return { authenticated: false };
42
+ }
43
+ const currentDate = new Date();
44
+ if (!(0, fp_1.isNil)(apiToken.expiresAt)) {
45
+ const expirationDate = new Date(apiToken.expiresAt);
46
+ // token has expired
47
+ if (expirationDate < currentDate) {
48
+ return { authenticated: false, error: new UnauthorizedError('Token expired') };
49
+ }
50
+ }
51
+ // update lastUsedAt if the token has not been used in the last hour
52
+ // @ts-ignore
53
+ const hoursSinceLastUsed = (0, date_fns_1.differenceInHours)(currentDate, (0, date_fns_1.parseISO)(apiToken.lastUsedAt));
54
+ if (hoursSinceLastUsed >= 1) {
55
+ await strapi.query('admin::api-token').update({
56
+ where: { id: apiToken.id },
57
+ data: { lastUsedAt: currentDate },
58
+ });
59
+ }
60
+ if (apiToken.type === constants_1.default.API_TOKEN_TYPE.CUSTOM) {
61
+ const ability = await strapi.contentAPI.permissions.engine.generateAbility(apiToken.permissions.map((action) => ({ action })));
62
+ return { authenticated: true, ability, credentials: apiToken };
63
+ }
64
+ return { authenticated: true, credentials: apiToken };
65
+ };
66
+ exports.authenticate = authenticate;
67
+ /**
68
+ * Verify the token has the required abilities for the requested scope
69
+ *
70
+ * @type {import('.').VerifyFunction}
71
+ */
72
+ const verify = (auth, config) => {
73
+ const { credentials: apiToken, ability } = auth;
74
+ if (!apiToken) {
75
+ throw new UnauthorizedError('Token not found');
76
+ }
77
+ const currentDate = new Date();
78
+ if (!(0, fp_1.isNil)(apiToken.expiresAt)) {
79
+ const expirationDate = new Date(apiToken.expiresAt);
80
+ // token has expired
81
+ if (expirationDate < currentDate) {
82
+ throw new UnauthorizedError('Token expired');
83
+ }
84
+ }
85
+ // Full access
86
+ if (apiToken.type === constants_1.default.API_TOKEN_TYPE.FULL_ACCESS) {
87
+ return;
88
+ }
89
+ // Read only
90
+ if (apiToken.type === constants_1.default.API_TOKEN_TYPE.READ_ONLY) {
91
+ /**
92
+ * If you don't have `full-access` you can only access `find` and `findOne`
93
+ * scopes. If the route has no scope, then you can't get access to it.
94
+ */
95
+ const scopes = (0, fp_1.castArray)(config.scope);
96
+ if (config.scope && scopes.every(isReadScope)) {
97
+ return;
98
+ }
99
+ }
100
+ // Custom
101
+ else if (apiToken.type === constants_1.default.API_TOKEN_TYPE.CUSTOM) {
102
+ if (!ability) {
103
+ throw new ForbiddenError();
104
+ }
105
+ const scopes = (0, fp_1.castArray)(config.scope);
106
+ const isAllowed = scopes.every((scope) => ability.can(scope));
107
+ if (isAllowed) {
108
+ return;
109
+ }
110
+ }
111
+ throw new ForbiddenError();
112
+ };
113
+ exports.verify = verify;
114
+ exports.name = 'api-token';
115
+ /** @type {import('.').AuthStrategy} */
116
+ exports.default = {
117
+ name: 'api-token',
118
+ authenticate: exports.authenticate,
119
+ verify: exports.verify,
120
+ };
121
+ //# sourceMappingURL=api-token.js.map