@strapi/plugin-users-permissions 0.0.0-next.f7babb775ed9a7e18d8351cb7f74c63e016323c4 → 0.0.0-next.f86041c89a8c1545c6437a881dc613e98bc52bd7

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