@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
@@ -0,0 +1,123 @@
1
+ 'use strict';
2
+
3
+ const crypto = require('node:crypto');
4
+
5
+ const formatScope = (scope, delimiter = ',') => {
6
+ if (Array.isArray(scope)) {
7
+ return scope.filter(Boolean).join(delimiter) || undefined;
8
+ }
9
+ return scope || undefined;
10
+ };
11
+
12
+ const substituteSubdomain = (url, subdomain) =>
13
+ subdomain ? url.replace('[subdomain]', subdomain) : url;
14
+
15
+ const buildAuthorizeUrl = (provider, { key, redirectUri, scope, subdomain }) => {
16
+ const authorizeUrl = substituteSubdomain(provider.authorize_url, subdomain);
17
+ const params = new URLSearchParams({
18
+ client_id: key,
19
+ response_type: 'code',
20
+ redirect_uri: redirectUri,
21
+ });
22
+
23
+ const formattedScope = formatScope(scope, provider.scope_delimiter);
24
+ if (formattedScope) {
25
+ params.set('scope', formattedScope);
26
+ }
27
+
28
+ if (provider.name === 'instagram' && /^\d+$/.test(key)) {
29
+ params.delete('client_id');
30
+ params.set('app_id', key);
31
+ if (formattedScope) {
32
+ params.set('scope', formattedScope.replaceAll(' ', ','));
33
+ }
34
+ }
35
+
36
+ return `${authorizeUrl}?${params.toString()}`;
37
+ };
38
+
39
+ const parseTokenResponse = async (response) => {
40
+ const contentType = response.headers.get('content-type') || '';
41
+ if (contentType.includes('application/json')) {
42
+ return response.json();
43
+ }
44
+ const text = await response.text();
45
+ return Object.fromEntries(new URLSearchParams(text));
46
+ };
47
+
48
+ const exchangeAuthorizationCode = async (
49
+ provider,
50
+ { key, secret, redirectUri, code, subdomain }
51
+ ) => {
52
+ const accessUrl = substituteSubdomain(provider.access_url, subdomain);
53
+ const body = new URLSearchParams({
54
+ grant_type: 'authorization_code',
55
+ code,
56
+ redirect_uri: redirectUri,
57
+ client_id: key,
58
+ client_secret: secret,
59
+ });
60
+
61
+ const headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
62
+
63
+ if (provider.token_endpoint_auth_method === 'client_secret_basic') {
64
+ const credentials = Buffer.from(`${key}:${secret}`).toString('base64');
65
+ headers.Authorization = `Basic ${credentials}`;
66
+ body.delete('client_id');
67
+ body.delete('client_secret');
68
+ }
69
+
70
+ if (provider.name === 'instagram' && /^\d+$/.test(key)) {
71
+ body.delete('client_id');
72
+ body.delete('client_secret');
73
+ body.set('app_id', key);
74
+ body.set('app_secret', secret);
75
+ }
76
+
77
+ const response = await fetch(accessUrl, { method: 'POST', headers, body });
78
+ const output = await parseTokenResponse(response);
79
+
80
+ if (!response.ok) {
81
+ throw new Error(
82
+ output.error_description || output.error || `Token exchange failed (${response.status})`
83
+ );
84
+ }
85
+
86
+ return output;
87
+ };
88
+
89
+ const tokensToQueryPayload = (provider, tokenResponse) => {
90
+ const data = { raw: tokenResponse };
91
+
92
+ if (provider.oauth === 1) {
93
+ if (tokenResponse.oauth_token) {
94
+ data.access_token = tokenResponse.oauth_token;
95
+ }
96
+ if (tokenResponse.oauth_token_secret) {
97
+ data.access_secret = tokenResponse.oauth_token_secret;
98
+ }
99
+ return data;
100
+ }
101
+
102
+ if (tokenResponse.id_token) {
103
+ data.id_token = tokenResponse.id_token;
104
+ }
105
+ if (tokenResponse.access_token) {
106
+ data.access_token = tokenResponse.access_token;
107
+ }
108
+ if (tokenResponse.refresh_token) {
109
+ data.refresh_token = tokenResponse.refresh_token;
110
+ }
111
+
112
+ return data;
113
+ };
114
+
115
+ const generateState = () => crypto.randomBytes(20).toString('hex');
116
+
117
+ module.exports = {
118
+ buildAuthorizeUrl,
119
+ exchangeAuthorizationCode,
120
+ tokensToQueryPayload,
121
+ generateState,
122
+ substituteSubdomain,
123
+ };
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * OAuth endpoint definitions for built-in users-permissions providers.
5
+ * Derived from grant's oauth.json (MIT) — inlined to drop the grant dependency.
6
+ */
7
+ module.exports = {
8
+ discord: {
9
+ oauth: 2,
10
+ authorize_url: 'https://discord.com/api/oauth2/authorize',
11
+ access_url: 'https://discord.com/api/oauth2/token',
12
+ scope_delimiter: ' ',
13
+ },
14
+ facebook: {
15
+ oauth: 2,
16
+ authorize_url: 'https://www.facebook.com/dialog/oauth',
17
+ access_url: 'https://graph.facebook.com/oauth/access_token',
18
+ },
19
+ google: {
20
+ oauth: 2,
21
+ authorize_url: 'https://accounts.google.com/o/oauth2/v2/auth',
22
+ access_url: 'https://oauth2.googleapis.com/token',
23
+ scope_delimiter: ' ',
24
+ },
25
+ github: {
26
+ oauth: 2,
27
+ authorize_url: 'https://github.com/login/oauth/authorize',
28
+ access_url: 'https://github.com/login/oauth/access_token',
29
+ },
30
+ microsoft: {
31
+ oauth: 2,
32
+ authorize_url: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
33
+ access_url: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
34
+ scope_delimiter: ' ',
35
+ },
36
+ twitter: {
37
+ oauth: 1,
38
+ request_url: 'https://api.twitter.com/oauth/request_token',
39
+ authorize_url: 'https://api.twitter.com/oauth/authenticate',
40
+ access_url: 'https://api.twitter.com/oauth/access_token',
41
+ },
42
+ instagram: {
43
+ oauth: 2,
44
+ authorize_url: 'https://api.instagram.com/oauth/authorize',
45
+ access_url: 'https://api.instagram.com/oauth/access_token',
46
+ scope_delimiter: ' ',
47
+ },
48
+ vk: {
49
+ oauth: 2,
50
+ authorize_url: 'https://oauth.vk.com/authorize',
51
+ access_url: 'https://oauth.vk.com/access_token',
52
+ },
53
+ twitch: {
54
+ oauth: 2,
55
+ authorize_url: 'https://id.twitch.tv/oauth2/authorize',
56
+ access_url: 'https://id.twitch.tv/oauth2/token',
57
+ scope_delimiter: ' ',
58
+ },
59
+ linkedin: {
60
+ oauth: 2,
61
+ authorize_url: 'https://www.linkedin.com/oauth/v2/authorization',
62
+ access_url: 'https://www.linkedin.com/oauth/v2/accessToken',
63
+ scope_delimiter: ' ',
64
+ },
65
+ cognito: {
66
+ oauth: 2,
67
+ authorize_url: 'https://[subdomain]/oauth2/authorize',
68
+ access_url: 'https://[subdomain]/oauth2/token',
69
+ scope_delimiter: ' ',
70
+ },
71
+ reddit: {
72
+ oauth: 2,
73
+ authorize_url: 'https://ssl.reddit.com/api/v1/authorize',
74
+ access_url: 'https://ssl.reddit.com/api/v1/access_token',
75
+ token_endpoint_auth_method: 'client_secret_basic',
76
+ },
77
+ auth0: {
78
+ oauth: 2,
79
+ authorize_url: 'https://[subdomain].auth0.com/authorize',
80
+ access_url: 'https://[subdomain].auth0.com/oauth/token',
81
+ scope_delimiter: ' ',
82
+ },
83
+ cas: {
84
+ oauth: 2,
85
+ authorize_url: 'https://[subdomain]/oidc/authorize',
86
+ access_url: 'https://[subdomain]/oidc/token',
87
+ },
88
+ patreon: {
89
+ oauth: 2,
90
+ authorize_url: 'https://www.patreon.com/oauth2/authorize',
91
+ access_url: 'https://www.patreon.com/api/oauth2/token',
92
+ scope_delimiter: ' ',
93
+ },
94
+ keycloak: {
95
+ oauth: 2,
96
+ authorize_url: 'https://[subdomain]/protocol/openid-connect/auth',
97
+ access_url: 'https://[subdomain]/protocol/openid-connect/token',
98
+ scope_delimiter: ' ',
99
+ },
100
+ };
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ const fetchJson = async (url, options = {}) => {
4
+ const response = await fetch(url, options);
5
+ const contentType = response.headers.get('content-type') || '';
6
+
7
+ let body;
8
+ if (contentType.includes('application/json')) {
9
+ body = await response.json();
10
+ } else {
11
+ const text = await response.text();
12
+ try {
13
+ body = JSON.parse(text);
14
+ } catch {
15
+ body = text;
16
+ }
17
+ }
18
+
19
+ if (!response.ok) {
20
+ const message =
21
+ typeof body === 'object' && body !== null
22
+ ? body.error_description || body.error || body.message
23
+ : body;
24
+ throw new Error(message || `HTTP ${response.status}`);
25
+ }
26
+
27
+ return { body };
28
+ };
29
+
30
+ const bearerGet = (url, accessToken, { headers = {}, qs = {} } = {}) => {
31
+ const target = new URL(url);
32
+ Object.entries(qs).forEach(([key, value]) => {
33
+ if (value !== undefined && value !== null) {
34
+ target.searchParams.set(key, String(value));
35
+ }
36
+ });
37
+
38
+ return fetchJson(target, {
39
+ headers: {
40
+ Authorization: `Bearer ${accessToken}`,
41
+ ...headers,
42
+ },
43
+ });
44
+ };
45
+
46
+ module.exports = {
47
+ fetchJson,
48
+ bearerGet,
49
+ };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { curry } = require('lodash/fp');
3
+ const { curry } = require('lodash');
4
4
  const { traverseEntity, async } = require('@strapi/utils');
5
5
 
6
6
  const { removeUserRelationFromRoleEntities } = require('./visitors');
@@ -0,0 +1,70 @@
1
+ 'use strict';
2
+
3
+ const compact = (value) => {
4
+ if (value === null || value === undefined) {
5
+ return undefined;
6
+ }
7
+
8
+ if (typeof value !== 'object' || Array.isArray(value)) {
9
+ return value;
10
+ }
11
+
12
+ return Object.fromEntries(
13
+ Object.entries(value)
14
+ .map(([key, entry]) => [key, compact(entry)])
15
+ .filter(([, entry]) => entry !== undefined)
16
+ );
17
+ };
18
+
19
+ /**
20
+ * Compact grant's OAuth token response before it is written to the signed
21
+ * koa-session cookie. The full token exchange payload (especially Cognito's
22
+ * dual JWTs plus a duplicated raw blob) can exceed the browser's ~4 KB
23
+ * per-cookie limit and silently break the auth callback.
24
+ *
25
+ * Keep only fields that auth.callback / providers-registry actually read.
26
+ */
27
+ const trimGrantSessionResponse = (grantResponse, provider) => {
28
+ if (!grantResponse || typeof grantResponse !== 'object') {
29
+ return grantResponse;
30
+ }
31
+
32
+ switch (provider) {
33
+ case 'cognito':
34
+ return compact({
35
+ id_token: grantResponse.id_token,
36
+ });
37
+
38
+ case 'twitter':
39
+ return compact({
40
+ access_token: grantResponse.access_token,
41
+ access_secret: grantResponse.access_secret,
42
+ raw: grantResponse.raw?.screen_name
43
+ ? { screen_name: grantResponse.raw.screen_name }
44
+ : undefined,
45
+ });
46
+
47
+ case 'vk':
48
+ return compact({
49
+ access_token: grantResponse.access_token,
50
+ raw:
51
+ grantResponse.raw?.email != null && grantResponse.raw?.user_id != null
52
+ ? {
53
+ email: grantResponse.raw.email,
54
+ user_id: grantResponse.raw.user_id,
55
+ }
56
+ : undefined,
57
+ });
58
+
59
+ default:
60
+ return compact({
61
+ access_token: grantResponse.access_token,
62
+ oauth_token: grantResponse.oauth_token,
63
+ id_token: grantResponse.id_token,
64
+ });
65
+ }
66
+ };
67
+
68
+ module.exports = {
69
+ trimGrantSessionResponse,
70
+ };
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ const crypto = require('node:crypto');
4
+ const jwt = require('jsonwebtoken');
5
+
6
+ const jwkToKeyObject = (jwk) => crypto.createPublicKey({ key: jwk, format: 'jwk' });
7
+
8
+ const verifyJwtWithJwks = async ({ idToken, jwksUrl }) => {
9
+ const decoded = jwt.decode(idToken, { complete: true });
10
+
11
+ if (!decoded?.header?.kid || !decoded.payload) {
12
+ throw new Error('The provided token is not valid');
13
+ }
14
+
15
+ const response = await fetch(jwksUrl.toString());
16
+ if (!response.ok) {
17
+ throw new Error('There was an error verifying the token');
18
+ }
19
+
20
+ const jwk = await response.json();
21
+ const key = jwk.keys?.find(({ kid }) => kid === decoded.header.kid);
22
+
23
+ if (!key) {
24
+ throw new Error('There was an error verifying the token');
25
+ }
26
+
27
+ const publicKey = jwkToKeyObject(key);
28
+
29
+ return new Promise((resolve, reject) => {
30
+ jwt.verify(idToken, publicKey, { algorithms: ['RS256'] }, (err, tokenPayload) => {
31
+ if (err) {
32
+ reject(new Error('There was an error verifying the token'));
33
+ return;
34
+ }
35
+ resolve(tokenPayload);
36
+ });
37
+ });
38
+ };
39
+
40
+ module.exports = {
41
+ jwkToKeyObject,
42
+ verifyJwtWithJwks,
43
+ };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Declarations of the `strapi-server` entry of `@strapi/plugin-users-permissions`, a JavaScript
3
+ * package. They register its config contract for applications with `typescript.strictTypes`, until
4
+ * the plugin moves to TypeScript and emits its own declarations.
5
+ */
6
+
7
+ /** The `jwtManagement` modes of the Content API authentication. */
8
+ export type JwtManagement = 'legacy-support' | 'refresh';
9
+
10
+ /**
11
+ * `strapi.config.get('plugin::users-permissions')`: the plugin config merged with its defaults
12
+ * (`server/src/config.js`).
13
+ */
14
+ export type UsersPermissionsConfig = {
15
+ /** `JWT_SECRET`, unset when the environment does not define it. */
16
+ jwtSecret?: string;
17
+ /** Options of the plugin JWTs (`legacy-support` mode), e.g. `expiresIn`. */
18
+ jwt: { expiresIn?: string | number; [option: string]: unknown };
19
+ jwtManagement: JwtManagement;
20
+ /** Session manager lifespans, in seconds, and the refresh cookie (`refresh` mode). */
21
+ sessions: {
22
+ accessTokenLifespan: number;
23
+ maxRefreshTokenLifespan: number;
24
+ idleRefreshTokenLifespan: number;
25
+ maxSessionLifespan: number;
26
+ idleSessionLifespan: number;
27
+ httpOnly: boolean;
28
+ cookie?: {
29
+ name?: string;
30
+ secure?: boolean;
31
+ sameSite?: 'lax' | 'strict' | 'none' | boolean;
32
+ path?: string;
33
+ domain?: string;
34
+ maxAge?: number;
35
+ };
36
+ };
37
+ /** Options of the authentication routes' rate limit. */
38
+ ratelimit: { interval: number; max: number; [option: string]: unknown };
39
+ layout: { user: { actions: { create: string; update: string } } };
40
+ callback: {
41
+ /** Throws when a provider callback URL is not allowed. */
42
+ validate(callback: string, provider: { callback: string }): void;
43
+ };
44
+ /** Extra user fields the register route accepts. */
45
+ register?: { allowedFields?: string[] };
46
+ /** Password validation rules of the register and password routes. */
47
+ validationRules?: Record<string, unknown>;
48
+ };
49
+
50
+ declare global {
51
+ // eslint-disable-next-line @typescript-eslint/no-namespace
52
+ namespace Strapi {
53
+ // eslint-disable-next-line @typescript-eslint/no-namespace
54
+ namespace Registries {
55
+ interface PackageConfigs {
56
+ 'plugin::users-permissions': UsersPermissionsConfig;
57
+ }
58
+ }
59
+ }
60
+ }
61
+
62
+ /** The plugin's server entry. Untyped, as the JavaScript entry was without these declarations. */
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ declare const usersPermissions: any;
65
+ export default usersPermissions;