@strapi/plugin-users-permissions 0.0.0-experimental.6340da17068c3bed7fb006e7bcc554c71129e282 → 0.0.0-experimental.63624e21eb5b0713345a0cf2f68f1c40eab427bc

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 (371) hide show
  1. package/.eslintrc.cjs +2 -0
  2. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +3 -1
  3. package/admin/src/pages/Roles/pages/EditPage.jsx +1 -1
  4. package/admin/src/pages/Roles/pages/ListPage/index.jsx +1 -1
  5. package/admin/src/translations/en.json +1 -0
  6. package/admin/src/translations/es.json +1 -1
  7. package/admin/src/translations/ko.json +2 -1
  8. package/admin/src/translations/sv.json +1 -1
  9. package/admin/src/translations/uk.json +1 -1
  10. package/dist/admin/pages/EmailTemplates/components/EmailForm.js +2 -1
  11. package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
  12. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +2 -1
  13. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -1
  14. package/dist/admin/pages/Roles/pages/EditPage.js +1 -1
  15. package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
  16. package/dist/admin/pages/Roles/pages/EditPage.mjs +1 -1
  17. package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
  18. package/dist/admin/pages/Roles/pages/ListPage/index.js +1 -1
  19. package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
  20. package/dist/admin/pages/Roles/pages/ListPage/index.mjs +1 -1
  21. package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
  22. package/dist/admin/translations/en.json.js +1 -0
  23. package/dist/admin/translations/en.json.js.map +1 -1
  24. package/dist/admin/translations/en.json.mjs +1 -0
  25. package/dist/admin/translations/en.json.mjs.map +1 -1
  26. package/dist/admin/translations/es.json.js +1 -1
  27. package/dist/admin/translations/es.json.mjs +1 -1
  28. package/dist/admin/translations/ko.json.js +2 -1
  29. package/dist/admin/translations/ko.json.js.map +1 -1
  30. package/dist/admin/translations/ko.json.mjs +2 -1
  31. package/dist/admin/translations/ko.json.mjs.map +1 -1
  32. package/dist/admin/translations/sv.json.js +1 -1
  33. package/dist/admin/translations/sv.json.mjs +1 -1
  34. package/dist/admin/translations/uk.json.js +1 -1
  35. package/dist/admin/translations/uk.json.mjs +1 -1
  36. package/dist/server/_virtual/_node_crypto.js +10 -0
  37. package/dist/server/_virtual/_node_crypto.js.map +1 -0
  38. package/dist/server/_virtual/_node_crypto.mjs +7 -0
  39. package/dist/server/_virtual/_node_crypto.mjs.map +1 -0
  40. package/dist/server/_virtual/_node_url.js +10 -0
  41. package/dist/server/_virtual/_node_url.js.map +1 -0
  42. package/dist/server/_virtual/_node_url.mjs +7 -0
  43. package/dist/server/_virtual/_node_url.mjs.map +1 -0
  44. package/dist/server/bootstrap/index.js.map +1 -1
  45. package/dist/server/bootstrap/index.mjs.map +1 -1
  46. package/dist/server/bootstrap/users-permissions-actions.js.map +1 -1
  47. package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -1
  48. package/dist/server/config.js.map +1 -1
  49. package/dist/server/config.mjs.map +1 -1
  50. package/dist/server/content-types/index.js.map +1 -1
  51. package/dist/server/content-types/index.mjs.map +1 -1
  52. package/dist/server/content-types/permission/index.js.map +1 -1
  53. package/dist/server/content-types/permission/index.mjs.map +1 -1
  54. package/dist/server/content-types/role/index.js.map +1 -1
  55. package/dist/server/content-types/role/index.mjs.map +1 -1
  56. package/dist/server/content-types/user/index.js.map +1 -1
  57. package/dist/server/content-types/user/index.mjs.map +1 -1
  58. package/dist/server/content-types/user/schema-config.js.map +1 -1
  59. package/dist/server/content-types/user/schema-config.mjs.map +1 -1
  60. package/dist/server/controllers/auth.js +38 -30
  61. package/dist/server/controllers/auth.js.map +1 -1
  62. package/dist/server/controllers/auth.mjs +38 -28
  63. package/dist/server/controllers/auth.mjs.map +1 -1
  64. package/dist/server/controllers/content-manager-user.js.map +1 -1
  65. package/dist/server/controllers/content-manager-user.mjs.map +1 -1
  66. package/dist/server/controllers/index.js.map +1 -1
  67. package/dist/server/controllers/index.mjs.map +1 -1
  68. package/dist/server/controllers/permissions.js.map +1 -1
  69. package/dist/server/controllers/permissions.mjs.map +1 -1
  70. package/dist/server/controllers/role.js.map +1 -1
  71. package/dist/server/controllers/role.mjs.map +1 -1
  72. package/dist/server/controllers/settings.js.map +1 -1
  73. package/dist/server/controllers/settings.mjs.map +1 -1
  74. package/dist/server/controllers/user.js.map +1 -1
  75. package/dist/server/controllers/user.mjs.map +1 -1
  76. package/dist/server/controllers/validation/auth.js +6 -6
  77. package/dist/server/controllers/validation/auth.js.map +1 -1
  78. package/dist/server/controllers/validation/auth.mjs +6 -6
  79. package/dist/server/controllers/validation/auth.mjs.map +1 -1
  80. package/dist/server/controllers/validation/email-template.js +1 -4
  81. package/dist/server/controllers/validation/email-template.js.map +1 -1
  82. package/dist/server/controllers/validation/email-template.mjs +1 -3
  83. package/dist/server/controllers/validation/email-template.mjs.map +1 -1
  84. package/dist/server/controllers/validation/user.js.map +1 -1
  85. package/dist/server/controllers/validation/user.mjs.map +1 -1
  86. package/dist/server/graphql/index.js.map +1 -1
  87. package/dist/server/graphql/index.mjs.map +1 -1
  88. package/dist/server/graphql/mutations/auth/change-password.js +7 -4
  89. package/dist/server/graphql/mutations/auth/change-password.js.map +1 -1
  90. package/dist/server/graphql/mutations/auth/change-password.mjs +7 -4
  91. package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -1
  92. package/dist/server/graphql/mutations/auth/email-confirmation.js +1 -1
  93. package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -1
  94. package/dist/server/graphql/mutations/auth/email-confirmation.mjs +1 -1
  95. package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -1
  96. package/dist/server/graphql/mutations/auth/forgot-password.js +7 -4
  97. package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -1
  98. package/dist/server/graphql/mutations/auth/forgot-password.mjs +7 -4
  99. package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -1
  100. package/dist/server/graphql/mutations/auth/login.js +10 -7
  101. package/dist/server/graphql/mutations/auth/login.js.map +1 -1
  102. package/dist/server/graphql/mutations/auth/login.mjs +10 -7
  103. package/dist/server/graphql/mutations/auth/login.mjs.map +1 -1
  104. package/dist/server/graphql/mutations/auth/rate-limit.js +63 -0
  105. package/dist/server/graphql/mutations/auth/rate-limit.js.map +1 -0
  106. package/dist/server/graphql/mutations/auth/rate-limit.mjs +61 -0
  107. package/dist/server/graphql/mutations/auth/rate-limit.mjs.map +1 -0
  108. package/dist/server/graphql/mutations/auth/register.js +7 -4
  109. package/dist/server/graphql/mutations/auth/register.js.map +1 -1
  110. package/dist/server/graphql/mutations/auth/register.mjs +7 -4
  111. package/dist/server/graphql/mutations/auth/register.mjs.map +1 -1
  112. package/dist/server/graphql/mutations/auth/reset-password.js +7 -4
  113. package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -1
  114. package/dist/server/graphql/mutations/auth/reset-password.mjs +7 -4
  115. package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -1
  116. package/dist/server/graphql/mutations/crud/role/create-role.js +1 -1
  117. package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -1
  118. package/dist/server/graphql/mutations/crud/role/create-role.mjs +1 -1
  119. package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -1
  120. package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -1
  121. package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -1
  122. package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -1
  123. package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -1
  124. package/dist/server/graphql/mutations/crud/user/create-user.js +1 -1
  125. package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -1
  126. package/dist/server/graphql/mutations/crud/user/create-user.mjs +1 -1
  127. package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -1
  128. package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -1
  129. package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -1
  130. package/dist/server/graphql/mutations/crud/user/update-user.js +1 -1
  131. package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -1
  132. package/dist/server/graphql/mutations/crud/user/update-user.mjs +1 -1
  133. package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -1
  134. package/dist/server/graphql/mutations/index.js.map +1 -1
  135. package/dist/server/graphql/mutations/index.mjs.map +1 -1
  136. package/dist/server/graphql/queries/index.js.map +1 -1
  137. package/dist/server/graphql/queries/index.mjs.map +1 -1
  138. package/dist/server/graphql/queries/me.js.map +1 -1
  139. package/dist/server/graphql/queries/me.mjs.map +1 -1
  140. package/dist/server/graphql/resolvers-configs.js.map +1 -1
  141. package/dist/server/graphql/resolvers-configs.mjs.map +1 -1
  142. package/dist/server/graphql/types/create-role-payload.js.map +1 -1
  143. package/dist/server/graphql/types/create-role-payload.mjs.map +1 -1
  144. package/dist/server/graphql/types/delete-role-payload.js.map +1 -1
  145. package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -1
  146. package/dist/server/graphql/types/index.js.map +1 -1
  147. package/dist/server/graphql/types/index.mjs.map +1 -1
  148. package/dist/server/graphql/types/login-input.js.map +1 -1
  149. package/dist/server/graphql/types/login-input.mjs.map +1 -1
  150. package/dist/server/graphql/types/login-payload.js.map +1 -1
  151. package/dist/server/graphql/types/login-payload.mjs.map +1 -1
  152. package/dist/server/graphql/types/me-role.js.map +1 -1
  153. package/dist/server/graphql/types/me-role.mjs.map +1 -1
  154. package/dist/server/graphql/types/me.js.map +1 -1
  155. package/dist/server/graphql/types/me.mjs.map +1 -1
  156. package/dist/server/graphql/types/password-payload.js.map +1 -1
  157. package/dist/server/graphql/types/password-payload.mjs.map +1 -1
  158. package/dist/server/graphql/types/register-input.js.map +1 -1
  159. package/dist/server/graphql/types/register-input.mjs.map +1 -1
  160. package/dist/server/graphql/types/update-role-payload.js.map +1 -1
  161. package/dist/server/graphql/types/update-role-payload.mjs.map +1 -1
  162. package/dist/server/graphql/types/user-input.js.map +1 -1
  163. package/dist/server/graphql/types/user-input.mjs.map +1 -1
  164. package/dist/server/graphql/utils.js +4 -4
  165. package/dist/server/graphql/utils.js.map +1 -1
  166. package/dist/server/graphql/utils.mjs +4 -4
  167. package/dist/server/graphql/utils.mjs.map +1 -1
  168. package/dist/server/index.js +2 -2
  169. package/dist/server/index.js.map +1 -1
  170. package/dist/server/index.mjs +3 -3
  171. package/dist/server/index.mjs.map +1 -1
  172. package/dist/server/index2.js +8 -8
  173. package/dist/server/index2.js.map +1 -1
  174. package/dist/server/index2.mjs +8 -8
  175. package/dist/server/index2.mjs.map +1 -1
  176. package/dist/server/middlewares/index.js.map +1 -1
  177. package/dist/server/middlewares/index.mjs.map +1 -1
  178. package/dist/server/middlewares/rateLimit.js +5 -5
  179. package/dist/server/middlewares/rateLimit.js.map +1 -1
  180. package/dist/server/middlewares/rateLimit.mjs +5 -5
  181. package/dist/server/middlewares/rateLimit.mjs.map +1 -1
  182. package/dist/server/register.js.map +1 -1
  183. package/dist/server/register.mjs.map +1 -1
  184. package/dist/server/routes/admin/index.js.map +1 -1
  185. package/dist/server/routes/admin/index.mjs.map +1 -1
  186. package/dist/server/routes/admin/permissions.js.map +1 -1
  187. package/dist/server/routes/admin/permissions.mjs.map +1 -1
  188. package/dist/server/routes/admin/role.js.map +1 -1
  189. package/dist/server/routes/admin/role.mjs.map +1 -1
  190. package/dist/server/routes/admin/settings.js.map +1 -1
  191. package/dist/server/routes/admin/settings.mjs.map +1 -1
  192. package/dist/server/routes/content-api/auth.js.map +1 -1
  193. package/dist/server/routes/content-api/auth.mjs.map +1 -1
  194. package/dist/server/routes/content-api/index.js.map +1 -1
  195. package/dist/server/routes/content-api/index.mjs.map +1 -1
  196. package/dist/server/routes/content-api/permissions.js.map +1 -1
  197. package/dist/server/routes/content-api/permissions.mjs.map +1 -1
  198. package/dist/server/routes/content-api/role.js.map +1 -1
  199. package/dist/server/routes/content-api/role.mjs.map +1 -1
  200. package/dist/server/routes/content-api/user.js.map +1 -1
  201. package/dist/server/routes/content-api/user.mjs.map +1 -1
  202. package/dist/server/routes/content-api/validation.js.map +1 -1
  203. package/dist/server/routes/content-api/validation.mjs.map +1 -1
  204. package/dist/server/routes/index.js.map +1 -1
  205. package/dist/server/routes/index.mjs.map +1 -1
  206. package/dist/server/services/constants.js.map +1 -1
  207. package/dist/server/services/constants.mjs.map +1 -1
  208. package/dist/server/services/index.js.map +1 -1
  209. package/dist/server/services/index.mjs.map +1 -1
  210. package/dist/server/services/jwt.js.map +1 -1
  211. package/dist/server/services/jwt.mjs.map +1 -1
  212. package/dist/server/services/permission.js.map +1 -1
  213. package/dist/server/services/permission.mjs.map +1 -1
  214. package/dist/server/services/providers-registry.js +188 -248
  215. package/dist/server/services/providers-registry.js.map +1 -1
  216. package/dist/server/services/providers-registry.mjs +188 -245
  217. package/dist/server/services/providers-registry.mjs.map +1 -1
  218. package/dist/server/services/providers.js +15 -11
  219. package/dist/server/services/providers.js.map +1 -1
  220. package/dist/server/services/providers.mjs +14 -10
  221. package/dist/server/services/providers.mjs.map +1 -1
  222. package/dist/server/services/role.js +2 -2
  223. package/dist/server/services/role.js.map +1 -1
  224. package/dist/server/services/role.mjs +2 -2
  225. package/dist/server/services/role.mjs.map +1 -1
  226. package/dist/server/services/user.js +14 -14
  227. package/dist/server/services/user.js.map +1 -1
  228. package/dist/server/services/user.mjs +13 -13
  229. package/dist/server/services/user.mjs.map +1 -1
  230. package/dist/server/services/users-permissions.js +17 -20
  231. package/dist/server/services/users-permissions.js.map +1 -1
  232. package/dist/server/services/users-permissions.mjs +16 -18
  233. package/dist/server/services/users-permissions.mjs.map +1 -1
  234. package/dist/server/strategies/users-permissions.js +9 -8
  235. package/dist/server/strategies/users-permissions.js.map +1 -1
  236. package/dist/server/strategies/users-permissions.mjs +9 -8
  237. package/dist/server/strategies/users-permissions.mjs.map +1 -1
  238. package/dist/server/utils/index.js.map +1 -1
  239. package/dist/server/utils/index.mjs.map +1 -1
  240. package/dist/server/utils/oauth-connect/index.js +241 -0
  241. package/dist/server/utils/oauth-connect/index.js.map +1 -0
  242. package/dist/server/utils/oauth-connect/index.mjs +235 -0
  243. package/dist/server/utils/oauth-connect/index.mjs.map +1 -0
  244. package/dist/server/utils/oauth-connect/oauth1.js +138 -0
  245. package/dist/server/utils/oauth-connect/oauth1.js.map +1 -0
  246. package/dist/server/utils/oauth-connect/oauth1.mjs +136 -0
  247. package/dist/server/utils/oauth-connect/oauth1.mjs.map +1 -0
  248. package/dist/server/utils/oauth-connect/oauth2.js +117 -0
  249. package/dist/server/utils/oauth-connect/oauth2.js.map +1 -0
  250. package/dist/server/utils/oauth-connect/oauth2.mjs +115 -0
  251. package/dist/server/utils/oauth-connect/oauth2.mjs.map +1 -0
  252. package/dist/server/utils/oauth-connect/providers.js +109 -0
  253. package/dist/server/utils/oauth-connect/providers.js.map +1 -0
  254. package/dist/server/utils/oauth-connect/providers.mjs +107 -0
  255. package/dist/server/utils/oauth-connect/providers.mjs.map +1 -0
  256. package/dist/server/utils/provider-http.js +52 -0
  257. package/dist/server/utils/provider-http.js.map +1 -0
  258. package/dist/server/utils/provider-http.mjs +50 -0
  259. package/dist/server/utils/provider-http.mjs.map +1 -0
  260. package/dist/server/utils/refresh-cookie-options.js.map +1 -1
  261. package/dist/server/utils/refresh-cookie-options.mjs.map +1 -1
  262. package/dist/server/utils/sanitize/index.js.map +1 -1
  263. package/dist/server/utils/sanitize/index.mjs.map +1 -1
  264. package/dist/server/utils/sanitize/sanitizers.js +1 -1
  265. package/dist/server/utils/sanitize/sanitizers.js.map +1 -1
  266. package/dist/server/utils/sanitize/sanitizers.mjs +1 -1
  267. package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -1
  268. package/dist/server/utils/sanitize/visitors/index.js.map +1 -1
  269. package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -1
  270. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -1
  271. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -1
  272. package/dist/server/utils/trim-grant-session-response.js +67 -0
  273. package/dist/server/utils/trim-grant-session-response.js.map +1 -0
  274. package/dist/server/utils/trim-grant-session-response.mjs +65 -0
  275. package/dist/server/utils/trim-grant-session-response.mjs.map +1 -0
  276. package/dist/server/utils/verify-jwt-with-jwks.js +60 -0
  277. package/dist/server/utils/verify-jwt-with-jwks.js.map +1 -0
  278. package/dist/server/utils/verify-jwt-with-jwks.mjs +54 -0
  279. package/dist/server/utils/verify-jwt-with-jwks.mjs.map +1 -0
  280. package/jsconfig.json +7 -0
  281. package/package.json +28 -18
  282. package/rollup.config.mjs +2 -2
  283. package/server/{controllers → src/controllers}/auth.js +36 -29
  284. package/server/{controllers → src/controllers}/validation/auth.js +6 -6
  285. package/server/{controllers → src/controllers}/validation/email-template.js +1 -2
  286. package/server/{graphql → src/graphql}/mutations/auth/change-password.js +6 -6
  287. package/server/{graphql → src/graphql}/mutations/auth/email-confirmation.js +1 -1
  288. package/server/{graphql → src/graphql}/mutations/auth/forgot-password.js +6 -6
  289. package/server/{graphql → src/graphql}/mutations/auth/login.js +11 -7
  290. package/server/src/graphql/mutations/auth/rate-limit.js +62 -0
  291. package/server/{graphql → src/graphql}/mutations/auth/register.js +6 -6
  292. package/server/{graphql → src/graphql}/mutations/auth/reset-password.js +6 -6
  293. package/server/{graphql → src/graphql}/mutations/crud/role/create-role.js +1 -1
  294. package/server/{graphql → src/graphql}/mutations/crud/user/create-user.js +1 -1
  295. package/server/{graphql → src/graphql}/mutations/crud/user/update-user.js +1 -1
  296. package/server/{graphql → src/graphql}/utils.js +3 -3
  297. package/server/{middlewares → src/middlewares}/rateLimit.js +4 -4
  298. package/server/src/services/providers-registry.js +487 -0
  299. package/server/{services → src/services}/providers.js +9 -7
  300. package/server/{services → src/services}/role.js +2 -2
  301. package/server/{services → src/services}/user.js +16 -6
  302. package/server/{services → src/services}/users-permissions.js +14 -16
  303. package/server/{strategies → src/strategies}/users-permissions.js +14 -10
  304. package/server/src/utils/oauth-connect/index.js +262 -0
  305. package/server/src/utils/oauth-connect/oauth1.js +169 -0
  306. package/server/src/utils/oauth-connect/oauth2.js +123 -0
  307. package/server/src/utils/oauth-connect/providers.js +100 -0
  308. package/server/src/utils/provider-http.js +49 -0
  309. package/server/{utils → src/utils}/sanitize/sanitizers.js +1 -1
  310. package/server/src/utils/trim-grant-session-response.js +70 -0
  311. package/server/src/utils/verify-jwt-with-jwks.js +43 -0
  312. package/types/strapi-server.d.ts +65 -0
  313. package/server/services/providers-registry.js +0 -567
  314. package/server/utils/index.d.ts +0 -23
  315. /package/server/{bootstrap → src/bootstrap}/index.js +0 -0
  316. /package/server/{bootstrap → src/bootstrap}/users-permissions-actions.js +0 -0
  317. /package/server/{config.js → src/config.js} +0 -0
  318. /package/server/{content-types → src/content-types}/index.js +0 -0
  319. /package/server/{content-types → src/content-types}/permission/index.js +0 -0
  320. /package/server/{content-types → src/content-types}/role/index.js +0 -0
  321. /package/server/{content-types → src/content-types}/user/index.js +0 -0
  322. /package/server/{content-types → src/content-types}/user/schema-config.js +0 -0
  323. /package/server/{controllers → src/controllers}/content-manager-user.js +0 -0
  324. /package/server/{controllers → src/controllers}/index.js +0 -0
  325. /package/server/{controllers → src/controllers}/permissions.js +0 -0
  326. /package/server/{controllers → src/controllers}/role.js +0 -0
  327. /package/server/{controllers → src/controllers}/settings.js +0 -0
  328. /package/server/{controllers → src/controllers}/user.js +0 -0
  329. /package/server/{controllers → src/controllers}/validation/user.js +0 -0
  330. /package/server/{graphql → src/graphql}/index.js +0 -0
  331. /package/server/{graphql → src/graphql}/mutations/crud/role/delete-role.js +0 -0
  332. /package/server/{graphql → src/graphql}/mutations/crud/role/update-role.js +0 -0
  333. /package/server/{graphql → src/graphql}/mutations/crud/user/delete-user.js +0 -0
  334. /package/server/{graphql → src/graphql}/mutations/index.js +0 -0
  335. /package/server/{graphql → src/graphql}/queries/index.js +0 -0
  336. /package/server/{graphql → src/graphql}/queries/me.js +0 -0
  337. /package/server/{graphql → src/graphql}/resolvers-configs.js +0 -0
  338. /package/server/{graphql → src/graphql}/types/create-role-payload.js +0 -0
  339. /package/server/{graphql → src/graphql}/types/delete-role-payload.js +0 -0
  340. /package/server/{graphql → src/graphql}/types/index.js +0 -0
  341. /package/server/{graphql → src/graphql}/types/login-input.js +0 -0
  342. /package/server/{graphql → src/graphql}/types/login-payload.js +0 -0
  343. /package/server/{graphql → src/graphql}/types/me-role.js +0 -0
  344. /package/server/{graphql → src/graphql}/types/me.js +0 -0
  345. /package/server/{graphql → src/graphql}/types/password-payload.js +0 -0
  346. /package/server/{graphql → src/graphql}/types/register-input.js +0 -0
  347. /package/server/{graphql → src/graphql}/types/update-role-payload.js +0 -0
  348. /package/server/{graphql → src/graphql}/types/user-input.js +0 -0
  349. /package/server/{index.js → src/index.js} +0 -0
  350. /package/server/{middlewares → src/middlewares}/index.js +0 -0
  351. /package/server/{register.js → src/register.js} +0 -0
  352. /package/server/{routes → src/routes}/admin/index.js +0 -0
  353. /package/server/{routes → src/routes}/admin/permissions.js +0 -0
  354. /package/server/{routes → src/routes}/admin/role.js +0 -0
  355. /package/server/{routes → src/routes}/admin/settings.js +0 -0
  356. /package/server/{routes → src/routes}/content-api/auth.js +0 -0
  357. /package/server/{routes → src/routes}/content-api/index.js +0 -0
  358. /package/server/{routes → src/routes}/content-api/permissions.js +0 -0
  359. /package/server/{routes → src/routes}/content-api/role.js +0 -0
  360. /package/server/{routes → src/routes}/content-api/user.js +0 -0
  361. /package/server/{routes → src/routes}/content-api/validation.js +0 -0
  362. /package/server/{routes → src/routes}/index.js +0 -0
  363. /package/server/{services → src/services}/constants.js +0 -0
  364. /package/server/{services → src/services}/index.js +0 -0
  365. /package/server/{services → src/services}/jwt.js +0 -0
  366. /package/server/{services → src/services}/permission.js +0 -0
  367. /package/server/{utils → src/utils}/index.js +0 -0
  368. /package/server/{utils → src/utils}/refresh-cookie-options.js +0 -0
  369. /package/server/{utils → src/utils}/sanitize/index.js +0 -0
  370. /package/server/{utils → src/utils}/sanitize/visitors/index.js +0 -0
  371. /package/server/{utils → src/utils}/sanitize/visitors/remove-user-relation-from-role-entities.js +0 -0
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
3
  var require$$0$1 = require('crypto');
4
- var require$$1$1 = require('bcryptjs');
5
- var require$$2 = require('url-join');
4
+ var require$$1$2 = require('bcryptjs');
5
+ var require$$1$1 = require('url-join');
6
6
  var require$$1 = require('@strapi/utils');
7
- var require$$0 = require('lodash/fp');
7
+ var require$$0 = require('lodash');
8
8
  var index = require('../utils/index.js');
9
9
 
10
10
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
11
 
12
12
  var require$$0__default$1 = /*#__PURE__*/_interopDefault(require$$0$1);
13
+ var require$$1__default$2 = /*#__PURE__*/_interopDefault(require$$1$2);
13
14
  var require$$1__default$1 = /*#__PURE__*/_interopDefault(require$$1$1);
14
- var require$$2__default = /*#__PURE__*/_interopDefault(require$$2);
15
15
  var require$$1__default = /*#__PURE__*/_interopDefault(require$$1);
16
16
  var require$$0__default = /*#__PURE__*/_interopDefault(require$$0);
17
17
 
@@ -25,12 +25,13 @@ function requireUser() {
25
25
  *
26
26
  * @description: A set of functions similar to controller's actions to avoid code duplication.
27
27
  */ const crypto = require$$0__default$1.default;
28
- const bcrypt = require$$1__default$1.default;
29
- const urlJoin = require$$2__default.default;
30
- const { sanitize } = require$$1__default.default;
31
- const { toNumber, getOr } = require$$0__default.default;
28
+ const bcrypt = require$$1__default$2.default;
29
+ const urlJoin = require$$1__default$1.default;
30
+ const { sanitize, ALLOWED_QUERY_PARAM_KEYS } = require$$1__default.default;
31
+ const { pick, get, toNumber } = require$$0__default.default;
32
32
  const { getService } = index.__require();
33
33
  const USER_MODEL_UID = 'plugin::users-permissions.user';
34
+ const pickAllowedQueryParams = (params)=>pick(params, ALLOWED_QUERY_PARAM_KEYS);
34
35
  const getSessionManager = ()=>{
35
36
  const manager = strapi.sessionManager;
36
37
  return manager ?? null;
@@ -41,9 +42,8 @@ function requireUser() {
41
42
  *
42
43
  * @return {Promise}
43
44
  */ count (params) {
44
- return strapi1.db.query(USER_MODEL_UID).count({
45
- where: params
46
- });
45
+ const query = strapi1.get('query-params').transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));
46
+ return strapi1.db.query(USER_MODEL_UID).count(query);
47
47
  },
48
48
  /**
49
49
  * Hashes password fields in the provided values object if they are present.
@@ -57,7 +57,7 @@ function requireUser() {
57
57
  for(const key in values){
58
58
  if (attributes[key] && attributes[key].type === 'password') {
59
59
  // Check if a custom encryption.rounds has been set on the password attribute
60
- const rounds = toNumber(getOr(10, 'encryption.rounds', attributes[key]));
60
+ const rounds = toNumber(get(attributes[key], 'encryption.rounds', 10));
61
61
  values[key] = await bcrypt.hash(values[key], rounds);
62
62
  }
63
63
  }
@@ -112,7 +112,7 @@ function requireUser() {
112
112
  * Promise to fetch a/an user.
113
113
  * @return {Promise}
114
114
  */ fetch (id, params) {
115
- const query = strapi1.get('query-params').transform(USER_MODEL_UID, params ?? {});
115
+ const query = strapi1.get('query-params').transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));
116
116
  return strapi1.db.query(USER_MODEL_UID).findOne({
117
117
  ...query,
118
118
  where: {
@@ -142,7 +142,7 @@ function requireUser() {
142
142
  * Promise to fetch all users.
143
143
  * @return {Promise}
144
144
  */ fetchAll (params) {
145
- const query = strapi1.get('query-params').transform(USER_MODEL_UID, params ?? {});
145
+ const query = strapi1.get('query-params').transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));
146
146
  return strapi1.db.query(USER_MODEL_UID).findMany(query);
147
147
  },
148
148
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sources":["../../../server/services/user.js"],"sourcesContent":["'use strict';\n\n/**\n * User.js service\n *\n * @description: A set of functions similar to controller's actions to avoid code duplication.\n */\n\nconst crypto = require('crypto');\nconst bcrypt = require('bcryptjs');\nconst urlJoin = require('url-join');\n\nconst { sanitize } = require('@strapi/utils');\nconst { toNumber, getOr } = require('lodash/fp');\nconst { getService } = require('../utils');\n\nconst USER_MODEL_UID = 'plugin::users-permissions.user';\n\nconst getSessionManager = () => {\n const manager = strapi.sessionManager;\n return manager ?? null;\n};\n\nmodule.exports = ({ strapi }) => ({\n /**\n * Promise to count users\n *\n * @return {Promise}\n */\n\n count(params) {\n return strapi.db.query(USER_MODEL_UID).count({ where: params });\n },\n\n /**\n * Hashes password fields in the provided values object if they are present.\n * It checks each key in the values object against the model's attributes and\n * hashes it if the attribute type is 'password',\n *\n * @param {object} values - The object containing the fields to be hashed.\n * @return {object} The values object with hashed password fields if they were present.\n */\n async ensureHashedPasswords(values) {\n const attributes = strapi.getModel(USER_MODEL_UID).attributes;\n\n for (const key in values) {\n if (attributes[key] && attributes[key].type === 'password') {\n // Check if a custom encryption.rounds has been set on the password attribute\n const rounds = toNumber(getOr(10, 'encryption.rounds', attributes[key]));\n values[key] = await bcrypt.hash(values[key], rounds);\n }\n }\n\n return values;\n },\n\n /**\n * Promise to add a/an user.\n * @return {Promise}\n */\n async add(values) {\n // Use the Document Service so relation inputs accept both the internal\n // numeric id (legacy) and the documentId (v5 default) syntax, consistent\n // with every other content-type endpoint. The Document Service hashes\n // `password` attributes itself, so we must not pre-hash here.\n return strapi.documents(USER_MODEL_UID).create({\n data: values,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to edit a/an user.\n * @param {string} userId\n * @param {object} params\n * @return {Promise}\n */\n async edit(userId, params = {}) {\n // The user is addressed by its numeric id (e.g. the `/users/:id` route),\n // but the Document Service updates by documentId. Resolve it first so the\n // relation inputs are processed by the Document Service, which accepts both\n // numeric ids (legacy) and documentIds (v5 default). The Document Service\n // hashes `password` attributes itself, so we must not pre-hash here.\n const entry = await strapi.db\n .query(USER_MODEL_UID)\n .findOne({ where: { id: userId }, select: ['documentId'] });\n\n if (!entry) {\n return null;\n }\n\n return strapi.documents(USER_MODEL_UID).update({\n documentId: entry.documentId,\n data: params,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to fetch a/an user.\n * @return {Promise}\n */\n fetch(id, params) {\n const query = strapi.get('query-params').transform(USER_MODEL_UID, params ?? {});\n\n return strapi.db.query(USER_MODEL_UID).findOne({\n ...query,\n where: {\n $and: [{ id }, query.where || {}],\n },\n });\n },\n\n /**\n * Promise to fetch authenticated user.\n * @return {Promise}\n */\n fetchAuthenticatedUser(id) {\n return strapi.db.query(USER_MODEL_UID).findOne({ where: { id }, populate: ['role'] });\n },\n\n /**\n * Promise to fetch all users.\n * @return {Promise}\n */\n fetchAll(params) {\n const query = strapi.get('query-params').transform(USER_MODEL_UID, params ?? {});\n\n return strapi.db.query(USER_MODEL_UID).findMany(query);\n },\n\n /**\n * Promise to remove a/an user.\n * @return {Promise}\n */\n async remove(params) {\n // Invalidate sessions for all affected users\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('users-permissions') && params.id) {\n await sessionManager('users-permissions').invalidateRefreshToken(String(params.id));\n }\n\n return strapi.db.query(USER_MODEL_UID).delete({ where: params });\n },\n\n validatePassword(password, hash) {\n return bcrypt.compare(password, hash);\n },\n\n async sendConfirmationEmail(user) {\n const userPermissionService = getService('users-permissions');\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n const userSchema = strapi.getModel(USER_MODEL_UID);\n\n const settings = await pluginStore\n .get({ key: 'email' })\n .then((storeEmail) => storeEmail.email_confirmation.options);\n\n // Sanitize the template's user information\n const sanitizedUserInfo = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: userSchema,\n getModel: strapi.getModel.bind(strapi),\n },\n user\n );\n\n const confirmationToken = crypto.randomBytes(20).toString('hex');\n\n await this.edit(user.id, { confirmationToken });\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n\n try {\n settings.message = await userPermissionService.template(settings.message, {\n URL: urlJoin(\n strapi.config.get('server.absoluteUrl'),\n apiPrefix,\n '/auth/email-confirmation'\n ),\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: sanitizedUserInfo,\n CODE: confirmationToken,\n });\n\n settings.object = await userPermissionService.template(settings.object, {\n USER: sanitizedUserInfo,\n });\n } catch {\n strapi.log.error(\n '[plugin::users-permissions.sendConfirmationEmail]: Failed to generate a template for \"user confirmation email\". Please make sure your email template is valid and does not contain invalid characters or patterns'\n );\n return;\n }\n\n // Send an email to the user.\n await strapi\n .plugin('email')\n .service('email')\n .send({\n to: user.email,\n from:\n settings.from.email && settings.from.name\n ? `${settings.from.name} <${settings.from.email}>`\n : undefined,\n replyTo: settings.response_email,\n subject: settings.object,\n text: settings.message,\n html: settings.message,\n });\n },\n});\n"],"names":["crypto","require$$0","bcrypt","require$$1","urlJoin","require$$2","sanitize","require$$3","toNumber","getOr","require$$4","getService","require$$5","USER_MODEL_UID","getSessionManager","manager","strapi","sessionManager","user","count","params","db","query","where","ensureHashedPasswords","values","attributes","getModel","key","type","rounds","hash","add","documents","create","data","populate","edit","userId","entry","findOne","id","select","update","documentId","fetch","get","transform","$and","fetchAuthenticatedUser","fetchAll","findMany","remove","hasOrigin","invalidateRefreshToken","String","delete","validatePassword","password","compare","sendConfirmationEmail","userPermissionService","pluginStore","store","name","userSchema","settings","then","storeEmail","email_confirmation","options","sanitizedUserInfo","sanitizers","defaultSanitizeOutput","schema","bind","confirmationToken","randomBytes","toString","apiPrefix","config","message","template","URL","SERVER_URL","ADMIN_URL","USER","CODE","object","log","error","plugin","service","send","to","email","from","undefined","replyTo","response_email","subject","text","html"],"mappings":"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"}
1
+ {"version":3,"file":"user.js","sources":["../../../server/src/services/user.js"],"sourcesContent":["'use strict';\n\n/**\n * User.js service\n *\n * @description: A set of functions similar to controller's actions to avoid code duplication.\n */\n\nconst crypto = require('crypto');\nconst bcrypt = require('bcryptjs');\nconst urlJoin = require('url-join');\n\nconst { sanitize, ALLOWED_QUERY_PARAM_KEYS } = require('@strapi/utils');\nconst { pick, get, toNumber } = require('lodash');\nconst { getService } = require('../utils');\n\nconst USER_MODEL_UID = 'plugin::users-permissions.user';\n\nconst pickAllowedQueryParams = (params) => pick(params, ALLOWED_QUERY_PARAM_KEYS);\n\nconst getSessionManager = () => {\n const manager = strapi.sessionManager;\n return manager ?? null;\n};\n\nmodule.exports = ({ strapi }) => ({\n /**\n * Promise to count users\n *\n * @return {Promise}\n */\n\n count(params) {\n const query = strapi\n .get('query-params')\n .transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));\n\n return strapi.db.query(USER_MODEL_UID).count(query);\n },\n\n /**\n * Hashes password fields in the provided values object if they are present.\n * It checks each key in the values object against the model's attributes and\n * hashes it if the attribute type is 'password',\n *\n * @param {object} values - The object containing the fields to be hashed.\n * @return {object} The values object with hashed password fields if they were present.\n */\n async ensureHashedPasswords(values) {\n const attributes = strapi.getModel(USER_MODEL_UID).attributes;\n\n for (const key in values) {\n if (attributes[key] && attributes[key].type === 'password') {\n // Check if a custom encryption.rounds has been set on the password attribute\n const rounds = toNumber(get(attributes[key], 'encryption.rounds', 10));\n values[key] = await bcrypt.hash(values[key], rounds);\n }\n }\n\n return values;\n },\n\n /**\n * Promise to add a/an user.\n * @return {Promise}\n */\n async add(values) {\n // Use the Document Service so relation inputs accept both the internal\n // numeric id (legacy) and the documentId (v5 default) syntax, consistent\n // with every other content-type endpoint. The Document Service hashes\n // `password` attributes itself, so we must not pre-hash here.\n return strapi.documents(USER_MODEL_UID).create({\n data: values,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to edit a/an user.\n * @param {string} userId\n * @param {object} params\n * @return {Promise}\n */\n async edit(userId, params = {}) {\n // The user is addressed by its numeric id (e.g. the `/users/:id` route),\n // but the Document Service updates by documentId. Resolve it first so the\n // relation inputs are processed by the Document Service, which accepts both\n // numeric ids (legacy) and documentIds (v5 default). The Document Service\n // hashes `password` attributes itself, so we must not pre-hash here.\n const entry = await strapi.db\n .query(USER_MODEL_UID)\n .findOne({ where: { id: userId }, select: ['documentId'] });\n\n if (!entry) {\n return null;\n }\n\n return strapi.documents(USER_MODEL_UID).update({\n documentId: entry.documentId,\n data: params,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to fetch a/an user.\n * @return {Promise}\n */\n fetch(id, params) {\n const query = strapi\n .get('query-params')\n .transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));\n\n return strapi.db.query(USER_MODEL_UID).findOne({\n ...query,\n where: {\n $and: [{ id }, query.where || {}],\n },\n });\n },\n\n /**\n * Promise to fetch authenticated user.\n * @return {Promise}\n */\n fetchAuthenticatedUser(id) {\n return strapi.db.query(USER_MODEL_UID).findOne({ where: { id }, populate: ['role'] });\n },\n\n /**\n * Promise to fetch all users.\n * @return {Promise}\n */\n fetchAll(params) {\n const query = strapi\n .get('query-params')\n .transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));\n\n return strapi.db.query(USER_MODEL_UID).findMany(query);\n },\n\n /**\n * Promise to remove a/an user.\n * @return {Promise}\n */\n async remove(params) {\n // Invalidate sessions for all affected users\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('users-permissions') && params.id) {\n await sessionManager('users-permissions').invalidateRefreshToken(String(params.id));\n }\n\n return strapi.db.query(USER_MODEL_UID).delete({ where: params });\n },\n\n validatePassword(password, hash) {\n return bcrypt.compare(password, hash);\n },\n\n async sendConfirmationEmail(user) {\n const userPermissionService = getService('users-permissions');\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n const userSchema = strapi.getModel(USER_MODEL_UID);\n\n const settings = await pluginStore\n .get({ key: 'email' })\n .then((storeEmail) => storeEmail.email_confirmation.options);\n\n // Sanitize the template's user information\n const sanitizedUserInfo = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: userSchema,\n getModel: strapi.getModel.bind(strapi),\n },\n user\n );\n\n const confirmationToken = crypto.randomBytes(20).toString('hex');\n\n await this.edit(user.id, { confirmationToken });\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n\n try {\n settings.message = await userPermissionService.template(settings.message, {\n URL: urlJoin(\n strapi.config.get('server.absoluteUrl'),\n apiPrefix,\n '/auth/email-confirmation'\n ),\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: sanitizedUserInfo,\n CODE: confirmationToken,\n });\n\n settings.object = await userPermissionService.template(settings.object, {\n USER: sanitizedUserInfo,\n });\n } catch {\n strapi.log.error(\n '[plugin::users-permissions.sendConfirmationEmail]: Failed to generate a template for \"user confirmation email\". Please make sure your email template is valid and does not contain invalid characters or patterns'\n );\n return;\n }\n\n // Send an email to the user.\n await strapi\n .plugin('email')\n .service('email')\n .send({\n to: user.email,\n from:\n settings.from.email && settings.from.name\n ? `${settings.from.name} <${settings.from.email}>`\n : undefined,\n replyTo: settings.response_email,\n subject: settings.object,\n text: settings.message,\n html: settings.message,\n });\n },\n});\n"],"names":["crypto","require$$0","bcrypt","require$$1","urlJoin","require$$2","sanitize","ALLOWED_QUERY_PARAM_KEYS","require$$3","pick","get","toNumber","require$$4","getService","require$$5","USER_MODEL_UID","pickAllowedQueryParams","params","getSessionManager","manager","strapi","sessionManager","user","count","query","transform","db","ensureHashedPasswords","values","attributes","getModel","key","type","rounds","hash","add","documents","create","data","populate","edit","userId","entry","findOne","where","id","select","update","documentId","fetch","$and","fetchAuthenticatedUser","fetchAll","findMany","remove","hasOrigin","invalidateRefreshToken","String","delete","validatePassword","password","compare","sendConfirmationEmail","userPermissionService","pluginStore","store","name","userSchema","settings","then","storeEmail","email_confirmation","options","sanitizedUserInfo","sanitizers","defaultSanitizeOutput","schema","bind","confirmationToken","randomBytes","toString","apiPrefix","config","message","template","URL","SERVER_URL","ADMIN_URL","USER","CODE","object","log","error","plugin","service","send","to","email","from","undefined","replyTo","response_email","subject","text","html"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import require$$0$1 from 'crypto';
2
- import require$$1$1 from 'bcryptjs';
3
- import require$$2 from 'url-join';
2
+ import require$$1$2 from 'bcryptjs';
3
+ import require$$1$1 from 'url-join';
4
4
  import require$$1 from '@strapi/utils';
5
- import require$$0 from 'lodash/fp';
5
+ import require$$0 from 'lodash';
6
6
  import { __require as requireUtils } from '../utils/index.mjs';
7
7
 
8
8
  var user;
@@ -15,12 +15,13 @@ function requireUser() {
15
15
  *
16
16
  * @description: A set of functions similar to controller's actions to avoid code duplication.
17
17
  */ const crypto = require$$0$1;
18
- const bcrypt = require$$1$1;
19
- const urlJoin = require$$2;
20
- const { sanitize } = require$$1;
21
- const { toNumber, getOr } = require$$0;
18
+ const bcrypt = require$$1$2;
19
+ const urlJoin = require$$1$1;
20
+ const { sanitize, ALLOWED_QUERY_PARAM_KEYS } = require$$1;
21
+ const { pick, get, toNumber } = require$$0;
22
22
  const { getService } = requireUtils();
23
23
  const USER_MODEL_UID = 'plugin::users-permissions.user';
24
+ const pickAllowedQueryParams = (params)=>pick(params, ALLOWED_QUERY_PARAM_KEYS);
24
25
  const getSessionManager = ()=>{
25
26
  const manager = strapi.sessionManager;
26
27
  return manager ?? null;
@@ -31,9 +32,8 @@ function requireUser() {
31
32
  *
32
33
  * @return {Promise}
33
34
  */ count (params) {
34
- return strapi1.db.query(USER_MODEL_UID).count({
35
- where: params
36
- });
35
+ const query = strapi1.get('query-params').transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));
36
+ return strapi1.db.query(USER_MODEL_UID).count(query);
37
37
  },
38
38
  /**
39
39
  * Hashes password fields in the provided values object if they are present.
@@ -47,7 +47,7 @@ function requireUser() {
47
47
  for(const key in values){
48
48
  if (attributes[key] && attributes[key].type === 'password') {
49
49
  // Check if a custom encryption.rounds has been set on the password attribute
50
- const rounds = toNumber(getOr(10, 'encryption.rounds', attributes[key]));
50
+ const rounds = toNumber(get(attributes[key], 'encryption.rounds', 10));
51
51
  values[key] = await bcrypt.hash(values[key], rounds);
52
52
  }
53
53
  }
@@ -102,7 +102,7 @@ function requireUser() {
102
102
  * Promise to fetch a/an user.
103
103
  * @return {Promise}
104
104
  */ fetch (id, params) {
105
- const query = strapi1.get('query-params').transform(USER_MODEL_UID, params ?? {});
105
+ const query = strapi1.get('query-params').transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));
106
106
  return strapi1.db.query(USER_MODEL_UID).findOne({
107
107
  ...query,
108
108
  where: {
@@ -132,7 +132,7 @@ function requireUser() {
132
132
  * Promise to fetch all users.
133
133
  * @return {Promise}
134
134
  */ fetchAll (params) {
135
- const query = strapi1.get('query-params').transform(USER_MODEL_UID, params ?? {});
135
+ const query = strapi1.get('query-params').transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));
136
136
  return strapi1.db.query(USER_MODEL_UID).findMany(query);
137
137
  },
138
138
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"user.mjs","sources":["../../../server/services/user.js"],"sourcesContent":["'use strict';\n\n/**\n * User.js service\n *\n * @description: A set of functions similar to controller's actions to avoid code duplication.\n */\n\nconst crypto = require('crypto');\nconst bcrypt = require('bcryptjs');\nconst urlJoin = require('url-join');\n\nconst { sanitize } = require('@strapi/utils');\nconst { toNumber, getOr } = require('lodash/fp');\nconst { getService } = require('../utils');\n\nconst USER_MODEL_UID = 'plugin::users-permissions.user';\n\nconst getSessionManager = () => {\n const manager = strapi.sessionManager;\n return manager ?? null;\n};\n\nmodule.exports = ({ strapi }) => ({\n /**\n * Promise to count users\n *\n * @return {Promise}\n */\n\n count(params) {\n return strapi.db.query(USER_MODEL_UID).count({ where: params });\n },\n\n /**\n * Hashes password fields in the provided values object if they are present.\n * It checks each key in the values object against the model's attributes and\n * hashes it if the attribute type is 'password',\n *\n * @param {object} values - The object containing the fields to be hashed.\n * @return {object} The values object with hashed password fields if they were present.\n */\n async ensureHashedPasswords(values) {\n const attributes = strapi.getModel(USER_MODEL_UID).attributes;\n\n for (const key in values) {\n if (attributes[key] && attributes[key].type === 'password') {\n // Check if a custom encryption.rounds has been set on the password attribute\n const rounds = toNumber(getOr(10, 'encryption.rounds', attributes[key]));\n values[key] = await bcrypt.hash(values[key], rounds);\n }\n }\n\n return values;\n },\n\n /**\n * Promise to add a/an user.\n * @return {Promise}\n */\n async add(values) {\n // Use the Document Service so relation inputs accept both the internal\n // numeric id (legacy) and the documentId (v5 default) syntax, consistent\n // with every other content-type endpoint. The Document Service hashes\n // `password` attributes itself, so we must not pre-hash here.\n return strapi.documents(USER_MODEL_UID).create({\n data: values,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to edit a/an user.\n * @param {string} userId\n * @param {object} params\n * @return {Promise}\n */\n async edit(userId, params = {}) {\n // The user is addressed by its numeric id (e.g. the `/users/:id` route),\n // but the Document Service updates by documentId. Resolve it first so the\n // relation inputs are processed by the Document Service, which accepts both\n // numeric ids (legacy) and documentIds (v5 default). The Document Service\n // hashes `password` attributes itself, so we must not pre-hash here.\n const entry = await strapi.db\n .query(USER_MODEL_UID)\n .findOne({ where: { id: userId }, select: ['documentId'] });\n\n if (!entry) {\n return null;\n }\n\n return strapi.documents(USER_MODEL_UID).update({\n documentId: entry.documentId,\n data: params,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to fetch a/an user.\n * @return {Promise}\n */\n fetch(id, params) {\n const query = strapi.get('query-params').transform(USER_MODEL_UID, params ?? {});\n\n return strapi.db.query(USER_MODEL_UID).findOne({\n ...query,\n where: {\n $and: [{ id }, query.where || {}],\n },\n });\n },\n\n /**\n * Promise to fetch authenticated user.\n * @return {Promise}\n */\n fetchAuthenticatedUser(id) {\n return strapi.db.query(USER_MODEL_UID).findOne({ where: { id }, populate: ['role'] });\n },\n\n /**\n * Promise to fetch all users.\n * @return {Promise}\n */\n fetchAll(params) {\n const query = strapi.get('query-params').transform(USER_MODEL_UID, params ?? {});\n\n return strapi.db.query(USER_MODEL_UID).findMany(query);\n },\n\n /**\n * Promise to remove a/an user.\n * @return {Promise}\n */\n async remove(params) {\n // Invalidate sessions for all affected users\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('users-permissions') && params.id) {\n await sessionManager('users-permissions').invalidateRefreshToken(String(params.id));\n }\n\n return strapi.db.query(USER_MODEL_UID).delete({ where: params });\n },\n\n validatePassword(password, hash) {\n return bcrypt.compare(password, hash);\n },\n\n async sendConfirmationEmail(user) {\n const userPermissionService = getService('users-permissions');\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n const userSchema = strapi.getModel(USER_MODEL_UID);\n\n const settings = await pluginStore\n .get({ key: 'email' })\n .then((storeEmail) => storeEmail.email_confirmation.options);\n\n // Sanitize the template's user information\n const sanitizedUserInfo = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: userSchema,\n getModel: strapi.getModel.bind(strapi),\n },\n user\n );\n\n const confirmationToken = crypto.randomBytes(20).toString('hex');\n\n await this.edit(user.id, { confirmationToken });\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n\n try {\n settings.message = await userPermissionService.template(settings.message, {\n URL: urlJoin(\n strapi.config.get('server.absoluteUrl'),\n apiPrefix,\n '/auth/email-confirmation'\n ),\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: sanitizedUserInfo,\n CODE: confirmationToken,\n });\n\n settings.object = await userPermissionService.template(settings.object, {\n USER: sanitizedUserInfo,\n });\n } catch {\n strapi.log.error(\n '[plugin::users-permissions.sendConfirmationEmail]: Failed to generate a template for \"user confirmation email\". Please make sure your email template is valid and does not contain invalid characters or patterns'\n );\n return;\n }\n\n // Send an email to the user.\n await strapi\n .plugin('email')\n .service('email')\n .send({\n to: user.email,\n from:\n settings.from.email && settings.from.name\n ? `${settings.from.name} <${settings.from.email}>`\n : undefined,\n replyTo: settings.response_email,\n subject: settings.object,\n text: settings.message,\n html: settings.message,\n });\n },\n});\n"],"names":["crypto","require$$0","bcrypt","require$$1","urlJoin","require$$2","sanitize","require$$3","toNumber","getOr","require$$4","getService","require$$5","USER_MODEL_UID","getSessionManager","manager","strapi","sessionManager","user","count","params","db","query","where","ensureHashedPasswords","values","attributes","getModel","key","type","rounds","hash","add","documents","create","data","populate","edit","userId","entry","findOne","id","select","update","documentId","fetch","get","transform","$and","fetchAuthenticatedUser","fetchAll","findMany","remove","hasOrigin","invalidateRefreshToken","String","delete","validatePassword","password","compare","sendConfirmationEmail","userPermissionService","pluginStore","store","name","userSchema","settings","then","storeEmail","email_confirmation","options","sanitizedUserInfo","sanitizers","defaultSanitizeOutput","schema","bind","confirmationToken","randomBytes","toString","apiPrefix","config","message","template","URL","SERVER_URL","ADMIN_URL","USER","CODE","object","log","error","plugin","service","send","to","email","from","undefined","replyTo","response_email","subject","text","html"],"mappings":";;;;;;;;;;;;AAEA;;;;AAIA,KAEA,MAAMA,MAAAA,GAASC,YAAAA;AACf,IAAA,MAAMC,MAAAA,GAASC,YAAAA;AACf,IAAA,MAAMC,OAAAA,GAAUC,UAAAA;IAEhB,MAAM,EAAEC,QAAQ,EAAE,GAAGC,UAAAA;AACrB,IAAA,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAE,GAAGC,UAAAA;IAC5B,MAAM,EAAEC,UAAU,EAAE,GAAGC,YAAAA,EAAAA;AAEvB,IAAA,MAAMC,cAAAA,GAAiB,gCAAA;AAEvB,IAAA,MAAMC,iBAAAA,GAAoB,IAAA;QACxB,MAAMC,OAAAA,GAAUC,OAAOC,cAAc;AACrC,QAAA,OAAOF,OAAAA,IAAW,IAAA;AACpB,IAAA,CAAA;AAEAG,IAAAA,IAAAA,GAAiB,CAAC,EAAEF,MAAAA,EAAAA,OAAM,EAAE,IAAM;AAClC;;;;AAIA,OAEEG,OAAMC,MAAM,EAAA;AACV,gBAAA,OAAOJ,QAAOK,EAAE,CAACC,KAAK,CAACT,cAAAA,CAAAA,CAAgBM,KAAK,CAAC;oBAAEI,KAAAA,EAAOH;AAAM,iBAAA,CAAA;AAChE,YAAA,CAAA;AAEA;;;;;;;OAQE,MAAMI,uBAAsBC,MAAM,EAAA;AAChC,gBAAA,MAAMC,UAAAA,GAAaV,OAAAA,CAAOW,QAAQ,CAACd,gBAAgBa,UAAU;gBAE7D,IAAK,MAAME,OAAOH,MAAAA,CAAQ;oBACxB,IAAIC,UAAU,CAACE,GAAAA,CAAI,IAAIF,UAAU,CAACE,GAAAA,CAAI,CAACC,IAAI,KAAK,UAAA,EAAY;;AAE1D,wBAAA,MAAMC,SAAStB,QAAAA,CAASC,KAAAA,CAAM,IAAI,mBAAA,EAAqBiB,UAAU,CAACE,GAAAA,CAAI,CAAA,CAAA;wBACtEH,MAAM,CAACG,GAAAA,CAAI,GAAG,MAAM1B,MAAAA,CAAO6B,IAAI,CAACN,MAAM,CAACG,GAAAA,CAAI,EAAEE,MAAAA,CAAAA;AACrD,oBAAA;AACA,gBAAA;gBAEI,OAAOL,MAAAA;AACX,YAAA,CAAA;AAEA;;;OAIE,MAAMO,KAAIP,MAAM,EAAA;;;;;AAKd,gBAAA,OAAOT,OAAAA,CAAOiB,SAAS,CAACpB,cAAAA,CAAAA,CAAgBqB,MAAM,CAAC;oBAC7CC,IAAAA,EAAMV,MAAAA;oBACNW,QAAAA,EAAU;AAAC,wBAAA;AAAO;AACxB,iBAAA,CAAA;AACA,YAAA,CAAA;AAEA;;;;;AAKA,OACE,MAAMC,IAAAA,CAAAA,CAAKC,MAAM,EAAElB,MAAAA,GAAS,EAAE,EAAA;;;;;;gBAM5B,MAAMmB,KAAAA,GAAQ,MAAMvB,OAAAA,CAAOK,EAAE,CAC1BC,KAAK,CAACT,cAAAA,CAAAA,CACN2B,OAAO,CAAC;oBAAEjB,KAAAA,EAAO;wBAAEkB,EAAAA,EAAIH;AAAM,qBAAA;oBAAII,MAAAA,EAAQ;AAAC,wBAAA;AAAa;AAAA,iBAAA,CAAA;AAE1D,gBAAA,IAAI,CAACH,KAAAA,EAAO;oBACV,OAAO,IAAA;AACb,gBAAA;AAEI,gBAAA,OAAOvB,OAAAA,CAAOiB,SAAS,CAACpB,cAAAA,CAAAA,CAAgB8B,MAAM,CAAC;AAC7CC,oBAAAA,UAAAA,EAAYL,MAAMK,UAAU;oBAC5BT,IAAAA,EAAMf,MAAAA;oBACNgB,QAAAA,EAAU;AAAC,wBAAA;AAAO;AACxB,iBAAA,CAAA;AACA,YAAA,CAAA;AAEA;;;OAIES,KAAAA,CAAAA,CAAMJ,EAAE,EAAErB,MAAM,EAAA;gBACd,MAAME,KAAAA,GAAQN,QAAO8B,GAAG,CAAC,gBAAgBC,SAAS,CAAClC,cAAAA,EAAgBO,MAAAA,IAAU,EAAA,CAAA;AAE7E,gBAAA,OAAOJ,QAAOK,EAAE,CAACC,KAAK,CAACT,cAAAA,CAAAA,CAAgB2B,OAAO,CAAC;AAC7C,oBAAA,GAAGlB,KAAK;oBACRC,KAAAA,EAAO;wBACLyB,IAAAA,EAAM;AAAC,4BAAA;AAAEP,gCAAAA;AAAE,6BAAA;4BAAInB,KAAAA,CAAMC,KAAK,IAAI;AAAG;AACzC;AACA,iBAAA,CAAA;AACA,YAAA,CAAA;AAEA;;;AAGA,OACE0B,wBAAuBR,EAAE,EAAA;AACvB,gBAAA,OAAOzB,QAAOK,EAAE,CAACC,KAAK,CAACT,cAAAA,CAAAA,CAAgB2B,OAAO,CAAC;oBAAEjB,KAAAA,EAAO;AAAEkB,wBAAAA;AAAE,qBAAA;oBAAIL,QAAAA,EAAU;AAAC,wBAAA;AAAO;AAAA,iBAAA,CAAA;AACtF,YAAA,CAAA;AAEA;;;AAGA,OACEc,UAAS9B,MAAM,EAAA;gBACb,MAAME,KAAAA,GAAQN,QAAO8B,GAAG,CAAC,gBAAgBC,SAAS,CAAClC,cAAAA,EAAgBO,MAAAA,IAAU,EAAA,CAAA;AAE7E,gBAAA,OAAOJ,QAAOK,EAAE,CAACC,KAAK,CAACT,cAAAA,CAAAA,CAAgBsC,QAAQ,CAAC7B,KAAAA,CAAAA;AACpD,YAAA,CAAA;AAEA;;;OAIE,MAAM8B,QAAOhC,MAAM,EAAA;;AAEjB,gBAAA,MAAMH,cAAAA,GAAiBH,iBAAAA,EAAAA;AACvB,gBAAA,IAAIG,kBAAkBA,cAAAA,CAAeoC,SAAS,CAAC,mBAAA,CAAA,IAAwBjC,MAAAA,CAAOqB,EAAE,EAAE;AAChF,oBAAA,MAAMxB,eAAe,mBAAA,CAAA,CAAqBqC,sBAAsB,CAACC,MAAAA,CAAOnC,OAAOqB,EAAE,CAAA,CAAA;AACvF,gBAAA;AAEI,gBAAA,OAAOzB,QAAOK,EAAE,CAACC,KAAK,CAACT,cAAAA,CAAAA,CAAgB2C,MAAM,CAAC;oBAAEjC,KAAAA,EAAOH;AAAM,iBAAA,CAAA;AACjE,YAAA,CAAA;YAEEqC,gBAAAA,CAAAA,CAAiBC,QAAQ,EAAE3B,IAAI,EAAA;gBAC7B,OAAO7B,MAAAA,CAAOyD,OAAO,CAACD,QAAAA,EAAU3B,IAAAA,CAAAA;AACpC,YAAA,CAAA;AAEE,YAAA,MAAM6B,uBAAsB1C,IAAI,EAAA;AAC9B,gBAAA,MAAM2C,wBAAwBlD,UAAAA,CAAW,mBAAA,CAAA;AACzC,gBAAA,MAAMmD,WAAAA,GAAc,MAAM9C,OAAAA,CAAO+C,KAAK,CAAC;oBAAElC,IAAAA,EAAM,QAAA;oBAAUmC,IAAAA,EAAM;AAAmB,iBAAA,CAAA;gBAClF,MAAMC,UAAAA,GAAajD,OAAAA,CAAOW,QAAQ,CAACd,cAAAA,CAAAA;AAEnC,gBAAA,MAAMqD,QAAAA,GAAW,MAAMJ,WAAAA,CACpBhB,GAAG,CAAC;oBAAElB,GAAAA,EAAK;mBACXuC,IAAI,CAAC,CAACC,aAAeA,UAAAA,CAAWC,kBAAkB,CAACC,OAAO,CAAA;;AAG7D,gBAAA,MAAMC,oBAAoB,MAAMjE,QAAAA,CAASkE,UAAU,CAACC,qBAAqB,CACvE;oBACEC,MAAAA,EAAQT,UAAAA;AACRtC,oBAAAA,QAAAA,EAAUX,OAAAA,CAAOW,QAAQ,CAACgD,IAAI,CAAC3D,OAAAA;iBACvC,EACME,IAAAA,CAAAA;AAGF,gBAAA,MAAM0D,oBAAoB5E,MAAAA,CAAO6E,WAAW,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,KAAA,CAAA;AAE1D,gBAAA,MAAM,IAAI,CAACzC,IAAI,CAACnB,IAAAA,CAAKuB,EAAE,EAAE;AAAEmC,oBAAAA;AAAiB,iBAAA,CAAA;AAE5C,gBAAA,MAAMG,SAAAA,GAAY/D,OAAAA,CAAOgE,MAAM,CAAClC,GAAG,CAAC,iBAAA,CAAA;gBAEpC,IAAI;oBACFoB,QAAAA,CAASe,OAAO,GAAG,MAAMpB,qBAAAA,CAAsBqB,QAAQ,CAAChB,QAAAA,CAASe,OAAO,EAAE;AACxEE,wBAAAA,GAAAA,EAAK/E,QACHY,OAAAA,CAAOgE,MAAM,CAAClC,GAAG,CAAC,uBAClBiC,SAAAA,EACA,0BAAA,CAAA;AAEFK,wBAAAA,UAAAA,EAAYpE,OAAAA,CAAOgE,MAAM,CAAClC,GAAG,CAAC,oBAAA,CAAA;AAC9BuC,wBAAAA,SAAAA,EAAWrE,OAAAA,CAAOgE,MAAM,CAAClC,GAAG,CAAC,mBAAA,CAAA;wBAC7BwC,IAAAA,EAAMf,iBAAAA;wBACNgB,IAAAA,EAAMX;AACd,qBAAA,CAAA;oBAEMV,QAAAA,CAASsB,MAAM,GAAG,MAAM3B,qBAAAA,CAAsBqB,QAAQ,CAAChB,QAAAA,CAASsB,MAAM,EAAE;wBACtEF,IAAAA,EAAMf;AACd,qBAAA,CAAA;AACA,gBAAA,CAAA,CAAM,OAAM;oBACNvD,OAAAA,CAAOyE,GAAG,CAACC,KAAK,CACd,mNAAA,CAAA;AAEF,oBAAA;AACN,gBAAA;;gBAGI,MAAM1E,OAAAA,CACH2E,MAAM,CAAC,OAAA,CAAA,CACPC,OAAO,CAAC,OAAA,CAAA,CACRC,IAAI,CAAC;AACJC,oBAAAA,EAAAA,EAAI5E,KAAK6E,KAAK;oBACdC,IAAAA,EACE9B,QAAAA,CAAS8B,IAAI,CAACD,KAAK,IAAI7B,SAAS8B,IAAI,CAAChC,IAAI,GACrC,CAAA,EAAGE,QAAAA,CAAS8B,IAAI,CAAChC,IAAI,CAAC,EAAE,EAAEE,QAAAA,CAAS8B,IAAI,CAACD,KAAK,CAAC,CAAC,CAAC,GAChDE,SAAAA;AACNC,oBAAAA,OAAAA,EAAShC,SAASiC,cAAc;AAChCC,oBAAAA,OAAAA,EAASlC,SAASsB,MAAM;AACxBa,oBAAAA,IAAAA,EAAMnC,SAASe,OAAO;AACtBqB,oBAAAA,IAAAA,EAAMpC,SAASe;AACvB,iBAAA,CAAA;AACA,YAAA;SACA,CAAA;;;;;;"}
1
+ {"version":3,"file":"user.mjs","sources":["../../../server/src/services/user.js"],"sourcesContent":["'use strict';\n\n/**\n * User.js service\n *\n * @description: A set of functions similar to controller's actions to avoid code duplication.\n */\n\nconst crypto = require('crypto');\nconst bcrypt = require('bcryptjs');\nconst urlJoin = require('url-join');\n\nconst { sanitize, ALLOWED_QUERY_PARAM_KEYS } = require('@strapi/utils');\nconst { pick, get, toNumber } = require('lodash');\nconst { getService } = require('../utils');\n\nconst USER_MODEL_UID = 'plugin::users-permissions.user';\n\nconst pickAllowedQueryParams = (params) => pick(params, ALLOWED_QUERY_PARAM_KEYS);\n\nconst getSessionManager = () => {\n const manager = strapi.sessionManager;\n return manager ?? null;\n};\n\nmodule.exports = ({ strapi }) => ({\n /**\n * Promise to count users\n *\n * @return {Promise}\n */\n\n count(params) {\n const query = strapi\n .get('query-params')\n .transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));\n\n return strapi.db.query(USER_MODEL_UID).count(query);\n },\n\n /**\n * Hashes password fields in the provided values object if they are present.\n * It checks each key in the values object against the model's attributes and\n * hashes it if the attribute type is 'password',\n *\n * @param {object} values - The object containing the fields to be hashed.\n * @return {object} The values object with hashed password fields if they were present.\n */\n async ensureHashedPasswords(values) {\n const attributes = strapi.getModel(USER_MODEL_UID).attributes;\n\n for (const key in values) {\n if (attributes[key] && attributes[key].type === 'password') {\n // Check if a custom encryption.rounds has been set on the password attribute\n const rounds = toNumber(get(attributes[key], 'encryption.rounds', 10));\n values[key] = await bcrypt.hash(values[key], rounds);\n }\n }\n\n return values;\n },\n\n /**\n * Promise to add a/an user.\n * @return {Promise}\n */\n async add(values) {\n // Use the Document Service so relation inputs accept both the internal\n // numeric id (legacy) and the documentId (v5 default) syntax, consistent\n // with every other content-type endpoint. The Document Service hashes\n // `password` attributes itself, so we must not pre-hash here.\n return strapi.documents(USER_MODEL_UID).create({\n data: values,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to edit a/an user.\n * @param {string} userId\n * @param {object} params\n * @return {Promise}\n */\n async edit(userId, params = {}) {\n // The user is addressed by its numeric id (e.g. the `/users/:id` route),\n // but the Document Service updates by documentId. Resolve it first so the\n // relation inputs are processed by the Document Service, which accepts both\n // numeric ids (legacy) and documentIds (v5 default). The Document Service\n // hashes `password` attributes itself, so we must not pre-hash here.\n const entry = await strapi.db\n .query(USER_MODEL_UID)\n .findOne({ where: { id: userId }, select: ['documentId'] });\n\n if (!entry) {\n return null;\n }\n\n return strapi.documents(USER_MODEL_UID).update({\n documentId: entry.documentId,\n data: params,\n populate: ['role'],\n });\n },\n\n /**\n * Promise to fetch a/an user.\n * @return {Promise}\n */\n fetch(id, params) {\n const query = strapi\n .get('query-params')\n .transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));\n\n return strapi.db.query(USER_MODEL_UID).findOne({\n ...query,\n where: {\n $and: [{ id }, query.where || {}],\n },\n });\n },\n\n /**\n * Promise to fetch authenticated user.\n * @return {Promise}\n */\n fetchAuthenticatedUser(id) {\n return strapi.db.query(USER_MODEL_UID).findOne({ where: { id }, populate: ['role'] });\n },\n\n /**\n * Promise to fetch all users.\n * @return {Promise}\n */\n fetchAll(params) {\n const query = strapi\n .get('query-params')\n .transform(USER_MODEL_UID, pickAllowedQueryParams(params ?? {}));\n\n return strapi.db.query(USER_MODEL_UID).findMany(query);\n },\n\n /**\n * Promise to remove a/an user.\n * @return {Promise}\n */\n async remove(params) {\n // Invalidate sessions for all affected users\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('users-permissions') && params.id) {\n await sessionManager('users-permissions').invalidateRefreshToken(String(params.id));\n }\n\n return strapi.db.query(USER_MODEL_UID).delete({ where: params });\n },\n\n validatePassword(password, hash) {\n return bcrypt.compare(password, hash);\n },\n\n async sendConfirmationEmail(user) {\n const userPermissionService = getService('users-permissions');\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n const userSchema = strapi.getModel(USER_MODEL_UID);\n\n const settings = await pluginStore\n .get({ key: 'email' })\n .then((storeEmail) => storeEmail.email_confirmation.options);\n\n // Sanitize the template's user information\n const sanitizedUserInfo = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: userSchema,\n getModel: strapi.getModel.bind(strapi),\n },\n user\n );\n\n const confirmationToken = crypto.randomBytes(20).toString('hex');\n\n await this.edit(user.id, { confirmationToken });\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n\n try {\n settings.message = await userPermissionService.template(settings.message, {\n URL: urlJoin(\n strapi.config.get('server.absoluteUrl'),\n apiPrefix,\n '/auth/email-confirmation'\n ),\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: sanitizedUserInfo,\n CODE: confirmationToken,\n });\n\n settings.object = await userPermissionService.template(settings.object, {\n USER: sanitizedUserInfo,\n });\n } catch {\n strapi.log.error(\n '[plugin::users-permissions.sendConfirmationEmail]: Failed to generate a template for \"user confirmation email\". Please make sure your email template is valid and does not contain invalid characters or patterns'\n );\n return;\n }\n\n // Send an email to the user.\n await strapi\n .plugin('email')\n .service('email')\n .send({\n to: user.email,\n from:\n settings.from.email && settings.from.name\n ? `${settings.from.name} <${settings.from.email}>`\n : undefined,\n replyTo: settings.response_email,\n subject: settings.object,\n text: settings.message,\n html: settings.message,\n });\n },\n});\n"],"names":["crypto","require$$0","bcrypt","require$$1","urlJoin","require$$2","sanitize","ALLOWED_QUERY_PARAM_KEYS","require$$3","pick","get","toNumber","require$$4","getService","require$$5","USER_MODEL_UID","pickAllowedQueryParams","params","getSessionManager","manager","strapi","sessionManager","user","count","query","transform","db","ensureHashedPasswords","values","attributes","getModel","key","type","rounds","hash","add","documents","create","data","populate","edit","userId","entry","findOne","where","id","select","update","documentId","fetch","$and","fetchAuthenticatedUser","fetchAll","findMany","remove","hasOrigin","invalidateRefreshToken","String","delete","validatePassword","password","compare","sendConfirmationEmail","userPermissionService","pluginStore","store","name","userSchema","settings","then","storeEmail","email_confirmation","options","sanitizedUserInfo","sanitizers","defaultSanitizeOutput","schema","bind","confirmationToken","randomBytes","toString","apiPrefix","config","message","template","URL","SERVER_URL","ADMIN_URL","USER","CODE","object","log","error","plugin","service","send","to","email","from","undefined","replyTo","response_email","subject","text","html"],"mappings":";;;;;;;;;;;;AAEA;;;;AAIA,KAEA,MAAMA,MAAAA,GAASC,YAAAA;AACf,IAAA,MAAMC,MAAAA,GAASC,YAAAA;AACf,IAAA,MAAMC,OAAAA,GAAUC,YAAAA;AAEhB,IAAA,MAAM,EAAEC,QAAQ,EAAEC,wBAAwB,EAAE,GAAGC,UAAAA;AAC/C,IAAA,MAAM,EAAEC,IAAI,EAAEC,GAAG,EAAEC,QAAQ,EAAE,GAAGC,UAAAA;IAChC,MAAM,EAAEC,UAAU,EAAE,GAAGC,YAAAA,EAAAA;AAEvB,IAAA,MAAMC,cAAAA,GAAiB,gCAAA;AAEvB,IAAA,MAAMC,sBAAAA,GAAyB,CAACC,MAAAA,GAAWR,IAAAA,CAAKQ,MAAAA,EAAQV,wBAAAA,CAAAA;AAExD,IAAA,MAAMW,iBAAAA,GAAoB,IAAA;QACxB,MAAMC,OAAAA,GAAUC,OAAOC,cAAc;AACrC,QAAA,OAAOF,OAAAA,IAAW,IAAA;AACpB,IAAA,CAAA;AAEAG,IAAAA,IAAAA,GAAiB,CAAC,EAAEF,MAAAA,EAAAA,OAAM,EAAE,IAAM;AAClC;;;;AAIA,OAEEG,OAAMN,MAAM,EAAA;gBACV,MAAMO,KAAAA,GAAQJ,OAAAA,CACXV,GAAG,CAAC,cAAA,CAAA,CACJe,SAAS,CAACV,cAAAA,EAAgBC,sBAAAA,CAAuBC,MAAAA,IAAU,EAAA,CAAA,CAAA;AAE9D,gBAAA,OAAOG,QAAOM,EAAE,CAACF,KAAK,CAACT,cAAAA,CAAAA,CAAgBQ,KAAK,CAACC,KAAAA,CAAAA;AACjD,YAAA,CAAA;AAEA;;;;;;;OAQE,MAAMG,uBAAsBC,MAAM,EAAA;AAChC,gBAAA,MAAMC,UAAAA,GAAaT,OAAAA,CAAOU,QAAQ,CAACf,gBAAgBc,UAAU;gBAE7D,IAAK,MAAME,OAAOH,MAAAA,CAAQ;oBACxB,IAAIC,UAAU,CAACE,GAAAA,CAAI,IAAIF,UAAU,CAACE,GAAAA,CAAI,CAACC,IAAI,KAAK,UAAA,EAAY;;AAE1D,wBAAA,MAAMC,SAAStB,QAAAA,CAASD,GAAAA,CAAImB,UAAU,CAACE,GAAAA,CAAI,EAAE,mBAAA,EAAqB,EAAA,CAAA,CAAA;wBAClEH,MAAM,CAACG,GAAAA,CAAI,GAAG,MAAM7B,MAAAA,CAAOgC,IAAI,CAACN,MAAM,CAACG,GAAAA,CAAI,EAAEE,MAAAA,CAAAA;AACrD,oBAAA;AACA,gBAAA;gBAEI,OAAOL,MAAAA;AACX,YAAA,CAAA;AAEA;;;OAIE,MAAMO,KAAIP,MAAM,EAAA;;;;;AAKd,gBAAA,OAAOR,OAAAA,CAAOgB,SAAS,CAACrB,cAAAA,CAAAA,CAAgBsB,MAAM,CAAC;oBAC7CC,IAAAA,EAAMV,MAAAA;oBACNW,QAAAA,EAAU;AAAC,wBAAA;AAAO;AACxB,iBAAA,CAAA;AACA,YAAA,CAAA;AAEA;;;;;AAKA,OACE,MAAMC,IAAAA,CAAAA,CAAKC,MAAM,EAAExB,MAAAA,GAAS,EAAE,EAAA;;;;;;gBAM5B,MAAMyB,KAAAA,GAAQ,MAAMtB,OAAAA,CAAOM,EAAA,CACxBF,KAAK,CAACT,cAAAA,CAAAA,CACN4B,OAAO,CAAC;oBAAEC,KAAAA,EAAO;wBAAEC,EAAAA,EAAIJ;AAAM,qBAAA;oBAAIK,MAAAA,EAAQ;AAAC,wBAAA;AAAa;;AAE1D,gBAAA,IAAI,CAACJ,KAAAA,EAAO;oBACV,OAAO,IAAA;AACb,gBAAA;AAEI,gBAAA,OAAOtB,OAAAA,CAAOgB,SAAS,CAACrB,cAAAA,CAAAA,CAAgBgC,MAAM,CAAC;AAC7CC,oBAAAA,UAAAA,EAAYN,MAAMM,UAAU;oBAC5BV,IAAAA,EAAMrB,MAAAA;oBACNsB,QAAAA,EAAU;AAAC,wBAAA;AAAO;AACxB,iBAAA,CAAA;AACA,YAAA,CAAA;AAEA;;;OAIEU,KAAAA,CAAAA,CAAMJ,EAAE,EAAE5B,MAAM,EAAA;gBACd,MAAMO,KAAAA,GAAQJ,OAAAA,CACXV,GAAG,CAAC,cAAA,CAAA,CACJe,SAAS,CAACV,cAAAA,EAAgBC,sBAAAA,CAAuBC,MAAAA,IAAU,EAAA,CAAA,CAAA;AAE9D,gBAAA,OAAOG,QAAOM,EAAE,CAACF,KAAK,CAACT,cAAAA,CAAAA,CAAgB4B,OAAO,CAAC;AAC7C,oBAAA,GAAGnB,KAAK;oBACRoB,KAAAA,EAAO;wBACLM,IAAAA,EAAM;AAAC,4BAAA;AAAEL,gCAAAA;AAAE,6BAAA;4BAAIrB,KAAAA,CAAMoB,KAAK,IAAI;AAAG;AACzC;AACA,iBAAA,CAAA;AACA,YAAA,CAAA;AAEA;;;AAGA,OACEO,wBAAuBN,EAAE,EAAA;AACvB,gBAAA,OAAOzB,QAAOM,EAAE,CAACF,KAAK,CAACT,cAAAA,CAAAA,CAAgB4B,OAAO,CAAC;oBAAEC,KAAAA,EAAO;AAAEC,wBAAAA;AAAE,qBAAA;oBAAIN,QAAAA,EAAU;AAAC,wBAAA;AAAO;AAAA,iBAAA,CAAA;AACtF,YAAA,CAAA;AAEA;;;AAGA,OACEa,UAASnC,MAAM,EAAA;gBACb,MAAMO,KAAAA,GAAQJ,OAAAA,CACXV,GAAG,CAAC,cAAA,CAAA,CACJe,SAAS,CAACV,cAAAA,EAAgBC,sBAAAA,CAAuBC,MAAAA,IAAU,EAAA,CAAA,CAAA;AAE9D,gBAAA,OAAOG,QAAOM,EAAE,CAACF,KAAK,CAACT,cAAAA,CAAAA,CAAgBsC,QAAQ,CAAC7B,KAAAA,CAAAA;AACpD,YAAA,CAAA;AAEA;;;OAIE,MAAM8B,QAAOrC,MAAM,EAAA;;AAEjB,gBAAA,MAAMI,cAAAA,GAAiBH,iBAAAA,EAAAA;AACvB,gBAAA,IAAIG,kBAAkBA,cAAAA,CAAekC,SAAS,CAAC,mBAAA,CAAA,IAAwBtC,MAAAA,CAAO4B,EAAE,EAAE;AAChF,oBAAA,MAAMxB,eAAe,mBAAA,CAAA,CAAqBmC,sBAAsB,CAACC,MAAAA,CAAOxC,OAAO4B,EAAE,CAAA,CAAA;AACvF,gBAAA;AAEI,gBAAA,OAAOzB,QAAOM,EAAE,CAACF,KAAK,CAACT,cAAAA,CAAAA,CAAgB2C,MAAM,CAAC;oBAAEd,KAAAA,EAAO3B;;AAC3D,YAAA,CAAA;YAEE0C,gBAAAA,CAAAA,CAAiBC,QAAQ,EAAE1B,IAAI,EAAA;gBAC7B,OAAOhC,MAAAA,CAAO2D,OAAO,CAACD,QAAAA,EAAU1B,IAAAA,CAAAA;AACpC,YAAA,CAAA;AAEE,YAAA,MAAM4B,uBAAsBxC,IAAI,EAAA;AAC9B,gBAAA,MAAMyC,wBAAwBlD,UAAAA,CAAW,mBAAA,CAAA;AACzC,gBAAA,MAAMmD,WAAAA,GAAc,MAAM5C,OAAAA,CAAO6C,KAAK,CAAC;oBAAEjC,IAAAA,EAAM,QAAA;oBAAUkC,IAAAA,EAAM;;gBAC/D,MAAMC,UAAAA,GAAa/C,OAAAA,CAAOU,QAAQ,CAACf,cAAAA,CAAAA;AAEnC,gBAAA,MAAMqD,QAAAA,GAAW,MAAMJ,WAAAA,CACpBtD,GAAG,CAAC;oBAAEqB,GAAAA,EAAK;AAAO,iBAAA,CAAA,CAClBsC,IAAI,CAAC,CAACC,aAAeA,UAAAA,CAAWC,kBAAkB,CAACC,OAAO,CAAA;;AAG7D,gBAAA,MAAMC,oBAAoB,MAAMnE,QAAAA,CAASoE,UAAU,CAACC,qBAAqB,CACvE;oBACEC,MAAAA,EAAQT,UAAAA;AACRrC,oBAAAA,QAAAA,EAAUV,OAAAA,CAAOU,QAAQ,CAAC+C,IAAI,CAACzD,OAAAA;iBACvC,EACME,IAAAA,CAAAA;AAGF,gBAAA,MAAMwD,oBAAoB9E,MAAAA,CAAO+E,WAAW,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,KAAA,CAAA;AAE1D,gBAAA,MAAM,IAAI,CAACxC,IAAI,CAAClB,IAAAA,CAAKuB,EAAE,EAAE;AAAEiC,oBAAAA;AAAiB,iBAAA,CAAA;AAE5C,gBAAA,MAAMG,SAAAA,GAAY7D,OAAAA,CAAO8D,MAAM,CAACxE,GAAG,CAAC,iBAAA,CAAA;gBAEpC,IAAI;oBACF0D,QAAAA,CAASe,OAAO,GAAG,MAAMpB,qBAAAA,CAAsBqB,QAAQ,CAAChB,QAAAA,CAASe,OAAO,EAAE;AACxEE,wBAAAA,GAAAA,EAAKjF,QACHgB,OAAAA,CAAO8D,MAAM,CAACxE,GAAG,CAAC,uBAClBuE,SAAAA,EACA,0BAAA,CAAA;AAEFK,wBAAAA,UAAAA,EAAYlE,OAAAA,CAAO8D,MAAM,CAACxE,GAAG,CAAC,oBAAA,CAAA;AAC9B6E,wBAAAA,SAAAA,EAAWnE,OAAAA,CAAO8D,MAAM,CAACxE,GAAG,CAAC,mBAAA,CAAA;wBAC7B8E,IAAAA,EAAMf,iBAAAA;wBACNgB,IAAAA,EAAMX;AACd,qBAAA,CAAA;oBAEMV,QAAAA,CAASsB,MAAM,GAAG,MAAM3B,qBAAAA,CAAsBqB,QAAQ,CAAChB,QAAAA,CAASsB,MAAM,EAAE;wBACtEF,IAAAA,EAAMf;AACd,qBAAA,CAAA;AACA,gBAAA,CAAA,CAAM,OAAM;oBACNrD,OAAAA,CAAOuE,GAAG,CAACC,KAAK,CACd,mNAAA,CAAA;AAEF,oBAAA;AACN,gBAAA;;gBAGI,MAAMxE,OAAAA,CACHyE,MAAM,CAAC,OAAA,CAAA,CACPC,OAAO,CAAC,OAAA,CAAA,CACRC,IAAI,CAAC;AACJC,oBAAAA,EAAAA,EAAI1E,KAAK2E,KAAK;oBACdC,IAAAA,EACE9B,QAAAA,CAAS8B,IAAI,CAACD,KAAK,IAAI7B,SAAS8B,IAAI,CAAChC,IAAA,GACjC,CAAA,EAAGE,QAAAA,CAAS8B,IAAI,CAAChC,IAAI,CAAC,EAAE,EAAEE,QAAAA,CAAS8B,IAAI,CAACD,KAAK,CAAC,CAAC,CAAA,GAC/CE,SAAAA;AACNC,oBAAAA,OAAAA,EAAShC,SAASiC,cAAc;AAChCC,oBAAAA,OAAAA,EAASlC,SAASsB,MAAM;AACxBa,oBAAAA,IAAAA,EAAMnC,SAASe,OAAO;AACtBqB,oBAAAA,IAAAA,EAAMpC,SAASe;AACvB,iBAAA,CAAA;AACA,YAAA;SACA,CAAA;;;;;;"}
@@ -1,16 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var require$$0$1 = require('lodash');
4
- var require$$0 = require('lodash/fp');
5
- var require$$2 = require('url-join');
3
+ var require$$0 = require('lodash');
4
+ var require$$1$1 = require('url-join');
6
5
  var require$$1 = require('@strapi/utils');
7
6
  var index = require('../utils/index.js');
8
7
 
9
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
9
 
11
- var require$$0__default$1 = /*#__PURE__*/_interopDefault(require$$0$1);
12
10
  var require$$0__default = /*#__PURE__*/_interopDefault(require$$0);
13
- var require$$2__default = /*#__PURE__*/_interopDefault(require$$2);
11
+ var require$$1__default$1 = /*#__PURE__*/_interopDefault(require$$1$1);
14
12
  var require$$1__default = /*#__PURE__*/_interopDefault(require$$1);
15
13
 
16
14
  var usersPermissions;
@@ -18,9 +16,8 @@ var hasRequiredUsersPermissions;
18
16
  function requireUsersPermissions() {
19
17
  if (hasRequiredUsersPermissions) return usersPermissions;
20
18
  hasRequiredUsersPermissions = 1;
21
- const _ = require$$0__default$1.default;
22
- const { filter, map, pipe, prop } = require$$0__default.default;
23
- const urlJoin = require$$2__default.default;
19
+ const _ = require$$0__default.default;
20
+ const urlJoin = require$$1__default$1.default;
24
21
  const { template: { createStrictInterpolationRegExp }, errors, objects, sanitizeRoutesMapForSerialization } = require$$1__default.default;
25
22
  const { getService } = index.__require();
26
23
  const DEFAULT_PERMISSIONS = [
@@ -94,7 +91,7 @@ function requireUsersPermissions() {
94
91
  }
95
92
  return action[Symbol.for('__type__')].includes('content-api');
96
93
  };
97
- _.forEach(strapi.apis, (api, apiName)=>{
94
+ for (const [apiName, api] of Object.entries(strapi.apis)){
98
95
  const controllers = _.reduce(api.controllers, (acc, controller, controllerName)=>{
99
96
  const contentApiActions = _.pickBy(controller, isContentApi);
100
97
  if (_.isEmpty(contentApiActions)) {
@@ -113,8 +110,8 @@ function requireUsersPermissions() {
113
110
  controllers
114
111
  };
115
112
  }
116
- });
117
- _.forEach(strapi.plugins, (plugin, pluginName)=>{
113
+ }
114
+ for (const [pluginName, plugin] of Object.entries(strapi.plugins)){
118
115
  const controllers = _.reduce(plugin.controllers, (acc, controller, controllerName)=>{
119
116
  const contentApiActions = _.pickBy(controller, isContentApi);
120
117
  if (_.isEmpty(contentApiActions)) {
@@ -133,13 +130,13 @@ function requireUsersPermissions() {
133
130
  controllers
134
131
  };
135
132
  }
136
- });
133
+ }
137
134
  // Return a deeply cloned version to avoid circular references
138
135
  return _.cloneDeep(actionMap);
139
136
  },
140
137
  async getRoutes () {
141
138
  const routesMap = {};
142
- _.forEach(strapi.apis, (api, apiName)=>{
139
+ for (const [apiName, api] of Object.entries(strapi.apis)){
143
140
  const routes = _.flatMap(api.routes, (route)=>{
144
141
  if (_.has(route, 'routes')) {
145
142
  return route.routes;
@@ -147,15 +144,15 @@ function requireUsersPermissions() {
147
144
  return route;
148
145
  }).filter((route)=>route.info.type === 'content-api');
149
146
  if (routes.length === 0) {
150
- return;
147
+ continue;
151
148
  }
152
149
  const apiPrefix = strapi.config.get('api.rest.prefix');
153
150
  routesMap[`api::${apiName}`] = routes.map((route)=>({
154
151
  ...route,
155
152
  path: urlJoin(apiPrefix, route.path)
156
153
  }));
157
- });
158
- _.forEach(strapi.plugins, (plugin, pluginName)=>{
154
+ }
155
+ for (const [pluginName, plugin] of Object.entries(strapi.plugins)){
159
156
  const transformPrefix = transformRoutePrefixFor(pluginName);
160
157
  const routes = _.flatMap(plugin.routes, (route)=>{
161
158
  if (_.has(route, 'routes')) {
@@ -164,14 +161,14 @@ function requireUsersPermissions() {
164
161
  return transformPrefix(route);
165
162
  }).filter((route)=>route.info.type === 'content-api');
166
163
  if (routes.length === 0) {
167
- return;
164
+ continue;
168
165
  }
169
166
  const apiPrefix = strapi.config.get('api.rest.prefix');
170
167
  routesMap[`plugin::${pluginName}`] = routes.map((route)=>({
171
168
  ...route,
172
169
  path: urlJoin(apiPrefix, route.path)
173
170
  }));
174
- });
171
+ }
175
172
  return sanitizeRoutesMapForSerialization(routesMap);
176
173
  },
177
174
  async syncPermissions () {
@@ -207,7 +204,7 @@ function requireUsersPermissions() {
207
204
  if (permissionsFoundInDB.length === 0) {
208
205
  // create default permissions
209
206
  for (const role of roles){
210
- const toCreate = pipe(filter(({ roleType })=>roleType === role.type || roleType === null), map(prop('action')))(DEFAULT_PERMISSIONS);
207
+ const toCreate = DEFAULT_PERMISSIONS.filter(({ roleType })=>roleType === role.type || roleType === null).map(({ action })=>action);
211
208
  await Promise.all(toCreate.map((action)=>{
212
209
  return strapi.db.query('plugin::users-permissions.permission').create({
213
210
  data: {
@@ -259,7 +256,7 @@ function requireUsersPermissions() {
259
256
  evaluate: false,
260
257
  escape: false
261
258
  })(data);
262
- } catch (e) {
259
+ } catch {
263
260
  throw new errors.ApplicationError('Invalid email template');
264
261
  }
265
262
  }
@@ -1 +1 @@
1
- {"version":3,"file":"users-permissions.js","sources":["../../../server/services/users-permissions.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst { filter, map, pipe, prop } = require('lodash/fp');\nconst urlJoin = require('url-join');\nconst {\n template: { createStrictInterpolationRegExp },\n errors,\n objects,\n sanitizeRoutesMapForSerialization,\n} = require('@strapi/utils');\n\nconst { getService } = require('../utils');\n\nconst DEFAULT_PERMISSIONS = [\n { action: 'plugin::users-permissions.auth.callback', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.connect', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.forgotPassword', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.resetPassword', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.register', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.emailConfirmation', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.sendEmailConfirmation', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.refresh', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.logout', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.auth.getSessions', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.auth.revokeSession', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.user.me', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.auth.changePassword', roleType: 'authenticated' },\n];\n\nconst transformRoutePrefixFor = (pluginName) => (route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nmodule.exports = ({ strapi }) => ({\n getActions({ defaultEnable = false } = {}) {\n const actionMap = {};\n\n const isContentApi = (action) => {\n if (!_.has(action, Symbol.for('__type__'))) {\n return false;\n }\n\n return action[Symbol.for('__type__')].includes('content-api');\n };\n\n _.forEach(strapi.apis, (api, apiName) => {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = _.mapValues(contentApiActions, () => {\n return {\n enabled: defaultEnable,\n policy: '',\n };\n });\n\n return acc;\n },\n {}\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`api::${apiName}`] = { controllers };\n }\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const controllers = _.reduce(\n plugin.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = _.mapValues(contentApiActions, () => {\n return {\n enabled: defaultEnable,\n policy: '',\n };\n });\n\n return acc;\n },\n {}\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`plugin::${pluginName}`] = { controllers };\n }\n });\n\n // Return a deeply cloned version to avoid circular references\n return _.cloneDeep(actionMap);\n },\n\n async getRoutes() {\n const routesMap = {};\n\n _.forEach(strapi.apis, (api, apiName) => {\n const routes = _.flatMap(api.routes, (route) => {\n if (_.has(route, 'routes')) {\n return route.routes;\n }\n\n return route;\n }).filter((route) => route.info.type === 'content-api');\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: urlJoin(apiPrefix, route.path),\n }));\n });\n\n _.forEach(strapi.plugins, (plugin, pluginName) => {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n const routes = _.flatMap(plugin.routes, (route) => {\n if (_.has(route, 'routes')) {\n return route.routes.map(transformPrefix);\n }\n\n return transformPrefix(route);\n }).filter((route) => route.info.type === 'content-api');\n\n if (routes.length === 0) {\n return;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: urlJoin(apiPrefix, route.path),\n }));\n });\n\n return sanitizeRoutesMapForSerialization(routesMap);\n },\n\n async syncPermissions() {\n const roles = await strapi.db.query('plugin::users-permissions.role').findMany();\n const dbPermissions = await strapi.db.query('plugin::users-permissions.permission').findMany();\n\n const permissionsFoundInDB = _.uniq(_.map(dbPermissions, 'action'));\n\n const appActions = _.flatMap(strapi.apis, (api, apiName) => {\n return _.flatMap(api.controllers, (controller, controllerName) => {\n return _.keys(controller).map((actionName) => {\n return `api::${apiName}.${controllerName}.${actionName}`;\n });\n });\n });\n\n const pluginsActions = _.flatMap(strapi.plugins, (plugin, pluginName) => {\n return _.flatMap(plugin.controllers, (controller, controllerName) => {\n return _.keys(controller).map((actionName) => {\n return `plugin::${pluginName}.${controllerName}.${actionName}`;\n });\n });\n });\n\n const allActions = [...appActions, ...pluginsActions];\n\n const toDelete = _.difference(permissionsFoundInDB, allActions);\n\n await Promise.all(\n toDelete.map((action) => {\n return strapi.db\n .query('plugin::users-permissions.permission')\n .delete({ where: { action } });\n })\n );\n\n if (permissionsFoundInDB.length === 0) {\n // create default permissions\n for (const role of roles) {\n const toCreate = pipe(\n filter(({ roleType }) => roleType === role.type || roleType === null),\n map(prop('action'))\n )(DEFAULT_PERMISSIONS);\n\n await Promise.all(\n toCreate.map((action) => {\n return strapi.db.query('plugin::users-permissions.permission').create({\n data: {\n action,\n role: role.id,\n },\n });\n })\n );\n }\n }\n },\n\n async initialize() {\n const roleCount = await strapi.db.query('plugin::users-permissions.role').count();\n\n if (roleCount === 0) {\n await strapi.db.query('plugin::users-permissions.role').create({\n data: {\n name: 'Authenticated',\n description: 'Default role given to authenticated user.',\n type: 'authenticated',\n },\n });\n\n await strapi.db.query('plugin::users-permissions.role').create({\n data: {\n name: 'Public',\n description: 'Default role given to unauthenticated user.',\n type: 'public',\n },\n });\n }\n\n return getService('users-permissions').syncPermissions();\n },\n\n async updateUserRole(user, role) {\n return strapi.db\n .query('plugin::users-permissions.user')\n .update({ where: { id: user.id }, data: { role } });\n },\n\n template(layout, data) {\n const allowedTemplateVariables = objects.keysDeep(data);\n\n // Create a strict interpolation RegExp based on possible variable names\n const interpolate = createStrictInterpolationRegExp(allowedTemplateVariables, 'g');\n\n try {\n return _.template(layout, { interpolate, evaluate: false, escape: false })(data);\n } catch (e) {\n throw new errors.ApplicationError('Invalid email template');\n }\n },\n});\n"],"names":["_","require$$0","filter","map","pipe","prop","require$$1","urlJoin","require$$2","template","createStrictInterpolationRegExp","errors","objects","sanitizeRoutesMapForSerialization","require$$3","getService","require$$4","DEFAULT_PERMISSIONS","action","roleType","transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","usersPermissions","strapi","getActions","defaultEnable","actionMap","isContentApi","has","Symbol","for","includes","forEach","apis","api","apiName","controllers","reduce","acc","controller","controllerName","contentApiActions","pickBy","isEmpty","mapValues","enabled","policy","plugins","plugin","cloneDeep","getRoutes","routesMap","routes","flatMap","info","type","length","apiPrefix","get","transformPrefix","syncPermissions","roles","db","query","findMany","dbPermissions","permissionsFoundInDB","uniq","appActions","keys","actionName","pluginsActions","allActions","toDelete","difference","Promise","all","delete","where","role","toCreate","create","data","id","initialize","roleCount","count","name","description","updateUserRole","user","update","layout","allowedTemplateVariables","keysDeep","interpolate","evaluate","escape","e","ApplicationError"],"mappings":"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"}
1
+ {"version":3,"file":"users-permissions.js","sources":["../../../server/src/services/users-permissions.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst urlJoin = require('url-join');\nconst {\n template: { createStrictInterpolationRegExp },\n errors,\n objects,\n sanitizeRoutesMapForSerialization,\n} = require('@strapi/utils');\n\nconst { getService } = require('../utils');\n\nconst DEFAULT_PERMISSIONS = [\n { action: 'plugin::users-permissions.auth.callback', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.connect', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.forgotPassword', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.resetPassword', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.register', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.emailConfirmation', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.sendEmailConfirmation', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.refresh', roleType: 'public' },\n { action: 'plugin::users-permissions.auth.logout', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.auth.getSessions', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.auth.revokeSession', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.user.me', roleType: 'authenticated' },\n { action: 'plugin::users-permissions.auth.changePassword', roleType: 'authenticated' },\n];\n\nconst transformRoutePrefixFor = (pluginName) => (route) => {\n const prefix = route.config && route.config.prefix;\n const path = prefix !== undefined ? `${prefix}${route.path}` : `/${pluginName}${route.path}`;\n\n return {\n ...route,\n path,\n };\n};\n\nmodule.exports = ({ strapi }) => ({\n getActions({ defaultEnable = false } = {}) {\n const actionMap = {};\n\n const isContentApi = (action) => {\n if (!_.has(action, Symbol.for('__type__'))) {\n return false;\n }\n\n return action[Symbol.for('__type__')].includes('content-api');\n };\n\n for (const [apiName, api] of Object.entries(strapi.apis)) {\n const controllers = _.reduce(\n api.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = _.mapValues(contentApiActions, () => {\n return {\n enabled: defaultEnable,\n policy: '',\n };\n });\n\n return acc;\n },\n {}\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`api::${apiName}`] = { controllers };\n }\n }\n\n for (const [pluginName, plugin] of Object.entries(strapi.plugins)) {\n const controllers = _.reduce(\n plugin.controllers,\n (acc, controller, controllerName) => {\n const contentApiActions = _.pickBy(controller, isContentApi);\n\n if (_.isEmpty(contentApiActions)) {\n return acc;\n }\n\n acc[controllerName] = _.mapValues(contentApiActions, () => {\n return {\n enabled: defaultEnable,\n policy: '',\n };\n });\n\n return acc;\n },\n {}\n );\n\n if (!_.isEmpty(controllers)) {\n actionMap[`plugin::${pluginName}`] = { controllers };\n }\n }\n\n // Return a deeply cloned version to avoid circular references\n return _.cloneDeep(actionMap);\n },\n\n async getRoutes() {\n const routesMap = {};\n\n for (const [apiName, api] of Object.entries(strapi.apis)) {\n const routes = _.flatMap(api.routes, (route) => {\n if (_.has(route, 'routes')) {\n return route.routes;\n }\n\n return route;\n }).filter((route) => route.info.type === 'content-api');\n\n if (routes.length === 0) {\n continue;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`api::${apiName}`] = routes.map((route) => ({\n ...route,\n path: urlJoin(apiPrefix, route.path),\n }));\n }\n\n for (const [pluginName, plugin] of Object.entries(strapi.plugins)) {\n const transformPrefix = transformRoutePrefixFor(pluginName);\n\n const routes = _.flatMap(plugin.routes, (route) => {\n if (_.has(route, 'routes')) {\n return route.routes.map(transformPrefix);\n }\n\n return transformPrefix(route);\n }).filter((route) => route.info.type === 'content-api');\n\n if (routes.length === 0) {\n continue;\n }\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n routesMap[`plugin::${pluginName}`] = routes.map((route) => ({\n ...route,\n path: urlJoin(apiPrefix, route.path),\n }));\n }\n\n return sanitizeRoutesMapForSerialization(routesMap);\n },\n\n async syncPermissions() {\n const roles = await strapi.db.query('plugin::users-permissions.role').findMany();\n const dbPermissions = await strapi.db.query('plugin::users-permissions.permission').findMany();\n\n const permissionsFoundInDB = _.uniq(_.map(dbPermissions, 'action'));\n\n const appActions = _.flatMap(strapi.apis, (api, apiName) => {\n return _.flatMap(api.controllers, (controller, controllerName) => {\n return _.keys(controller).map((actionName) => {\n return `api::${apiName}.${controllerName}.${actionName}`;\n });\n });\n });\n\n const pluginsActions = _.flatMap(strapi.plugins, (plugin, pluginName) => {\n return _.flatMap(plugin.controllers, (controller, controllerName) => {\n return _.keys(controller).map((actionName) => {\n return `plugin::${pluginName}.${controllerName}.${actionName}`;\n });\n });\n });\n\n const allActions = [...appActions, ...pluginsActions];\n\n const toDelete = _.difference(permissionsFoundInDB, allActions);\n\n await Promise.all(\n toDelete.map((action) => {\n return strapi.db\n .query('plugin::users-permissions.permission')\n .delete({ where: { action } });\n })\n );\n\n if (permissionsFoundInDB.length === 0) {\n // create default permissions\n for (const role of roles) {\n const toCreate = DEFAULT_PERMISSIONS.filter(\n ({ roleType }) => roleType === role.type || roleType === null\n ).map(({ action }) => action);\n\n await Promise.all(\n toCreate.map((action) => {\n return strapi.db.query('plugin::users-permissions.permission').create({\n data: {\n action,\n role: role.id,\n },\n });\n })\n );\n }\n }\n },\n\n async initialize() {\n const roleCount = await strapi.db.query('plugin::users-permissions.role').count();\n\n if (roleCount === 0) {\n await strapi.db.query('plugin::users-permissions.role').create({\n data: {\n name: 'Authenticated',\n description: 'Default role given to authenticated user.',\n type: 'authenticated',\n },\n });\n\n await strapi.db.query('plugin::users-permissions.role').create({\n data: {\n name: 'Public',\n description: 'Default role given to unauthenticated user.',\n type: 'public',\n },\n });\n }\n\n return getService('users-permissions').syncPermissions();\n },\n\n async updateUserRole(user, role) {\n return strapi.db\n .query('plugin::users-permissions.user')\n .update({ where: { id: user.id }, data: { role } });\n },\n\n template(layout, data) {\n const allowedTemplateVariables = objects.keysDeep(data);\n\n // Create a strict interpolation RegExp based on possible variable names\n const interpolate = createStrictInterpolationRegExp(allowedTemplateVariables, 'g');\n\n try {\n return _.template(layout, { interpolate, evaluate: false, escape: false })(data);\n } catch {\n throw new errors.ApplicationError('Invalid email template');\n }\n },\n});\n"],"names":["_","require$$0","urlJoin","require$$1","template","createStrictInterpolationRegExp","errors","objects","sanitizeRoutesMapForSerialization","require$$2","getService","require$$3","DEFAULT_PERMISSIONS","action","roleType","transformRoutePrefixFor","pluginName","route","prefix","config","path","undefined","usersPermissions","strapi","getActions","defaultEnable","actionMap","isContentApi","has","Symbol","for","includes","apiName","api","Object","entries","apis","controllers","reduce","acc","controller","controllerName","contentApiActions","pickBy","isEmpty","mapValues","enabled","policy","plugin","plugins","cloneDeep","getRoutes","routesMap","routes","flatMap","filter","info","type","length","apiPrefix","get","map","transformPrefix","syncPermissions","roles","db","query","findMany","dbPermissions","permissionsFoundInDB","uniq","appActions","keys","actionName","pluginsActions","allActions","toDelete","difference","Promise","all","delete","where","role","toCreate","create","data","id","initialize","roleCount","count","name","description","updateUserRole","user","update","layout","allowedTemplateVariables","keysDeep","interpolate","evaluate","escape","ApplicationError"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import require$$0$1 from 'lodash';
2
- import require$$0 from 'lodash/fp';
3
- import require$$2 from 'url-join';
1
+ import require$$0 from 'lodash';
2
+ import require$$1$1 from 'url-join';
4
3
  import require$$1 from '@strapi/utils';
5
4
  import { __require as requireUtils } from '../utils/index.mjs';
6
5
 
@@ -9,9 +8,8 @@ var hasRequiredUsersPermissions;
9
8
  function requireUsersPermissions() {
10
9
  if (hasRequiredUsersPermissions) return usersPermissions;
11
10
  hasRequiredUsersPermissions = 1;
12
- const _ = require$$0$1;
13
- const { filter, map, pipe, prop } = require$$0;
14
- const urlJoin = require$$2;
11
+ const _ = require$$0;
12
+ const urlJoin = require$$1$1;
15
13
  const { template: { createStrictInterpolationRegExp }, errors, objects, sanitizeRoutesMapForSerialization } = require$$1;
16
14
  const { getService } = requireUtils();
17
15
  const DEFAULT_PERMISSIONS = [
@@ -85,7 +83,7 @@ function requireUsersPermissions() {
85
83
  }
86
84
  return action[Symbol.for('__type__')].includes('content-api');
87
85
  };
88
- _.forEach(strapi.apis, (api, apiName)=>{
86
+ for (const [apiName, api] of Object.entries(strapi.apis)){
89
87
  const controllers = _.reduce(api.controllers, (acc, controller, controllerName)=>{
90
88
  const contentApiActions = _.pickBy(controller, isContentApi);
91
89
  if (_.isEmpty(contentApiActions)) {
@@ -104,8 +102,8 @@ function requireUsersPermissions() {
104
102
  controllers
105
103
  };
106
104
  }
107
- });
108
- _.forEach(strapi.plugins, (plugin, pluginName)=>{
105
+ }
106
+ for (const [pluginName, plugin] of Object.entries(strapi.plugins)){
109
107
  const controllers = _.reduce(plugin.controllers, (acc, controller, controllerName)=>{
110
108
  const contentApiActions = _.pickBy(controller, isContentApi);
111
109
  if (_.isEmpty(contentApiActions)) {
@@ -124,13 +122,13 @@ function requireUsersPermissions() {
124
122
  controllers
125
123
  };
126
124
  }
127
- });
125
+ }
128
126
  // Return a deeply cloned version to avoid circular references
129
127
  return _.cloneDeep(actionMap);
130
128
  },
131
129
  async getRoutes () {
132
130
  const routesMap = {};
133
- _.forEach(strapi.apis, (api, apiName)=>{
131
+ for (const [apiName, api] of Object.entries(strapi.apis)){
134
132
  const routes = _.flatMap(api.routes, (route)=>{
135
133
  if (_.has(route, 'routes')) {
136
134
  return route.routes;
@@ -138,15 +136,15 @@ function requireUsersPermissions() {
138
136
  return route;
139
137
  }).filter((route)=>route.info.type === 'content-api');
140
138
  if (routes.length === 0) {
141
- return;
139
+ continue;
142
140
  }
143
141
  const apiPrefix = strapi.config.get('api.rest.prefix');
144
142
  routesMap[`api::${apiName}`] = routes.map((route)=>({
145
143
  ...route,
146
144
  path: urlJoin(apiPrefix, route.path)
147
145
  }));
148
- });
149
- _.forEach(strapi.plugins, (plugin, pluginName)=>{
146
+ }
147
+ for (const [pluginName, plugin] of Object.entries(strapi.plugins)){
150
148
  const transformPrefix = transformRoutePrefixFor(pluginName);
151
149
  const routes = _.flatMap(plugin.routes, (route)=>{
152
150
  if (_.has(route, 'routes')) {
@@ -155,14 +153,14 @@ function requireUsersPermissions() {
155
153
  return transformPrefix(route);
156
154
  }).filter((route)=>route.info.type === 'content-api');
157
155
  if (routes.length === 0) {
158
- return;
156
+ continue;
159
157
  }
160
158
  const apiPrefix = strapi.config.get('api.rest.prefix');
161
159
  routesMap[`plugin::${pluginName}`] = routes.map((route)=>({
162
160
  ...route,
163
161
  path: urlJoin(apiPrefix, route.path)
164
162
  }));
165
- });
163
+ }
166
164
  return sanitizeRoutesMapForSerialization(routesMap);
167
165
  },
168
166
  async syncPermissions () {
@@ -198,7 +196,7 @@ function requireUsersPermissions() {
198
196
  if (permissionsFoundInDB.length === 0) {
199
197
  // create default permissions
200
198
  for (const role of roles){
201
- const toCreate = pipe(filter(({ roleType })=>roleType === role.type || roleType === null), map(prop('action')))(DEFAULT_PERMISSIONS);
199
+ const toCreate = DEFAULT_PERMISSIONS.filter(({ roleType })=>roleType === role.type || roleType === null).map(({ action })=>action);
202
200
  await Promise.all(toCreate.map((action)=>{
203
201
  return strapi.db.query('plugin::users-permissions.permission').create({
204
202
  data: {
@@ -250,7 +248,7 @@ function requireUsersPermissions() {
250
248
  evaluate: false,
251
249
  escape: false
252
250
  })(data);
253
- } catch (e) {
251
+ } catch {
254
252
  throw new errors.ApplicationError('Invalid email template');
255
253
  }
256
254
  }