@strapi/plugin-users-permissions 5.48.0 → 5.49.0

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 (150) hide show
  1. package/dist/admin/components/BoundRoute/index.js +12 -6
  2. package/dist/admin/components/BoundRoute/index.js.map +1 -1
  3. package/dist/admin/components/FormModal/Input/index.js +25 -21
  4. package/dist/admin/components/FormModal/Input/index.js.map +1 -1
  5. package/dist/admin/components/FormModal/index.js +14 -10
  6. package/dist/admin/components/FormModal/index.js.map +1 -1
  7. package/dist/admin/components/Permissions/PermissionRow/SubCategory.js +8 -3
  8. package/dist/admin/components/Permissions/PermissionRow/SubCategory.js.map +1 -1
  9. package/dist/admin/components/Permissions/PermissionRow/index.js +9 -4
  10. package/dist/admin/components/Permissions/PermissionRow/index.js.map +1 -1
  11. package/dist/admin/components/Policies/index.js +9 -3
  12. package/dist/admin/components/Policies/index.js.map +1 -1
  13. package/dist/admin/components/UsersPermissions/index.js +6 -2
  14. package/dist/admin/components/UsersPermissions/index.js.map +1 -1
  15. package/dist/admin/components/UsersPermissions/reducer.js +10 -4
  16. package/dist/admin/components/UsersPermissions/reducer.js.map +1 -1
  17. package/dist/admin/contexts/UsersPermissionsContext/index.js +6 -2
  18. package/dist/admin/contexts/UsersPermissionsContext/index.js.map +1 -1
  19. package/dist/admin/pages/AdvancedSettings/utils/schema.js +3 -2
  20. package/dist/admin/pages/AdvancedSettings/utils/schema.js.map +1 -1
  21. package/dist/admin/pages/EmailTemplates/components/EmailForm.js +17 -13
  22. package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
  23. package/dist/admin/pages/EmailTemplates/components/EmailTable.js +6 -2
  24. package/dist/admin/pages/EmailTemplates/components/EmailTable.js.map +1 -1
  25. package/dist/admin/pages/EmailTemplates/index.js +3 -2
  26. package/dist/admin/pages/EmailTemplates/index.js.map +1 -1
  27. package/dist/admin/pages/EmailTemplates/utils/schema.js +3 -2
  28. package/dist/admin/pages/EmailTemplates/utils/schema.js.map +1 -1
  29. package/dist/admin/pages/Providers/index.js +7 -3
  30. package/dist/admin/pages/Providers/index.js.map +1 -1
  31. package/dist/admin/pages/Providers/utils/forms.js +3 -2
  32. package/dist/admin/pages/Providers/utils/forms.js.map +1 -1
  33. package/dist/admin/pages/Roles/constants.js +3 -2
  34. package/dist/admin/pages/Roles/constants.js.map +1 -1
  35. package/dist/admin/pages/Roles/pages/CreatePage.js +3 -2
  36. package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -1
  37. package/dist/admin/pages/Roles/pages/EditPage.js +3 -2
  38. package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
  39. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js +9 -5
  40. package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js.map +1 -1
  41. package/dist/admin/utils/cleanPermissions.js +6 -2
  42. package/dist/admin/utils/cleanPermissions.js.map +1 -1
  43. package/dist/admin/utils/formatPluginName.js +5 -1
  44. package/dist/admin/utils/formatPluginName.js.map +1 -1
  45. package/dist/server/bootstrap/index.js +7 -2
  46. package/dist/server/bootstrap/index.js.map +1 -1
  47. package/dist/server/bootstrap/index.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/controllers/auth.js +13 -5
  51. package/dist/server/controllers/auth.js.map +1 -1
  52. package/dist/server/controllers/auth.mjs.map +1 -1
  53. package/dist/server/controllers/content-manager-user.js +8 -3
  54. package/dist/server/controllers/content-manager-user.js.map +1 -1
  55. package/dist/server/controllers/content-manager-user.mjs.map +1 -1
  56. package/dist/server/controllers/permissions.js +5 -1
  57. package/dist/server/controllers/permissions.js.map +1 -1
  58. package/dist/server/controllers/permissions.mjs.map +1 -1
  59. package/dist/server/controllers/role.js +7 -2
  60. package/dist/server/controllers/role.js.map +1 -1
  61. package/dist/server/controllers/role.mjs.map +1 -1
  62. package/dist/server/controllers/settings.js +7 -2
  63. package/dist/server/controllers/settings.js.map +1 -1
  64. package/dist/server/controllers/settings.mjs.map +1 -1
  65. package/dist/server/controllers/user.js +7 -2
  66. package/dist/server/controllers/user.js.map +1 -1
  67. package/dist/server/controllers/user.mjs.map +1 -1
  68. package/dist/server/controllers/validation/auth.js +5 -1
  69. package/dist/server/controllers/validation/auth.js.map +1 -1
  70. package/dist/server/controllers/validation/auth.mjs.map +1 -1
  71. package/dist/server/controllers/validation/email-template.js +7 -2
  72. package/dist/server/controllers/validation/email-template.js.map +1 -1
  73. package/dist/server/controllers/validation/user.js +5 -1
  74. package/dist/server/controllers/validation/user.js.map +1 -1
  75. package/dist/server/controllers/validation/user.mjs.map +1 -1
  76. package/dist/server/graphql/index.js.map +1 -1
  77. package/dist/server/graphql/index.mjs.map +1 -1
  78. package/dist/server/graphql/mutations/auth/change-password.js +5 -1
  79. package/dist/server/graphql/mutations/auth/change-password.js.map +1 -1
  80. package/dist/server/graphql/mutations/auth/email-confirmation.js +5 -1
  81. package/dist/server/graphql/mutations/auth/email-confirmation.js.map +1 -1
  82. package/dist/server/graphql/mutations/auth/forgot-password.js +5 -1
  83. package/dist/server/graphql/mutations/auth/forgot-password.js.map +1 -1
  84. package/dist/server/graphql/mutations/auth/login.js +5 -1
  85. package/dist/server/graphql/mutations/auth/login.js.map +1 -1
  86. package/dist/server/graphql/mutations/auth/login.mjs.map +1 -1
  87. package/dist/server/graphql/mutations/auth/register.js +5 -1
  88. package/dist/server/graphql/mutations/auth/register.js.map +1 -1
  89. package/dist/server/graphql/mutations/auth/reset-password.js +5 -1
  90. package/dist/server/graphql/mutations/auth/reset-password.js.map +1 -1
  91. package/dist/server/graphql/mutations/crud/role/create-role.js +5 -1
  92. package/dist/server/graphql/mutations/crud/role/create-role.js.map +1 -1
  93. package/dist/server/graphql/mutations/crud/role/create-role.mjs.map +1 -1
  94. package/dist/server/graphql/mutations/crud/role/delete-role.js.map +1 -1
  95. package/dist/server/graphql/mutations/crud/role/delete-role.mjs.map +1 -1
  96. package/dist/server/graphql/mutations/crud/role/update-role.js.map +1 -1
  97. package/dist/server/graphql/mutations/crud/role/update-role.mjs.map +1 -1
  98. package/dist/server/graphql/mutations/crud/user/create-user.js +5 -1
  99. package/dist/server/graphql/mutations/crud/user/create-user.js.map +1 -1
  100. package/dist/server/graphql/mutations/crud/user/create-user.mjs.map +1 -1
  101. package/dist/server/graphql/mutations/crud/user/update-user.js +5 -1
  102. package/dist/server/graphql/mutations/crud/user/update-user.js.map +1 -1
  103. package/dist/server/graphql/types/login-input.js.map +1 -1
  104. package/dist/server/graphql/types/login-input.mjs.map +1 -1
  105. package/dist/server/graphql/types/login-payload.js.map +1 -1
  106. package/dist/server/graphql/types/login-payload.mjs.map +1 -1
  107. package/dist/server/graphql/utils.js +5 -1
  108. package/dist/server/graphql/utils.js.map +1 -1
  109. package/dist/server/middlewares/rateLimit.js +11 -4
  110. package/dist/server/middlewares/rateLimit.js.map +1 -1
  111. package/dist/server/register.js +7 -2
  112. package/dist/server/register.js.map +1 -1
  113. package/dist/server/register.mjs.map +1 -1
  114. package/dist/server/routes/content-api/index.js +5 -1
  115. package/dist/server/routes/content-api/index.js.map +1 -1
  116. package/dist/server/routes/content-api/user.js +5 -1
  117. package/dist/server/routes/content-api/user.js.map +1 -1
  118. package/dist/server/routes/content-api/validation.js +7 -2
  119. package/dist/server/routes/content-api/validation.js.map +1 -1
  120. package/dist/server/services/jwt.js +7 -2
  121. package/dist/server/services/jwt.js.map +1 -1
  122. package/dist/server/services/jwt.mjs.map +1 -1
  123. package/dist/server/services/permission.js.map +1 -1
  124. package/dist/server/services/permission.mjs.map +1 -1
  125. package/dist/server/services/providers-registry.js +13 -5
  126. package/dist/server/services/providers-registry.js.map +1 -1
  127. package/dist/server/services/providers-registry.mjs.map +1 -1
  128. package/dist/server/services/providers.js +7 -2
  129. package/dist/server/services/providers.js.map +1 -1
  130. package/dist/server/services/providers.mjs.map +1 -1
  131. package/dist/server/services/role.js +7 -2
  132. package/dist/server/services/role.js.map +1 -1
  133. package/dist/server/services/role.mjs.map +1 -1
  134. package/dist/server/services/user.js +35 -9
  135. package/dist/server/services/user.js.map +1 -1
  136. package/dist/server/services/user.mjs +22 -4
  137. package/dist/server/services/user.mjs.map +1 -1
  138. package/dist/server/services/users-permissions.js +11 -4
  139. package/dist/server/services/users-permissions.js.map +1 -1
  140. package/dist/server/services/users-permissions.mjs.map +1 -1
  141. package/dist/server/strategies/users-permissions.js +7 -2
  142. package/dist/server/strategies/users-permissions.js.map +1 -1
  143. package/dist/server/strategies/users-permissions.mjs.map +1 -1
  144. package/dist/server/utils/index.js +5 -1
  145. package/dist/server/utils/index.js.map +1 -1
  146. package/dist/server/utils/index.mjs.map +1 -1
  147. package/dist/server/utils/sanitize/sanitizers.js +7 -2
  148. package/dist/server/utils/sanitize/sanitizers.js.map +1 -1
  149. package/package.json +4 -4
  150. package/server/services/user.js +22 -5
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../server/utils/index.js"],"sourcesContent":["'use strict';\n\nconst crypto = require('crypto');\nconst sanitize = require('./sanitize');\n\nconst MAX_USERNAME_ATTEMPTS = 10;\n\nconst getService = (name) => {\n return strapi.plugin('users-permissions').service(name);\n};\n\nconst isUsernameTaken = async (username) => {\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n return Boolean(user);\n};\n\nconst findValidUsername = async (basename) => {\n const minLength =\n strapi.getModel('plugin::users-permissions.user')?.attributes?.username?.minLength ?? 3;\n const tryBasenameFirst = basename.length >= minLength;\n\n let attempt = 0;\n let candidate;\n let taken;\n do {\n candidate =\n attempt === 0 && tryBasenameFirst ? basename : `${basename}${crypto.randomInt(1000, 9999)}`;\n taken = await isUsernameTaken(candidate);\n attempt += 1;\n } while (taken && attempt <= MAX_USERNAME_ATTEMPTS);\n\n return taken ? crypto.randomUUID() : candidate;\n};\n\nmodule.exports = {\n getService,\n isUsernameTaken,\n findValidUsername,\n sanitize,\n};\n"],"names":["crypto","require$$0","sanitize","require$$1","MAX_USERNAME_ATTEMPTS","getService","name","strapi","plugin","service","isUsernameTaken","username","user","db","query","findOne","where","Boolean","findValidUsername","basename","minLength","getModel","attributes","tryBasenameFirst","length","attempt","candidate","taken","randomInt","randomUUID","utils"],"mappings":";;;;;;;;;;AAEA,IAAA,MAAMA,MAAAA,GAASC,UAAAA;AACf,IAAA,MAAMC,QAAAA,GAAWC,eAAAA,EAAAA;AAEjB,IAAA,MAAMC,qBAAAA,GAAwB,EAAA;AAE9B,IAAA,MAAMC,aAAa,CAACC,IAAAA,GAAAA;AAClB,QAAA,OAAOC,MAAAA,CAAOC,MAAM,CAAC,mBAAA,CAAA,CAAqBC,OAAO,CAACH,IAAAA,CAAAA;AACpD,IAAA,CAAA;AAEA,IAAA,MAAMI,kBAAkB,OAAOC,QAAAA,GAAAA;QAC7B,MAAMC,IAAAA,GAAO,MAAML,MAAAA,CAAOM,EAAA,CACvBC,KAAK,CAAC,gCAAA,CAAA,CACNC,OAAO,CAAC;YAAEC,KAAAA,EAAO;AAAEL,gBAAAA;AAAQ;AAAE,SAAA,CAAA;AAChC,QAAA,OAAOM,OAAAA,CAAQL,IAAAA,CAAAA;AACjB,IAAA,CAAA;AAEA,IAAA,MAAMM,oBAAoB,OAAOC,QAAAA,GAAAA;AAC/B,QAAA,MAAMC,YACJb,MAAAA,CAAOc,QAAQ,CAAC,gCAAA,CAAA,EAAmCC,UAAAA,EAAYX,UAAUS,SAAAA,IAAa,CAAA;QACxF,MAAMG,gBAAAA,GAAmBJ,QAAAA,CAASK,MAAM,IAAIJ,SAAAA;AAE5C,QAAA,IAAIK,OAAAA,GAAU,CAAA;QACd,IAAIC,SAAAA;QACJ,IAAIC,KAAAA;QACJ,GAAG;YACDD,SAAAA,GACED,OAAAA,KAAY,CAAA,IAAKF,gBAAAA,GAAmBJ,QAAAA,GAAW,CAAA,EAAGA,WAAWnB,MAAAA,CAAO4B,SAAS,CAAC,IAAA,EAAM,IAAA,CAAA,CAAA,CAAO;AAC7FD,YAAAA,KAAAA,GAAQ,MAAMjB,eAAAA,CAAgBgB,SAAAA,CAAAA;YAC9BD,OAAAA,IAAW,CAAA;QACf,CAAA,OAAWE,KAAAA,IAASF,WAAWrB,qBAAAA;QAE7B,OAAOuB,KAAAA,GAAQ3B,MAAAA,CAAO6B,UAAU,EAAA,GAAKH,SAAAA;AACvC,IAAA,CAAA;IAEAI,KAAAA,GAAiB;AACfzB,QAAAA,UAAAA;AACAK,QAAAA,eAAAA;AACAQ,QAAAA,iBAAAA;AACAhB,QAAAA;AACF,KAAA;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../server/utils/index.js"],"sourcesContent":["'use strict';\n\nconst crypto = require('crypto');\nconst sanitize = require('./sanitize');\n\nconst MAX_USERNAME_ATTEMPTS = 10;\n\nconst getService = (name) => {\n return strapi.plugin('users-permissions').service(name);\n};\n\nconst isUsernameTaken = async (username) => {\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n return Boolean(user);\n};\n\nconst findValidUsername = async (basename) => {\n const minLength =\n strapi.getModel('plugin::users-permissions.user')?.attributes?.username?.minLength ?? 3;\n const tryBasenameFirst = basename.length >= minLength;\n\n let attempt = 0;\n let candidate;\n let taken;\n do {\n candidate =\n attempt === 0 && tryBasenameFirst ? basename : `${basename}${crypto.randomInt(1000, 9999)}`;\n taken = await isUsernameTaken(candidate);\n attempt += 1;\n } while (taken && attempt <= MAX_USERNAME_ATTEMPTS);\n\n return taken ? crypto.randomUUID() : candidate;\n};\n\nmodule.exports = {\n getService,\n isUsernameTaken,\n findValidUsername,\n sanitize,\n};\n"],"names":["crypto","require$$0","sanitize","require$$1","MAX_USERNAME_ATTEMPTS","getService","name","strapi","plugin","service","isUsernameTaken","username","user","db","query","findOne","where","Boolean","findValidUsername","basename","minLength","getModel","attributes","tryBasenameFirst","length","attempt","candidate","taken","randomInt","randomUUID","utils"],"mappings":";;;;;;;;;;;;;;AAEA,IAAA,MAAMA,MAAAA,GAASC,2BAAAA;AACf,IAAA,MAAMC,QAAAA,GAAWC,eAAAA,EAAAA;AAEjB,IAAA,MAAMC,qBAAAA,GAAwB,EAAA;AAE9B,IAAA,MAAMC,aAAa,CAACC,IAAAA,GAAAA;AAClB,QAAA,OAAOC,MAAAA,CAAOC,MAAM,CAAC,mBAAA,CAAA,CAAqBC,OAAO,CAACH,IAAAA,CAAAA;AACpD,IAAA,CAAA;AAEA,IAAA,MAAMI,kBAAkB,OAAOC,QAAAA,GAAAA;QAC7B,MAAMC,IAAAA,GAAO,MAAML,MAAAA,CAAOM,EAAE,CACzBC,KAAK,CAAC,gCAAA,CAAA,CACNC,OAAO,CAAC;YAAEC,KAAAA,EAAO;AAAEL,gBAAAA;AAAQ;AAAE,SAAA,CAAA;AAChC,QAAA,OAAOM,OAAAA,CAAQL,IAAAA,CAAAA;AACjB,IAAA,CAAA;AAEA,IAAA,MAAMM,oBAAoB,OAAOC,QAAAA,GAAAA;AAC/B,QAAA,MAAMC,YACJb,MAAAA,CAAOc,QAAQ,CAAC,gCAAA,CAAA,EAAmCC,UAAAA,EAAYX,UAAUS,SAAAA,IAAa,CAAA;QACxF,MAAMG,gBAAAA,GAAmBJ,QAAAA,CAASK,MAAM,IAAIJ,SAAAA;AAE5C,QAAA,IAAIK,OAAAA,GAAU,CAAA;QACd,IAAIC,SAAAA;QACJ,IAAIC,KAAAA;QACJ,GAAG;YACDD,SAAAA,GACED,OAAAA,KAAY,CAAA,IAAKF,gBAAAA,GAAmBJ,QAAAA,GAAW,CAAA,EAAGA,WAAWnB,MAAAA,CAAO4B,SAAS,CAAC,IAAA,EAAM,IAAA,CAAA,CAAA,CAAO;AAC7FD,YAAAA,KAAAA,GAAQ,MAAMjB,eAAAA,CAAgBgB,SAAAA,CAAAA;YAC9BD,OAAAA,IAAW,CAAA;QACf,CAAA,OAAWE,KAAAA,IAASF,WAAWrB,qBAAAA;QAE7B,OAAOuB,KAAAA,GAAQ3B,MAAAA,CAAO6B,UAAU,EAAA,GAAKH,SAAAA;AACvC,IAAA,CAAA;IAEAI,KAAAA,GAAiB;AACfzB,QAAAA,UAAAA;AACAK,QAAAA,eAAAA;AACAQ,QAAAA,iBAAAA;AACAhB,QAAAA;AACF,KAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../server/utils/index.js"],"sourcesContent":["'use strict';\n\nconst crypto = require('crypto');\nconst sanitize = require('./sanitize');\n\nconst MAX_USERNAME_ATTEMPTS = 10;\n\nconst getService = (name) => {\n return strapi.plugin('users-permissions').service(name);\n};\n\nconst isUsernameTaken = async (username) => {\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n return Boolean(user);\n};\n\nconst findValidUsername = async (basename) => {\n const minLength =\n strapi.getModel('plugin::users-permissions.user')?.attributes?.username?.minLength ?? 3;\n const tryBasenameFirst = basename.length >= minLength;\n\n let attempt = 0;\n let candidate;\n let taken;\n do {\n candidate =\n attempt === 0 && tryBasenameFirst ? basename : `${basename}${crypto.randomInt(1000, 9999)}`;\n taken = await isUsernameTaken(candidate);\n attempt += 1;\n } while (taken && attempt <= MAX_USERNAME_ATTEMPTS);\n\n return taken ? crypto.randomUUID() : candidate;\n};\n\nmodule.exports = {\n getService,\n isUsernameTaken,\n findValidUsername,\n sanitize,\n};\n"],"names":["crypto","require$$0","sanitize","require$$1","MAX_USERNAME_ATTEMPTS","getService","name","strapi","plugin","service","isUsernameTaken","username","user","db","query","findOne","where","Boolean","findValidUsername","basename","minLength","getModel","attributes","tryBasenameFirst","length","attempt","candidate","taken","randomInt","randomUUID","utils"],"mappings":";;;;;;;;AAEA,IAAA,MAAMA,MAAAA,GAASC,UAAAA;AACf,IAAA,MAAMC,QAAAA,GAAWC,eAAAA,EAAAA;AAEjB,IAAA,MAAMC,qBAAAA,GAAwB,EAAA;AAE9B,IAAA,MAAMC,aAAa,CAACC,IAAAA,GAAAA;AAClB,QAAA,OAAOC,MAAAA,CAAOC,MAAM,CAAC,mBAAA,CAAA,CAAqBC,OAAO,CAACH,IAAAA,CAAAA;AACpD,IAAA,CAAA;AAEA,IAAA,MAAMI,kBAAkB,OAAOC,QAAAA,GAAAA;QAC7B,MAAMC,IAAAA,GAAO,MAAML,MAAAA,CAAOM,EAAA,CACvBC,KAAK,CAAC,gCAAA,CAAA,CACNC,OAAO,CAAC;YAAEC,KAAAA,EAAO;AAAEL,gBAAAA;AAAQ;AAAE,SAAA,CAAA;AAChC,QAAA,OAAOM,OAAAA,CAAQL,IAAAA,CAAAA;AACjB,IAAA,CAAA;AAEA,IAAA,MAAMM,oBAAoB,OAAOC,QAAAA,GAAAA;AAC/B,QAAA,MAAMC,YACJb,MAAAA,CAAOc,QAAQ,CAAC,gCAAA,CAAA,EAAmCC,UAAAA,EAAYX,UAAUS,SAAAA,IAAa,CAAA;QACxF,MAAMG,gBAAAA,GAAmBJ,QAAAA,CAASK,MAAM,IAAIJ,SAAAA;AAE5C,QAAA,IAAIK,OAAAA,GAAU,CAAA;QACd,IAAIC,SAAAA;QACJ,IAAIC,KAAAA;QACJ,GAAG;YACDD,SAAAA,GACED,OAAAA,KAAY,CAAA,IAAKF,gBAAAA,GAAmBJ,QAAAA,GAAW,CAAA,EAAGA,WAAWnB,MAAAA,CAAO4B,SAAS,CAAC,IAAA,EAAM,IAAA,CAAA,CAAA,CAAO;AAC7FD,YAAAA,KAAAA,GAAQ,MAAMjB,eAAAA,CAAgBgB,SAAAA,CAAAA;YAC9BD,OAAAA,IAAW,CAAA;QACf,CAAA,OAAWE,KAAAA,IAASF,WAAWrB,qBAAAA;QAE7B,OAAOuB,KAAAA,GAAQ3B,MAAAA,CAAO6B,UAAU,EAAA,GAAKH,SAAAA;AACvC,IAAA,CAAA;IAEAI,KAAAA,GAAiB;AACfzB,QAAAA,UAAAA;AACAK,QAAAA,eAAAA;AACAQ,QAAAA,iBAAAA;AACAhB,QAAAA;AACF,KAAA;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/utils/index.js"],"sourcesContent":["'use strict';\n\nconst crypto = require('crypto');\nconst sanitize = require('./sanitize');\n\nconst MAX_USERNAME_ATTEMPTS = 10;\n\nconst getService = (name) => {\n return strapi.plugin('users-permissions').service(name);\n};\n\nconst isUsernameTaken = async (username) => {\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n return Boolean(user);\n};\n\nconst findValidUsername = async (basename) => {\n const minLength =\n strapi.getModel('plugin::users-permissions.user')?.attributes?.username?.minLength ?? 3;\n const tryBasenameFirst = basename.length >= minLength;\n\n let attempt = 0;\n let candidate;\n let taken;\n do {\n candidate =\n attempt === 0 && tryBasenameFirst ? basename : `${basename}${crypto.randomInt(1000, 9999)}`;\n taken = await isUsernameTaken(candidate);\n attempt += 1;\n } while (taken && attempt <= MAX_USERNAME_ATTEMPTS);\n\n return taken ? crypto.randomUUID() : candidate;\n};\n\nmodule.exports = {\n getService,\n isUsernameTaken,\n findValidUsername,\n sanitize,\n};\n"],"names":["crypto","require$$0","sanitize","require$$1","MAX_USERNAME_ATTEMPTS","getService","name","strapi","plugin","service","isUsernameTaken","username","user","db","query","findOne","where","Boolean","findValidUsername","basename","minLength","getModel","attributes","tryBasenameFirst","length","attempt","candidate","taken","randomInt","randomUUID","utils"],"mappings":";;;;;;;;AAEA,IAAA,MAAMA,MAAAA,GAASC,UAAAA;AACf,IAAA,MAAMC,QAAAA,GAAWC,eAAAA,EAAAA;AAEjB,IAAA,MAAMC,qBAAAA,GAAwB,EAAA;AAE9B,IAAA,MAAMC,aAAa,CAACC,IAAAA,GAAAA;AAClB,QAAA,OAAOC,MAAAA,CAAOC,MAAM,CAAC,mBAAA,CAAA,CAAqBC,OAAO,CAACH,IAAAA,CAAAA;AACpD,IAAA,CAAA;AAEA,IAAA,MAAMI,kBAAkB,OAAOC,QAAAA,GAAAA;QAC7B,MAAMC,IAAAA,GAAO,MAAML,MAAAA,CAAOM,EAAE,CACzBC,KAAK,CAAC,gCAAA,CAAA,CACNC,OAAO,CAAC;YAAEC,KAAAA,EAAO;AAAEL,gBAAAA;AAAQ;AAAE,SAAA,CAAA;AAChC,QAAA,OAAOM,OAAAA,CAAQL,IAAAA,CAAAA;AACjB,IAAA,CAAA;AAEA,IAAA,MAAMM,oBAAoB,OAAOC,QAAAA,GAAAA;AAC/B,QAAA,MAAMC,YACJb,MAAAA,CAAOc,QAAQ,CAAC,gCAAA,CAAA,EAAmCC,UAAAA,EAAYX,UAAUS,SAAAA,IAAa,CAAA;QACxF,MAAMG,gBAAAA,GAAmBJ,QAAAA,CAASK,MAAM,IAAIJ,SAAAA;AAE5C,QAAA,IAAIK,OAAAA,GAAU,CAAA;QACd,IAAIC,SAAAA;QACJ,IAAIC,KAAAA;QACJ,GAAG;YACDD,SAAAA,GACED,OAAAA,KAAY,CAAA,IAAKF,gBAAAA,GAAmBJ,QAAAA,GAAW,CAAA,EAAGA,WAAWnB,MAAAA,CAAO4B,SAAS,CAAC,IAAA,EAAM,IAAA,CAAA,CAAA,CAAO;AAC7FD,YAAAA,KAAAA,GAAQ,MAAMjB,eAAAA,CAAgBgB,SAAAA,CAAAA;YAC9BD,OAAAA,IAAW,CAAA;QACf,CAAA,OAAWE,KAAAA,IAASF,WAAWrB,qBAAAA;QAE7B,OAAOuB,KAAAA,GAAQ3B,MAAAA,CAAO6B,UAAU,EAAA,GAAKH,SAAAA;AACvC,IAAA,CAAA;IAEAI,KAAAA,GAAiB;AACfzB,QAAAA,UAAAA;AACAK,QAAAA,eAAAA;AACAQ,QAAAA,iBAAAA;AACAhB,QAAAA;AACF,KAAA;;;;;;"}
@@ -4,13 +4,18 @@ var require$$0 = require('lodash/fp');
4
4
  var require$$1 = require('@strapi/utils');
5
5
  var index = require('./visitors/index.js');
6
6
 
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var require$$0__default = /*#__PURE__*/_interopDefault(require$$0);
10
+ var require$$1__default = /*#__PURE__*/_interopDefault(require$$1);
11
+
7
12
  var sanitizers;
8
13
  var hasRequiredSanitizers;
9
14
  function requireSanitizers() {
10
15
  if (hasRequiredSanitizers) return sanitizers;
11
16
  hasRequiredSanitizers = 1;
12
- const { curry } = require$$0;
13
- const { traverseEntity, async } = require$$1;
17
+ const { curry } = require$$0__default.default;
18
+ const { traverseEntity, async } = require$$1__default.default;
14
19
  const { removeUserRelationFromRoleEntities } = index.__require();
15
20
  const sanitizeUserRelationFromRoleEntities = curry((schema, entity)=>{
16
21
  return traverseEntity(removeUserRelationFromRoleEntities, {
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizers.js","sources":["../../../../server/utils/sanitize/sanitizers.js"],"sourcesContent":["'use strict';\n\nconst { curry } = require('lodash/fp');\nconst { traverseEntity, async } = require('@strapi/utils');\n\nconst { removeUserRelationFromRoleEntities } = require('./visitors');\n\nconst sanitizeUserRelationFromRoleEntities = curry((schema, entity) => {\n return traverseEntity(\n removeUserRelationFromRoleEntities,\n { schema, getModel: strapi.getModel.bind(strapi) },\n entity\n );\n});\n\nconst defaultSanitizeOutput = curry((schema, entity) => {\n return async.pipe(sanitizeUserRelationFromRoleEntities(schema))(entity);\n});\n\nmodule.exports = {\n sanitizeUserRelationFromRoleEntities,\n defaultSanitizeOutput,\n};\n"],"names":["curry","require$$0","traverseEntity","async","require$$1","removeUserRelationFromRoleEntities","require$$2","sanitizeUserRelationFromRoleEntities","schema","entity","getModel","strapi","bind","defaultSanitizeOutput","pipe","sanitizers"],"mappings":";;;;;;;;;;;IAEA,MAAM,EAAEA,KAAK,EAAE,GAAGC,UAAAA;AAClB,IAAA,MAAM,EAAEC,cAAc,EAAEC,KAAK,EAAE,GAAGC,UAAAA;IAElC,MAAM,EAAEC,kCAAkC,EAAE,GAAGC,eAAAA,EAAAA;IAE/C,MAAMC,oCAAAA,GAAuCP,KAAAA,CAAM,CAACQ,MAAAA,EAAQC,MAAAA,GAAAA;AAC1D,QAAA,OAAOP,eACLG,kCAAAA,EACA;AAAEG,YAAAA,MAAAA;AAAQE,YAAAA,QAAAA,EAAUC,MAAAA,CAAOD,QAAQ,CAACE,IAAI,CAACD,MAAAA;SAAO,EAChDF,MAAAA,CAAAA;AAEJ,IAAA,CAAA,CAAA;IAEA,MAAMI,qBAAAA,GAAwBb,KAAAA,CAAM,CAACQ,MAAAA,EAAQC,MAAAA,GAAAA;AAC3C,QAAA,OAAON,KAAAA,CAAMW,IAAI,CAACP,oCAAAA,CAAqCC,MAAAA,CAAAA,CAAAA,CAASC,MAAAA,CAAAA;AAClE,IAAA,CAAA,CAAA;IAEAM,UAAAA,GAAiB;AACfR,QAAAA,oCAAAA;AACAM,QAAAA;AACF,KAAA;;;;;;"}
1
+ {"version":3,"file":"sanitizers.js","sources":["../../../../server/utils/sanitize/sanitizers.js"],"sourcesContent":["'use strict';\n\nconst { curry } = require('lodash/fp');\nconst { traverseEntity, async } = require('@strapi/utils');\n\nconst { removeUserRelationFromRoleEntities } = require('./visitors');\n\nconst sanitizeUserRelationFromRoleEntities = curry((schema, entity) => {\n return traverseEntity(\n removeUserRelationFromRoleEntities,\n { schema, getModel: strapi.getModel.bind(strapi) },\n entity\n );\n});\n\nconst defaultSanitizeOutput = curry((schema, entity) => {\n return async.pipe(sanitizeUserRelationFromRoleEntities(schema))(entity);\n});\n\nmodule.exports = {\n sanitizeUserRelationFromRoleEntities,\n defaultSanitizeOutput,\n};\n"],"names":["curry","require$$0","traverseEntity","async","require$$1","removeUserRelationFromRoleEntities","require$$2","sanitizeUserRelationFromRoleEntities","schema","entity","getModel","strapi","bind","defaultSanitizeOutput","pipe","sanitizers"],"mappings":";;;;;;;;;;;;;;;;IAEA,MAAM,EAAEA,KAAK,EAAE,GAAGC,2BAAAA;AAClB,IAAA,MAAM,EAAEC,cAAc,EAAEC,KAAK,EAAE,GAAGC,2BAAAA;IAElC,MAAM,EAAEC,kCAAkC,EAAE,GAAGC,eAAAA,EAAAA;IAE/C,MAAMC,oCAAAA,GAAuCP,KAAAA,CAAM,CAACQ,MAAAA,EAAQC,MAAAA,GAAAA;AAC1D,QAAA,OAAOP,eACLG,kCAAAA,EACA;AAAEG,YAAAA,MAAAA;AAAQE,YAAAA,QAAAA,EAAUC,MAAAA,CAAOD,QAAQ,CAACE,IAAI,CAACD,MAAAA;SAAO,EAChDF,MAAAA,CAAAA;AAEJ,IAAA,CAAA,CAAA;IAEA,MAAMI,qBAAAA,GAAwBb,KAAAA,CAAM,CAACQ,MAAAA,EAAQC,MAAAA,GAAAA;AAC3C,QAAA,OAAON,KAAAA,CAAMW,IAAI,CAACP,oCAAAA,CAAqCC,MAAAA,CAAAA,CAAAA,CAASC,MAAAA,CAAAA;AAClE,IAAA,CAAA,CAAA;IAEAM,UAAAA,GAAiB;AACfR,QAAAA,oCAAAA;AACAM,QAAAA;AACF,KAAA;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/plugin-users-permissions",
3
- "version": "5.48.0",
3
+ "version": "5.49.0",
4
4
  "description": "Protect your API with a full-authentication process based on JWT",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -55,7 +55,7 @@
55
55
  "dependencies": {
56
56
  "@strapi/design-system": "2.2.0",
57
57
  "@strapi/icons": "2.2.0",
58
- "@strapi/utils": "5.48.0",
58
+ "@strapi/utils": "5.49.0",
59
59
  "bcryptjs": "2.4.3",
60
60
  "formik": "2.4.5",
61
61
  "grant": "5.4.24",
@@ -75,7 +75,7 @@
75
75
  "zod": "3.25.67"
76
76
  },
77
77
  "devDependencies": {
78
- "@strapi/strapi": "5.48.0",
78
+ "@strapi/strapi": "5.49.0",
79
79
  "@testing-library/dom": "10.4.1",
80
80
  "@testing-library/react": "16.3.2",
81
81
  "@testing-library/user-event": "14.6.1",
@@ -93,7 +93,7 @@
93
93
  "styled-components": "^6.0.0"
94
94
  },
95
95
  "engines": {
96
- "node": ">=20.0.0 <=24.x.x",
96
+ "node": ">=20.0.0 <=26.x.x",
97
97
  "npm": ">=6.0.0"
98
98
  },
99
99
  "strapi": {
@@ -59,8 +59,12 @@ module.exports = ({ strapi }) => ({
59
59
  * @return {Promise}
60
60
  */
61
61
  async add(values) {
62
- return strapi.db.query(USER_MODEL_UID).create({
63
- data: await this.ensureHashedPasswords(values),
62
+ // Use the Document Service so relation inputs accept both the internal
63
+ // numeric id (legacy) and the documentId (v5 default) syntax, consistent
64
+ // with every other content-type endpoint. The Document Service hashes
65
+ // `password` attributes itself, so we must not pre-hash here.
66
+ return strapi.documents(USER_MODEL_UID).create({
67
+ data: values,
64
68
  populate: ['role'],
65
69
  });
66
70
  },
@@ -72,9 +76,22 @@ module.exports = ({ strapi }) => ({
72
76
  * @return {Promise}
73
77
  */
74
78
  async edit(userId, params = {}) {
75
- return strapi.db.query(USER_MODEL_UID).update({
76
- where: { id: userId },
77
- data: await this.ensureHashedPasswords(params),
79
+ // The user is addressed by its numeric id (e.g. the `/users/:id` route),
80
+ // but the Document Service updates by documentId. Resolve it first so the
81
+ // relation inputs are processed by the Document Service, which accepts both
82
+ // numeric ids (legacy) and documentIds (v5 default). The Document Service
83
+ // hashes `password` attributes itself, so we must not pre-hash here.
84
+ const entry = await strapi.db
85
+ .query(USER_MODEL_UID)
86
+ .findOne({ where: { id: userId }, select: ['documentId'] });
87
+
88
+ if (!entry) {
89
+ return null;
90
+ }
91
+
92
+ return strapi.documents(USER_MODEL_UID).update({
93
+ documentId: entry.documentId,
94
+ data: params,
78
95
  populate: ['role'],
79
96
  });
80
97
  },