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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/.eslintrc.cjs +2 -0
  2. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +3 -1
  3. package/admin/src/pages/Roles/pages/EditPage.jsx +1 -1
  4. package/admin/src/pages/Roles/pages/ListPage/index.jsx +1 -1
  5. package/admin/src/translations/en.json +1 -0
  6. package/admin/src/translations/es.json +1 -1
  7. package/admin/src/translations/ko.json +2 -1
  8. package/admin/src/translations/sv.json +1 -1
  9. package/admin/src/translations/uk.json +1 -1
  10. package/dist/admin/pages/EmailTemplates/components/EmailForm.js +2 -1
  11. package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
  12. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +2 -1
  13. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -1
  14. package/dist/admin/pages/Roles/pages/EditPage.js +1 -1
  15. package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
  16. package/dist/admin/pages/Roles/pages/EditPage.mjs +1 -1
  17. package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
  18. package/dist/admin/pages/Roles/pages/ListPage/index.js +1 -1
  19. package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
  20. package/dist/admin/pages/Roles/pages/ListPage/index.mjs +1 -1
  21. package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
  22. package/dist/admin/translations/en.json.js +1 -0
  23. package/dist/admin/translations/en.json.js.map +1 -1
  24. package/dist/admin/translations/en.json.mjs +1 -0
  25. package/dist/admin/translations/en.json.mjs.map +1 -1
  26. package/dist/admin/translations/es.json.js +1 -1
  27. package/dist/admin/translations/es.json.mjs +1 -1
  28. package/dist/admin/translations/ko.json.js +2 -1
  29. package/dist/admin/translations/ko.json.js.map +1 -1
  30. package/dist/admin/translations/ko.json.mjs +2 -1
  31. package/dist/admin/translations/ko.json.mjs.map +1 -1
  32. package/dist/admin/translations/sv.json.js +1 -1
  33. package/dist/admin/translations/sv.json.mjs +1 -1
  34. package/dist/admin/translations/uk.json.js +1 -1
  35. package/dist/admin/translations/uk.json.mjs +1 -1
  36. package/dist/server/_virtual/_node_crypto.js +10 -0
  37. package/dist/server/_virtual/_node_crypto.js.map +1 -0
  38. package/dist/server/_virtual/_node_crypto.mjs +7 -0
  39. package/dist/server/_virtual/_node_crypto.mjs.map +1 -0
  40. package/dist/server/_virtual/_node_url.js +10 -0
  41. package/dist/server/_virtual/_node_url.js.map +1 -0
  42. package/dist/server/_virtual/_node_url.mjs +7 -0
  43. package/dist/server/_virtual/_node_url.mjs.map +1 -0
  44. package/dist/server/bootstrap/index.js.map +1 -1
  45. package/dist/server/bootstrap/index.mjs.map +1 -1
  46. package/dist/server/bootstrap/users-permissions-actions.js.map +1 -1
  47. package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -1
  48. package/dist/server/config.js.map +1 -1
  49. package/dist/server/config.mjs.map +1 -1
  50. package/dist/server/content-types/index.js.map +1 -1
  51. package/dist/server/content-types/index.mjs.map +1 -1
  52. package/dist/server/content-types/permission/index.js.map +1 -1
  53. package/dist/server/content-types/permission/index.mjs.map +1 -1
  54. package/dist/server/content-types/role/index.js.map +1 -1
  55. package/dist/server/content-types/role/index.mjs.map +1 -1
  56. package/dist/server/content-types/user/index.js.map +1 -1
  57. package/dist/server/content-types/user/index.mjs.map +1 -1
  58. package/dist/server/content-types/user/schema-config.js.map +1 -1
  59. package/dist/server/content-types/user/schema-config.mjs.map +1 -1
  60. package/dist/server/controllers/auth.js +38 -30
  61. package/dist/server/controllers/auth.js.map +1 -1
  62. package/dist/server/controllers/auth.mjs +38 -28
  63. package/dist/server/controllers/auth.mjs.map +1 -1
  64. package/dist/server/controllers/content-manager-user.js.map +1 -1
  65. package/dist/server/controllers/content-manager-user.mjs.map +1 -1
  66. package/dist/server/controllers/index.js.map +1 -1
  67. package/dist/server/controllers/index.mjs.map +1 -1
  68. package/dist/server/controllers/permissions.js.map +1 -1
  69. package/dist/server/controllers/permissions.mjs.map +1 -1
  70. package/dist/server/controllers/role.js.map +1 -1
  71. package/dist/server/controllers/role.mjs.map +1 -1
  72. package/dist/server/controllers/settings.js.map +1 -1
  73. package/dist/server/controllers/settings.mjs.map +1 -1
  74. package/dist/server/controllers/user.js.map +1 -1
  75. package/dist/server/controllers/user.mjs.map +1 -1
  76. package/dist/server/controllers/validation/auth.js +6 -6
  77. package/dist/server/controllers/validation/auth.js.map +1 -1
  78. package/dist/server/controllers/validation/auth.mjs +6 -6
  79. package/dist/server/controllers/validation/auth.mjs.map +1 -1
  80. package/dist/server/controllers/validation/email-template.js +1 -4
  81. package/dist/server/controllers/validation/email-template.js.map +1 -1
  82. package/dist/server/controllers/validation/email-template.mjs +1 -3
  83. package/dist/server/controllers/validation/email-template.mjs.map +1 -1
  84. package/dist/server/controllers/validation/user.js.map +1 -1
  85. package/dist/server/controllers/validation/user.mjs.map +1 -1
  86. package/dist/server/graphql/index.js.map +1 -1
  87. package/dist/server/graphql/index.mjs.map +1 -1
  88. package/dist/server/graphql/mutations/auth/change-password.js +7 -4
  89. package/dist/server/graphql/mutations/auth/change-password.js.map +1 -1
  90. package/dist/server/graphql/mutations/auth/change-password.mjs +7 -4
  91. package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -1
  92. package/dist/server/graphql/mutations/auth/email-confirmation.js +1 -1
  93. package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -1
  94. package/dist/server/graphql/mutations/auth/email-confirmation.mjs +1 -1
  95. package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -1
  96. package/dist/server/graphql/mutations/auth/forgot-password.js +7 -4
  97. package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -1
  98. package/dist/server/graphql/mutations/auth/forgot-password.mjs +7 -4
  99. package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -1
  100. package/dist/server/graphql/mutations/auth/login.js +10 -7
  101. package/dist/server/graphql/mutations/auth/login.js.map +1 -1
  102. package/dist/server/graphql/mutations/auth/login.mjs +10 -7
  103. package/dist/server/graphql/mutations/auth/login.mjs.map +1 -1
  104. package/dist/server/graphql/mutations/auth/rate-limit.js +63 -0
  105. package/dist/server/graphql/mutations/auth/rate-limit.js.map +1 -0
  106. package/dist/server/graphql/mutations/auth/rate-limit.mjs +61 -0
  107. package/dist/server/graphql/mutations/auth/rate-limit.mjs.map +1 -0
  108. package/dist/server/graphql/mutations/auth/register.js +7 -4
  109. package/dist/server/graphql/mutations/auth/register.js.map +1 -1
  110. package/dist/server/graphql/mutations/auth/register.mjs +7 -4
  111. package/dist/server/graphql/mutations/auth/register.mjs.map +1 -1
  112. package/dist/server/graphql/mutations/auth/reset-password.js +7 -4
  113. package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -1
  114. package/dist/server/graphql/mutations/auth/reset-password.mjs +7 -4
  115. package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -1
  116. package/dist/server/graphql/mutations/crud/role/create-role.js +1 -1
  117. package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -1
  118. package/dist/server/graphql/mutations/crud/role/create-role.mjs +1 -1
  119. package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -1
  120. package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -1
  121. package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -1
  122. package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -1
  123. package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -1
  124. package/dist/server/graphql/mutations/crud/user/create-user.js +1 -1
  125. package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -1
  126. package/dist/server/graphql/mutations/crud/user/create-user.mjs +1 -1
  127. package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -1
  128. package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -1
  129. package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -1
  130. package/dist/server/graphql/mutations/crud/user/update-user.js +1 -1
  131. package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -1
  132. package/dist/server/graphql/mutations/crud/user/update-user.mjs +1 -1
  133. package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -1
  134. package/dist/server/graphql/mutations/index.js.map +1 -1
  135. package/dist/server/graphql/mutations/index.mjs.map +1 -1
  136. package/dist/server/graphql/queries/index.js.map +1 -1
  137. package/dist/server/graphql/queries/index.mjs.map +1 -1
  138. package/dist/server/graphql/queries/me.js.map +1 -1
  139. package/dist/server/graphql/queries/me.mjs.map +1 -1
  140. package/dist/server/graphql/resolvers-configs.js.map +1 -1
  141. package/dist/server/graphql/resolvers-configs.mjs.map +1 -1
  142. package/dist/server/graphql/types/create-role-payload.js.map +1 -1
  143. package/dist/server/graphql/types/create-role-payload.mjs.map +1 -1
  144. package/dist/server/graphql/types/delete-role-payload.js.map +1 -1
  145. package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -1
  146. package/dist/server/graphql/types/index.js.map +1 -1
  147. package/dist/server/graphql/types/index.mjs.map +1 -1
  148. package/dist/server/graphql/types/login-input.js.map +1 -1
  149. package/dist/server/graphql/types/login-input.mjs.map +1 -1
  150. package/dist/server/graphql/types/login-payload.js.map +1 -1
  151. package/dist/server/graphql/types/login-payload.mjs.map +1 -1
  152. package/dist/server/graphql/types/me-role.js.map +1 -1
  153. package/dist/server/graphql/types/me-role.mjs.map +1 -1
  154. package/dist/server/graphql/types/me.js.map +1 -1
  155. package/dist/server/graphql/types/me.mjs.map +1 -1
  156. package/dist/server/graphql/types/password-payload.js.map +1 -1
  157. package/dist/server/graphql/types/password-payload.mjs.map +1 -1
  158. package/dist/server/graphql/types/register-input.js.map +1 -1
  159. package/dist/server/graphql/types/register-input.mjs.map +1 -1
  160. package/dist/server/graphql/types/update-role-payload.js.map +1 -1
  161. package/dist/server/graphql/types/update-role-payload.mjs.map +1 -1
  162. package/dist/server/graphql/types/user-input.js.map +1 -1
  163. package/dist/server/graphql/types/user-input.mjs.map +1 -1
  164. package/dist/server/graphql/utils.js +4 -4
  165. package/dist/server/graphql/utils.js.map +1 -1
  166. package/dist/server/graphql/utils.mjs +4 -4
  167. package/dist/server/graphql/utils.mjs.map +1 -1
  168. package/dist/server/index.js +2 -2
  169. package/dist/server/index.js.map +1 -1
  170. package/dist/server/index.mjs +3 -3
  171. package/dist/server/index.mjs.map +1 -1
  172. package/dist/server/index2.js +8 -8
  173. package/dist/server/index2.js.map +1 -1
  174. package/dist/server/index2.mjs +8 -8
  175. package/dist/server/index2.mjs.map +1 -1
  176. package/dist/server/middlewares/index.js.map +1 -1
  177. package/dist/server/middlewares/index.mjs.map +1 -1
  178. package/dist/server/middlewares/rateLimit.js +5 -5
  179. package/dist/server/middlewares/rateLimit.js.map +1 -1
  180. package/dist/server/middlewares/rateLimit.mjs +5 -5
  181. package/dist/server/middlewares/rateLimit.mjs.map +1 -1
  182. package/dist/server/register.js.map +1 -1
  183. package/dist/server/register.mjs.map +1 -1
  184. package/dist/server/routes/admin/index.js.map +1 -1
  185. package/dist/server/routes/admin/index.mjs.map +1 -1
  186. package/dist/server/routes/admin/permissions.js.map +1 -1
  187. package/dist/server/routes/admin/permissions.mjs.map +1 -1
  188. package/dist/server/routes/admin/role.js.map +1 -1
  189. package/dist/server/routes/admin/role.mjs.map +1 -1
  190. package/dist/server/routes/admin/settings.js.map +1 -1
  191. package/dist/server/routes/admin/settings.mjs.map +1 -1
  192. package/dist/server/routes/content-api/auth.js.map +1 -1
  193. package/dist/server/routes/content-api/auth.mjs.map +1 -1
  194. package/dist/server/routes/content-api/index.js.map +1 -1
  195. package/dist/server/routes/content-api/index.mjs.map +1 -1
  196. package/dist/server/routes/content-api/permissions.js.map +1 -1
  197. package/dist/server/routes/content-api/permissions.mjs.map +1 -1
  198. package/dist/server/routes/content-api/role.js.map +1 -1
  199. package/dist/server/routes/content-api/role.mjs.map +1 -1
  200. package/dist/server/routes/content-api/user.js.map +1 -1
  201. package/dist/server/routes/content-api/user.mjs.map +1 -1
  202. package/dist/server/routes/content-api/validation.js.map +1 -1
  203. package/dist/server/routes/content-api/validation.mjs.map +1 -1
  204. package/dist/server/routes/index.js.map +1 -1
  205. package/dist/server/routes/index.mjs.map +1 -1
  206. package/dist/server/services/constants.js.map +1 -1
  207. package/dist/server/services/constants.mjs.map +1 -1
  208. package/dist/server/services/index.js.map +1 -1
  209. package/dist/server/services/index.mjs.map +1 -1
  210. package/dist/server/services/jwt.js.map +1 -1
  211. package/dist/server/services/jwt.mjs.map +1 -1
  212. package/dist/server/services/permission.js.map +1 -1
  213. package/dist/server/services/permission.mjs.map +1 -1
  214. package/dist/server/services/providers-registry.js +188 -248
  215. package/dist/server/services/providers-registry.js.map +1 -1
  216. package/dist/server/services/providers-registry.mjs +188 -245
  217. package/dist/server/services/providers-registry.mjs.map +1 -1
  218. package/dist/server/services/providers.js +15 -11
  219. package/dist/server/services/providers.js.map +1 -1
  220. package/dist/server/services/providers.mjs +14 -10
  221. package/dist/server/services/providers.mjs.map +1 -1
  222. package/dist/server/services/role.js +2 -2
  223. package/dist/server/services/role.js.map +1 -1
  224. package/dist/server/services/role.mjs +2 -2
  225. package/dist/server/services/role.mjs.map +1 -1
  226. package/dist/server/services/user.js +14 -14
  227. package/dist/server/services/user.js.map +1 -1
  228. package/dist/server/services/user.mjs +13 -13
  229. package/dist/server/services/user.mjs.map +1 -1
  230. package/dist/server/services/users-permissions.js +17 -20
  231. package/dist/server/services/users-permissions.js.map +1 -1
  232. package/dist/server/services/users-permissions.mjs +16 -18
  233. package/dist/server/services/users-permissions.mjs.map +1 -1
  234. package/dist/server/strategies/users-permissions.js +9 -8
  235. package/dist/server/strategies/users-permissions.js.map +1 -1
  236. package/dist/server/strategies/users-permissions.mjs +9 -8
  237. package/dist/server/strategies/users-permissions.mjs.map +1 -1
  238. package/dist/server/utils/index.js.map +1 -1
  239. package/dist/server/utils/index.mjs.map +1 -1
  240. package/dist/server/utils/oauth-connect/index.js +241 -0
  241. package/dist/server/utils/oauth-connect/index.js.map +1 -0
  242. package/dist/server/utils/oauth-connect/index.mjs +235 -0
  243. package/dist/server/utils/oauth-connect/index.mjs.map +1 -0
  244. package/dist/server/utils/oauth-connect/oauth1.js +138 -0
  245. package/dist/server/utils/oauth-connect/oauth1.js.map +1 -0
  246. package/dist/server/utils/oauth-connect/oauth1.mjs +136 -0
  247. package/dist/server/utils/oauth-connect/oauth1.mjs.map +1 -0
  248. package/dist/server/utils/oauth-connect/oauth2.js +117 -0
  249. package/dist/server/utils/oauth-connect/oauth2.js.map +1 -0
  250. package/dist/server/utils/oauth-connect/oauth2.mjs +115 -0
  251. package/dist/server/utils/oauth-connect/oauth2.mjs.map +1 -0
  252. package/dist/server/utils/oauth-connect/providers.js +109 -0
  253. package/dist/server/utils/oauth-connect/providers.js.map +1 -0
  254. package/dist/server/utils/oauth-connect/providers.mjs +107 -0
  255. package/dist/server/utils/oauth-connect/providers.mjs.map +1 -0
  256. package/dist/server/utils/provider-http.js +52 -0
  257. package/dist/server/utils/provider-http.js.map +1 -0
  258. package/dist/server/utils/provider-http.mjs +50 -0
  259. package/dist/server/utils/provider-http.mjs.map +1 -0
  260. package/dist/server/utils/refresh-cookie-options.js.map +1 -1
  261. package/dist/server/utils/refresh-cookie-options.mjs.map +1 -1
  262. package/dist/server/utils/sanitize/index.js.map +1 -1
  263. package/dist/server/utils/sanitize/index.mjs.map +1 -1
  264. package/dist/server/utils/sanitize/sanitizers.js +1 -1
  265. package/dist/server/utils/sanitize/sanitizers.js.map +1 -1
  266. package/dist/server/utils/sanitize/sanitizers.mjs +1 -1
  267. package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -1
  268. package/dist/server/utils/sanitize/visitors/index.js.map +1 -1
  269. package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -1
  270. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -1
  271. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -1
  272. package/dist/server/utils/trim-grant-session-response.js +67 -0
  273. package/dist/server/utils/trim-grant-session-response.js.map +1 -0
  274. package/dist/server/utils/trim-grant-session-response.mjs +65 -0
  275. package/dist/server/utils/trim-grant-session-response.mjs.map +1 -0
  276. package/dist/server/utils/verify-jwt-with-jwks.js +60 -0
  277. package/dist/server/utils/verify-jwt-with-jwks.js.map +1 -0
  278. package/dist/server/utils/verify-jwt-with-jwks.mjs +54 -0
  279. package/dist/server/utils/verify-jwt-with-jwks.mjs.map +1 -0
  280. package/jsconfig.json +7 -0
  281. package/package.json +28 -18
  282. package/rollup.config.mjs +2 -2
  283. package/server/{controllers → src/controllers}/auth.js +36 -29
  284. package/server/{controllers → src/controllers}/validation/auth.js +6 -6
  285. package/server/{controllers → src/controllers}/validation/email-template.js +1 -2
  286. package/server/{graphql → src/graphql}/mutations/auth/change-password.js +6 -6
  287. package/server/{graphql → src/graphql}/mutations/auth/email-confirmation.js +1 -1
  288. package/server/{graphql → src/graphql}/mutations/auth/forgot-password.js +6 -6
  289. package/server/{graphql → src/graphql}/mutations/auth/login.js +11 -7
  290. package/server/src/graphql/mutations/auth/rate-limit.js +62 -0
  291. package/server/{graphql → src/graphql}/mutations/auth/register.js +6 -6
  292. package/server/{graphql → src/graphql}/mutations/auth/reset-password.js +6 -6
  293. package/server/{graphql → src/graphql}/mutations/crud/role/create-role.js +1 -1
  294. package/server/{graphql → src/graphql}/mutations/crud/user/create-user.js +1 -1
  295. package/server/{graphql → src/graphql}/mutations/crud/user/update-user.js +1 -1
  296. package/server/{graphql → src/graphql}/utils.js +3 -3
  297. package/server/{middlewares → src/middlewares}/rateLimit.js +4 -4
  298. package/server/src/services/providers-registry.js +487 -0
  299. package/server/{services → src/services}/providers.js +9 -7
  300. package/server/{services → src/services}/role.js +2 -2
  301. package/server/{services → src/services}/user.js +16 -6
  302. package/server/{services → src/services}/users-permissions.js +14 -16
  303. package/server/{strategies → src/strategies}/users-permissions.js +14 -10
  304. package/server/src/utils/oauth-connect/index.js +262 -0
  305. package/server/src/utils/oauth-connect/oauth1.js +169 -0
  306. package/server/src/utils/oauth-connect/oauth2.js +123 -0
  307. package/server/src/utils/oauth-connect/providers.js +100 -0
  308. package/server/src/utils/provider-http.js +49 -0
  309. package/server/{utils → src/utils}/sanitize/sanitizers.js +1 -1
  310. package/server/src/utils/trim-grant-session-response.js +70 -0
  311. package/server/src/utils/verify-jwt-with-jwks.js +43 -0
  312. package/types/strapi-server.d.ts +65 -0
  313. package/server/services/providers-registry.js +0 -567
  314. package/server/utils/index.d.ts +0 -23
  315. /package/server/{bootstrap → src/bootstrap}/index.js +0 -0
  316. /package/server/{bootstrap → src/bootstrap}/users-permissions-actions.js +0 -0
  317. /package/server/{config.js → src/config.js} +0 -0
  318. /package/server/{content-types → src/content-types}/index.js +0 -0
  319. /package/server/{content-types → src/content-types}/permission/index.js +0 -0
  320. /package/server/{content-types → src/content-types}/role/index.js +0 -0
  321. /package/server/{content-types → src/content-types}/user/index.js +0 -0
  322. /package/server/{content-types → src/content-types}/user/schema-config.js +0 -0
  323. /package/server/{controllers → src/controllers}/content-manager-user.js +0 -0
  324. /package/server/{controllers → src/controllers}/index.js +0 -0
  325. /package/server/{controllers → src/controllers}/permissions.js +0 -0
  326. /package/server/{controllers → src/controllers}/role.js +0 -0
  327. /package/server/{controllers → src/controllers}/settings.js +0 -0
  328. /package/server/{controllers → src/controllers}/user.js +0 -0
  329. /package/server/{controllers → src/controllers}/validation/user.js +0 -0
  330. /package/server/{graphql → src/graphql}/index.js +0 -0
  331. /package/server/{graphql → src/graphql}/mutations/crud/role/delete-role.js +0 -0
  332. /package/server/{graphql → src/graphql}/mutations/crud/role/update-role.js +0 -0
  333. /package/server/{graphql → src/graphql}/mutations/crud/user/delete-user.js +0 -0
  334. /package/server/{graphql → src/graphql}/mutations/index.js +0 -0
  335. /package/server/{graphql → src/graphql}/queries/index.js +0 -0
  336. /package/server/{graphql → src/graphql}/queries/me.js +0 -0
  337. /package/server/{graphql → src/graphql}/resolvers-configs.js +0 -0
  338. /package/server/{graphql → src/graphql}/types/create-role-payload.js +0 -0
  339. /package/server/{graphql → src/graphql}/types/delete-role-payload.js +0 -0
  340. /package/server/{graphql → src/graphql}/types/index.js +0 -0
  341. /package/server/{graphql → src/graphql}/types/login-input.js +0 -0
  342. /package/server/{graphql → src/graphql}/types/login-payload.js +0 -0
  343. /package/server/{graphql → src/graphql}/types/me-role.js +0 -0
  344. /package/server/{graphql → src/graphql}/types/me.js +0 -0
  345. /package/server/{graphql → src/graphql}/types/password-payload.js +0 -0
  346. /package/server/{graphql → src/graphql}/types/register-input.js +0 -0
  347. /package/server/{graphql → src/graphql}/types/update-role-payload.js +0 -0
  348. /package/server/{graphql → src/graphql}/types/user-input.js +0 -0
  349. /package/server/{index.js → src/index.js} +0 -0
  350. /package/server/{middlewares → src/middlewares}/index.js +0 -0
  351. /package/server/{register.js → src/register.js} +0 -0
  352. /package/server/{routes → src/routes}/admin/index.js +0 -0
  353. /package/server/{routes → src/routes}/admin/permissions.js +0 -0
  354. /package/server/{routes → src/routes}/admin/role.js +0 -0
  355. /package/server/{routes → src/routes}/admin/settings.js +0 -0
  356. /package/server/{routes → src/routes}/content-api/auth.js +0 -0
  357. /package/server/{routes → src/routes}/content-api/index.js +0 -0
  358. /package/server/{routes → src/routes}/content-api/permissions.js +0 -0
  359. /package/server/{routes → src/routes}/content-api/role.js +0 -0
  360. /package/server/{routes → src/routes}/content-api/user.js +0 -0
  361. /package/server/{routes → src/routes}/content-api/validation.js +0 -0
  362. /package/server/{routes → src/routes}/index.js +0 -0
  363. /package/server/{services → src/services}/constants.js +0 -0
  364. /package/server/{services → src/services}/index.js +0 -0
  365. /package/server/{services → src/services}/jwt.js +0 -0
  366. /package/server/{services → src/services}/permission.js +0 -0
  367. /package/server/{utils → src/utils}/index.js +0 -0
  368. /package/server/{utils → src/utils}/refresh-cookie-options.js +0 -0
  369. /package/server/{utils → src/utils}/sanitize/index.js +0 -0
  370. /package/server/{utils → src/utils}/sanitize/visitors/index.js +0 -0
  371. /package/server/{utils → src/utils}/sanitize/visitors/remove-user-relation-from-role-entities.js +0 -0
@@ -9,7 +9,6 @@
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');
13
12
  const utils = require('@strapi/utils');
14
13
  const { getService } = require('../utils');
15
14
  const { buildRefreshCookieOptions } = require('../utils/refresh-cookie-options');
@@ -41,7 +40,6 @@ const extractDeviceId = (requestBody) => {
41
40
 
42
41
  const buildSessionMetadataFromContext = (ctx) =>
43
42
  buildSessionMetadata({
44
- ip: ctx.request.ip,
45
43
  userAgent: ctx.request.headers['user-agent'],
46
44
  });
47
45
 
@@ -206,7 +204,15 @@ module.exports = ({ strapi }) => ({
206
204
 
207
205
  // Connect the user with the third-party provider.
208
206
  try {
209
- const user = await getService('providers').connect(provider, ctx.query);
207
+ const grantResponse = _.get(ctx, 'session.grant.response');
208
+
209
+ if (!grantResponse) {
210
+ throw new ApplicationError('OAuth authentication requires a completed provider session');
211
+ }
212
+
213
+ const user = await getService('providers').connect(provider, grantResponse, {
214
+ grantResponse,
215
+ });
210
216
 
211
217
  if (user.blocked) {
212
218
  throw new ForbiddenError('Your account has been blocked by an administrator');
@@ -372,7 +378,14 @@ module.exports = ({ strapi }) => ({
372
378
  const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
373
379
  if (upSessions?.httpOnly || requestHttpOnly) {
374
380
  const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
375
- ctx.cookies.set(cookieName, '', { expires: new Date(0) });
381
+ const isProduction = process.env.NODE_ENV === 'production';
382
+
383
+ const { maxAge: _maxAge, ...cookieOptions } = buildRefreshCookieOptions(
384
+ upSessions,
385
+ isProduction
386
+ );
387
+
388
+ ctx.cookies.set(cookieName, '', { ...cookieOptions, expires: new Date(0) });
376
389
  }
377
390
  return ctx.send({ ok: true });
378
391
  },
@@ -419,24 +432,14 @@ module.exports = ({ strapi }) => ({
419
432
  return ctx.send({ data: {} });
420
433
  },
421
434
  async connect(ctx, next) {
422
- const grant = require('grant').koa();
423
-
424
435
  const providers = await strapi
425
436
  .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })
426
437
  .get();
427
438
 
428
- const apiPrefix = strapi.config.get('api.rest.prefix');
429
- const grantConfig = {
430
- defaults: {
431
- prefix: `${apiPrefix}/connect`,
432
- },
433
- ...providers,
434
- };
435
-
436
439
  const [requestPath] = ctx.request.url.split('?');
437
440
  const provider = requestPath.split('/connect/')[1].split('/')[0];
438
441
 
439
- if (!_.get(grantConfig[provider], 'enabled')) {
442
+ if (!_.get(providers, [provider, 'enabled'])) {
440
443
  throw new ApplicationError('This provider is disabled');
441
444
  }
442
445
 
@@ -446,32 +449,35 @@ module.exports = ({ strapi }) => ({
446
449
  );
447
450
  }
448
451
 
449
- // Ability to pass OAuth callback dynamically
450
452
  const queryCustomCallback = _.get(ctx, 'query.callback');
451
453
  const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');
452
-
453
454
  const customCallback = queryCustomCallback ?? dynamicSessionCallback;
454
455
 
455
- // The custom callback is validated to make sure it's not redirecting to an unwanted actor.
456
456
  if (customCallback !== undefined) {
457
457
  try {
458
- // We're extracting the callback validator from the plugin config since it can be user-customized
459
458
  const { validate: validateCallback } = strapi
460
459
  .plugin('users-permissions')
461
460
  .config('callback');
462
461
 
463
- await validateCallback(customCallback, grantConfig[provider]);
464
-
465
- grantConfig[provider].callback = customCallback;
466
- } catch (e) {
462
+ await validateCallback(customCallback, providers[provider]);
463
+
464
+ // Persist across the provider redirect round-trip (request state alone is lost).
465
+ ctx.session = ctx.session || {};
466
+ ctx.session.grant = ctx.session.grant || {};
467
+ ctx.session.grant.dynamic = {
468
+ ...ctx.session.grant.dynamic,
469
+ callback: customCallback,
470
+ };
471
+ ctx.state.oauthConnect = { callback: customCallback };
472
+ } catch {
467
473
  throw new ValidationError('Invalid callback URL provided', { callback: customCallback });
468
474
  }
469
475
  }
470
476
 
471
- // Build a valid redirect URI for the current provider
472
- grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);
477
+ const { createOAuthConnectMiddleware } = require('../utils/oauth-connect');
478
+ const oauthConnect = createOAuthConnectMiddleware();
473
479
 
474
- return grant(grantConfig)(ctx, next);
480
+ return oauthConnect(ctx, next);
475
481
  },
476
482
 
477
483
  async forgotPassword(ctx) {
@@ -549,9 +555,10 @@ module.exports = ({ strapi }) => ({
549
555
  const alwaysAllowedKeys = ['username', 'password', 'email'];
550
556
 
551
557
  // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration
552
- const allowedKeys = compact(
553
- concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : [])
554
- );
558
+ const allowedKeys = [
559
+ ...alwaysAllowedKeys,
560
+ ...(Array.isArray(register?.allowedFields) ? register.allowedFields : []),
561
+ ].filter((field) => Boolean(field));
555
562
 
556
563
  // Check if there are any keys in requestBody that are not in allowedKeys
557
564
  const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));
@@ -14,7 +14,7 @@ const createRegisterSchema = (config) =>
14
14
  password: yup
15
15
  .string()
16
16
  .required()
17
- .test(function (value) {
17
+ .test(function validateRegisterPasswordMaxLength(value) {
18
18
  if (!value) return true;
19
19
  const isValid = new TextEncoder().encode(value).length <= 72;
20
20
  if (!isValid) {
@@ -22,7 +22,7 @@ const createRegisterSchema = (config) =>
22
22
  }
23
23
  return true;
24
24
  })
25
- .test(async function (value) {
25
+ .test(async function validateRegisterPassword(value) {
26
26
  if (typeof config?.validatePassword === 'function') {
27
27
  try {
28
28
  const isValid = await config.validatePassword(value);
@@ -57,7 +57,7 @@ const createResetPasswordSchema = (config) =>
57
57
  password: yup
58
58
  .string()
59
59
  .required()
60
- .test(function (value) {
60
+ .test(function validateResetPasswordMaxLength(value) {
61
61
  if (!value) return true;
62
62
  const isValid = new TextEncoder().encode(value).length <= 72;
63
63
  if (!isValid) {
@@ -65,7 +65,7 @@ const createResetPasswordSchema = (config) =>
65
65
  }
66
66
  return true;
67
67
  })
68
- .test(async function (value) {
68
+ .test(async function validateResetPassword(value) {
69
69
  if (typeof config?.validatePassword === 'function') {
70
70
  try {
71
71
  const isValid = await config.validatePassword(value);
@@ -93,7 +93,7 @@ const createChangePasswordSchema = (config) =>
93
93
  password: yup
94
94
  .string()
95
95
  .required()
96
- .test(function (value) {
96
+ .test(function validateChangePasswordMaxLength(value) {
97
97
  if (!value) return true;
98
98
  const isValid = new TextEncoder().encode(value).length <= 72;
99
99
  if (!isValid) {
@@ -101,7 +101,7 @@ const createChangePasswordSchema = (config) =>
101
101
  }
102
102
  return true;
103
103
  })
104
- .test(async function (value) {
104
+ .test(async function validateChangePassword(value) {
105
105
  if (typeof config?.validatePassword === 'function') {
106
106
  try {
107
107
  const isValid = await config.validatePassword(value);
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- const { trim } = require('lodash/fp');
4
3
  const {
5
4
  template: { createLooseInterpolationRegExp, createStrictInterpolationRegExp },
6
5
  } = require('@strapi/utils');
@@ -33,7 +32,7 @@ const matchAll = (pattern, src) => {
33
32
  while ((match = regexPatternWithGlobal.exec(src))) {
34
33
  const [, group] = match;
35
34
 
36
- matches.push(trim(group));
35
+ matches.push(group.trim());
37
36
  }
38
37
 
39
38
  return matches;
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../utils');
6
+ const { createRateLimitRunner } = require('./rate-limit');
6
7
 
7
8
  module.exports = ({ nexus, strapi }) => {
8
9
  const { nonNull } = nexus;
10
+ const runRateLimit = createRateLimitRunner(strapi, '/auth/change-password');
9
11
 
10
12
  return {
11
13
  type: 'UsersPermissionsLoginPayload',
@@ -21,11 +23,9 @@ module.exports = ({ nexus, strapi }) => {
21
23
  async resolve(parent, args, context) {
22
24
  const { koaContext } = context;
23
25
 
24
- koaContext.request.body = toPlainObject(args);
25
-
26
- await strapi.plugin('users-permissions').controller('auth').changePassword(koaContext);
27
-
28
- const output = koaContext.body;
26
+ const output = await runRateLimit(koaContext, { body: toPlainObject(args) }, (ctx) =>
27
+ strapi.plugin('users-permissions').controller('auth').changePassword(ctx)
28
+ );
29
29
 
30
30
  checkBadRequest(output);
31
31
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../utils');
6
6
 
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../utils');
6
+ const { createRateLimitRunner } = require('./rate-limit');
6
7
 
7
8
  module.exports = ({ nexus, strapi }) => {
8
9
  const { nonNull } = nexus;
10
+ const runRateLimit = createRateLimitRunner(strapi, '/auth/forgot-password');
9
11
 
10
12
  return {
11
13
  type: 'UsersPermissionsPasswordPayload',
@@ -19,11 +21,9 @@ module.exports = ({ nexus, strapi }) => {
19
21
  async resolve(parent, args, context) {
20
22
  const { koaContext } = context;
21
23
 
22
- koaContext.request.body = toPlainObject(args);
23
-
24
- await strapi.plugin('users-permissions').controller('auth').forgotPassword(koaContext);
25
-
26
- const output = koaContext.body;
24
+ const output = await runRateLimit(koaContext, { body: toPlainObject(args) }, (ctx) =>
25
+ strapi.plugin('users-permissions').controller('auth').forgotPassword(ctx)
26
+ );
27
27
 
28
28
  checkBadRequest(output);
29
29
 
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../utils');
6
+ const { createRateLimitRunner } = require('./rate-limit');
6
7
 
7
8
  module.exports = ({ nexus, strapi }) => {
8
9
  const { nonNull } = nexus;
10
+ const runRateLimit = createRateLimitRunner(strapi, '/auth/local');
9
11
 
10
12
  return {
11
13
  type: nonNull('UsersPermissionsLoginPayload'),
@@ -17,12 +19,14 @@ module.exports = ({ nexus, strapi }) => {
17
19
  async resolve(parent, args, context) {
18
20
  const { koaContext } = context;
19
21
 
20
- koaContext.params = { provider: args.input.provider };
21
- koaContext.request.body = toPlainObject(args.input);
22
-
23
- await strapi.plugin('users-permissions').controller('auth').callback(koaContext);
24
-
25
- const output = koaContext.body;
22
+ const output = await runRateLimit(
23
+ koaContext,
24
+ {
25
+ body: toPlainObject(args.input),
26
+ params: { provider: args.input.provider },
27
+ },
28
+ (ctx) => strapi.plugin('users-permissions').controller('auth').callback(ctx)
29
+ );
26
30
 
27
31
  checkBadRequest(output);
28
32
 
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ const RATE_LIMIT_MIDDLEWARE = 'plugin::users-permissions.rateLimit';
4
+ const contextQueues = new WeakMap();
5
+
6
+ const getRateLimitPath = (strapi, routeSuffix) => {
7
+ const configuredPrefix = strapi.config.get('api.rest.prefix', '/api');
8
+ const prefix = typeof configuredPrefix === 'string' ? configuredPrefix : '/api';
9
+ const normalizedPrefix = prefix.replace(/^\/+|\/+$/g, '');
10
+ const normalizedSuffix = routeSuffix.replace(/^\/+/, '');
11
+
12
+ return `/${[normalizedPrefix, normalizedSuffix].filter(Boolean).join('/')}`;
13
+ };
14
+
15
+ const enqueueContextOperation = (koaContext, operation) => {
16
+ const previous = contextQueues.get(koaContext) || Promise.resolve();
17
+ const result = previous.catch(() => undefined).then(operation);
18
+
19
+ contextQueues.set(
20
+ koaContext,
21
+ result.catch(() => undefined)
22
+ );
23
+
24
+ return result;
25
+ };
26
+
27
+ const createRateLimitRunner = (strapi, routeSuffix) => {
28
+ const rateLimit = strapi.middleware(RATE_LIMIT_MIDDLEWARE)({}, { strapi });
29
+ const routePath = getRateLimitPath(strapi, routeSuffix);
30
+
31
+ return (koaContext, { body, params }, controller) =>
32
+ enqueueContextOperation(koaContext, async () => {
33
+ const originalBody = koaContext.request.body;
34
+ const originalPath = koaContext.request.path;
35
+ const originalParams = koaContext.params;
36
+ const originalResponseBody = koaContext.body;
37
+ let responseStatus = 200;
38
+
39
+ koaContext.request.path = routePath;
40
+ koaContext.request.body = body;
41
+ if (params) {
42
+ koaContext.params = params;
43
+ }
44
+
45
+ try {
46
+ await rateLimit(koaContext, () => controller(koaContext));
47
+ responseStatus = koaContext.status;
48
+ return koaContext.body;
49
+ } finally {
50
+ koaContext.request.path = originalPath;
51
+ koaContext.request.body = originalBody;
52
+ koaContext.params = originalParams;
53
+ koaContext.body = originalResponseBody;
54
+ koaContext.status = responseStatus;
55
+ }
56
+ });
57
+ };
58
+
59
+ module.exports = {
60
+ createRateLimitRunner,
61
+ getRateLimitPath,
62
+ };
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../utils');
6
+ const { createRateLimitRunner } = require('./rate-limit');
6
7
 
7
8
  module.exports = ({ nexus, strapi }) => {
8
9
  const { nonNull } = nexus;
10
+ const runRateLimit = createRateLimitRunner(strapi, '/auth/local/register');
9
11
 
10
12
  return {
11
13
  type: nonNull('UsersPermissionsLoginPayload'),
@@ -19,11 +21,9 @@ module.exports = ({ nexus, strapi }) => {
19
21
  async resolve(parent, args, context) {
20
22
  const { koaContext } = context;
21
23
 
22
- koaContext.request.body = toPlainObject(args.input);
23
-
24
- await strapi.plugin('users-permissions').controller('auth').register(koaContext);
25
-
26
- const output = koaContext.body;
24
+ const output = await runRateLimit(koaContext, { body: toPlainObject(args.input) }, (ctx) =>
25
+ strapi.plugin('users-permissions').controller('auth').register(ctx)
26
+ );
27
27
 
28
28
  checkBadRequest(output);
29
29
 
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../utils');
6
+ const { createRateLimitRunner } = require('./rate-limit');
6
7
 
7
8
  module.exports = ({ nexus, strapi }) => {
8
9
  const { nonNull } = nexus;
10
+ const runRateLimit = createRateLimitRunner(strapi, '/auth/reset-password');
9
11
 
10
12
  return {
11
13
  type: 'UsersPermissionsLoginPayload',
@@ -21,11 +23,9 @@ module.exports = ({ nexus, strapi }) => {
21
23
  async resolve(parent, args, context) {
22
24
  const { koaContext } = context;
23
25
 
24
- koaContext.request.body = toPlainObject(args);
25
-
26
- await strapi.plugin('users-permissions').controller('auth').resetPassword(koaContext);
27
-
28
- const output = koaContext.body;
26
+ const output = await runRateLimit(koaContext, { body: toPlainObject(args) }, (ctx) =>
27
+ strapi.plugin('users-permissions').controller('auth').resetPassword(ctx)
28
+ );
29
29
 
30
30
  checkBadRequest(output);
31
31
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const usersPermissionsRoleUID = 'plugin::users-permissions.role';
6
6
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../../utils');
6
6
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { toPlainObject } = require('lodash/fp');
3
+ const { toPlainObject } = require('lodash');
4
4
 
5
5
  const { checkBadRequest } = require('../../../utils');
6
6
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { getOr } = require('lodash/fp');
3
+ const { get } = require('lodash');
4
4
 
5
5
  /**
6
6
  * Throws an ApolloError if context body contains a bad request
@@ -8,10 +8,10 @@ const { getOr } = require('lodash/fp');
8
8
  * @throws ApolloError if the body is a bad request
9
9
  */
10
10
  function checkBadRequest(contextBody) {
11
- const statusCode = getOr(200, 'statusCode', contextBody);
11
+ const statusCode = get(contextBody, 'statusCode', 200);
12
12
 
13
13
  if (statusCode !== 200) {
14
- const errorMessage = getOr('Bad Request', 'error', contextBody);
14
+ const errorMessage = get(contextBody, 'error', 'Bad Request');
15
15
 
16
16
  const exception = new Error(errorMessage);
17
17
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  const path = require('path');
4
4
  const utils = require('@strapi/utils');
5
- const { isString, has, toLower } = require('lodash/fp');
5
+ const { toLower, isString, has } = require('lodash');
6
6
 
7
7
  const { RateLimitError } = utils.errors;
8
8
 
@@ -46,8 +46,8 @@ const routeUsesEmailIdentifier = (requestPath) => {
46
46
  * `/api/auth/local/` share one bucket.
47
47
  */
48
48
  const normalizeRequestPathForRateLimit = (requestPath) => {
49
- const normalized = path.normalize(requestPath);
50
- const lower = toLower(normalized);
49
+ const normalized = path.posix.normalize(requestPath);
50
+ const lower = normalized.toLowerCase();
51
51
  return lower.replace(/\/+$/, '') || '/';
52
52
  };
53
53
 
@@ -102,7 +102,7 @@ module.exports =
102
102
  };
103
103
  }
104
104
 
105
- if (!has('enabled', rateLimitConfig)) {
105
+ if (!has(rateLimitConfig, 'enabled')) {
106
106
  rateLimitConfig.enabled = true;
107
107
  }
108
108