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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/.eslintrc.cjs +2 -0
  2. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +3 -1
  3. package/admin/src/pages/Roles/pages/EditPage.jsx +1 -1
  4. package/admin/src/pages/Roles/pages/ListPage/index.jsx +1 -1
  5. package/admin/src/translations/en.json +1 -0
  6. package/admin/src/translations/es.json +1 -1
  7. package/admin/src/translations/ko.json +2 -1
  8. package/admin/src/translations/sv.json +1 -1
  9. package/admin/src/translations/uk.json +1 -1
  10. package/dist/admin/pages/EmailTemplates/components/EmailForm.js +2 -1
  11. package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
  12. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +2 -1
  13. package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -1
  14. package/dist/admin/pages/Roles/pages/EditPage.js +1 -1
  15. package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
  16. package/dist/admin/pages/Roles/pages/EditPage.mjs +1 -1
  17. package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
  18. package/dist/admin/pages/Roles/pages/ListPage/index.js +1 -1
  19. package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
  20. package/dist/admin/pages/Roles/pages/ListPage/index.mjs +1 -1
  21. package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
  22. package/dist/admin/translations/en.json.js +1 -0
  23. package/dist/admin/translations/en.json.js.map +1 -1
  24. package/dist/admin/translations/en.json.mjs +1 -0
  25. package/dist/admin/translations/en.json.mjs.map +1 -1
  26. package/dist/admin/translations/es.json.js +1 -1
  27. package/dist/admin/translations/es.json.mjs +1 -1
  28. package/dist/admin/translations/ko.json.js +2 -1
  29. package/dist/admin/translations/ko.json.js.map +1 -1
  30. package/dist/admin/translations/ko.json.mjs +2 -1
  31. package/dist/admin/translations/ko.json.mjs.map +1 -1
  32. package/dist/admin/translations/sv.json.js +1 -1
  33. package/dist/admin/translations/sv.json.mjs +1 -1
  34. package/dist/admin/translations/uk.json.js +1 -1
  35. package/dist/admin/translations/uk.json.mjs +1 -1
  36. package/dist/server/_virtual/_node_crypto.js +10 -0
  37. package/dist/server/_virtual/_node_crypto.js.map +1 -0
  38. package/dist/server/_virtual/_node_crypto.mjs +7 -0
  39. package/dist/server/_virtual/_node_crypto.mjs.map +1 -0
  40. package/dist/server/_virtual/_node_url.js +10 -0
  41. package/dist/server/_virtual/_node_url.js.map +1 -0
  42. package/dist/server/_virtual/_node_url.mjs +7 -0
  43. package/dist/server/_virtual/_node_url.mjs.map +1 -0
  44. package/dist/server/bootstrap/index.js.map +1 -1
  45. package/dist/server/bootstrap/index.mjs.map +1 -1
  46. package/dist/server/bootstrap/users-permissions-actions.js.map +1 -1
  47. package/dist/server/bootstrap/users-permissions-actions.mjs.map +1 -1
  48. package/dist/server/config.js.map +1 -1
  49. package/dist/server/config.mjs.map +1 -1
  50. package/dist/server/content-types/index.js.map +1 -1
  51. package/dist/server/content-types/index.mjs.map +1 -1
  52. package/dist/server/content-types/permission/index.js.map +1 -1
  53. package/dist/server/content-types/permission/index.mjs.map +1 -1
  54. package/dist/server/content-types/role/index.js.map +1 -1
  55. package/dist/server/content-types/role/index.mjs.map +1 -1
  56. package/dist/server/content-types/user/index.js.map +1 -1
  57. package/dist/server/content-types/user/index.mjs.map +1 -1
  58. package/dist/server/content-types/user/schema-config.js.map +1 -1
  59. package/dist/server/content-types/user/schema-config.mjs.map +1 -1
  60. package/dist/server/controllers/auth.js +38 -30
  61. package/dist/server/controllers/auth.js.map +1 -1
  62. package/dist/server/controllers/auth.mjs +38 -28
  63. package/dist/server/controllers/auth.mjs.map +1 -1
  64. package/dist/server/controllers/content-manager-user.js.map +1 -1
  65. package/dist/server/controllers/content-manager-user.mjs.map +1 -1
  66. package/dist/server/controllers/index.js.map +1 -1
  67. package/dist/server/controllers/index.mjs.map +1 -1
  68. package/dist/server/controllers/permissions.js.map +1 -1
  69. package/dist/server/controllers/permissions.mjs.map +1 -1
  70. package/dist/server/controllers/role.js.map +1 -1
  71. package/dist/server/controllers/role.mjs.map +1 -1
  72. package/dist/server/controllers/settings.js.map +1 -1
  73. package/dist/server/controllers/settings.mjs.map +1 -1
  74. package/dist/server/controllers/user.js.map +1 -1
  75. package/dist/server/controllers/user.mjs.map +1 -1
  76. package/dist/server/controllers/validation/auth.js +6 -6
  77. package/dist/server/controllers/validation/auth.js.map +1 -1
  78. package/dist/server/controllers/validation/auth.mjs +6 -6
  79. package/dist/server/controllers/validation/auth.mjs.map +1 -1
  80. package/dist/server/controllers/validation/email-template.js +1 -4
  81. package/dist/server/controllers/validation/email-template.js.map +1 -1
  82. package/dist/server/controllers/validation/email-template.mjs +1 -3
  83. package/dist/server/controllers/validation/email-template.mjs.map +1 -1
  84. package/dist/server/controllers/validation/user.js.map +1 -1
  85. package/dist/server/controllers/validation/user.mjs.map +1 -1
  86. package/dist/server/graphql/index.js.map +1 -1
  87. package/dist/server/graphql/index.mjs.map +1 -1
  88. package/dist/server/graphql/mutations/auth/change-password.js +7 -4
  89. package/dist/server/graphql/mutations/auth/change-password.js.map +1 -1
  90. package/dist/server/graphql/mutations/auth/change-password.mjs +7 -4
  91. package/dist/server/graphql/mutations/auth/change-password.mjs.map +1 -1
  92. package/dist/server/graphql/mutations/auth/email-confirmation.js +1 -1
  93. package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -1
  94. package/dist/server/graphql/mutations/auth/email-confirmation.mjs +1 -1
  95. package/dist/server/graphql/mutations/auth/email-confirmation.mjs.map +1 -1
  96. package/dist/server/graphql/mutations/auth/forgot-password.js +7 -4
  97. package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -1
  98. package/dist/server/graphql/mutations/auth/forgot-password.mjs +7 -4
  99. package/dist/server/graphql/mutations/auth/forgot-password.mjs.map +1 -1
  100. package/dist/server/graphql/mutations/auth/login.js +10 -7
  101. package/dist/server/graphql/mutations/auth/login.js.map +1 -1
  102. package/dist/server/graphql/mutations/auth/login.mjs +10 -7
  103. package/dist/server/graphql/mutations/auth/login.mjs.map +1 -1
  104. package/dist/server/graphql/mutations/auth/rate-limit.js +63 -0
  105. package/dist/server/graphql/mutations/auth/rate-limit.js.map +1 -0
  106. package/dist/server/graphql/mutations/auth/rate-limit.mjs +61 -0
  107. package/dist/server/graphql/mutations/auth/rate-limit.mjs.map +1 -0
  108. package/dist/server/graphql/mutations/auth/register.js +7 -4
  109. package/dist/server/graphql/mutations/auth/register.js.map +1 -1
  110. package/dist/server/graphql/mutations/auth/register.mjs +7 -4
  111. package/dist/server/graphql/mutations/auth/register.mjs.map +1 -1
  112. package/dist/server/graphql/mutations/auth/reset-password.js +7 -4
  113. package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -1
  114. package/dist/server/graphql/mutations/auth/reset-password.mjs +7 -4
  115. package/dist/server/graphql/mutations/auth/reset-password.mjs.map +1 -1
  116. package/dist/server/graphql/mutations/crud/role/create-role.js +1 -1
  117. package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -1
  118. package/dist/server/graphql/mutations/crud/role/create-role.mjs +1 -1
  119. package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -1
  120. package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -1
  121. package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -1
  122. package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -1
  123. package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -1
  124. package/dist/server/graphql/mutations/crud/user/create-user.js +1 -1
  125. package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -1
  126. package/dist/server/graphql/mutations/crud/user/create-user.mjs +1 -1
  127. package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -1
  128. package/dist/server/graphql/mutations/crud/user/delete-user.js.map +1 -1
  129. package/dist/server/graphql/mutations/crud/user/delete-user.mjs.map +1 -1
  130. package/dist/server/graphql/mutations/crud/user/update-user.js +1 -1
  131. package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -1
  132. package/dist/server/graphql/mutations/crud/user/update-user.mjs +1 -1
  133. package/dist/server/graphql/mutations/crud/user/update-user.mjs.map +1 -1
  134. package/dist/server/graphql/mutations/index.js.map +1 -1
  135. package/dist/server/graphql/mutations/index.mjs.map +1 -1
  136. package/dist/server/graphql/queries/index.js.map +1 -1
  137. package/dist/server/graphql/queries/index.mjs.map +1 -1
  138. package/dist/server/graphql/queries/me.js.map +1 -1
  139. package/dist/server/graphql/queries/me.mjs.map +1 -1
  140. package/dist/server/graphql/resolvers-configs.js.map +1 -1
  141. package/dist/server/graphql/resolvers-configs.mjs.map +1 -1
  142. package/dist/server/graphql/types/create-role-payload.js.map +1 -1
  143. package/dist/server/graphql/types/create-role-payload.mjs.map +1 -1
  144. package/dist/server/graphql/types/delete-role-payload.js.map +1 -1
  145. package/dist/server/graphql/types/delete-role-payload.mjs.map +1 -1
  146. package/dist/server/graphql/types/index.js.map +1 -1
  147. package/dist/server/graphql/types/index.mjs.map +1 -1
  148. package/dist/server/graphql/types/login-input.js.map +1 -1
  149. package/dist/server/graphql/types/login-input.mjs.map +1 -1
  150. package/dist/server/graphql/types/login-payload.js.map +1 -1
  151. package/dist/server/graphql/types/login-payload.mjs.map +1 -1
  152. package/dist/server/graphql/types/me-role.js.map +1 -1
  153. package/dist/server/graphql/types/me-role.mjs.map +1 -1
  154. package/dist/server/graphql/types/me.js.map +1 -1
  155. package/dist/server/graphql/types/me.mjs.map +1 -1
  156. package/dist/server/graphql/types/password-payload.js.map +1 -1
  157. package/dist/server/graphql/types/password-payload.mjs.map +1 -1
  158. package/dist/server/graphql/types/register-input.js.map +1 -1
  159. package/dist/server/graphql/types/register-input.mjs.map +1 -1
  160. package/dist/server/graphql/types/update-role-payload.js.map +1 -1
  161. package/dist/server/graphql/types/update-role-payload.mjs.map +1 -1
  162. package/dist/server/graphql/types/user-input.js.map +1 -1
  163. package/dist/server/graphql/types/user-input.mjs.map +1 -1
  164. package/dist/server/graphql/utils.js +4 -4
  165. package/dist/server/graphql/utils.js.map +1 -1
  166. package/dist/server/graphql/utils.mjs +4 -4
  167. package/dist/server/graphql/utils.mjs.map +1 -1
  168. package/dist/server/index.js +2 -2
  169. package/dist/server/index.js.map +1 -1
  170. package/dist/server/index.mjs +3 -3
  171. package/dist/server/index.mjs.map +1 -1
  172. package/dist/server/index2.js +8 -8
  173. package/dist/server/index2.js.map +1 -1
  174. package/dist/server/index2.mjs +8 -8
  175. package/dist/server/index2.mjs.map +1 -1
  176. package/dist/server/middlewares/index.js.map +1 -1
  177. package/dist/server/middlewares/index.mjs.map +1 -1
  178. package/dist/server/middlewares/rateLimit.js +5 -5
  179. package/dist/server/middlewares/rateLimit.js.map +1 -1
  180. package/dist/server/middlewares/rateLimit.mjs +5 -5
  181. package/dist/server/middlewares/rateLimit.mjs.map +1 -1
  182. package/dist/server/register.js.map +1 -1
  183. package/dist/server/register.mjs.map +1 -1
  184. package/dist/server/routes/admin/index.js.map +1 -1
  185. package/dist/server/routes/admin/index.mjs.map +1 -1
  186. package/dist/server/routes/admin/permissions.js.map +1 -1
  187. package/dist/server/routes/admin/permissions.mjs.map +1 -1
  188. package/dist/server/routes/admin/role.js.map +1 -1
  189. package/dist/server/routes/admin/role.mjs.map +1 -1
  190. package/dist/server/routes/admin/settings.js.map +1 -1
  191. package/dist/server/routes/admin/settings.mjs.map +1 -1
  192. package/dist/server/routes/content-api/auth.js.map +1 -1
  193. package/dist/server/routes/content-api/auth.mjs.map +1 -1
  194. package/dist/server/routes/content-api/index.js.map +1 -1
  195. package/dist/server/routes/content-api/index.mjs.map +1 -1
  196. package/dist/server/routes/content-api/permissions.js.map +1 -1
  197. package/dist/server/routes/content-api/permissions.mjs.map +1 -1
  198. package/dist/server/routes/content-api/role.js.map +1 -1
  199. package/dist/server/routes/content-api/role.mjs.map +1 -1
  200. package/dist/server/routes/content-api/user.js.map +1 -1
  201. package/dist/server/routes/content-api/user.mjs.map +1 -1
  202. package/dist/server/routes/content-api/validation.js.map +1 -1
  203. package/dist/server/routes/content-api/validation.mjs.map +1 -1
  204. package/dist/server/routes/index.js.map +1 -1
  205. package/dist/server/routes/index.mjs.map +1 -1
  206. package/dist/server/services/constants.js.map +1 -1
  207. package/dist/server/services/constants.mjs.map +1 -1
  208. package/dist/server/services/index.js.map +1 -1
  209. package/dist/server/services/index.mjs.map +1 -1
  210. package/dist/server/services/jwt.js.map +1 -1
  211. package/dist/server/services/jwt.mjs.map +1 -1
  212. package/dist/server/services/permission.js.map +1 -1
  213. package/dist/server/services/permission.mjs.map +1 -1
  214. package/dist/server/services/providers-registry.js +188 -248
  215. package/dist/server/services/providers-registry.js.map +1 -1
  216. package/dist/server/services/providers-registry.mjs +188 -245
  217. package/dist/server/services/providers-registry.mjs.map +1 -1
  218. package/dist/server/services/providers.js +15 -11
  219. package/dist/server/services/providers.js.map +1 -1
  220. package/dist/server/services/providers.mjs +14 -10
  221. package/dist/server/services/providers.mjs.map +1 -1
  222. package/dist/server/services/role.js +2 -2
  223. package/dist/server/services/role.js.map +1 -1
  224. package/dist/server/services/role.mjs +2 -2
  225. package/dist/server/services/role.mjs.map +1 -1
  226. package/dist/server/services/user.js +14 -14
  227. package/dist/server/services/user.js.map +1 -1
  228. package/dist/server/services/user.mjs +13 -13
  229. package/dist/server/services/user.mjs.map +1 -1
  230. package/dist/server/services/users-permissions.js +17 -20
  231. package/dist/server/services/users-permissions.js.map +1 -1
  232. package/dist/server/services/users-permissions.mjs +16 -18
  233. package/dist/server/services/users-permissions.mjs.map +1 -1
  234. package/dist/server/strategies/users-permissions.js +9 -8
  235. package/dist/server/strategies/users-permissions.js.map +1 -1
  236. package/dist/server/strategies/users-permissions.mjs +9 -8
  237. package/dist/server/strategies/users-permissions.mjs.map +1 -1
  238. package/dist/server/utils/index.js.map +1 -1
  239. package/dist/server/utils/index.mjs.map +1 -1
  240. package/dist/server/utils/oauth-connect/index.js +241 -0
  241. package/dist/server/utils/oauth-connect/index.js.map +1 -0
  242. package/dist/server/utils/oauth-connect/index.mjs +235 -0
  243. package/dist/server/utils/oauth-connect/index.mjs.map +1 -0
  244. package/dist/server/utils/oauth-connect/oauth1.js +138 -0
  245. package/dist/server/utils/oauth-connect/oauth1.js.map +1 -0
  246. package/dist/server/utils/oauth-connect/oauth1.mjs +136 -0
  247. package/dist/server/utils/oauth-connect/oauth1.mjs.map +1 -0
  248. package/dist/server/utils/oauth-connect/oauth2.js +117 -0
  249. package/dist/server/utils/oauth-connect/oauth2.js.map +1 -0
  250. package/dist/server/utils/oauth-connect/oauth2.mjs +115 -0
  251. package/dist/server/utils/oauth-connect/oauth2.mjs.map +1 -0
  252. package/dist/server/utils/oauth-connect/providers.js +109 -0
  253. package/dist/server/utils/oauth-connect/providers.js.map +1 -0
  254. package/dist/server/utils/oauth-connect/providers.mjs +107 -0
  255. package/dist/server/utils/oauth-connect/providers.mjs.map +1 -0
  256. package/dist/server/utils/provider-http.js +52 -0
  257. package/dist/server/utils/provider-http.js.map +1 -0
  258. package/dist/server/utils/provider-http.mjs +50 -0
  259. package/dist/server/utils/provider-http.mjs.map +1 -0
  260. package/dist/server/utils/refresh-cookie-options.js.map +1 -1
  261. package/dist/server/utils/refresh-cookie-options.mjs.map +1 -1
  262. package/dist/server/utils/sanitize/index.js.map +1 -1
  263. package/dist/server/utils/sanitize/index.mjs.map +1 -1
  264. package/dist/server/utils/sanitize/sanitizers.js +1 -1
  265. package/dist/server/utils/sanitize/sanitizers.js.map +1 -1
  266. package/dist/server/utils/sanitize/sanitizers.mjs +1 -1
  267. package/dist/server/utils/sanitize/sanitizers.mjs.map +1 -1
  268. package/dist/server/utils/sanitize/visitors/index.js.map +1 -1
  269. package/dist/server/utils/sanitize/visitors/index.mjs.map +1 -1
  270. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js.map +1 -1
  271. package/dist/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.mjs.map +1 -1
  272. package/dist/server/utils/trim-grant-session-response.js +67 -0
  273. package/dist/server/utils/trim-grant-session-response.js.map +1 -0
  274. package/dist/server/utils/trim-grant-session-response.mjs +65 -0
  275. package/dist/server/utils/trim-grant-session-response.mjs.map +1 -0
  276. package/dist/server/utils/verify-jwt-with-jwks.js +60 -0
  277. package/dist/server/utils/verify-jwt-with-jwks.js.map +1 -0
  278. package/dist/server/utils/verify-jwt-with-jwks.mjs +54 -0
  279. package/dist/server/utils/verify-jwt-with-jwks.mjs.map +1 -0
  280. package/jsconfig.json +7 -0
  281. package/package.json +28 -18
  282. package/rollup.config.mjs +2 -2
  283. package/server/{controllers → src/controllers}/auth.js +36 -29
  284. package/server/{controllers → src/controllers}/validation/auth.js +6 -6
  285. package/server/{controllers → src/controllers}/validation/email-template.js +1 -2
  286. package/server/{graphql → src/graphql}/mutations/auth/change-password.js +6 -6
  287. package/server/{graphql → src/graphql}/mutations/auth/email-confirmation.js +1 -1
  288. package/server/{graphql → src/graphql}/mutations/auth/forgot-password.js +6 -6
  289. package/server/{graphql → src/graphql}/mutations/auth/login.js +11 -7
  290. package/server/src/graphql/mutations/auth/rate-limit.js +62 -0
  291. package/server/{graphql → src/graphql}/mutations/auth/register.js +6 -6
  292. package/server/{graphql → src/graphql}/mutations/auth/reset-password.js +6 -6
  293. package/server/{graphql → src/graphql}/mutations/crud/role/create-role.js +1 -1
  294. package/server/{graphql → src/graphql}/mutations/crud/user/create-user.js +1 -1
  295. package/server/{graphql → src/graphql}/mutations/crud/user/update-user.js +1 -1
  296. package/server/{graphql → src/graphql}/utils.js +3 -3
  297. package/server/{middlewares → src/middlewares}/rateLimit.js +4 -4
  298. package/server/src/services/providers-registry.js +487 -0
  299. package/server/{services → src/services}/providers.js +9 -7
  300. package/server/{services → src/services}/role.js +2 -2
  301. package/server/{services → src/services}/user.js +16 -6
  302. package/server/{services → src/services}/users-permissions.js +14 -16
  303. package/server/{strategies → src/strategies}/users-permissions.js +14 -10
  304. package/server/src/utils/oauth-connect/index.js +262 -0
  305. package/server/src/utils/oauth-connect/oauth1.js +169 -0
  306. package/server/src/utils/oauth-connect/oauth2.js +123 -0
  307. package/server/src/utils/oauth-connect/providers.js +100 -0
  308. package/server/src/utils/provider-http.js +49 -0
  309. package/server/{utils → src/utils}/sanitize/sanitizers.js +1 -1
  310. package/server/src/utils/trim-grant-session-response.js +70 -0
  311. package/server/src/utils/verify-jwt-with-jwks.js +43 -0
  312. package/types/strapi-server.d.ts +65 -0
  313. package/server/services/providers-registry.js +0 -567
  314. package/server/utils/index.d.ts +0 -23
  315. /package/server/{bootstrap → src/bootstrap}/index.js +0 -0
  316. /package/server/{bootstrap → src/bootstrap}/users-permissions-actions.js +0 -0
  317. /package/server/{config.js → src/config.js} +0 -0
  318. /package/server/{content-types → src/content-types}/index.js +0 -0
  319. /package/server/{content-types → src/content-types}/permission/index.js +0 -0
  320. /package/server/{content-types → src/content-types}/role/index.js +0 -0
  321. /package/server/{content-types → src/content-types}/user/index.js +0 -0
  322. /package/server/{content-types → src/content-types}/user/schema-config.js +0 -0
  323. /package/server/{controllers → src/controllers}/content-manager-user.js +0 -0
  324. /package/server/{controllers → src/controllers}/index.js +0 -0
  325. /package/server/{controllers → src/controllers}/permissions.js +0 -0
  326. /package/server/{controllers → src/controllers}/role.js +0 -0
  327. /package/server/{controllers → src/controllers}/settings.js +0 -0
  328. /package/server/{controllers → src/controllers}/user.js +0 -0
  329. /package/server/{controllers → src/controllers}/validation/user.js +0 -0
  330. /package/server/{graphql → src/graphql}/index.js +0 -0
  331. /package/server/{graphql → src/graphql}/mutations/crud/role/delete-role.js +0 -0
  332. /package/server/{graphql → src/graphql}/mutations/crud/role/update-role.js +0 -0
  333. /package/server/{graphql → src/graphql}/mutations/crud/user/delete-user.js +0 -0
  334. /package/server/{graphql → src/graphql}/mutations/index.js +0 -0
  335. /package/server/{graphql → src/graphql}/queries/index.js +0 -0
  336. /package/server/{graphql → src/graphql}/queries/me.js +0 -0
  337. /package/server/{graphql → src/graphql}/resolvers-configs.js +0 -0
  338. /package/server/{graphql → src/graphql}/types/create-role-payload.js +0 -0
  339. /package/server/{graphql → src/graphql}/types/delete-role-payload.js +0 -0
  340. /package/server/{graphql → src/graphql}/types/index.js +0 -0
  341. /package/server/{graphql → src/graphql}/types/login-input.js +0 -0
  342. /package/server/{graphql → src/graphql}/types/login-payload.js +0 -0
  343. /package/server/{graphql → src/graphql}/types/me-role.js +0 -0
  344. /package/server/{graphql → src/graphql}/types/me.js +0 -0
  345. /package/server/{graphql → src/graphql}/types/password-payload.js +0 -0
  346. /package/server/{graphql → src/graphql}/types/register-input.js +0 -0
  347. /package/server/{graphql → src/graphql}/types/update-role-payload.js +0 -0
  348. /package/server/{graphql → src/graphql}/types/user-input.js +0 -0
  349. /package/server/{index.js → src/index.js} +0 -0
  350. /package/server/{middlewares → src/middlewares}/index.js +0 -0
  351. /package/server/{register.js → src/register.js} +0 -0
  352. /package/server/{routes → src/routes}/admin/index.js +0 -0
  353. /package/server/{routes → src/routes}/admin/permissions.js +0 -0
  354. /package/server/{routes → src/routes}/admin/role.js +0 -0
  355. /package/server/{routes → src/routes}/admin/settings.js +0 -0
  356. /package/server/{routes → src/routes}/content-api/auth.js +0 -0
  357. /package/server/{routes → src/routes}/content-api/index.js +0 -0
  358. /package/server/{routes → src/routes}/content-api/permissions.js +0 -0
  359. /package/server/{routes → src/routes}/content-api/role.js +0 -0
  360. /package/server/{routes → src/routes}/content-api/user.js +0 -0
  361. /package/server/{routes → src/routes}/content-api/validation.js +0 -0
  362. /package/server/{routes → src/routes}/index.js +0 -0
  363. /package/server/{services → src/services}/constants.js +0 -0
  364. /package/server/{services → src/services}/index.js +0 -0
  365. /package/server/{services → src/services}/jwt.js +0 -0
  366. /package/server/{services → src/services}/permission.js +0 -0
  367. /package/server/{utils → src/utils}/index.js +0 -0
  368. /package/server/{utils → src/utils}/refresh-cookie-options.js +0 -0
  369. /package/server/{utils → src/utils}/sanitize/index.js +0 -0
  370. /package/server/{utils → src/utils}/sanitize/visitors/index.js +0 -0
  371. /package/server/{utils → src/utils}/sanitize/visitors/remove-user-relation-from-role-entities.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../server/content-types/user/index.js"],"sourcesContent":["'use strict';\n\nconst schemaConfig = require('./schema-config');\n\nmodule.exports = {\n collectionName: 'up_users',\n info: {\n name: 'user',\n description: '',\n singularName: 'user',\n pluralName: 'users',\n displayName: 'User',\n },\n options: {\n timestamps: true,\n },\n attributes: {\n username: {\n type: 'string',\n minLength: 3,\n unique: true,\n configurable: false,\n required: true,\n },\n email: {\n type: 'email',\n minLength: 6,\n configurable: false,\n required: true,\n },\n provider: {\n type: 'string',\n configurable: false,\n },\n password: {\n type: 'password',\n minLength: 6,\n configurable: false,\n private: true,\n searchable: false,\n },\n resetPasswordToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmationToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmed: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n blocked: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n role: {\n type: 'relation',\n relation: 'manyToOne',\n target: 'plugin::users-permissions.role',\n inversedBy: 'users',\n configurable: false,\n },\n },\n\n config: schemaConfig, // TODO: to move to content-manager options\n};\n"],"names":["schemaConfig","require$$0","user","collectionName","info","name","description","singularName","pluralName","displayName","options","timestamps","attributes","username","type","minLength","unique","configurable","required","email","provider","password","private","searchable","resetPasswordToken","confirmationToken","confirmed","default","blocked","role","relation","target","inversedBy","config"],"mappings":";;;;;;;;;AAEA,IAAA,MAAMA,cAAAA,GAAeC,sBAAAA,EAAAA;IAErBC,IAAAA,GAAiB;QACfC,cAAAA,EAAgB,UAAA;QAChBC,IAAAA,EAAM;YACJC,IAAAA,EAAM,MAAA;YACNC,WAAAA,EAAa,EAAA;YACbC,YAAAA,EAAc,MAAA;YACdC,UAAAA,EAAY,OAAA;YACZC,WAAAA,EAAa;AACjB,SAAA;QACEC,OAAAA,EAAS;YACPC,UAAAA,EAAY;AAChB,SAAA;QACEC,UAAAA,EAAY;YACVC,QAAAA,EAAU;gBACRC,IAAAA,EAAM,QAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXC,MAAAA,EAAQ,IAAA;gBACRC,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIC,KAAAA,EAAO;gBACLL,IAAAA,EAAM,OAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIE,QAAAA,EAAU;gBACRN,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc;AACpB,aAAA;YACII,QAAAA,EAAU;gBACRP,IAAAA,EAAM,UAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIC,kBAAAA,EAAoB;gBAClBV,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIE,iBAAAA,EAAmB;gBACjBX,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIG,SAAAA,EAAW;gBACTZ,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIW,OAAAA,EAAS;gBACPd,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIY,IAAAA,EAAM;gBACJf,IAAAA,EAAM,UAAA;gBACNgB,QAAAA,EAAU,WAAA;gBACVC,MAAAA,EAAQ,gCAAA;gBACRC,UAAAA,EAAY,OAAA;gBACZf,YAAAA,EAAc;AACpB;AACA,SAAA;QAEEgB,MAAAA,EAAQjC;AACV,KAAA;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../server/src/content-types/user/index.js"],"sourcesContent":["'use strict';\n\nconst schemaConfig = require('./schema-config');\n\nmodule.exports = {\n collectionName: 'up_users',\n info: {\n name: 'user',\n description: '',\n singularName: 'user',\n pluralName: 'users',\n displayName: 'User',\n },\n options: {\n timestamps: true,\n },\n attributes: {\n username: {\n type: 'string',\n minLength: 3,\n unique: true,\n configurable: false,\n required: true,\n },\n email: {\n type: 'email',\n minLength: 6,\n configurable: false,\n required: true,\n },\n provider: {\n type: 'string',\n configurable: false,\n },\n password: {\n type: 'password',\n minLength: 6,\n configurable: false,\n private: true,\n searchable: false,\n },\n resetPasswordToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmationToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmed: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n blocked: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n role: {\n type: 'relation',\n relation: 'manyToOne',\n target: 'plugin::users-permissions.role',\n inversedBy: 'users',\n configurable: false,\n },\n },\n\n config: schemaConfig, // TODO: to move to content-manager options\n};\n"],"names":["schemaConfig","require$$0","user","collectionName","info","name","description","singularName","pluralName","displayName","options","timestamps","attributes","username","type","minLength","unique","configurable","required","email","provider","password","private","searchable","resetPasswordToken","confirmationToken","confirmed","default","blocked","role","relation","target","inversedBy","config"],"mappings":";;;;;;;;;AAEA,IAAA,MAAMA,cAAAA,GAAeC,sBAAAA,EAAAA;IAErBC,IAAAA,GAAiB;QACfC,cAAAA,EAAgB,UAAA;QAChBC,IAAAA,EAAM;YACJC,IAAAA,EAAM,MAAA;YACNC,WAAAA,EAAa,EAAA;YACbC,YAAAA,EAAc,MAAA;YACdC,UAAAA,EAAY,OAAA;YACZC,WAAAA,EAAa;AACjB,SAAA;QACEC,OAAAA,EAAS;YACPC,UAAAA,EAAY;AAChB,SAAA;QACEC,UAAAA,EAAY;YACVC,QAAAA,EAAU;gBACRC,IAAAA,EAAM,QAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXC,MAAAA,EAAQ,IAAA;gBACRC,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIC,KAAAA,EAAO;gBACLL,IAAAA,EAAM,OAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIE,QAAAA,EAAU;gBACRN,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc;AACpB,aAAA;YACII,QAAAA,EAAU;gBACRP,IAAAA,EAAM,UAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIC,kBAAAA,EAAoB;gBAClBV,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIE,iBAAAA,EAAmB;gBACjBX,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIG,SAAAA,EAAW;gBACTZ,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIW,OAAAA,EAAS;gBACPd,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIY,IAAAA,EAAM;gBACJf,IAAAA,EAAM,UAAA;gBACNgB,QAAAA,EAAU,WAAA;gBACVC,MAAAA,EAAQ,gCAAA;gBACRC,UAAAA,EAAY,OAAA;gBACZf,YAAAA,EAAc;AACpB;AACA,SAAA;QAEEgB,MAAAA,EAAQjC;AACV,KAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../server/content-types/user/index.js"],"sourcesContent":["'use strict';\n\nconst schemaConfig = require('./schema-config');\n\nmodule.exports = {\n collectionName: 'up_users',\n info: {\n name: 'user',\n description: '',\n singularName: 'user',\n pluralName: 'users',\n displayName: 'User',\n },\n options: {\n timestamps: true,\n },\n attributes: {\n username: {\n type: 'string',\n minLength: 3,\n unique: true,\n configurable: false,\n required: true,\n },\n email: {\n type: 'email',\n minLength: 6,\n configurable: false,\n required: true,\n },\n provider: {\n type: 'string',\n configurable: false,\n },\n password: {\n type: 'password',\n minLength: 6,\n configurable: false,\n private: true,\n searchable: false,\n },\n resetPasswordToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmationToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmed: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n blocked: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n role: {\n type: 'relation',\n relation: 'manyToOne',\n target: 'plugin::users-permissions.role',\n inversedBy: 'users',\n configurable: false,\n },\n },\n\n config: schemaConfig, // TODO: to move to content-manager options\n};\n"],"names":["schemaConfig","require$$0","user","collectionName","info","name","description","singularName","pluralName","displayName","options","timestamps","attributes","username","type","minLength","unique","configurable","required","email","provider","password","private","searchable","resetPasswordToken","confirmationToken","confirmed","default","blocked","role","relation","target","inversedBy","config"],"mappings":";;;;;;;AAEA,IAAA,MAAMA,YAAAA,GAAeC,mBAAAA,EAAAA;IAErBC,IAAAA,GAAiB;QACfC,cAAAA,EAAgB,UAAA;QAChBC,IAAAA,EAAM;YACJC,IAAAA,EAAM,MAAA;YACNC,WAAAA,EAAa,EAAA;YACbC,YAAAA,EAAc,MAAA;YACdC,UAAAA,EAAY,OAAA;YACZC,WAAAA,EAAa;AACjB,SAAA;QACEC,OAAAA,EAAS;YACPC,UAAAA,EAAY;AAChB,SAAA;QACEC,UAAAA,EAAY;YACVC,QAAAA,EAAU;gBACRC,IAAAA,EAAM,QAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXC,MAAAA,EAAQ,IAAA;gBACRC,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIC,KAAAA,EAAO;gBACLL,IAAAA,EAAM,OAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIE,QAAAA,EAAU;gBACRN,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc;AACpB,aAAA;YACII,QAAAA,EAAU;gBACRP,IAAAA,EAAM,UAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIC,kBAAAA,EAAoB;gBAClBV,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIE,iBAAAA,EAAmB;gBACjBX,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIG,SAAAA,EAAW;gBACTZ,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIW,OAAAA,EAAS;gBACPd,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIY,IAAAA,EAAM;gBACJf,IAAAA,EAAM,UAAA;gBACNgB,QAAAA,EAAU,WAAA;gBACVC,MAAAA,EAAQ,gCAAA;gBACRC,UAAAA,EAAY,OAAA;gBACZf,YAAAA,EAAc;AACpB;AACA,SAAA;QAEEgB,MAAAA,EAAQjC;AACV,KAAA;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../server/src/content-types/user/index.js"],"sourcesContent":["'use strict';\n\nconst schemaConfig = require('./schema-config');\n\nmodule.exports = {\n collectionName: 'up_users',\n info: {\n name: 'user',\n description: '',\n singularName: 'user',\n pluralName: 'users',\n displayName: 'User',\n },\n options: {\n timestamps: true,\n },\n attributes: {\n username: {\n type: 'string',\n minLength: 3,\n unique: true,\n configurable: false,\n required: true,\n },\n email: {\n type: 'email',\n minLength: 6,\n configurable: false,\n required: true,\n },\n provider: {\n type: 'string',\n configurable: false,\n },\n password: {\n type: 'password',\n minLength: 6,\n configurable: false,\n private: true,\n searchable: false,\n },\n resetPasswordToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmationToken: {\n type: 'string',\n configurable: false,\n private: true,\n searchable: false,\n },\n confirmed: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n blocked: {\n type: 'boolean',\n default: false,\n configurable: false,\n },\n role: {\n type: 'relation',\n relation: 'manyToOne',\n target: 'plugin::users-permissions.role',\n inversedBy: 'users',\n configurable: false,\n },\n },\n\n config: schemaConfig, // TODO: to move to content-manager options\n};\n"],"names":["schemaConfig","require$$0","user","collectionName","info","name","description","singularName","pluralName","displayName","options","timestamps","attributes","username","type","minLength","unique","configurable","required","email","provider","password","private","searchable","resetPasswordToken","confirmationToken","confirmed","default","blocked","role","relation","target","inversedBy","config"],"mappings":";;;;;;;AAEA,IAAA,MAAMA,YAAAA,GAAeC,mBAAAA,EAAAA;IAErBC,IAAAA,GAAiB;QACfC,cAAAA,EAAgB,UAAA;QAChBC,IAAAA,EAAM;YACJC,IAAAA,EAAM,MAAA;YACNC,WAAAA,EAAa,EAAA;YACbC,YAAAA,EAAc,MAAA;YACdC,UAAAA,EAAY,OAAA;YACZC,WAAAA,EAAa;AACjB,SAAA;QACEC,OAAAA,EAAS;YACPC,UAAAA,EAAY;AAChB,SAAA;QACEC,UAAAA,EAAY;YACVC,QAAAA,EAAU;gBACRC,IAAAA,EAAM,QAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXC,MAAAA,EAAQ,IAAA;gBACRC,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIC,KAAAA,EAAO;gBACLL,IAAAA,EAAM,OAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdC,QAAAA,EAAU;AAChB,aAAA;YACIE,QAAAA,EAAU;gBACRN,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc;AACpB,aAAA;YACII,QAAAA,EAAU;gBACRP,IAAAA,EAAM,UAAA;gBACNC,SAAAA,EAAW,CAAA;gBACXE,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIC,kBAAAA,EAAoB;gBAClBV,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIE,iBAAAA,EAAmB;gBACjBX,IAAAA,EAAM,QAAA;gBACNG,YAAAA,EAAc,KAAA;gBACdK,OAAAA,EAAS,IAAA;gBACTC,UAAAA,EAAY;AAClB,aAAA;YACIG,SAAAA,EAAW;gBACTZ,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIW,OAAAA,EAAS;gBACPd,IAAAA,EAAM,SAAA;gBACNa,OAAAA,EAAS,KAAA;gBACTV,YAAAA,EAAc;AACpB,aAAA;YACIY,IAAAA,EAAM;gBACJf,IAAAA,EAAM,UAAA;gBACNgB,QAAAA,EAAU,WAAA;gBACVC,MAAAA,EAAQ,gCAAA;gBACRC,UAAAA,EAAY,OAAA;gBACZf,YAAAA,EAAc;AACpB;AACA,SAAA;QAEEgB,MAAAA,EAAQjC;AACV,KAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-config.js","sources":["../../../../server/content-types/user/schema-config.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n attributes: {\n resetPasswordToken: {\n hidden: true,\n },\n confirmationToken: {\n hidden: true,\n },\n provider: {\n hidden: true,\n },\n },\n};\n"],"names":["schemaConfig","attributes","resetPasswordToken","hidden","confirmationToken","provider"],"mappings":";;;;;;;IAEAA,YAAAA,GAAiB;QACfC,UAAAA,EAAY;YACVC,kBAAAA,EAAoB;gBAClBC,MAAAA,EAAQ;AACd,aAAA;YACIC,iBAAAA,EAAmB;gBACjBD,MAAAA,EAAQ;AACd,aAAA;YACIE,QAAAA,EAAU;gBACRF,MAAAA,EAAQ;AACd;AACA;AACA,KAAA;;;;;;"}
1
+ {"version":3,"file":"schema-config.js","sources":["../../../../server/src/content-types/user/schema-config.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n attributes: {\n resetPasswordToken: {\n hidden: true,\n },\n confirmationToken: {\n hidden: true,\n },\n provider: {\n hidden: true,\n },\n },\n};\n"],"names":["schemaConfig","attributes","resetPasswordToken","hidden","confirmationToken","provider"],"mappings":";;;;;;;IAEAA,YAAAA,GAAiB;QACfC,UAAAA,EAAY;YACVC,kBAAAA,EAAoB;gBAClBC,MAAAA,EAAQ;AACd,aAAA;YACIC,iBAAAA,EAAmB;gBACjBD,MAAAA,EAAQ;AACd,aAAA;YACIE,QAAAA,EAAU;gBACRF,MAAAA,EAAQ;AACd;AACA;AACA,KAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-config.mjs","sources":["../../../../server/content-types/user/schema-config.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n attributes: {\n resetPasswordToken: {\n hidden: true,\n },\n confirmationToken: {\n hidden: true,\n },\n provider: {\n hidden: true,\n },\n },\n};\n"],"names":["schemaConfig","attributes","resetPasswordToken","hidden","confirmationToken","provider"],"mappings":";;;;;IAEAA,YAAAA,GAAiB;QACfC,UAAAA,EAAY;YACVC,kBAAAA,EAAoB;gBAClBC,MAAAA,EAAQ;AACd,aAAA;YACIC,iBAAAA,EAAmB;gBACjBD,MAAAA,EAAQ;AACd,aAAA;YACIE,QAAAA,EAAU;gBACRF,MAAAA,EAAQ;AACd;AACA;AACA,KAAA;;;;;;"}
1
+ {"version":3,"file":"schema-config.mjs","sources":["../../../../server/src/content-types/user/schema-config.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n attributes: {\n resetPasswordToken: {\n hidden: true,\n },\n confirmationToken: {\n hidden: true,\n },\n provider: {\n hidden: true,\n },\n },\n};\n"],"names":["schemaConfig","attributes","resetPasswordToken","hidden","confirmationToken","provider"],"mappings":";;;;;IAEAA,YAAAA,GAAiB;QACfC,UAAAA,EAAY;YACVC,kBAAAA,EAAoB;gBAClBC,MAAAA,EAAQ;AACd,aAAA;YACIC,iBAAAA,EAAmB;gBACjBD,MAAAA,EAAQ;AACd,aAAA;YACIE,QAAAA,EAAU;gBACRF,MAAAA,EAAQ;AACd;AACA;AACA,KAAA;;;;;;"}
@@ -1,21 +1,18 @@
1
1
  'use strict';
2
2
 
3
- var require$$0$2 = require('crypto');
4
- var require$$0$1 = require('lodash');
5
- var require$$0 = require('lodash/fp');
3
+ var require$$0$1 = require('crypto');
4
+ var require$$0 = require('lodash');
6
5
  var require$$1 = require('@strapi/utils');
7
6
  var index = require('../utils/index.js');
8
7
  var refreshCookieOptions = require('../utils/refresh-cookie-options.js');
9
8
  var auth$1 = require('./validation/auth.js');
10
- var require$$7 = require('grant');
9
+ var index$1 = require('../utils/oauth-connect/index.js');
11
10
 
12
11
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
12
 
14
- var require$$0__default$2 = /*#__PURE__*/_interopDefault(require$$0$2);
15
13
  var require$$0__default$1 = /*#__PURE__*/_interopDefault(require$$0$1);
16
14
  var require$$0__default = /*#__PURE__*/_interopDefault(require$$0);
17
15
  var require$$1__default = /*#__PURE__*/_interopDefault(require$$1);
18
- var require$$7__default = /*#__PURE__*/_interopDefault(require$$7);
19
16
 
20
17
  var auth;
21
18
  var hasRequiredAuth;
@@ -26,9 +23,8 @@ function requireAuth() {
26
23
  * Auth.js controller
27
24
  *
28
25
  * @description: A set of functions called "actions" for managing `Auth`.
29
- */ /* eslint-disable no-useless-escape */ const crypto = require$$0__default$2.default;
30
- const _ = require$$0__default$1.default;
31
- const { concat, compact, isArray } = require$$0__default.default;
26
+ */ /* eslint-disable no-useless-escape */ const crypto = require$$0__default$1.default;
27
+ const _ = require$$0__default.default;
32
28
  const utils = require$$1__default.default;
33
29
  const { getService } = index.__require();
34
30
  const { buildRefreshCookieOptions } = refreshCookieOptions.__require();
@@ -47,7 +43,6 @@ function requireAuth() {
47
43
  return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;
48
44
  };
49
45
  const buildSessionMetadataFromContext = (ctx)=>buildSessionMetadata({
50
- ip: ctx.request.ip,
51
46
  userAgent: ctx.request.headers['user-agent']
52
47
  });
53
48
  const sendRefreshAuthResponse = async (strapi1, ctx, user, { metadata } = {})=>{
@@ -193,7 +188,13 @@ function requireAuth() {
193
188
  }
194
189
  // Connect the user with the third-party provider.
195
190
  try {
196
- const user = await getService('providers').connect(provider, ctx.query);
191
+ const grantResponse = _.get(ctx, 'session.grant.response');
192
+ if (!grantResponse) {
193
+ throw new ApplicationError('OAuth authentication requires a completed provider session');
194
+ }
195
+ const user = await getService('providers').connect(provider, grantResponse, {
196
+ grantResponse
197
+ });
197
198
  if (user.blocked) {
198
199
  throw new ForbiddenError('Your account has been blocked by an administrator');
199
200
  }
@@ -335,7 +336,10 @@ function requireAuth() {
335
336
  const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
336
337
  if (upSessions?.httpOnly || requestHttpOnly) {
337
338
  const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
339
+ const isProduction = process.env.NODE_ENV === 'production';
340
+ const { maxAge: _maxAge, ...cookieOptions } = buildRefreshCookieOptions(upSessions, isProduction);
338
341
  ctx.cookies.set(cookieName, '', {
342
+ ...cookieOptions,
339
343
  expires: new Date(0)
340
344
  });
341
345
  }
@@ -376,47 +380,48 @@ function requireAuth() {
376
380
  });
377
381
  },
378
382
  async connect (ctx, next) {
379
- const grant = require$$7__default.default.koa();
380
383
  const providers = await strapi1.store({
381
384
  type: 'plugin',
382
385
  name: 'users-permissions',
383
386
  key: 'grant'
384
387
  }).get();
385
- const apiPrefix = strapi1.config.get('api.rest.prefix');
386
- const grantConfig = {
387
- defaults: {
388
- prefix: `${apiPrefix}/connect`
389
- },
390
- ...providers
391
- };
392
388
  const [requestPath] = ctx.request.url.split('?');
393
389
  const provider = requestPath.split('/connect/')[1].split('/')[0];
394
- if (!_.get(grantConfig[provider], 'enabled')) {
390
+ if (!_.get(providers, [
391
+ provider,
392
+ 'enabled'
393
+ ])) {
395
394
  throw new ApplicationError('This provider is disabled');
396
395
  }
397
396
  if (!strapi1.config.server.url.startsWith('http')) {
398
397
  strapi1.log.warn('You are using a third party provider for login. Make sure to set an absolute url in config/server.js. More info here: https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#setting-up-the-server-url');
399
398
  }
400
- // Ability to pass OAuth callback dynamically
401
399
  const queryCustomCallback = _.get(ctx, 'query.callback');
402
400
  const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');
403
401
  const customCallback = queryCustomCallback ?? dynamicSessionCallback;
404
- // The custom callback is validated to make sure it's not redirecting to an unwanted actor.
405
402
  if (customCallback !== undefined) {
406
403
  try {
407
- // We're extracting the callback validator from the plugin config since it can be user-customized
408
404
  const { validate: validateCallback } = strapi1.plugin('users-permissions').config('callback');
409
- await validateCallback(customCallback, grantConfig[provider]);
410
- grantConfig[provider].callback = customCallback;
411
- } catch (e) {
405
+ await validateCallback(customCallback, providers[provider]);
406
+ // Persist across the provider redirect round-trip (request state alone is lost).
407
+ ctx.session = ctx.session || {};
408
+ ctx.session.grant = ctx.session.grant || {};
409
+ ctx.session.grant.dynamic = {
410
+ ...ctx.session.grant.dynamic,
411
+ callback: customCallback
412
+ };
413
+ ctx.state.oauthConnect = {
414
+ callback: customCallback
415
+ };
416
+ } catch {
412
417
  throw new ValidationError('Invalid callback URL provided', {
413
418
  callback: customCallback
414
419
  });
415
420
  }
416
421
  }
417
- // Build a valid redirect URI for the current provider
418
- grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);
419
- return grant(grantConfig)(ctx, next);
422
+ const { createOAuthConnectMiddleware } = index$1.__require();
423
+ const oauthConnect = createOAuthConnectMiddleware();
424
+ return oauthConnect(ctx, next);
420
425
  },
421
426
  async forgotPassword (ctx) {
422
427
  const { email } = await validateForgotPasswordBody(ctx.request.body);
@@ -491,7 +496,10 @@ function requireAuth() {
491
496
  'email'
492
497
  ];
493
498
  // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration
494
- const allowedKeys = compact(concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : []));
499
+ const allowedKeys = [
500
+ ...alwaysAllowedKeys,
501
+ ...Array.isArray(register?.allowedFields) ? register.allowedFields : []
502
+ ].filter((field)=>Boolean(field));
495
503
  // Check if there are any keys in requestBody that are not in allowedKeys
496
504
  const invalidKeys = Object.keys(ctx.request.body).filter((key)=>!allowedKeys.includes(key));
497
505
  if (invalidKeys.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sources":["../../../server/controllers/auth.js"],"sourcesContent":["'use strict';\n\n/**\n * Auth.js controller\n *\n * @description: A set of functions called \"actions\" for managing `Auth`.\n */\n\n/* eslint-disable no-useless-escape */\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst { concat, compact, isArray } = require('lodash/fp');\nconst utils = require('@strapi/utils');\nconst { getService } = require('../utils');\nconst { buildRefreshCookieOptions } = require('../utils/refresh-cookie-options');\nconst {\n validateCallbackBody,\n validateRegisterBody,\n validateSendEmailConfirmationBody,\n validateForgotPasswordBody,\n validateResetPasswordBody,\n validateEmailConfirmationBody,\n validateChangePasswordBody,\n} = require('./validation/auth');\n\nconst { ApplicationError, ValidationError, ForbiddenError } = utils.errors;\nconst { buildSessionMetadata, sanitizeSessionEntry, sortSessionsForDisplay } = utils;\n\nconst sanitizeUser = (user, ctx) => {\n const { auth } = ctx.state;\n const userSchema = strapi.getModel('plugin::users-permissions.user');\n\n return strapi.contentAPI.sanitize.output(user, userSchema, { auth });\n};\n\nconst extractDeviceId = (requestBody) => {\n const { deviceId } = requestBody || {};\n\n return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;\n};\n\nconst buildSessionMetadataFromContext = (ctx) =>\n buildSessionMetadata({\n ip: ctx.request.ip,\n userAgent: ctx.request.headers['user-agent'],\n });\n\nconst sendRefreshAuthResponse = async (strapi, ctx, user, { metadata } = {}) => {\n const deviceId = extractDeviceId(ctx.request.body);\n const tokenOptions = { type: 'refresh', ...(metadata ? { metadata } : {}) };\n\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), deviceId, tokenOptions);\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n const isProduction = process.env.NODE_ENV === 'production';\n ctx.cookies.set(cookieName, refresh.token, buildRefreshCookieOptions(upSessions, isProduction));\n return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });\n }\n\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n};\n\nconst reissueTokensAfterPasswordChange = async (strapi, ctx, user) => {\n const deviceId = extractDeviceId(ctx.request.body);\n\n await strapi.sessionManager('users-permissions').invalidateRefreshToken(String(user.id));\n\n const newDeviceId = deviceId || crypto.randomUUID();\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n};\n\nconst revokeLogoutSessions = async (strapi, ctx, userId, { scope, deviceId, body }) => {\n const sessionManager = strapi.sessionManager('users-permissions');\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n\n if (scope === 'all') {\n await sessionManager.invalidateRefreshToken(userId);\n return;\n }\n\n if (deviceId) {\n await sessionManager.invalidateRefreshToken(userId, deviceId);\n return;\n }\n\n let currentSessionId = ctx.state.session?.id;\n const cookieName = upSessions?.cookie?.name || 'strapi_up_refresh';\n const refreshToken =\n ctx.cookies.get(cookieName) ||\n (typeof body.refreshToken === 'string' ? body.refreshToken : undefined);\n\n if (refreshToken) {\n const validation = await sessionManager.validateRefreshToken(refreshToken);\n if (validation.isValid) {\n currentSessionId = validation.sessionId;\n }\n }\n\n if (currentSessionId) {\n await sessionManager.revokeSessionById(userId, currentSessionId);\n return;\n }\n\n await sessionManager.invalidateRefreshToken(userId);\n};\n\nmodule.exports = ({ strapi }) => ({\n async callback(ctx) {\n const provider = ctx.params.provider || 'local';\n const params = ctx.request.body;\n\n const store = strapi.store({ type: 'plugin', name: 'users-permissions' });\n const grantSettings = await store.get({ key: 'grant' });\n\n const grantProvider = provider === 'local' ? 'email' : provider;\n\n if (!_.get(grantSettings, [grantProvider, 'enabled'])) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (provider === 'local') {\n await validateCallbackBody(params);\n\n const { identifier } = params;\n\n // Check if the user exists.\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: {\n provider,\n $or: [{ email: identifier.toLowerCase() }, { username: identifier }],\n },\n });\n\n if (!user) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n if (!user.password) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const validPassword = await getService('user').validatePassword(\n params.password,\n user.password\n );\n\n if (!validPassword) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const advancedSettings = await store.get({ key: 'advanced' });\n const requiresConfirmation = _.get(advancedSettings, 'email_confirmation');\n\n if (requiresConfirmation && user.confirmed !== true) {\n throw new ApplicationError('Your account email is not confirmed');\n }\n\n if (user.blocked === true) {\n throw new ApplicationError('Your account has been blocked by an administrator');\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return sendRefreshAuthResponse(strapi, ctx, user, {\n metadata: buildSessionMetadataFromContext(ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n }\n\n // Connect the user with the third-party provider.\n try {\n const user = await getService('providers').connect(provider, ctx.query);\n\n if (user.blocked) {\n throw new ForbiddenError('Your account has been blocked by an administrator');\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return sendRefreshAuthResponse(strapi, ctx, user, {\n metadata: buildSessionMetadataFromContext(ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n\n async changePassword(ctx) {\n if (!ctx.state.user) {\n throw new ApplicationError('You must be authenticated to reset your password');\n }\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { currentPassword, password } = await validateChangePasswordBody(\n ctx.request.body,\n validations\n );\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { id: ctx.state.user.id } });\n\n const validPassword = await getService('user').validatePassword(currentPassword, user.password);\n\n if (!validPassword) {\n throw new ValidationError('The provided current password is invalid');\n }\n\n if (currentPassword === password) {\n throw new ValidationError('Your new password must be different than your current password');\n }\n\n await getService('user').edit(user.id, { password });\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return reissueTokensAfterPasswordChange(strapi, ctx, user);\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n\n async resetPassword(ctx) {\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { password, passwordConfirmation, code } = await validateResetPasswordBody(\n ctx.request.body,\n validations\n );\n\n if (password !== passwordConfirmation) {\n throw new ValidationError('Passwords do not match');\n }\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { resetPasswordToken: code } });\n\n if (!user) {\n throw new ValidationError('Incorrect code provided');\n }\n\n await getService('user').edit(user.id, {\n resetPasswordToken: null,\n password,\n });\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return reissueTokensAfterPasswordChange(strapi, ctx, user);\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n async refresh(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const cookieName = upSessions?.cookie?.name || 'strapi_up_refresh';\n\n // Check for refresh token in cookie first (if httpOnly is configured), then in body\n let refreshToken = ctx.cookies.get(cookieName);\n if (!refreshToken) {\n refreshToken = ctx.request.body?.refreshToken;\n }\n\n if (!refreshToken || typeof refreshToken !== 'string') {\n return ctx.badRequest('Missing refresh token');\n }\n\n const rotation = await strapi\n .sessionManager('users-permissions')\n .rotateRefreshToken(refreshToken);\n if ('error' in rotation) {\n return ctx.unauthorized('Invalid refresh token');\n }\n\n const result = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(rotation.token);\n if ('error' in result) {\n return ctx.unauthorized('Invalid refresh token');\n }\n\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const isProduction = process.env.NODE_ENV === 'production';\n ctx.cookies.set(\n cookieName,\n rotation.token,\n buildRefreshCookieOptions(upSessions, isProduction)\n );\n return ctx.send({ jwt: result.token });\n }\n return ctx.send({ jwt: result.token, refreshToken: rotation.token });\n },\n async logout(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n if (!ctx.state.user) {\n return ctx.unauthorized('Missing authentication');\n }\n\n const userId = String(ctx.state.user.id);\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const body = ctx.request.body || {};\n const scope = typeof body.scope === 'string' ? body.scope : undefined;\n const deviceId = extractDeviceId(body);\n\n try {\n await revokeLogoutSessions(strapi, ctx, userId, { scope, deviceId, body });\n } catch (err) {\n strapi.log.error('UP logout failed', err);\n }\n\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n ctx.cookies.set(cookieName, '', { expires: new Date(0) });\n }\n return ctx.send({ ok: true });\n },\n async getSessions(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n if (!ctx.state.user) {\n return ctx.unauthorized('Missing authentication');\n }\n\n const currentSessionId = ctx.state.session?.id;\n const sessions = await strapi\n .sessionManager('users-permissions')\n .listSessions(String(ctx.state.user.id));\n\n const data = sortSessionsForDisplay(\n sessions.map((session) => sanitizeSessionEntry(session, currentSessionId))\n );\n\n return ctx.send({ data });\n },\n async revokeSession(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n if (!ctx.state.user) {\n return ctx.unauthorized('Missing authentication');\n }\n\n const { sessionId } = ctx.params;\n const revoked = await strapi\n .sessionManager('users-permissions')\n .revokeSessionById(String(ctx.state.user.id), sessionId);\n\n if (!revoked) {\n return ctx.notFound('Session not found');\n }\n\n return ctx.send({ data: {} });\n },\n async connect(ctx, next) {\n const grant = require('grant').koa();\n\n const providers = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })\n .get();\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n const grantConfig = {\n defaults: {\n prefix: `${apiPrefix}/connect`,\n },\n ...providers,\n };\n\n const [requestPath] = ctx.request.url.split('?');\n const provider = requestPath.split('/connect/')[1].split('/')[0];\n\n if (!_.get(grantConfig[provider], 'enabled')) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (!strapi.config.server.url.startsWith('http')) {\n strapi.log.warn(\n 'You are using a third party provider for login. Make sure to set an absolute url in config/server.js. More info here: https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#setting-up-the-server-url'\n );\n }\n\n // Ability to pass OAuth callback dynamically\n const queryCustomCallback = _.get(ctx, 'query.callback');\n const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');\n\n const customCallback = queryCustomCallback ?? dynamicSessionCallback;\n\n // The custom callback is validated to make sure it's not redirecting to an unwanted actor.\n if (customCallback !== undefined) {\n try {\n // We're extracting the callback validator from the plugin config since it can be user-customized\n const { validate: validateCallback } = strapi\n .plugin('users-permissions')\n .config('callback');\n\n await validateCallback(customCallback, grantConfig[provider]);\n\n grantConfig[provider].callback = customCallback;\n } catch (e) {\n throw new ValidationError('Invalid callback URL provided', { callback: customCallback });\n }\n }\n\n // Build a valid redirect URI for the current provider\n grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);\n\n return grant(grantConfig)(ctx, next);\n },\n\n async forgotPassword(ctx) {\n const { email } = await validateForgotPasswordBody(ctx.request.body);\n\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const emailSettings = await pluginStore.get({ key: 'email' });\n const advancedSettings = await pluginStore.get({ key: 'advanced' });\n\n // Find the user by email.\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (!user || user.blocked) {\n return ctx.send({ ok: true });\n }\n\n // Generate random token.\n const userInfo = await sanitizeUser(user, ctx);\n\n const resetPasswordToken = crypto.randomBytes(64).toString('hex');\n\n const resetPasswordSettings = _.get(emailSettings, 'reset_password.options', {});\n const emailBody = await getService('users-permissions').template(\n resetPasswordSettings.message,\n {\n URL: advancedSettings.email_reset_password,\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: userInfo,\n TOKEN: resetPasswordToken,\n }\n );\n\n const emailObject = await getService('users-permissions').template(\n resetPasswordSettings.object,\n {\n USER: userInfo,\n }\n );\n\n const emailToSend = {\n to: user.email,\n from:\n resetPasswordSettings.from.email || resetPasswordSettings.from.name\n ? `${resetPasswordSettings.from.name} <${resetPasswordSettings.from.email}>`\n : undefined,\n replyTo: resetPasswordSettings.response_email,\n subject: emailObject,\n text: emailBody,\n html: emailBody,\n };\n\n // NOTE: Update the user before sending the email so an Admin can generate the link if the email fails\n await getService('user').edit(user.id, { resetPasswordToken });\n\n // Send an email to the user.\n await strapi.plugin('email').service('email').send(emailToSend);\n\n ctx.send({ ok: true });\n },\n\n async register(ctx) {\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const settings = await pluginStore.get({ key: 'advanced' });\n\n if (!settings.allow_register) {\n throw new ApplicationError('Register action is currently disabled');\n }\n\n const { register } = strapi.config.get('plugin::users-permissions');\n const alwaysAllowedKeys = ['username', 'password', 'email'];\n\n // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration\n const allowedKeys = compact(\n concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : [])\n );\n\n // Check if there are any keys in requestBody that are not in allowedKeys\n const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));\n\n if (invalidKeys.length > 0) {\n // If there are invalid keys, throw an error\n throw new ValidationError(`Invalid parameters: ${invalidKeys.join(', ')}`);\n }\n\n const params = {\n ..._.pick(ctx.request.body, allowedKeys),\n provider: 'local',\n };\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n await validateRegisterBody(params, validations);\n\n const role = await strapi.db\n .query('plugin::users-permissions.role')\n .findOne({ where: { type: settings.default_role } });\n\n if (!role) {\n throw new ApplicationError('Impossible to find the default role');\n }\n\n const { email, username, provider } = params;\n\n const identifierFilter = {\n $or: [\n { email: email.toLowerCase() },\n { username: email.toLowerCase() },\n { username },\n { email: username },\n ],\n };\n\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter, provider },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n\n if (settings.unique_email) {\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n }\n\n const newUser = {\n ...params,\n role: role.id,\n email: email.toLowerCase(),\n username,\n confirmed: !settings.email_confirmation,\n };\n\n const user = await getService('user').add(newUser);\n\n const sanitizedUser = await sanitizeUser(user, ctx);\n\n if (settings.email_confirmation) {\n try {\n await getService('user').sendConfirmationEmail(sanitizedUser);\n } catch (err) {\n strapi.log.error(err);\n throw new ApplicationError('Error sending confirmation email');\n }\n\n return ctx.send({ user: sanitizedUser });\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n const deviceId = extractDeviceId(ctx.request.body) || crypto.randomUUID();\n\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), deviceId, {\n type: 'refresh',\n metadata: buildSessionMetadataFromContext(ctx),\n });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n return ctx.send({ jwt: access.token, refreshToken: refresh.token, user: sanitizedUser });\n }\n\n const jwt = getService('jwt').issue(_.pick(user, ['id']));\n return ctx.send({ jwt, user: sanitizedUser });\n },\n\n async emailConfirmation(ctx, next, returnUser) {\n const { confirmation: confirmationToken } = await validateEmailConfirmationBody(ctx.query);\n\n const userService = getService('user');\n const jwtService = getService('jwt');\n\n const [user] = await userService.fetchAll({ filters: { confirmationToken } });\n\n if (!user) {\n throw new ValidationError('Invalid token');\n }\n\n await userService.edit(user.id, { confirmed: true, confirmationToken: null });\n\n if (returnUser) {\n ctx.send({\n jwt: jwtService.issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } else {\n const settings = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n ctx.redirect(settings.email_confirmation_redirection || '/');\n }\n },\n\n async sendEmailConfirmation(ctx) {\n const { email } = await validateSendEmailConfirmationBody(ctx.request.body);\n\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: { email: email.toLowerCase() },\n });\n\n if (!user) {\n return ctx.send({ email, sent: true });\n }\n\n if (user.confirmed) {\n throw new ApplicationError('Already confirmed');\n }\n\n if (user.blocked) {\n throw new ApplicationError('User blocked');\n }\n\n await getService('user').sendConfirmationEmail(user);\n\n ctx.send({\n email: user.email,\n sent: true,\n });\n },\n});\n"],"names":["crypto","require$$0","_","require$$1","concat","compact","isArray","require$$2","utils","require$$3","getService","require$$4","buildRefreshCookieOptions","require$$5","validateCallbackBody","validateRegisterBody","validateSendEmailConfirmationBody","validateForgotPasswordBody","validateResetPasswordBody","validateEmailConfirmationBody","validateChangePasswordBody","require$$6","ApplicationError","ValidationError","ForbiddenError","errors","buildSessionMetadata","sanitizeSessionEntry","sortSessionsForDisplay","sanitizeUser","user","ctx","auth","state","userSchema","strapi","getModel","contentAPI","sanitize","output","extractDeviceId","requestBody","deviceId","length","undefined","buildSessionMetadataFromContext","ip","request","userAgent","headers","sendRefreshAuthResponse","metadata","body","tokenOptions","type","refresh","sessionManager","generateRefreshToken","String","id","access","generateAccessToken","token","upSessions","config","get","requestHttpOnly","header","httpOnly","cookieName","cookie","name","isProduction","process","env","NODE_ENV","cookies","set","send","jwt","refreshToken","reissueTokensAfterPasswordChange","invalidateRefreshToken","newDeviceId","randomUUID","revokeLogoutSessions","userId","scope","currentSessionId","session","validation","validateRefreshToken","isValid","sessionId","revokeSessionById","callback","provider","params","store","grantSettings","key","grantProvider","identifier","db","query","findOne","where","$or","email","toLowerCase","username","password","validPassword","validatePassword","advancedSettings","requiresConfirmation","confirmed","blocked","mode","issue","connect","error","message","changePassword","validations","currentPassword","edit","resetPassword","passwordConfirmation","code","resetPasswordToken","notFound","badRequest","rotation","rotateRefreshToken","unauthorized","result","logout","err","log","expires","Date","ok","getSessions","sessions","listSessions","data","map","revokeSession","revoked","next","grant","require$$7","koa","providers","apiPrefix","grantConfig","defaults","prefix","requestPath","url","split","server","startsWith","warn","queryCustomCallback","dynamicSessionCallback","customCallback","validate","validateCallback","plugin","e","redirect_uri","buildRedirectUri","forgotPassword","pluginStore","emailSettings","userInfo","randomBytes","toString","resetPasswordSettings","emailBody","template","URL","email_reset_password","SERVER_URL","ADMIN_URL","USER","TOKEN","emailObject","object","emailToSend","to","from","replyTo","response_email","subject","text","html","service","register","settings","allow_register","alwaysAllowedKeys","allowedKeys","allowedFields","invalidKeys","Object","keys","filter","includes","join","pick","role","default_role","identifierFilter","conflictingUserCount","count","unique_email","newUser","email_confirmation","add","sanitizedUser","sendConfirmationEmail","emailConfirmation","returnUser","confirmation","confirmationToken","userService","jwtService","fetchAll","filters","redirect","email_confirmation_redirection","sendEmailConfirmation","sent"],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sources":["../../../server/src/controllers/auth.js"],"sourcesContent":["'use strict';\n\n/**\n * Auth.js controller\n *\n * @description: A set of functions called \"actions\" for managing `Auth`.\n */\n\n/* eslint-disable no-useless-escape */\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst utils = require('@strapi/utils');\nconst { getService } = require('../utils');\nconst { buildRefreshCookieOptions } = require('../utils/refresh-cookie-options');\nconst {\n validateCallbackBody,\n validateRegisterBody,\n validateSendEmailConfirmationBody,\n validateForgotPasswordBody,\n validateResetPasswordBody,\n validateEmailConfirmationBody,\n validateChangePasswordBody,\n} = require('./validation/auth');\n\nconst { ApplicationError, ValidationError, ForbiddenError } = utils.errors;\nconst { buildSessionMetadata, sanitizeSessionEntry, sortSessionsForDisplay } = utils;\n\nconst sanitizeUser = (user, ctx) => {\n const { auth } = ctx.state;\n const userSchema = strapi.getModel('plugin::users-permissions.user');\n\n return strapi.contentAPI.sanitize.output(user, userSchema, { auth });\n};\n\nconst extractDeviceId = (requestBody) => {\n const { deviceId } = requestBody || {};\n\n return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;\n};\n\nconst buildSessionMetadataFromContext = (ctx) =>\n buildSessionMetadata({\n userAgent: ctx.request.headers['user-agent'],\n });\n\nconst sendRefreshAuthResponse = async (strapi, ctx, user, { metadata } = {}) => {\n const deviceId = extractDeviceId(ctx.request.body);\n const tokenOptions = { type: 'refresh', ...(metadata ? { metadata } : {}) };\n\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), deviceId, tokenOptions);\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n const isProduction = process.env.NODE_ENV === 'production';\n ctx.cookies.set(cookieName, refresh.token, buildRefreshCookieOptions(upSessions, isProduction));\n return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });\n }\n\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n};\n\nconst reissueTokensAfterPasswordChange = async (strapi, ctx, user) => {\n const deviceId = extractDeviceId(ctx.request.body);\n\n await strapi.sessionManager('users-permissions').invalidateRefreshToken(String(user.id));\n\n const newDeviceId = deviceId || crypto.randomUUID();\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n};\n\nconst revokeLogoutSessions = async (strapi, ctx, userId, { scope, deviceId, body }) => {\n const sessionManager = strapi.sessionManager('users-permissions');\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n\n if (scope === 'all') {\n await sessionManager.invalidateRefreshToken(userId);\n return;\n }\n\n if (deviceId) {\n await sessionManager.invalidateRefreshToken(userId, deviceId);\n return;\n }\n\n let currentSessionId = ctx.state.session?.id;\n const cookieName = upSessions?.cookie?.name || 'strapi_up_refresh';\n const refreshToken =\n ctx.cookies.get(cookieName) ||\n (typeof body.refreshToken === 'string' ? body.refreshToken : undefined);\n\n if (refreshToken) {\n const validation = await sessionManager.validateRefreshToken(refreshToken);\n if (validation.isValid) {\n currentSessionId = validation.sessionId;\n }\n }\n\n if (currentSessionId) {\n await sessionManager.revokeSessionById(userId, currentSessionId);\n return;\n }\n\n await sessionManager.invalidateRefreshToken(userId);\n};\n\nmodule.exports = ({ strapi }) => ({\n async callback(ctx) {\n const provider = ctx.params.provider || 'local';\n const params = ctx.request.body;\n\n const store = strapi.store({ type: 'plugin', name: 'users-permissions' });\n const grantSettings = await store.get({ key: 'grant' });\n\n const grantProvider = provider === 'local' ? 'email' : provider;\n\n if (!_.get(grantSettings, [grantProvider, 'enabled'])) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (provider === 'local') {\n await validateCallbackBody(params);\n\n const { identifier } = params;\n\n // Check if the user exists.\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: {\n provider,\n $or: [{ email: identifier.toLowerCase() }, { username: identifier }],\n },\n });\n\n if (!user) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n if (!user.password) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const validPassword = await getService('user').validatePassword(\n params.password,\n user.password\n );\n\n if (!validPassword) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const advancedSettings = await store.get({ key: 'advanced' });\n const requiresConfirmation = _.get(advancedSettings, 'email_confirmation');\n\n if (requiresConfirmation && user.confirmed !== true) {\n throw new ApplicationError('Your account email is not confirmed');\n }\n\n if (user.blocked === true) {\n throw new ApplicationError('Your account has been blocked by an administrator');\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return sendRefreshAuthResponse(strapi, ctx, user, {\n metadata: buildSessionMetadataFromContext(ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n }\n\n // Connect the user with the third-party provider.\n try {\n const grantResponse = _.get(ctx, 'session.grant.response');\n\n if (!grantResponse) {\n throw new ApplicationError('OAuth authentication requires a completed provider session');\n }\n\n const user = await getService('providers').connect(provider, grantResponse, {\n grantResponse,\n });\n\n if (user.blocked) {\n throw new ForbiddenError('Your account has been blocked by an administrator');\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return sendRefreshAuthResponse(strapi, ctx, user, {\n metadata: buildSessionMetadataFromContext(ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n\n async changePassword(ctx) {\n if (!ctx.state.user) {\n throw new ApplicationError('You must be authenticated to reset your password');\n }\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { currentPassword, password } = await validateChangePasswordBody(\n ctx.request.body,\n validations\n );\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { id: ctx.state.user.id } });\n\n const validPassword = await getService('user').validatePassword(currentPassword, user.password);\n\n if (!validPassword) {\n throw new ValidationError('The provided current password is invalid');\n }\n\n if (currentPassword === password) {\n throw new ValidationError('Your new password must be different than your current password');\n }\n\n await getService('user').edit(user.id, { password });\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return reissueTokensAfterPasswordChange(strapi, ctx, user);\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n\n async resetPassword(ctx) {\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { password, passwordConfirmation, code } = await validateResetPasswordBody(\n ctx.request.body,\n validations\n );\n\n if (password !== passwordConfirmation) {\n throw new ValidationError('Passwords do not match');\n }\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { resetPasswordToken: code } });\n\n if (!user) {\n throw new ValidationError('Incorrect code provided');\n }\n\n await getService('user').edit(user.id, {\n resetPasswordToken: null,\n password,\n });\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n return reissueTokensAfterPasswordChange(strapi, ctx, user);\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n async refresh(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const cookieName = upSessions?.cookie?.name || 'strapi_up_refresh';\n\n // Check for refresh token in cookie first (if httpOnly is configured), then in body\n let refreshToken = ctx.cookies.get(cookieName);\n if (!refreshToken) {\n refreshToken = ctx.request.body?.refreshToken;\n }\n\n if (!refreshToken || typeof refreshToken !== 'string') {\n return ctx.badRequest('Missing refresh token');\n }\n\n const rotation = await strapi\n .sessionManager('users-permissions')\n .rotateRefreshToken(refreshToken);\n if ('error' in rotation) {\n return ctx.unauthorized('Invalid refresh token');\n }\n\n const result = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(rotation.token);\n if ('error' in result) {\n return ctx.unauthorized('Invalid refresh token');\n }\n\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const isProduction = process.env.NODE_ENV === 'production';\n ctx.cookies.set(\n cookieName,\n rotation.token,\n buildRefreshCookieOptions(upSessions, isProduction)\n );\n return ctx.send({ jwt: result.token });\n }\n return ctx.send({ jwt: result.token, refreshToken: rotation.token });\n },\n async logout(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n if (!ctx.state.user) {\n return ctx.unauthorized('Missing authentication');\n }\n\n const userId = String(ctx.state.user.id);\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const body = ctx.request.body || {};\n const scope = typeof body.scope === 'string' ? body.scope : undefined;\n const deviceId = extractDeviceId(body);\n\n try {\n await revokeLogoutSessions(strapi, ctx, userId, { scope, deviceId, body });\n } catch (err) {\n strapi.log.error('UP logout failed', err);\n }\n\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n const isProduction = process.env.NODE_ENV === 'production';\n\n const { maxAge: _maxAge, ...cookieOptions } = buildRefreshCookieOptions(\n upSessions,\n isProduction\n );\n\n ctx.cookies.set(cookieName, '', { ...cookieOptions, expires: new Date(0) });\n }\n return ctx.send({ ok: true });\n },\n async getSessions(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n if (!ctx.state.user) {\n return ctx.unauthorized('Missing authentication');\n }\n\n const currentSessionId = ctx.state.session?.id;\n const sessions = await strapi\n .sessionManager('users-permissions')\n .listSessions(String(ctx.state.user.id));\n\n const data = sortSessionsForDisplay(\n sessions.map((session) => sanitizeSessionEntry(session, currentSessionId))\n );\n\n return ctx.send({ data });\n },\n async revokeSession(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n if (!ctx.state.user) {\n return ctx.unauthorized('Missing authentication');\n }\n\n const { sessionId } = ctx.params;\n const revoked = await strapi\n .sessionManager('users-permissions')\n .revokeSessionById(String(ctx.state.user.id), sessionId);\n\n if (!revoked) {\n return ctx.notFound('Session not found');\n }\n\n return ctx.send({ data: {} });\n },\n async connect(ctx, next) {\n const providers = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })\n .get();\n\n const [requestPath] = ctx.request.url.split('?');\n const provider = requestPath.split('/connect/')[1].split('/')[0];\n\n if (!_.get(providers, [provider, 'enabled'])) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (!strapi.config.server.url.startsWith('http')) {\n strapi.log.warn(\n 'You are using a third party provider for login. Make sure to set an absolute url in config/server.js. More info here: https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#setting-up-the-server-url'\n );\n }\n\n const queryCustomCallback = _.get(ctx, 'query.callback');\n const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');\n const customCallback = queryCustomCallback ?? dynamicSessionCallback;\n\n if (customCallback !== undefined) {\n try {\n const { validate: validateCallback } = strapi\n .plugin('users-permissions')\n .config('callback');\n\n await validateCallback(customCallback, providers[provider]);\n\n // Persist across the provider redirect round-trip (request state alone is lost).\n ctx.session = ctx.session || {};\n ctx.session.grant = ctx.session.grant || {};\n ctx.session.grant.dynamic = {\n ...ctx.session.grant.dynamic,\n callback: customCallback,\n };\n ctx.state.oauthConnect = { callback: customCallback };\n } catch {\n throw new ValidationError('Invalid callback URL provided', { callback: customCallback });\n }\n }\n\n const { createOAuthConnectMiddleware } = require('../utils/oauth-connect');\n const oauthConnect = createOAuthConnectMiddleware();\n\n return oauthConnect(ctx, next);\n },\n\n async forgotPassword(ctx) {\n const { email } = await validateForgotPasswordBody(ctx.request.body);\n\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const emailSettings = await pluginStore.get({ key: 'email' });\n const advancedSettings = await pluginStore.get({ key: 'advanced' });\n\n // Find the user by email.\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (!user || user.blocked) {\n return ctx.send({ ok: true });\n }\n\n // Generate random token.\n const userInfo = await sanitizeUser(user, ctx);\n\n const resetPasswordToken = crypto.randomBytes(64).toString('hex');\n\n const resetPasswordSettings = _.get(emailSettings, 'reset_password.options', {});\n const emailBody = await getService('users-permissions').template(\n resetPasswordSettings.message,\n {\n URL: advancedSettings.email_reset_password,\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: userInfo,\n TOKEN: resetPasswordToken,\n }\n );\n\n const emailObject = await getService('users-permissions').template(\n resetPasswordSettings.object,\n {\n USER: userInfo,\n }\n );\n\n const emailToSend = {\n to: user.email,\n from:\n resetPasswordSettings.from.email || resetPasswordSettings.from.name\n ? `${resetPasswordSettings.from.name} <${resetPasswordSettings.from.email}>`\n : undefined,\n replyTo: resetPasswordSettings.response_email,\n subject: emailObject,\n text: emailBody,\n html: emailBody,\n };\n\n // NOTE: Update the user before sending the email so an Admin can generate the link if the email fails\n await getService('user').edit(user.id, { resetPasswordToken });\n\n // Send an email to the user.\n await strapi.plugin('email').service('email').send(emailToSend);\n\n ctx.send({ ok: true });\n },\n\n async register(ctx) {\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const settings = await pluginStore.get({ key: 'advanced' });\n\n if (!settings.allow_register) {\n throw new ApplicationError('Register action is currently disabled');\n }\n\n const { register } = strapi.config.get('plugin::users-permissions');\n const alwaysAllowedKeys = ['username', 'password', 'email'];\n\n // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration\n const allowedKeys = [\n ...alwaysAllowedKeys,\n ...(Array.isArray(register?.allowedFields) ? register.allowedFields : []),\n ].filter((field) => Boolean(field));\n\n // Check if there are any keys in requestBody that are not in allowedKeys\n const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));\n\n if (invalidKeys.length > 0) {\n // If there are invalid keys, throw an error\n throw new ValidationError(`Invalid parameters: ${invalidKeys.join(', ')}`);\n }\n\n const params = {\n ..._.pick(ctx.request.body, allowedKeys),\n provider: 'local',\n };\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n await validateRegisterBody(params, validations);\n\n const role = await strapi.db\n .query('plugin::users-permissions.role')\n .findOne({ where: { type: settings.default_role } });\n\n if (!role) {\n throw new ApplicationError('Impossible to find the default role');\n }\n\n const { email, username, provider } = params;\n\n const identifierFilter = {\n $or: [\n { email: email.toLowerCase() },\n { username: email.toLowerCase() },\n { username },\n { email: username },\n ],\n };\n\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter, provider },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n\n if (settings.unique_email) {\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n }\n\n const newUser = {\n ...params,\n role: role.id,\n email: email.toLowerCase(),\n username,\n confirmed: !settings.email_confirmation,\n };\n\n const user = await getService('user').add(newUser);\n\n const sanitizedUser = await sanitizeUser(user, ctx);\n\n if (settings.email_confirmation) {\n try {\n await getService('user').sendConfirmationEmail(sanitizedUser);\n } catch (err) {\n strapi.log.error(err);\n throw new ApplicationError('Error sending confirmation email');\n }\n\n return ctx.send({ user: sanitizedUser });\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n const deviceId = extractDeviceId(ctx.request.body) || crypto.randomUUID();\n\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), deviceId, {\n type: 'refresh',\n metadata: buildSessionMetadataFromContext(ctx),\n });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n return ctx.send({ jwt: access.token, refreshToken: refresh.token, user: sanitizedUser });\n }\n\n const jwt = getService('jwt').issue(_.pick(user, ['id']));\n return ctx.send({ jwt, user: sanitizedUser });\n },\n\n async emailConfirmation(ctx, next, returnUser) {\n const { confirmation: confirmationToken } = await validateEmailConfirmationBody(ctx.query);\n\n const userService = getService('user');\n const jwtService = getService('jwt');\n\n const [user] = await userService.fetchAll({ filters: { confirmationToken } });\n\n if (!user) {\n throw new ValidationError('Invalid token');\n }\n\n await userService.edit(user.id, { confirmed: true, confirmationToken: null });\n\n if (returnUser) {\n ctx.send({\n jwt: jwtService.issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } else {\n const settings = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n ctx.redirect(settings.email_confirmation_redirection || '/');\n }\n },\n\n async sendEmailConfirmation(ctx) {\n const { email } = await validateSendEmailConfirmationBody(ctx.request.body);\n\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: { email: email.toLowerCase() },\n });\n\n if (!user) {\n return ctx.send({ email, sent: true });\n }\n\n if (user.confirmed) {\n throw new ApplicationError('Already confirmed');\n }\n\n if (user.blocked) {\n throw new ApplicationError('User blocked');\n }\n\n await getService('user').sendConfirmationEmail(user);\n\n ctx.send({\n email: user.email,\n sent: true,\n });\n },\n});\n"],"names":["crypto","require$$0","_","require$$1","utils","require$$2","getService","require$$3","buildRefreshCookieOptions","require$$4","validateCallbackBody","validateRegisterBody","validateSendEmailConfirmationBody","validateForgotPasswordBody","validateResetPasswordBody","validateEmailConfirmationBody","validateChangePasswordBody","require$$5","ApplicationError","ValidationError","ForbiddenError","errors","buildSessionMetadata","sanitizeSessionEntry","sortSessionsForDisplay","sanitizeUser","user","ctx","auth","state","userSchema","strapi","getModel","contentAPI","sanitize","output","extractDeviceId","requestBody","deviceId","length","undefined","buildSessionMetadataFromContext","userAgent","request","headers","sendRefreshAuthResponse","metadata","body","tokenOptions","type","refresh","sessionManager","generateRefreshToken","String","id","access","generateAccessToken","token","upSessions","config","get","requestHttpOnly","header","httpOnly","cookieName","cookie","name","isProduction","process","env","NODE_ENV","cookies","set","send","jwt","refreshToken","reissueTokensAfterPasswordChange","invalidateRefreshToken","newDeviceId","randomUUID","revokeLogoutSessions","userId","scope","currentSessionId","session","validation","validateRefreshToken","isValid","sessionId","revokeSessionById","callback","provider","params","store","grantSettings","key","grantProvider","identifier","db","query","findOne","where","$or","email","toLowerCase","username","password","validPassword","validatePassword","advancedSettings","requiresConfirmation","confirmed","blocked","mode","issue","grantResponse","connect","error","message","changePassword","validations","currentPassword","edit","resetPassword","passwordConfirmation","code","resetPasswordToken","notFound","badRequest","rotation","rotateRefreshToken","unauthorized","result","logout","err","log","maxAge","_maxAge","cookieOptions","expires","Date","ok","getSessions","sessions","listSessions","data","map","revokeSession","revoked","next","providers","requestPath","url","split","server","startsWith","warn","queryCustomCallback","dynamicSessionCallback","customCallback","validate","validateCallback","plugin","grant","dynamic","oauthConnect","createOAuthConnectMiddleware","require$$6","forgotPassword","pluginStore","emailSettings","userInfo","randomBytes","toString","resetPasswordSettings","emailBody","template","URL","email_reset_password","SERVER_URL","ADMIN_URL","USER","TOKEN","emailObject","object","emailToSend","to","from","replyTo","response_email","subject","text","html","service","register","settings","allow_register","alwaysAllowedKeys","allowedKeys","Array","isArray","allowedFields","filter","field","Boolean","invalidKeys","Object","keys","includes","join","pick","role","default_role","identifierFilter","conflictingUserCount","count","unique_email","newUser","email_confirmation","add","sanitizedUser","sendConfirmationEmail","emailConfirmation","returnUser","confirmation","confirmationToken","userService","jwtService","fetchAll","filters","redirect","email_confirmation_redirection","sendEmailConfirmation","sent"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- import require$$0$2 from 'crypto';
2
- import require$$0$1 from 'lodash';
3
- import require$$0 from 'lodash/fp';
1
+ import require$$0$1 from 'crypto';
2
+ import require$$0 from 'lodash';
4
3
  import require$$1 from '@strapi/utils';
5
4
  import { __require as requireUtils } from '../utils/index.mjs';
6
5
  import { __require as requireRefreshCookieOptions } from '../utils/refresh-cookie-options.mjs';
7
6
  import { __require as requireAuth$1 } from './validation/auth.mjs';
8
- import require$$7 from 'grant';
7
+ import { __require as requireOauthConnect } from '../utils/oauth-connect/index.mjs';
9
8
 
10
9
  var auth;
11
10
  var hasRequiredAuth;
@@ -16,9 +15,8 @@ function requireAuth() {
16
15
  * Auth.js controller
17
16
  *
18
17
  * @description: A set of functions called "actions" for managing `Auth`.
19
- */ /* eslint-disable no-useless-escape */ const crypto = require$$0$2;
20
- const _ = require$$0$1;
21
- const { concat, compact, isArray } = require$$0;
18
+ */ /* eslint-disable no-useless-escape */ const crypto = require$$0$1;
19
+ const _ = require$$0;
22
20
  const utils = require$$1;
23
21
  const { getService } = requireUtils();
24
22
  const { buildRefreshCookieOptions } = requireRefreshCookieOptions();
@@ -37,7 +35,6 @@ function requireAuth() {
37
35
  return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;
38
36
  };
39
37
  const buildSessionMetadataFromContext = (ctx)=>buildSessionMetadata({
40
- ip: ctx.request.ip,
41
38
  userAgent: ctx.request.headers['user-agent']
42
39
  });
43
40
  const sendRefreshAuthResponse = async (strapi1, ctx, user, { metadata } = {})=>{
@@ -183,7 +180,13 @@ function requireAuth() {
183
180
  }
184
181
  // Connect the user with the third-party provider.
185
182
  try {
186
- const user = await getService('providers').connect(provider, ctx.query);
183
+ const grantResponse = _.get(ctx, 'session.grant.response');
184
+ if (!grantResponse) {
185
+ throw new ApplicationError('OAuth authentication requires a completed provider session');
186
+ }
187
+ const user = await getService('providers').connect(provider, grantResponse, {
188
+ grantResponse
189
+ });
187
190
  if (user.blocked) {
188
191
  throw new ForbiddenError('Your account has been blocked by an administrator');
189
192
  }
@@ -325,7 +328,10 @@ function requireAuth() {
325
328
  const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
326
329
  if (upSessions?.httpOnly || requestHttpOnly) {
327
330
  const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
331
+ const isProduction = process.env.NODE_ENV === 'production';
332
+ const { maxAge: _maxAge, ...cookieOptions } = buildRefreshCookieOptions(upSessions, isProduction);
328
333
  ctx.cookies.set(cookieName, '', {
334
+ ...cookieOptions,
329
335
  expires: new Date(0)
330
336
  });
331
337
  }
@@ -366,47 +372,48 @@ function requireAuth() {
366
372
  });
367
373
  },
368
374
  async connect (ctx, next) {
369
- const grant = require$$7.koa();
370
375
  const providers = await strapi1.store({
371
376
  type: 'plugin',
372
377
  name: 'users-permissions',
373
378
  key: 'grant'
374
379
  }).get();
375
- const apiPrefix = strapi1.config.get('api.rest.prefix');
376
- const grantConfig = {
377
- defaults: {
378
- prefix: `${apiPrefix}/connect`
379
- },
380
- ...providers
381
- };
382
380
  const [requestPath] = ctx.request.url.split('?');
383
381
  const provider = requestPath.split('/connect/')[1].split('/')[0];
384
- if (!_.get(grantConfig[provider], 'enabled')) {
382
+ if (!_.get(providers, [
383
+ provider,
384
+ 'enabled'
385
+ ])) {
385
386
  throw new ApplicationError('This provider is disabled');
386
387
  }
387
388
  if (!strapi1.config.server.url.startsWith('http')) {
388
389
  strapi1.log.warn('You are using a third party provider for login. Make sure to set an absolute url in config/server.js. More info here: https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#setting-up-the-server-url');
389
390
  }
390
- // Ability to pass OAuth callback dynamically
391
391
  const queryCustomCallback = _.get(ctx, 'query.callback');
392
392
  const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');
393
393
  const customCallback = queryCustomCallback ?? dynamicSessionCallback;
394
- // The custom callback is validated to make sure it's not redirecting to an unwanted actor.
395
394
  if (customCallback !== undefined) {
396
395
  try {
397
- // We're extracting the callback validator from the plugin config since it can be user-customized
398
396
  const { validate: validateCallback } = strapi1.plugin('users-permissions').config('callback');
399
- await validateCallback(customCallback, grantConfig[provider]);
400
- grantConfig[provider].callback = customCallback;
401
- } catch (e) {
397
+ await validateCallback(customCallback, providers[provider]);
398
+ // Persist across the provider redirect round-trip (request state alone is lost).
399
+ ctx.session = ctx.session || {};
400
+ ctx.session.grant = ctx.session.grant || {};
401
+ ctx.session.grant.dynamic = {
402
+ ...ctx.session.grant.dynamic,
403
+ callback: customCallback
404
+ };
405
+ ctx.state.oauthConnect = {
406
+ callback: customCallback
407
+ };
408
+ } catch {
402
409
  throw new ValidationError('Invalid callback URL provided', {
403
410
  callback: customCallback
404
411
  });
405
412
  }
406
413
  }
407
- // Build a valid redirect URI for the current provider
408
- grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);
409
- return grant(grantConfig)(ctx, next);
414
+ const { createOAuthConnectMiddleware } = requireOauthConnect();
415
+ const oauthConnect = createOAuthConnectMiddleware();
416
+ return oauthConnect(ctx, next);
410
417
  },
411
418
  async forgotPassword (ctx) {
412
419
  const { email } = await validateForgotPasswordBody(ctx.request.body);
@@ -481,7 +488,10 @@ function requireAuth() {
481
488
  'email'
482
489
  ];
483
490
  // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration
484
- const allowedKeys = compact(concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : []));
491
+ const allowedKeys = [
492
+ ...alwaysAllowedKeys,
493
+ ...Array.isArray(register?.allowedFields) ? register.allowedFields : []
494
+ ].filter((field)=>Boolean(field));
485
495
  // Check if there are any keys in requestBody that are not in allowedKeys
486
496
  const invalidKeys = Object.keys(ctx.request.body).filter((key)=>!allowedKeys.includes(key));
487
497
  if (invalidKeys.length > 0) {