@strapi/plugin-users-permissions 0.0.0-next.e41415e8ff5f565ff959667d5c5ba4f20bee013c → 0.0.0-next.e5b87a54008c9de2b3286a4774635dcf69895d9b

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 (688) hide show
  1. package/.eslintignore +2 -2
  2. package/.eslintrc +17 -0
  3. package/LICENSE +18 -3
  4. package/admin/src/components/BoundRoute/{index.js → index.jsx} +7 -5
  5. package/admin/src/components/FormModal/Input/{index.js → index.jsx} +35 -33
  6. package/admin/src/components/FormModal/index.jsx +115 -0
  7. package/admin/src/components/Permissions/PermissionRow/{CheckboxWrapper.js → CheckboxWrapper.jsx} +4 -3
  8. package/admin/src/components/Permissions/PermissionRow/{SubCategory.js → SubCategory.jsx} +34 -15
  9. package/admin/src/components/Permissions/PermissionRow/{index.js → index.jsx} +4 -2
  10. package/admin/src/components/Permissions/index.jsx +47 -0
  11. package/admin/src/components/Permissions/reducer.js +1 -1
  12. package/admin/src/components/Policies/{index.js → index.jsx} +11 -7
  13. package/admin/src/components/UsersPermissions/{index.js → index.jsx} +23 -11
  14. package/admin/src/components/UsersPermissions/reducer.js +1 -1
  15. package/admin/src/{permissions.js → constants.js} +1 -3
  16. package/admin/src/contexts/UsersPermissionsContext/{index.js → index.jsx} +1 -0
  17. package/admin/src/index.js +27 -53
  18. package/admin/src/pages/AdvancedSettings/index.jsx +215 -0
  19. package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
  20. package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
  21. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +157 -0
  22. package/admin/src/pages/EmailTemplates/components/{EmailTable.js → EmailTable.jsx} +28 -23
  23. package/admin/src/pages/EmailTemplates/index.jsx +148 -0
  24. package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
  25. package/admin/src/pages/Providers/index.jsx +260 -0
  26. package/admin/src/pages/Providers/utils/forms.js +23 -11
  27. package/admin/src/pages/Roles/constants.js +7 -0
  28. package/admin/src/pages/Roles/hooks/usePlugins.js +78 -0
  29. package/admin/src/pages/Roles/index.jsx +24 -0
  30. package/admin/src/pages/Roles/pages/CreatePage.jsx +212 -0
  31. package/admin/src/pages/Roles/pages/EditPage.jsx +221 -0
  32. package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +119 -0
  33. package/admin/src/pages/Roles/pages/ListPage/index.jsx +265 -0
  34. package/admin/src/pluginId.js +2 -2
  35. package/admin/src/translations/de.json +27 -2
  36. package/admin/src/translations/en.json +2 -1
  37. package/admin/src/translations/uk.json +41 -4
  38. package/admin/src/translations/zh-Hans.json +80 -80
  39. package/admin/src/utils/formatPluginName.js +1 -1
  40. package/admin/src/utils/index.js +1 -2
  41. package/admin/src/utils/prefixPluginTranslations.js +13 -0
  42. package/dist/admin/components/BoundRoute/getMethodColor.js +49 -0
  43. package/dist/admin/components/BoundRoute/getMethodColor.js.map +1 -0
  44. package/dist/admin/components/BoundRoute/getMethodColor.mjs +47 -0
  45. package/dist/admin/components/BoundRoute/getMethodColor.mjs.map +1 -0
  46. package/dist/admin/components/BoundRoute/index.js +98 -0
  47. package/dist/admin/components/BoundRoute/index.js.map +1 -0
  48. package/dist/admin/components/BoundRoute/index.mjs +96 -0
  49. package/dist/admin/components/BoundRoute/index.mjs.map +1 -0
  50. package/dist/admin/components/FormModal/Input/index.js +123 -0
  51. package/dist/admin/components/FormModal/Input/index.js.map +1 -0
  52. package/dist/admin/components/FormModal/Input/index.mjs +121 -0
  53. package/dist/admin/components/FormModal/Input/index.mjs.map +1 -0
  54. package/dist/admin/components/FormModal/index.js +110 -0
  55. package/dist/admin/components/FormModal/index.js.map +1 -0
  56. package/dist/admin/components/FormModal/index.mjs +108 -0
  57. package/dist/admin/components/FormModal/index.mjs.map +1 -0
  58. package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.js +33 -0
  59. package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.js.map +1 -0
  60. package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.mjs +31 -0
  61. package/dist/admin/components/Permissions/PermissionRow/CheckboxWrapper.mjs.map +1 -0
  62. package/dist/admin/components/Permissions/PermissionRow/SubCategory.js +158 -0
  63. package/dist/admin/components/Permissions/PermissionRow/SubCategory.js.map +1 -0
  64. package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs +156 -0
  65. package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs.map +1 -0
  66. package/dist/admin/components/Permissions/PermissionRow/index.js +50 -0
  67. package/dist/admin/components/Permissions/PermissionRow/index.js.map +1 -0
  68. package/dist/admin/components/Permissions/PermissionRow/index.mjs +48 -0
  69. package/dist/admin/components/Permissions/PermissionRow/index.mjs.map +1 -0
  70. package/dist/admin/components/Permissions/index.js +52 -0
  71. package/dist/admin/components/Permissions/index.js.map +1 -0
  72. package/dist/admin/components/Permissions/index.mjs +50 -0
  73. package/dist/admin/components/Permissions/index.mjs.map +1 -0
  74. package/dist/admin/components/Permissions/init.js +15 -0
  75. package/dist/admin/components/Permissions/init.js.map +1 -0
  76. package/dist/admin/components/Permissions/init.mjs +13 -0
  77. package/dist/admin/components/Permissions/init.mjs.map +1 -0
  78. package/dist/admin/components/Permissions/reducer.js +34 -0
  79. package/dist/admin/components/Permissions/reducer.js.map +1 -0
  80. package/dist/admin/components/Permissions/reducer.mjs +31 -0
  81. package/dist/admin/components/Permissions/reducer.mjs.map +1 -0
  82. package/dist/admin/components/Policies/index.js +68 -0
  83. package/dist/admin/components/Policies/index.js.map +1 -0
  84. package/dist/admin/components/Policies/index.mjs +66 -0
  85. package/dist/admin/components/Policies/index.mjs.map +1 -0
  86. package/dist/admin/components/UsersPermissions/index.js +116 -0
  87. package/dist/admin/components/UsersPermissions/index.js.map +1 -0
  88. package/dist/admin/components/UsersPermissions/index.mjs +114 -0
  89. package/dist/admin/components/UsersPermissions/index.mjs.map +1 -0
  90. package/dist/admin/components/UsersPermissions/init.js +13 -0
  91. package/dist/admin/components/UsersPermissions/init.js.map +1 -0
  92. package/dist/admin/components/UsersPermissions/init.mjs +11 -0
  93. package/dist/admin/components/UsersPermissions/init.mjs.map +1 -0
  94. package/dist/admin/components/UsersPermissions/reducer.js +73 -0
  95. package/dist/admin/components/UsersPermissions/reducer.js.map +1 -0
  96. package/dist/admin/components/UsersPermissions/reducer.mjs +68 -0
  97. package/dist/admin/components/UsersPermissions/reducer.mjs.map +1 -0
  98. package/dist/admin/constants.js +81 -0
  99. package/dist/admin/constants.js.map +1 -0
  100. package/dist/admin/constants.mjs +79 -0
  101. package/dist/admin/constants.mjs.map +1 -0
  102. package/dist/admin/contexts/UsersPermissionsContext/index.js +23 -0
  103. package/dist/admin/contexts/UsersPermissionsContext/index.js.map +1 -0
  104. package/dist/admin/contexts/UsersPermissionsContext/index.mjs +19 -0
  105. package/dist/admin/contexts/UsersPermissionsContext/index.mjs.map +1 -0
  106. package/dist/admin/index.js +125 -0
  107. package/dist/admin/index.js.map +1 -0
  108. package/dist/admin/index.mjs +121 -0
  109. package/dist/admin/index.mjs.map +1 -0
  110. package/dist/admin/package.json.js +14 -0
  111. package/dist/admin/package.json.js.map +1 -0
  112. package/dist/admin/package.json.mjs +11 -0
  113. package/dist/admin/package.json.mjs.map +1 -0
  114. package/dist/admin/pages/AdvancedSettings/index.js +195 -0
  115. package/dist/admin/pages/AdvancedSettings/index.js.map +1 -0
  116. package/dist/admin/pages/AdvancedSettings/index.mjs +192 -0
  117. package/dist/admin/pages/AdvancedSettings/index.mjs.map +1 -0
  118. package/dist/admin/pages/AdvancedSettings/utils/layout.js +83 -0
  119. package/dist/admin/pages/AdvancedSettings/utils/layout.js.map +1 -0
  120. package/dist/admin/pages/AdvancedSettings/utils/layout.mjs +81 -0
  121. package/dist/admin/pages/AdvancedSettings/utils/layout.mjs.map +1 -0
  122. package/dist/admin/pages/AdvancedSettings/utils/schema.js +40 -0
  123. package/dist/admin/pages/AdvancedSettings/utils/schema.js.map +1 -0
  124. package/dist/admin/pages/AdvancedSettings/utils/schema.mjs +19 -0
  125. package/dist/admin/pages/AdvancedSettings/utils/schema.mjs.map +1 -0
  126. package/dist/admin/pages/EmailTemplates/components/EmailForm.js +172 -0
  127. package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -0
  128. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +170 -0
  129. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -0
  130. package/dist/admin/pages/EmailTemplates/components/EmailTable.js +145 -0
  131. package/dist/admin/pages/EmailTemplates/components/EmailTable.js.map +1 -0
  132. package/dist/admin/pages/EmailTemplates/components/EmailTable.mjs +143 -0
  133. package/dist/admin/pages/EmailTemplates/components/EmailTable.mjs.map +1 -0
  134. package/dist/admin/pages/EmailTemplates/index.js +157 -0
  135. package/dist/admin/pages/EmailTemplates/index.js.map +1 -0
  136. package/dist/admin/pages/EmailTemplates/index.mjs +135 -0
  137. package/dist/admin/pages/EmailTemplates/index.mjs.map +1 -0
  138. package/dist/admin/pages/EmailTemplates/utils/schema.js +50 -0
  139. package/dist/admin/pages/EmailTemplates/utils/schema.js.map +1 -0
  140. package/dist/admin/pages/EmailTemplates/utils/schema.mjs +29 -0
  141. package/dist/admin/pages/EmailTemplates/utils/schema.mjs.map +1 -0
  142. package/dist/admin/pages/Providers/index.js +274 -0
  143. package/dist/admin/pages/Providers/index.js.map +1 -0
  144. package/dist/admin/pages/Providers/index.mjs +250 -0
  145. package/dist/admin/pages/Providers/index.mjs.map +1 -0
  146. package/dist/admin/pages/Providers/utils/forms.js +281 -0
  147. package/dist/admin/pages/Providers/utils/forms.js.map +1 -0
  148. package/dist/admin/pages/Providers/utils/forms.mjs +260 -0
  149. package/dist/admin/pages/Providers/utils/forms.mjs.map +1 -0
  150. package/dist/admin/pages/Roles/constants.js +31 -0
  151. package/dist/admin/pages/Roles/constants.js.map +1 -0
  152. package/dist/admin/pages/Roles/constants.mjs +10 -0
  153. package/dist/admin/pages/Roles/constants.mjs.map +1 -0
  154. package/dist/admin/pages/Roles/hooks/usePlugins.js +78 -0
  155. package/dist/admin/pages/Roles/hooks/usePlugins.js.map +1 -0
  156. package/dist/admin/pages/Roles/hooks/usePlugins.mjs +76 -0
  157. package/dist/admin/pages/Roles/hooks/usePlugins.mjs.map +1 -0
  158. package/dist/admin/pages/Roles/index.js +35 -0
  159. package/dist/admin/pages/Roles/index.js.map +1 -0
  160. package/dist/admin/pages/Roles/index.mjs +33 -0
  161. package/dist/admin/pages/Roles/index.mjs.map +1 -0
  162. package/dist/admin/pages/Roles/pages/CreatePage.js +239 -0
  163. package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -0
  164. package/dist/admin/pages/Roles/pages/CreatePage.mjs +217 -0
  165. package/dist/admin/pages/Roles/pages/CreatePage.mjs.map +1 -0
  166. package/dist/admin/pages/Roles/pages/EditPage.js +240 -0
  167. package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -0
  168. package/dist/admin/pages/Roles/pages/EditPage.mjs +218 -0
  169. package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -0
  170. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js +125 -0
  171. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js.map +1 -0
  172. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs +123 -0
  173. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs.map +1 -0
  174. package/dist/admin/pages/Roles/pages/ListPage/index.js +234 -0
  175. package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -0
  176. package/dist/admin/pages/Roles/pages/ListPage/index.mjs +231 -0
  177. package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -0
  178. package/dist/admin/pluginId.js +8 -0
  179. package/dist/admin/pluginId.js.map +1 -0
  180. package/dist/admin/pluginId.mjs +6 -0
  181. package/dist/admin/pluginId.mjs.map +1 -0
  182. package/dist/admin/translations/ar.json.js +45 -0
  183. package/dist/admin/translations/ar.json.js.map +1 -0
  184. package/dist/admin/translations/ar.json.mjs +43 -0
  185. package/dist/admin/translations/ar.json.mjs.map +1 -0
  186. package/dist/admin/translations/cs.json.js +51 -0
  187. package/dist/admin/translations/cs.json.js.map +1 -0
  188. package/dist/admin/translations/cs.json.mjs +49 -0
  189. package/dist/admin/translations/cs.json.mjs.map +1 -0
  190. package/dist/admin/translations/de.json.js +88 -0
  191. package/dist/admin/translations/de.json.js.map +1 -0
  192. package/dist/admin/translations/de.json.mjs +86 -0
  193. package/dist/admin/translations/de.json.mjs.map +1 -0
  194. package/dist/admin/translations/dk.json.js +87 -0
  195. package/dist/admin/translations/dk.json.js.map +1 -0
  196. package/dist/admin/translations/dk.json.mjs +85 -0
  197. package/dist/admin/translations/dk.json.mjs.map +1 -0
  198. package/dist/admin/translations/en.json.js +88 -0
  199. package/dist/admin/translations/en.json.js.map +1 -0
  200. package/dist/admin/translations/en.json.mjs +86 -0
  201. package/dist/admin/translations/en.json.mjs.map +1 -0
  202. package/dist/admin/translations/es.json.js +87 -0
  203. package/dist/admin/translations/es.json.js.map +1 -0
  204. package/dist/admin/translations/es.json.mjs +85 -0
  205. package/dist/admin/translations/es.json.mjs.map +1 -0
  206. package/dist/admin/translations/fr.json.js +51 -0
  207. package/dist/admin/translations/fr.json.js.map +1 -0
  208. package/dist/admin/translations/fr.json.mjs +49 -0
  209. package/dist/admin/translations/fr.json.mjs.map +1 -0
  210. package/dist/admin/translations/id.json.js +63 -0
  211. package/dist/admin/translations/id.json.js.map +1 -0
  212. package/dist/admin/translations/id.json.mjs +61 -0
  213. package/dist/admin/translations/id.json.mjs.map +1 -0
  214. package/dist/admin/translations/it.json.js +63 -0
  215. package/dist/admin/translations/it.json.js.map +1 -0
  216. package/dist/admin/translations/it.json.mjs +61 -0
  217. package/dist/admin/translations/it.json.mjs.map +1 -0
  218. package/dist/admin/translations/ja.json.js +49 -0
  219. package/dist/admin/translations/ja.json.js.map +1 -0
  220. package/dist/admin/translations/ja.json.mjs +47 -0
  221. package/dist/admin/translations/ja.json.mjs.map +1 -0
  222. package/dist/admin/translations/ko.json.js +87 -0
  223. package/dist/admin/translations/ko.json.js.map +1 -0
  224. package/dist/admin/translations/ko.json.mjs +85 -0
  225. package/dist/admin/translations/ko.json.mjs.map +1 -0
  226. package/dist/admin/translations/ms.json.js +50 -0
  227. package/dist/admin/translations/ms.json.js.map +1 -0
  228. package/dist/admin/translations/ms.json.mjs +48 -0
  229. package/dist/admin/translations/ms.json.mjs.map +1 -0
  230. package/dist/admin/translations/nl.json.js +49 -0
  231. package/dist/admin/translations/nl.json.js.map +1 -0
  232. package/dist/admin/translations/nl.json.mjs +47 -0
  233. package/dist/admin/translations/nl.json.mjs.map +1 -0
  234. package/dist/admin/translations/pl.json.js +87 -0
  235. package/dist/admin/translations/pl.json.js.map +1 -0
  236. package/dist/admin/translations/pl.json.mjs +85 -0
  237. package/dist/admin/translations/pl.json.mjs.map +1 -0
  238. package/dist/admin/translations/pt-BR.json.js +45 -0
  239. package/dist/admin/translations/pt-BR.json.js.map +1 -0
  240. package/dist/admin/translations/pt-BR.json.mjs +43 -0
  241. package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
  242. package/dist/admin/translations/pt.json.js +49 -0
  243. package/dist/admin/translations/pt.json.js.map +1 -0
  244. package/dist/admin/translations/pt.json.mjs +47 -0
  245. package/dist/admin/translations/pt.json.mjs.map +1 -0
  246. package/dist/admin/translations/ru.json.js +87 -0
  247. package/dist/admin/translations/ru.json.js.map +1 -0
  248. package/dist/admin/translations/ru.json.mjs +85 -0
  249. package/dist/admin/translations/ru.json.mjs.map +1 -0
  250. package/dist/admin/translations/sk.json.js +51 -0
  251. package/dist/admin/translations/sk.json.js.map +1 -0
  252. package/dist/admin/translations/sk.json.mjs +49 -0
  253. package/dist/admin/translations/sk.json.mjs.map +1 -0
  254. package/dist/admin/translations/sv.json.js +87 -0
  255. package/dist/admin/translations/sv.json.js.map +1 -0
  256. package/dist/admin/translations/sv.json.mjs +85 -0
  257. package/dist/admin/translations/sv.json.mjs.map +1 -0
  258. package/dist/admin/translations/th.json.js +61 -0
  259. package/dist/admin/translations/th.json.js.map +1 -0
  260. package/dist/admin/translations/th.json.mjs +59 -0
  261. package/dist/admin/translations/th.json.mjs.map +1 -0
  262. package/dist/admin/translations/tr.json.js +86 -0
  263. package/dist/admin/translations/tr.json.js.map +1 -0
  264. package/dist/admin/translations/tr.json.mjs +84 -0
  265. package/dist/admin/translations/tr.json.mjs.map +1 -0
  266. package/dist/admin/translations/uk.json.js +87 -0
  267. package/dist/admin/translations/uk.json.js.map +1 -0
  268. package/dist/admin/translations/uk.json.mjs +85 -0
  269. package/dist/admin/translations/uk.json.mjs.map +1 -0
  270. package/dist/admin/translations/vi.json.js +51 -0
  271. package/dist/admin/translations/vi.json.js.map +1 -0
  272. package/dist/admin/translations/vi.json.mjs +49 -0
  273. package/dist/admin/translations/vi.json.mjs.map +1 -0
  274. package/dist/admin/translations/zh-Hans.json.js +87 -0
  275. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  276. package/dist/admin/translations/zh-Hans.json.mjs +85 -0
  277. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  278. package/dist/admin/translations/zh.json.js +87 -0
  279. package/dist/admin/translations/zh.json.js.map +1 -0
  280. package/dist/admin/translations/zh.json.mjs +85 -0
  281. package/dist/admin/translations/zh.json.mjs.map +1 -0
  282. package/dist/admin/utils/cleanPermissions.js +24 -0
  283. package/dist/admin/utils/cleanPermissions.js.map +1 -0
  284. package/dist/admin/utils/cleanPermissions.mjs +22 -0
  285. package/dist/admin/utils/cleanPermissions.mjs.map +1 -0
  286. package/dist/admin/utils/formatPluginName.js +29 -0
  287. package/dist/admin/utils/formatPluginName.js.map +1 -0
  288. package/dist/admin/utils/formatPluginName.mjs +27 -0
  289. package/dist/admin/utils/formatPluginName.mjs.map +1 -0
  290. package/dist/admin/utils/getTrad.js +8 -0
  291. package/dist/admin/utils/getTrad.js.map +1 -0
  292. package/dist/admin/utils/getTrad.mjs +6 -0
  293. package/dist/admin/utils/getTrad.mjs.map +1 -0
  294. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  295. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  296. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  297. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  298. package/dist/server/_virtual/_commonjsHelpers.js +8 -0
  299. package/dist/server/_virtual/_commonjsHelpers.js.map +1 -0
  300. package/dist/server/_virtual/_commonjsHelpers.mjs +6 -0
  301. package/dist/server/_virtual/_commonjsHelpers.mjs.map +1 -0
  302. package/dist/server/bootstrap/index.js +166 -0
  303. package/dist/server/bootstrap/index.js.map +1 -0
  304. package/dist/server/bootstrap/index.mjs +164 -0
  305. package/dist/server/bootstrap/index.mjs.map +1 -0
  306. package/dist/server/bootstrap/users-permissions-actions.js +98 -0
  307. package/dist/server/bootstrap/users-permissions-actions.js.map +1 -0
  308. package/dist/server/bootstrap/users-permissions-actions.mjs +96 -0
  309. package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -0
  310. package/dist/server/config.js +70 -0
  311. package/dist/server/config.js.map +1 -0
  312. package/dist/server/config.mjs +68 -0
  313. package/dist/server/config.mjs.map +1 -0
  314. package/dist/server/content-types/index.js +30 -0
  315. package/dist/server/content-types/index.js.map +1 -0
  316. package/dist/server/content-types/index.mjs +28 -0
  317. package/dist/server/content-types/index.mjs.map +1 -0
  318. package/dist/server/content-types/permission/index.js +44 -0
  319. package/dist/server/content-types/permission/index.js.map +1 -0
  320. package/dist/server/content-types/permission/index.mjs +42 -0
  321. package/dist/server/content-types/permission/index.mjs.map +1 -0
  322. package/dist/server/content-types/role/index.js +61 -0
  323. package/dist/server/content-types/role/index.js.map +1 -0
  324. package/dist/server/content-types/role/index.mjs +59 -0
  325. package/dist/server/content-types/role/index.mjs.map +1 -0
  326. package/dist/server/content-types/user/index.js +84 -0
  327. package/dist/server/content-types/user/index.js.map +1 -0
  328. package/dist/server/content-types/user/index.mjs +82 -0
  329. package/dist/server/content-types/user/index.mjs.map +1 -0
  330. package/dist/server/content-types/user/schema-config.js +25 -0
  331. package/dist/server/content-types/user/schema-config.js.map +1 -0
  332. package/dist/server/content-types/user/schema-config.mjs +23 -0
  333. package/dist/server/content-types/user/schema-config.mjs.map +1 -0
  334. package/dist/server/controllers/auth.js +630 -0
  335. package/dist/server/controllers/auth.js.map +1 -0
  336. package/dist/server/controllers/auth.mjs +628 -0
  337. package/dist/server/controllers/auth.mjs.map +1 -0
  338. package/dist/server/controllers/content-manager-user.js +168 -0
  339. package/dist/server/controllers/content-manager-user.js.map +1 -0
  340. package/dist/server/controllers/content-manager-user.mjs +166 -0
  341. package/dist/server/controllers/content-manager-user.mjs.map +1 -0
  342. package/dist/server/controllers/index.js +33 -0
  343. package/dist/server/controllers/index.js.map +1 -0
  344. package/dist/server/controllers/index.mjs +31 -0
  345. package/dist/server/controllers/index.mjs.map +1 -0
  346. package/dist/server/controllers/permissions.js +37 -0
  347. package/dist/server/controllers/permissions.js.map +1 -0
  348. package/dist/server/controllers/permissions.mjs +35 -0
  349. package/dist/server/controllers/permissions.mjs.map +1 -0
  350. package/dist/server/controllers/role.js +91 -0
  351. package/dist/server/controllers/role.js.map +1 -0
  352. package/dist/server/controllers/role.mjs +89 -0
  353. package/dist/server/controllers/role.mjs.map +1 -0
  354. package/dist/server/controllers/settings.js +107 -0
  355. package/dist/server/controllers/settings.js.map +1 -0
  356. package/dist/server/controllers/settings.mjs +105 -0
  357. package/dist/server/controllers/settings.mjs.map +1 -0
  358. package/dist/server/controllers/user.js +201 -0
  359. package/dist/server/controllers/user.js.map +1 -0
  360. package/dist/server/controllers/user.mjs +199 -0
  361. package/dist/server/controllers/user.mjs.map +1 -0
  362. package/dist/server/controllers/validation/auth.js +131 -0
  363. package/dist/server/controllers/validation/auth.js.map +1 -0
  364. package/dist/server/controllers/validation/auth.mjs +129 -0
  365. package/dist/server/controllers/validation/auth.mjs.map +1 -0
  366. package/dist/server/controllers/validation/email-template.js +72 -0
  367. package/dist/server/controllers/validation/email-template.js.map +1 -0
  368. package/dist/server/controllers/validation/email-template.mjs +70 -0
  369. package/dist/server/controllers/validation/email-template.mjs.map +1 -0
  370. package/dist/server/controllers/validation/user.js +54 -0
  371. package/dist/server/controllers/validation/user.js.map +1 -0
  372. package/dist/server/controllers/validation/user.mjs +52 -0
  373. package/dist/server/controllers/validation/user.mjs.map +1 -0
  374. package/dist/server/graphql/index.js +66 -0
  375. package/dist/server/graphql/index.js.map +1 -0
  376. package/dist/server/graphql/index.mjs +64 -0
  377. package/dist/server/graphql/index.mjs.map +1 -0
  378. package/dist/server/graphql/mutations/auth/change-password.js +40 -0
  379. package/dist/server/graphql/mutations/auth/change-password.js.map +1 -0
  380. package/dist/server/graphql/mutations/auth/change-password.mjs +38 -0
  381. package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -0
  382. package/dist/server/graphql/mutations/auth/email-confirmation.js +38 -0
  383. package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -0
  384. package/dist/server/graphql/mutations/auth/email-confirmation.mjs +36 -0
  385. package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -0
  386. package/dist/server/graphql/mutations/auth/forgot-password.js +37 -0
  387. package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -0
  388. package/dist/server/graphql/mutations/auth/forgot-password.mjs +35 -0
  389. package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -0
  390. package/dist/server/graphql/mutations/auth/login.js +40 -0
  391. package/dist/server/graphql/mutations/auth/login.js.map +1 -0
  392. package/dist/server/graphql/mutations/auth/login.mjs +38 -0
  393. package/dist/server/graphql/mutations/auth/login.mjs.map +1 -0
  394. package/dist/server/graphql/mutations/auth/register.js +38 -0
  395. package/dist/server/graphql/mutations/auth/register.js.map +1 -0
  396. package/dist/server/graphql/mutations/auth/register.mjs +36 -0
  397. package/dist/server/graphql/mutations/auth/register.mjs.map +1 -0
  398. package/dist/server/graphql/mutations/auth/reset-password.js +40 -0
  399. package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -0
  400. package/dist/server/graphql/mutations/auth/reset-password.mjs +38 -0
  401. package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -0
  402. package/dist/server/graphql/mutations/crud/role/create-role.js +37 -0
  403. package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -0
  404. package/dist/server/graphql/mutations/crud/role/create-role.mjs +35 -0
  405. package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -0
  406. package/dist/server/graphql/mutations/crud/role/delete-role.js +32 -0
  407. package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -0
  408. package/dist/server/graphql/mutations/crud/role/delete-role.mjs +30 -0
  409. package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -0
  410. package/dist/server/graphql/mutations/crud/role/update-role.js +39 -0
  411. package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -0
  412. package/dist/server/graphql/mutations/crud/role/update-role.mjs +37 -0
  413. package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -0
  414. package/dist/server/graphql/mutations/crud/user/create-user.js +46 -0
  415. package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -0
  416. package/dist/server/graphql/mutations/crud/user/create-user.mjs +44 -0
  417. package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -0
  418. package/dist/server/graphql/mutations/crud/user/delete-user.js +44 -0
  419. package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -0
  420. package/dist/server/graphql/mutations/crud/user/delete-user.mjs +42 -0
  421. package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -0
  422. package/dist/server/graphql/mutations/crud/user/update-user.js +49 -0
  423. package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -0
  424. package/dist/server/graphql/mutations/crud/user/update-user.mjs +47 -0
  425. package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -0
  426. package/dist/server/graphql/mutations/index.js +58 -0
  427. package/dist/server/graphql/mutations/index.js.map +1 -0
  428. package/dist/server/graphql/mutations/index.mjs +56 -0
  429. package/dist/server/graphql/mutations/index.mjs.map +1 -0
  430. package/dist/server/graphql/queries/index.js +25 -0
  431. package/dist/server/graphql/queries/index.js.map +1 -0
  432. package/dist/server/graphql/queries/index.mjs +23 -0
  433. package/dist/server/graphql/queries/index.mjs.map +1 -0
  434. package/dist/server/graphql/queries/me.js +23 -0
  435. package/dist/server/graphql/queries/me.js.map +1 -0
  436. package/dist/server/graphql/queries/me.mjs +21 -0
  437. package/dist/server/graphql/queries/me.mjs.map +1 -0
  438. package/dist/server/graphql/resolvers-configs.js +93 -0
  439. package/dist/server/graphql/resolvers-configs.js.map +1 -0
  440. package/dist/server/graphql/resolvers-configs.mjs +91 -0
  441. package/dist/server/graphql/resolvers-configs.mjs.map +1 -0
  442. package/dist/server/graphql/types/create-role-payload.js +20 -0
  443. package/dist/server/graphql/types/create-role-payload.js.map +1 -0
  444. package/dist/server/graphql/types/create-role-payload.mjs +18 -0
  445. package/dist/server/graphql/types/create-role-payload.mjs.map +1 -0
  446. package/dist/server/graphql/types/delete-role-payload.js +20 -0
  447. package/dist/server/graphql/types/delete-role-payload.js.map +1 -0
  448. package/dist/server/graphql/types/delete-role-payload.mjs +18 -0
  449. package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -0
  450. package/dist/server/graphql/types/index.js +41 -0
  451. package/dist/server/graphql/types/index.js.map +1 -0
  452. package/dist/server/graphql/types/index.mjs +39 -0
  453. package/dist/server/graphql/types/index.mjs.map +1 -0
  454. package/dist/server/graphql/types/login-input.js +24 -0
  455. package/dist/server/graphql/types/login-input.js.map +1 -0
  456. package/dist/server/graphql/types/login-input.mjs +22 -0
  457. package/dist/server/graphql/types/login-input.mjs.map +1 -0
  458. package/dist/server/graphql/types/login-payload.js +23 -0
  459. package/dist/server/graphql/types/login-payload.js.map +1 -0
  460. package/dist/server/graphql/types/login-payload.mjs +21 -0
  461. package/dist/server/graphql/types/login-payload.mjs.map +1 -0
  462. package/dist/server/graphql/types/me-role.js +23 -0
  463. package/dist/server/graphql/types/me-role.js.map +1 -0
  464. package/dist/server/graphql/types/me-role.mjs +21 -0
  465. package/dist/server/graphql/types/me-role.mjs.map +1 -0
  466. package/dist/server/graphql/types/me.js +28 -0
  467. package/dist/server/graphql/types/me.js.map +1 -0
  468. package/dist/server/graphql/types/me.mjs +26 -0
  469. package/dist/server/graphql/types/me.mjs.map +1 -0
  470. package/dist/server/graphql/types/password-payload.js +20 -0
  471. package/dist/server/graphql/types/password-payload.js.map +1 -0
  472. package/dist/server/graphql/types/password-payload.mjs +18 -0
  473. package/dist/server/graphql/types/password-payload.mjs.map +1 -0
  474. package/dist/server/graphql/types/register-input.js +22 -0
  475. package/dist/server/graphql/types/register-input.js.map +1 -0
  476. package/dist/server/graphql/types/register-input.mjs +20 -0
  477. package/dist/server/graphql/types/register-input.mjs.map +1 -0
  478. package/dist/server/graphql/types/update-role-payload.js +20 -0
  479. package/dist/server/graphql/types/update-role-payload.js.map +1 -0
  480. package/dist/server/graphql/types/update-role-payload.mjs +18 -0
  481. package/dist/server/graphql/types/update-role-payload.mjs.map +1 -0
  482. package/dist/server/graphql/types/user-input.js +26 -0
  483. package/dist/server/graphql/types/user-input.js.map +1 -0
  484. package/dist/server/graphql/types/user-input.mjs +24 -0
  485. package/dist/server/graphql/types/user-input.mjs.map +1 -0
  486. package/dist/server/graphql/utils.js +32 -0
  487. package/dist/server/graphql/utils.js.map +1 -0
  488. package/dist/server/graphql/utils.mjs +30 -0
  489. package/dist/server/graphql/utils.mjs.map +1 -0
  490. package/dist/server/index.js +10 -0
  491. package/dist/server/index.js.map +1 -0
  492. package/dist/server/index.mjs +8 -0
  493. package/dist/server/index.mjs.map +1 -0
  494. package/dist/server/index2.js +39 -0
  495. package/dist/server/index2.js.map +1 -0
  496. package/dist/server/index2.mjs +37 -0
  497. package/dist/server/index2.mjs.map +1 -0
  498. package/dist/server/middlewares/index.js +18 -0
  499. package/dist/server/middlewares/index.js.map +1 -0
  500. package/dist/server/middlewares/index.mjs +16 -0
  501. package/dist/server/middlewares/index.mjs.map +1 -0
  502. package/dist/server/middlewares/rateLimit.js +51 -0
  503. package/dist/server/middlewares/rateLimit.js.map +1 -0
  504. package/dist/server/middlewares/rateLimit.mjs +49 -0
  505. package/dist/server/middlewares/rateLimit.mjs.map +1 -0
  506. package/dist/server/register.js +41 -0
  507. package/dist/server/register.js.map +1 -0
  508. package/dist/server/register.mjs +39 -0
  509. package/dist/server/register.mjs.map +1 -0
  510. package/dist/server/routes/admin/index.js +27 -0
  511. package/dist/server/routes/admin/index.js.map +1 -0
  512. package/dist/server/routes/admin/index.mjs +25 -0
  513. package/dist/server/routes/admin/index.mjs.map +1 -0
  514. package/dist/server/routes/admin/permissions.js +29 -0
  515. package/dist/server/routes/admin/permissions.js.map +1 -0
  516. package/dist/server/routes/admin/permissions.mjs +27 -0
  517. package/dist/server/routes/admin/permissions.mjs.map +1 -0
  518. package/dist/server/routes/admin/role.js +99 -0
  519. package/dist/server/routes/admin/role.js.map +1 -0
  520. package/dist/server/routes/admin/role.mjs +97 -0
  521. package/dist/server/routes/admin/role.mjs.map +1 -0
  522. package/dist/server/routes/admin/settings.js +116 -0
  523. package/dist/server/routes/admin/settings.js.map +1 -0
  524. package/dist/server/routes/admin/settings.mjs +114 -0
  525. package/dist/server/routes/admin/settings.mjs.map +1 -0
  526. package/dist/server/routes/content-api/auth.js +168 -0
  527. package/dist/server/routes/content-api/auth.js.map +1 -0
  528. package/dist/server/routes/content-api/auth.mjs +166 -0
  529. package/dist/server/routes/content-api/auth.mjs.map +1 -0
  530. package/dist/server/routes/content-api/index.js +32 -0
  531. package/dist/server/routes/content-api/index.js.map +1 -0
  532. package/dist/server/routes/content-api/index.mjs +30 -0
  533. package/dist/server/routes/content-api/index.mjs.map +1 -0
  534. package/dist/server/routes/content-api/permissions.js +26 -0
  535. package/dist/server/routes/content-api/permissions.js.map +1 -0
  536. package/dist/server/routes/content-api/permissions.mjs +24 -0
  537. package/dist/server/routes/content-api/permissions.mjs.map +1 -0
  538. package/dist/server/routes/content-api/role.js +73 -0
  539. package/dist/server/routes/content-api/role.js.map +1 -0
  540. package/dist/server/routes/content-api/role.mjs +71 -0
  541. package/dist/server/routes/content-api/role.mjs.map +1 -0
  542. package/dist/server/routes/content-api/user.js +132 -0
  543. package/dist/server/routes/content-api/user.js.map +1 -0
  544. package/dist/server/routes/content-api/user.mjs +130 -0
  545. package/dist/server/routes/content-api/user.mjs.map +1 -0
  546. package/dist/server/routes/content-api/validation.js +217 -0
  547. package/dist/server/routes/content-api/validation.js.map +1 -0
  548. package/dist/server/routes/content-api/validation.mjs +215 -0
  549. package/dist/server/routes/content-api/validation.mjs.map +1 -0
  550. package/dist/server/routes/index.js +19 -0
  551. package/dist/server/routes/index.js.map +1 -0
  552. package/dist/server/routes/index.mjs +17 -0
  553. package/dist/server/routes/index.mjs.map +1 -0
  554. package/dist/server/services/constants.js +19 -0
  555. package/dist/server/services/constants.js.map +1 -0
  556. package/dist/server/services/constants.mjs +17 -0
  557. package/dist/server/services/constants.mjs.map +1 -0
  558. package/dist/server/services/index.js +36 -0
  559. package/dist/server/services/index.js.map +1 -0
  560. package/dist/server/services/index.mjs +34 -0
  561. package/dist/server/services/index.mjs.map +1 -0
  562. package/dist/server/services/jwt.js +93 -0
  563. package/dist/server/services/jwt.js.map +1 -0
  564. package/dist/server/services/jwt.mjs +91 -0
  565. package/dist/server/services/jwt.mjs.map +1 -0
  566. package/dist/server/services/permission.js +52 -0
  567. package/dist/server/services/permission.js.map +1 -0
  568. package/dist/server/services/permission.mjs +50 -0
  569. package/dist/server/services/permission.mjs.map +1 -0
  570. package/dist/server/services/providers-registry.js +555 -0
  571. package/dist/server/services/providers-registry.js.map +1 -0
  572. package/dist/server/services/providers-registry.mjs +553 -0
  573. package/dist/server/services/providers-registry.mjs.map +1 -0
  574. package/dist/server/services/providers.js +111 -0
  575. package/dist/server/services/providers.js.map +1 -0
  576. package/dist/server/services/providers.mjs +109 -0
  577. package/dist/server/services/providers.mjs.map +1 -0
  578. package/dist/server/services/role.js +186 -0
  579. package/dist/server/services/role.js.map +1 -0
  580. package/dist/server/services/role.mjs +184 -0
  581. package/dist/server/services/role.mjs.map +1 -0
  582. package/dist/server/services/user.js +188 -0
  583. package/dist/server/services/user.js.map +1 -0
  584. package/dist/server/services/user.mjs +186 -0
  585. package/dist/server/services/user.mjs.map +1 -0
  586. package/dist/server/services/users-permissions.js +256 -0
  587. package/dist/server/services/users-permissions.js.map +1 -0
  588. package/dist/server/services/users-permissions.mjs +254 -0
  589. package/dist/server/services/users-permissions.mjs.map +1 -0
  590. package/dist/server/strategies/users-permissions.js +114 -0
  591. package/dist/server/strategies/users-permissions.js.map +1 -0
  592. package/dist/server/strategies/users-permissions.mjs +112 -0
  593. package/dist/server/strategies/users-permissions.mjs.map +1 -0
  594. package/dist/server/utils/index.js +22 -0
  595. package/dist/server/utils/index.js.map +1 -0
  596. package/dist/server/utils/index.mjs +20 -0
  597. package/dist/server/utils/index.mjs.map +1 -0
  598. package/dist/server/utils/sanitize/index.js +21 -0
  599. package/dist/server/utils/sanitize/index.js.map +1 -0
  600. package/dist/server/utils/sanitize/index.mjs +19 -0
  601. package/dist/server/utils/sanitize/index.mjs.map +1 -0
  602. package/dist/server/utils/sanitize/sanitizers.js +32 -0
  603. package/dist/server/utils/sanitize/sanitizers.js.map +1 -0
  604. package/dist/server/utils/sanitize/sanitizers.mjs +30 -0
  605. package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -0
  606. package/dist/server/utils/sanitize/visitors/index.js +17 -0
  607. package/dist/server/utils/sanitize/visitors/index.js.map +1 -0
  608. package/dist/server/utils/sanitize/visitors/index.mjs +15 -0
  609. package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -0
  610. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +17 -0
  611. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -0
  612. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs +15 -0
  613. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -0
  614. package/documentation/content-api.yaml +1 -1
  615. package/jest.config.front.js +1 -0
  616. package/package.json +51 -32
  617. package/rollup.config.mjs +19 -0
  618. package/server/bootstrap/index.js +49 -15
  619. package/server/bootstrap/users-permissions-actions.js +6 -0
  620. package/server/config.js +51 -0
  621. package/server/content-types/user/index.js +0 -1
  622. package/server/controllers/auth.js +321 -47
  623. package/server/controllers/content-manager-user.js +31 -34
  624. package/server/controllers/role.js +17 -4
  625. package/server/controllers/user.js +18 -8
  626. package/server/controllers/validation/auth.js +104 -25
  627. package/server/controllers/validation/user.js +12 -1
  628. package/server/graphql/types/index.js +1 -0
  629. package/server/graphql/types/me.js +1 -0
  630. package/server/graphql/types/user-input.js +20 -0
  631. package/server/middlewares/rateLimit.js +41 -21
  632. package/server/register.js +2 -2
  633. package/server/routes/content-api/auth.js +119 -71
  634. package/server/routes/content-api/index.js +11 -4
  635. package/server/routes/content-api/permissions.js +14 -7
  636. package/server/routes/content-api/role.js +57 -27
  637. package/server/routes/content-api/user.js +108 -51
  638. package/server/routes/content-api/validation.js +250 -0
  639. package/server/services/constants.js +9 -0
  640. package/server/services/jwt.js +53 -5
  641. package/server/services/permission.js +3 -7
  642. package/server/services/providers-registry.js +469 -261
  643. package/server/services/providers.js +10 -5
  644. package/server/services/role.js +15 -13
  645. package/server/services/user.js +67 -19
  646. package/server/services/users-permissions.js +21 -15
  647. package/server/strategies/users-permissions.js +1 -8
  648. package/server/utils/index.d.ts +2 -1
  649. package/server/utils/sanitize/sanitizers.js +7 -3
  650. package/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +2 -2
  651. package/.eslintrc.js +0 -14
  652. package/admin/src/components/FormModal/index.js +0 -123
  653. package/admin/src/components/Permissions/index.js +0 -54
  654. package/admin/src/hooks/index.js +0 -5
  655. package/admin/src/hooks/useFetchRole/index.js +0 -64
  656. package/admin/src/hooks/useFetchRole/reducer.js +0 -31
  657. package/admin/src/hooks/useForm/index.js +0 -67
  658. package/admin/src/hooks/useForm/reducer.js +0 -40
  659. package/admin/src/hooks/usePlugins/index.js +0 -67
  660. package/admin/src/hooks/usePlugins/init.js +0 -5
  661. package/admin/src/hooks/usePlugins/reducer.js +0 -34
  662. package/admin/src/hooks/useRolesList/index.js +0 -62
  663. package/admin/src/hooks/useRolesList/init.js +0 -5
  664. package/admin/src/hooks/useRolesList/reducer.js +0 -31
  665. package/admin/src/pages/AdvancedSettings/index.js +0 -243
  666. package/admin/src/pages/AdvancedSettings/utils/api.js +0 -17
  667. package/admin/src/pages/EmailTemplates/components/EmailForm.js +0 -175
  668. package/admin/src/pages/EmailTemplates/index.js +0 -160
  669. package/admin/src/pages/EmailTemplates/utils/api.js +0 -17
  670. package/admin/src/pages/Providers/index.js +0 -272
  671. package/admin/src/pages/Providers/reducer.js +0 -54
  672. package/admin/src/pages/Providers/utils/api.js +0 -25
  673. package/admin/src/pages/Providers/utils/createProvidersArray.js +0 -21
  674. package/admin/src/pages/Roles/CreatePage/index.js +0 -182
  675. package/admin/src/pages/Roles/CreatePage/utils/schema.js +0 -9
  676. package/admin/src/pages/Roles/EditPage/index.js +0 -194
  677. package/admin/src/pages/Roles/EditPage/utils/schema.js +0 -9
  678. package/admin/src/pages/Roles/ListPage/components/TableBody.js +0 -92
  679. package/admin/src/pages/Roles/ListPage/index.js +0 -241
  680. package/admin/src/pages/Roles/ListPage/utils/api.js +0 -31
  681. package/admin/src/pages/Roles/ProtectedCreatePage/index.js +0 -12
  682. package/admin/src/pages/Roles/ProtectedEditPage/index.js +0 -12
  683. package/admin/src/pages/Roles/ProtectedListPage/index.js +0 -15
  684. package/admin/src/pages/Roles/index.js +0 -27
  685. package/admin/src/utils/getRequestURL.js +0 -5
  686. package/server/bootstrap/grant-config.js +0 -131
  687. package/strapi-admin.js +0 -3
  688. package/strapi-server.js +0 -3
@@ -9,6 +9,7 @@
9
9
  /* eslint-disable no-useless-escape */
10
10
  const crypto = require('crypto');
11
11
  const _ = require('lodash');
12
+ const { concat, compact, isArray } = require('lodash/fp');
12
13
  const utils = require('@strapi/utils');
13
14
  const { getService } = require('../utils');
14
15
  const {
@@ -21,17 +22,22 @@ const {
21
22
  validateChangePasswordBody,
22
23
  } = require('./validation/auth');
23
24
 
24
- const { getAbsoluteAdminUrl, getAbsoluteServerUrl, sanitize } = utils;
25
- const { ApplicationError, ValidationError } = utils.errors;
25
+ const { ApplicationError, ValidationError, ForbiddenError } = utils.errors;
26
26
 
27
27
  const sanitizeUser = (user, ctx) => {
28
28
  const { auth } = ctx.state;
29
29
  const userSchema = strapi.getModel('plugin::users-permissions.user');
30
30
 
31
- return sanitize.contentAPI.output(user, userSchema, { auth });
31
+ return strapi.contentAPI.sanitize.output(user, userSchema, { auth });
32
32
  };
33
33
 
34
- module.exports = {
34
+ const extractDeviceId = (requestBody) => {
35
+ const { deviceId } = requestBody || {};
36
+
37
+ return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;
38
+ };
39
+
40
+ module.exports = ({ strapi }) => ({
35
41
  async callback(ctx) {
36
42
  const provider = ctx.params.provider || 'local';
37
43
  const params = ctx.request.body;
@@ -51,7 +57,7 @@ module.exports = {
51
57
  const { identifier } = params;
52
58
 
53
59
  // Check if the user exists.
54
- const user = await strapi.query('plugin::users-permissions.user').findOne({
60
+ const user = await strapi.db.query('plugin::users-permissions.user').findOne({
55
61
  where: {
56
62
  provider,
57
63
  $or: [{ email: identifier.toLowerCase() }, { username: identifier }],
@@ -86,6 +92,51 @@ module.exports = {
86
92
  throw new ApplicationError('Your account has been blocked by an administrator');
87
93
  }
88
94
 
95
+ const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
96
+ if (mode === 'refresh') {
97
+ const deviceId = extractDeviceId(ctx.request.body);
98
+
99
+ const refresh = await strapi
100
+ .sessionManager('users-permissions')
101
+ .generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });
102
+
103
+ const access = await strapi
104
+ .sessionManager('users-permissions')
105
+ .generateAccessToken(refresh.token);
106
+ if ('error' in access) {
107
+ throw new ApplicationError('Invalid credentials');
108
+ }
109
+
110
+ const upSessions = strapi.config.get('plugin::users-permissions.sessions');
111
+ const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
112
+ if (upSessions?.httpOnly || requestHttpOnly) {
113
+ const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
114
+ const isProduction = process.env.NODE_ENV === 'production';
115
+ const isSecure =
116
+ typeof upSessions.cookie?.secure === 'boolean'
117
+ ? upSessions.cookie?.secure
118
+ : isProduction;
119
+
120
+ const cookieOptions = {
121
+ httpOnly: true,
122
+ secure: isSecure,
123
+ sameSite: upSessions.cookie?.sameSite ?? 'lax',
124
+ path: upSessions.cookie?.path ?? '/',
125
+ domain: upSessions.cookie?.domain,
126
+ overwrite: true,
127
+ };
128
+
129
+ ctx.cookies.set(cookieName, refresh.token, cookieOptions);
130
+ return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });
131
+ }
132
+
133
+ return ctx.send({
134
+ jwt: access.token,
135
+ refreshToken: refresh.token,
136
+ user: await sanitizeUser(user, ctx),
137
+ });
138
+ }
139
+
89
140
  return ctx.send({
90
141
  jwt: getService('jwt').issue({ id: user.id }),
91
142
  user: await sanitizeUser(user, ctx),
@@ -96,6 +147,53 @@ module.exports = {
96
147
  try {
97
148
  const user = await getService('providers').connect(provider, ctx.query);
98
149
 
150
+ if (user.blocked) {
151
+ throw new ForbiddenError('Your account has been blocked by an administrator');
152
+ }
153
+
154
+ const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
155
+ if (mode === 'refresh') {
156
+ const deviceId = extractDeviceId(ctx.request.body);
157
+
158
+ const refresh = await strapi
159
+ .sessionManager('users-permissions')
160
+ .generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });
161
+
162
+ const access = await strapi
163
+ .sessionManager('users-permissions')
164
+ .generateAccessToken(refresh.token);
165
+ if ('error' in access) {
166
+ throw new ApplicationError('Invalid credentials');
167
+ }
168
+
169
+ const upSessions = strapi.config.get('plugin::users-permissions.sessions');
170
+ const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
171
+ if (upSessions?.httpOnly || requestHttpOnly) {
172
+ const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
173
+ const isProduction = process.env.NODE_ENV === 'production';
174
+ const isSecure =
175
+ typeof upSessions.cookie?.secure === 'boolean'
176
+ ? upSessions.cookie?.secure
177
+ : isProduction;
178
+
179
+ const cookieOptions = {
180
+ httpOnly: true,
181
+ secure: isSecure,
182
+ sameSite: upSessions.cookie?.sameSite ?? 'lax',
183
+ path: upSessions.cookie?.path ?? '/',
184
+ domain: upSessions.cookie?.domain,
185
+ overwrite: true,
186
+ };
187
+ ctx.cookies.set(cookieName, refresh.token, cookieOptions);
188
+ return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });
189
+ }
190
+ return ctx.send({
191
+ jwt: access.token,
192
+ refreshToken: refresh.token,
193
+ user: await sanitizeUser(user, ctx),
194
+ });
195
+ }
196
+
99
197
  return ctx.send({
100
198
  jwt: getService('jwt').issue({ id: user.id }),
101
199
  user: await sanitizeUser(user, ctx),
@@ -110,13 +208,17 @@ module.exports = {
110
208
  throw new ApplicationError('You must be authenticated to reset your password');
111
209
  }
112
210
 
113
- const { currentPassword, password } = await validateChangePasswordBody(ctx.request.body);
211
+ const validations = strapi.config.get('plugin::users-permissions.validationRules');
114
212
 
115
- const user = await strapi.entityService.findOne(
116
- 'plugin::users-permissions.user',
117
- ctx.state.user.id
213
+ const { currentPassword, password } = await validateChangePasswordBody(
214
+ ctx.request.body,
215
+ validations
118
216
  );
119
217
 
218
+ const user = await strapi.db
219
+ .query('plugin::users-permissions.user')
220
+ .findOne({ where: { id: ctx.state.user.id } });
221
+
120
222
  const validPassword = await getService('user').validatePassword(currentPassword, user.password);
121
223
 
122
224
  if (!validPassword) {
@@ -129,22 +231,51 @@ module.exports = {
129
231
 
130
232
  await getService('user').edit(user.id, { password });
131
233
 
132
- ctx.send({
234
+ const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
235
+ if (mode === 'refresh') {
236
+ const deviceId = extractDeviceId(ctx.request.body);
237
+
238
+ // Invalidate all sessions when password changes for security
239
+ await strapi.sessionManager('users-permissions').invalidateRefreshToken(String(user.id));
240
+
241
+ const newDeviceId = deviceId || crypto.randomUUID();
242
+ const refresh = await strapi
243
+ .sessionManager('users-permissions')
244
+ .generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });
245
+
246
+ const access = await strapi
247
+ .sessionManager('users-permissions')
248
+ .generateAccessToken(refresh.token);
249
+ if ('error' in access) {
250
+ throw new ApplicationError('Invalid credentials');
251
+ }
252
+
253
+ return ctx.send({
254
+ jwt: access.token,
255
+ refreshToken: refresh.token,
256
+ user: await sanitizeUser(user, ctx),
257
+ });
258
+ }
259
+
260
+ return ctx.send({
133
261
  jwt: getService('jwt').issue({ id: user.id }),
134
262
  user: await sanitizeUser(user, ctx),
135
263
  });
136
264
  },
137
265
 
138
266
  async resetPassword(ctx) {
267
+ const validations = strapi.config.get('plugin::users-permissions.validationRules');
268
+
139
269
  const { password, passwordConfirmation, code } = await validateResetPasswordBody(
140
- ctx.request.body
270
+ ctx.request.body,
271
+ validations
141
272
  );
142
273
 
143
274
  if (password !== passwordConfirmation) {
144
275
  throw new ValidationError('Passwords do not match');
145
276
  }
146
277
 
147
- const user = await strapi
278
+ const user = await strapi.db
148
279
  .query('plugin::users-permissions.user')
149
280
  .findOne({ where: { resetPasswordToken: code } });
150
281
 
@@ -157,15 +288,119 @@ module.exports = {
157
288
  password,
158
289
  });
159
290
 
160
- // Update the user.
161
- ctx.send({
291
+ const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
292
+ if (mode === 'refresh') {
293
+ const deviceId = extractDeviceId(ctx.request.body);
294
+
295
+ // Invalidate all sessions when password is reset for security
296
+ await strapi.sessionManager('users-permissions').invalidateRefreshToken(String(user.id));
297
+
298
+ const newDeviceId = deviceId || crypto.randomUUID();
299
+ const refresh = await strapi
300
+ .sessionManager('users-permissions')
301
+ .generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });
302
+
303
+ const access = await strapi
304
+ .sessionManager('users-permissions')
305
+ .generateAccessToken(refresh.token);
306
+ if ('error' in access) {
307
+ throw new ApplicationError('Invalid credentials');
308
+ }
309
+
310
+ return ctx.send({
311
+ jwt: access.token,
312
+ refreshToken: refresh.token,
313
+ user: await sanitizeUser(user, ctx),
314
+ });
315
+ }
316
+
317
+ return ctx.send({
162
318
  jwt: getService('jwt').issue({ id: user.id }),
163
319
  user: await sanitizeUser(user, ctx),
164
320
  });
165
321
  },
322
+ async refresh(ctx) {
323
+ const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
324
+ if (mode !== 'refresh') {
325
+ return ctx.notFound();
326
+ }
327
+
328
+ const upSessions = strapi.config.get('plugin::users-permissions.sessions');
329
+ const cookieName = upSessions?.cookie?.name || 'strapi_up_refresh';
330
+
331
+ // Check for refresh token in cookie first (if httpOnly is configured), then in body
332
+ let refreshToken = ctx.cookies.get(cookieName);
333
+ if (!refreshToken) {
334
+ refreshToken = ctx.request.body?.refreshToken;
335
+ }
336
+
337
+ if (!refreshToken || typeof refreshToken !== 'string') {
338
+ return ctx.badRequest('Missing refresh token');
339
+ }
166
340
 
341
+ const rotation = await strapi
342
+ .sessionManager('users-permissions')
343
+ .rotateRefreshToken(refreshToken);
344
+ if ('error' in rotation) {
345
+ return ctx.unauthorized('Invalid refresh token');
346
+ }
347
+
348
+ const result = await strapi
349
+ .sessionManager('users-permissions')
350
+ .generateAccessToken(rotation.token);
351
+ if ('error' in result) {
352
+ return ctx.unauthorized('Invalid refresh token');
353
+ }
354
+
355
+ const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
356
+ if (upSessions?.httpOnly || requestHttpOnly) {
357
+ const isProduction = process.env.NODE_ENV === 'production';
358
+ const isSecure =
359
+ typeof upSessions.cookie?.secure === 'boolean' ? upSessions.cookie?.secure : isProduction;
360
+
361
+ const cookieOptions = {
362
+ httpOnly: true,
363
+ secure: isSecure,
364
+ sameSite: upSessions.cookie?.sameSite ?? 'lax',
365
+ path: upSessions.cookie?.path ?? '/',
366
+ domain: upSessions.cookie?.domain,
367
+ overwrite: true,
368
+ };
369
+ ctx.cookies.set(cookieName, rotation.token, cookieOptions);
370
+ return ctx.send({ jwt: result.token });
371
+ }
372
+ return ctx.send({ jwt: result.token, refreshToken: rotation.token });
373
+ },
374
+ async logout(ctx) {
375
+ const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
376
+ if (mode !== 'refresh') {
377
+ return ctx.notFound();
378
+ }
379
+
380
+ // Invalidate all sessions for the authenticated user, or by deviceId if provided
381
+ if (!ctx.state.user) {
382
+ return ctx.unauthorized('Missing authentication');
383
+ }
384
+
385
+ const deviceId = extractDeviceId(ctx.request.body);
386
+ try {
387
+ await strapi
388
+ .sessionManager('users-permissions')
389
+ .invalidateRefreshToken(String(ctx.state.user.id), deviceId);
390
+ } catch (err) {
391
+ strapi.log.error('UP logout failed', err);
392
+ }
393
+
394
+ const upSessions = strapi.config.get('plugin::users-permissions.sessions');
395
+ const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
396
+ if (upSessions?.httpOnly || requestHttpOnly) {
397
+ const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
398
+ ctx.cookies.set(cookieName, '', { expires: new Date(0) });
399
+ }
400
+ return ctx.send({ ok: true });
401
+ },
167
402
  async connect(ctx, next) {
168
- const grant = require('grant-koa');
403
+ const grant = require('grant').koa();
169
404
 
170
405
  const providers = await strapi
171
406
  .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })
@@ -193,10 +428,28 @@ module.exports = {
193
428
  }
194
429
 
195
430
  // Ability to pass OAuth callback dynamically
196
- grantConfig[provider].callback =
197
- _.get(ctx, 'query.callback') ||
198
- _.get(ctx, 'session.grant.dynamic.callback') ||
199
- grantConfig[provider].callback;
431
+ const queryCustomCallback = _.get(ctx, 'query.callback');
432
+ const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');
433
+
434
+ const customCallback = queryCustomCallback ?? dynamicSessionCallback;
435
+
436
+ // The custom callback is validated to make sure it's not redirecting to an unwanted actor.
437
+ if (customCallback !== undefined) {
438
+ try {
439
+ // We're extracting the callback validator from the plugin config since it can be user-customized
440
+ const { validate: validateCallback } = strapi
441
+ .plugin('users-permissions')
442
+ .config('callback');
443
+
444
+ await validateCallback(customCallback, grantConfig[provider]);
445
+
446
+ grantConfig[provider].callback = customCallback;
447
+ } catch (e) {
448
+ throw new ValidationError('Invalid callback URL provided', { callback: customCallback });
449
+ }
450
+ }
451
+
452
+ // Build a valid redirect URI for the current provider
200
453
  grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);
201
454
 
202
455
  return grant(grantConfig)(ctx, next);
@@ -211,7 +464,7 @@ module.exports = {
211
464
  const advancedSettings = await pluginStore.get({ key: 'advanced' });
212
465
 
213
466
  // Find the user by email.
214
- const user = await strapi
467
+ const user = await strapi.db
215
468
  .query('plugin::users-permissions.user')
216
469
  .findOne({ where: { email: email.toLowerCase() } });
217
470
 
@@ -229,8 +482,8 @@ module.exports = {
229
482
  resetPasswordSettings.message,
230
483
  {
231
484
  URL: advancedSettings.email_reset_password,
232
- SERVER_URL: getAbsoluteServerUrl(strapi.config),
233
- ADMIN_URL: getAbsoluteAdminUrl(strapi.config),
485
+ SERVER_URL: strapi.config.get('server.absoluteUrl'),
486
+ ADMIN_URL: strapi.config.get('admin.absoluteUrl'),
234
487
  USER: userInfo,
235
488
  TOKEN: resetPasswordToken,
236
489
  }
@@ -273,26 +526,32 @@ module.exports = {
273
526
  throw new ApplicationError('Register action is currently disabled');
274
527
  }
275
528
 
529
+ const { register } = strapi.config.get('plugin::users-permissions');
530
+ const alwaysAllowedKeys = ['username', 'password', 'email'];
531
+
532
+ // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration
533
+ const allowedKeys = compact(
534
+ concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : [])
535
+ );
536
+
537
+ // Check if there are any keys in requestBody that are not in allowedKeys
538
+ const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));
539
+
540
+ if (invalidKeys.length > 0) {
541
+ // If there are invalid keys, throw an error
542
+ throw new ValidationError(`Invalid parameters: ${invalidKeys.join(', ')}`);
543
+ }
544
+
276
545
  const params = {
277
- ..._.omit(ctx.request.body, [
278
- 'confirmed',
279
- 'blocked',
280
- 'confirmationToken',
281
- 'resetPasswordToken',
282
- 'provider',
283
- 'id',
284
- 'createdAt',
285
- 'updatedAt',
286
- 'createdBy',
287
- 'updatedBy',
288
- 'role',
289
- ]),
546
+ ..._.pick(ctx.request.body, allowedKeys),
290
547
  provider: 'local',
291
548
  };
292
549
 
293
- await validateRegisterBody(params);
550
+ const validations = strapi.config.get('plugin::users-permissions.validationRules');
551
+
552
+ await validateRegisterBody(params, validations);
294
553
 
295
- const role = await strapi
554
+ const role = await strapi.db
296
555
  .query('plugin::users-permissions.role')
297
556
  .findOne({ where: { type: settings.default_role } });
298
557
 
@@ -311,7 +570,7 @@ module.exports = {
311
570
  ],
312
571
  };
313
572
 
314
- const conflictingUserCount = await strapi.query('plugin::users-permissions.user').count({
573
+ const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({
315
574
  where: { ...identifierFilter, provider },
316
575
  });
317
576
 
@@ -320,7 +579,7 @@ module.exports = {
320
579
  }
321
580
 
322
581
  if (settings.unique_email) {
323
- const conflictingUserCount = await strapi.query('plugin::users-permissions.user').count({
582
+ const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({
324
583
  where: { ...identifierFilter },
325
584
  });
326
585
 
@@ -345,18 +604,33 @@ module.exports = {
345
604
  try {
346
605
  await getService('user').sendConfirmationEmail(sanitizedUser);
347
606
  } catch (err) {
348
- throw new ApplicationError(err.message);
607
+ strapi.log.error(err);
608
+ throw new ApplicationError('Error sending confirmation email');
349
609
  }
350
610
 
351
611
  return ctx.send({ user: sanitizedUser });
352
612
  }
353
613
 
354
- const jwt = getService('jwt').issue(_.pick(user, ['id']));
614
+ const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
615
+ if (mode === 'refresh') {
616
+ const deviceId = extractDeviceId(ctx.request.body) || crypto.randomUUID();
355
617
 
356
- return ctx.send({
357
- jwt,
358
- user: sanitizedUser,
359
- });
618
+ const refresh = await strapi
619
+ .sessionManager('users-permissions')
620
+ .generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });
621
+
622
+ const access = await strapi
623
+ .sessionManager('users-permissions')
624
+ .generateAccessToken(refresh.token);
625
+ if ('error' in access) {
626
+ throw new ApplicationError('Invalid credentials');
627
+ }
628
+
629
+ return ctx.send({ jwt: access.token, refreshToken: refresh.token, user: sanitizedUser });
630
+ }
631
+
632
+ const jwt = getService('jwt').issue(_.pick(user, ['id']));
633
+ return ctx.send({ jwt, user: sanitizedUser });
360
634
  },
361
635
 
362
636
  async emailConfirmation(ctx, next, returnUser) {
@@ -390,7 +664,7 @@ module.exports = {
390
664
  async sendEmailConfirmation(ctx) {
391
665
  const { email } = await validateSendEmailConfirmationBody(ctx.request.body);
392
666
 
393
- const user = await strapi.query('plugin::users-permissions.user').findOne({
667
+ const user = await strapi.db.query('plugin::users-permissions.user').findOne({
394
668
  where: { email: email.toLowerCase() },
395
669
  });
396
670
 
@@ -413,4 +687,4 @@ module.exports = {
413
687
  sent: true,
414
688
  });
415
689
  },
416
- };
690
+ });
@@ -2,8 +2,7 @@
2
2
 
3
3
  const _ = require('lodash');
4
4
  const { contentTypes: contentTypesUtils } = require('@strapi/utils');
5
- const { ApplicationError, ValidationError, NotFoundError, ForbiddenError } =
6
- require('@strapi/utils').errors;
5
+ const { ApplicationError, NotFoundError, ForbiddenError } = require('@strapi/utils').errors;
7
6
  const { validateCreateUserBody, validateUpdateUserBody } = require('./validation/user');
8
7
 
9
8
  const { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;
@@ -17,24 +16,25 @@ const ACTIONS = {
17
16
  };
18
17
 
19
18
  const findEntityAndCheckPermissions = async (ability, action, model, id) => {
20
- const entity = await strapi.query(userModel).findOne({
21
- where: { id },
19
+ const doc = await strapi.service('plugin::content-manager.document-manager').findOne(id, model, {
22
20
  populate: [`${CREATED_BY_ATTRIBUTE}.roles`],
23
21
  });
24
22
 
25
- if (_.isNil(entity)) {
23
+ if (_.isNil(doc)) {
26
24
  throw new NotFoundError();
27
25
  }
28
26
 
29
- const pm = strapi.admin.services.permission.createPermissionsManager({ ability, action, model });
27
+ const pm = strapi
28
+ .service('admin::permission')
29
+ .createPermissionsManager({ ability, action, model });
30
30
 
31
- if (pm.ability.cannot(pm.action, pm.toSubject(entity))) {
31
+ if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {
32
32
  throw new ForbiddenError();
33
33
  }
34
34
 
35
- const entityWithoutCreatorRoles = _.omit(entity, `${CREATED_BY_ATTRIBUTE}.roles`);
35
+ const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);
36
36
 
37
- return { pm, entity: entityWithoutCreatorRoles };
37
+ return { pm, doc: docWithoutCreatorRoles };
38
38
  };
39
39
 
40
40
  module.exports = {
@@ -48,7 +48,7 @@ module.exports = {
48
48
 
49
49
  const { email, username } = body;
50
50
 
51
- const pm = strapi.admin.services.permission.createPermissionsManager({
51
+ const pm = strapi.service('admin::permission').createPermissionsManager({
52
52
  ability: userAbility,
53
53
  action: ACTIONS.create,
54
54
  model: userModel,
@@ -66,7 +66,7 @@ module.exports = {
66
66
 
67
67
  await validateCreateUserBody(ctx.request.body);
68
68
 
69
- const userWithSameUsername = await strapi
69
+ const userWithSameUsername = await strapi.db
70
70
  .query('plugin::users-permissions.user')
71
71
  .findOne({ where: { username } });
72
72
 
@@ -75,7 +75,7 @@ module.exports = {
75
75
  }
76
76
 
77
77
  if (advanced.unique_email) {
78
- const userWithSameEmail = await strapi
78
+ const userWithSameEmail = await strapi.db
79
79
  .query('plugin::users-permissions.user')
80
80
  .findOne({ where: { email: email.toLowerCase() } });
81
81
 
@@ -93,18 +93,11 @@ module.exports = {
93
93
 
94
94
  user.email = _.toLower(user.email);
95
95
 
96
- if (!user.role) {
97
- const defaultRole = await strapi
98
- .query('plugin::users-permissions.role')
99
- .findOne({ where: { type: advanced.default_role } });
100
-
101
- user.role = defaultRole.id;
102
- }
103
-
104
96
  try {
105
97
  const data = await strapi
106
- .service('plugin::content-manager.entity-manager')
107
- .create(user, userModel);
98
+ .service('plugin::content-manager.document-manager')
99
+ .create(userModel, { data: user });
100
+
108
101
  const sanitizedData = await pm.sanitizeOutput(data, { action: ACTIONS.read });
109
102
 
110
103
  ctx.created(sanitizedData);
@@ -118,7 +111,7 @@ module.exports = {
118
111
  */
119
112
 
120
113
  async update(ctx) {
121
- const { id } = ctx.params;
114
+ const { id: documentId } = ctx.params;
122
115
  const { body } = ctx.request;
123
116
  const { user: admin, userAbility } = ctx.state;
124
117
 
@@ -128,38 +121,40 @@ module.exports = {
128
121
 
129
122
  const { email, username, password } = body;
130
123
 
131
- const { pm, entity } = await findEntityAndCheckPermissions(
124
+ const { pm, doc } = await findEntityAndCheckPermissions(
132
125
  userAbility,
133
126
  ACTIONS.edit,
134
127
  userModel,
135
- id
128
+ documentId
136
129
  );
137
- const user = entity;
130
+
131
+ const user = doc;
138
132
 
139
133
  await validateUpdateUserBody(ctx.request.body);
140
134
 
141
- if (_.has(body, 'password') && !password && user.provider === 'local') {
142
- throw new ValidationError('password.notNull');
135
+ if (_.has(body, 'password') && (password == null || password === '')) {
136
+ delete body.password;
143
137
  }
144
138
 
145
139
  if (_.has(body, 'username')) {
146
- const userWithSameUsername = await strapi
140
+ const userWithSameUsername = await strapi.db
147
141
  .query('plugin::users-permissions.user')
148
142
  .findOne({ where: { username } });
149
143
 
150
- if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(id)) {
144
+ if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(user.id)) {
151
145
  throw new ApplicationError('Username already taken');
152
146
  }
153
147
  }
154
148
 
155
149
  if (_.has(body, 'email') && advancedConfigs.unique_email) {
156
- const userWithSameEmail = await strapi
150
+ const userWithSameEmail = await strapi.db
157
151
  .query('plugin::users-permissions.user')
158
152
  .findOne({ where: { email: _.toLower(email) } });
159
153
 
160
- if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(id)) {
154
+ if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(user.id)) {
161
155
  throw new ApplicationError('Email already taken');
162
156
  }
157
+
163
158
  body.email = _.toLower(body.email);
164
159
  }
165
160
 
@@ -167,8 +162,10 @@ module.exports = {
167
162
  const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');
168
163
 
169
164
  const data = await strapi
170
- .service('plugin::content-manager.entity-manager')
171
- .update({ id }, updateData, userModel);
165
+ .service('plugin::content-manager.document-manager')
166
+ .update(documentId, userModel, {
167
+ data: updateData,
168
+ });
172
169
 
173
170
  ctx.body = await pm.sanitizeOutput(data, { action: ACTIONS.read });
174
171
  },