@strapi/admin 5.48.1 → 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 (317) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +33 -20
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +6 -1
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/ConfirmDialog.js +3 -2
  6. package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
  7. package/dist/admin/admin/src/components/Context.js +4 -3
  8. package/dist/admin/admin/src/components/Context.js.map +1 -1
  9. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -4
  10. package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
  11. package/dist/admin/admin/src/components/Filters.js +3 -2
  12. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  13. package/dist/admin/admin/src/components/Form.js +9 -5
  14. package/dist/admin/admin/src/components/Form.js.map +1 -1
  15. package/dist/admin/admin/src/components/FormInputs/Date.js +3 -2
  16. package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
  17. package/dist/admin/admin/src/components/FormInputs/Json.js +3 -2
  18. package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
  19. package/dist/admin/admin/src/components/GapDropZone.js +3 -2
  20. package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
  21. package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
  22. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  23. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +3 -2
  24. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
  25. package/dist/admin/admin/src/components/GuidedTour/Tours.js +9 -3
  26. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  27. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +6 -1
  28. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/LanguageProvider.js +5 -1
  30. package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
  31. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +3 -2
  32. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  33. package/dist/admin/admin/src/components/LeftMenu.js +3 -2
  34. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  35. package/dist/admin/admin/src/components/NpsSurvey.js +4 -3
  36. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  37. package/dist/admin/admin/src/components/PageHelpers.js +3 -2
  38. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  39. package/dist/admin/admin/src/components/Pagination.js +3 -2
  40. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  41. package/dist/admin/admin/src/components/PluginsInitializer.js +3 -2
  42. package/dist/admin/admin/src/components/PluginsInitializer.js.map +1 -1
  43. package/dist/admin/admin/src/components/RelativeTime.js +3 -2
  44. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  45. package/dist/admin/admin/src/components/ResizeIndicator.js +3 -2
  46. package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
  47. package/dist/admin/admin/src/components/SearchInput.js +3 -2
  48. package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
  49. package/dist/admin/admin/src/components/Table.js +3 -2
  50. package/dist/admin/admin/src/components/Table.js.map +1 -1
  51. package/dist/admin/admin/src/components/Theme.js +3 -2
  52. package/dist/admin/admin/src/components/Theme.js.map +1 -1
  53. package/dist/admin/admin/src/components/WidgetRoot.js +9 -5
  54. package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
  55. package/dist/admin/admin/src/core/apis/CustomFields.js +14 -10
  56. package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
  57. package/dist/admin/admin/src/core/apis/Widgets.js +8 -4
  58. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  59. package/dist/admin/admin/src/core/apis/router.js +20 -16
  60. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  61. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  62. package/dist/admin/admin/src/features/Auth.js +78 -6
  63. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  64. package/dist/admin/admin/src/features/Auth.mjs +77 -6
  65. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  66. package/dist/admin/admin/src/features/BackButton.js +3 -2
  67. package/dist/admin/admin/src/features/BackButton.js.map +1 -1
  68. package/dist/admin/admin/src/features/Configuration.js +3 -2
  69. package/dist/admin/admin/src/features/Configuration.js.map +1 -1
  70. package/dist/admin/admin/src/features/Notifications.js +3 -2
  71. package/dist/admin/admin/src/features/Notifications.js.map +1 -1
  72. package/dist/admin/admin/src/features/Tracking.js +7 -3
  73. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  74. package/dist/admin/admin/src/features/Widgets.js +3 -2
  75. package/dist/admin/admin/src/features/Widgets.js.map +1 -1
  76. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +3 -2
  77. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
  78. package/dist/admin/admin/src/hooks/useAdminRoles.js +3 -2
  79. package/dist/admin/admin/src/hooks/useAdminRoles.js.map +1 -1
  80. package/dist/admin/admin/src/hooks/useControllableState.js +3 -2
  81. package/dist/admin/admin/src/hooks/useControllableState.js.map +1 -1
  82. package/dist/admin/admin/src/hooks/useDebounce.js +3 -2
  83. package/dist/admin/admin/src/hooks/useDebounce.js.map +1 -1
  84. package/dist/admin/admin/src/hooks/useDeviceType.js +3 -2
  85. package/dist/admin/admin/src/hooks/useDeviceType.js.map +1 -1
  86. package/dist/admin/admin/src/hooks/useElementOnScreen.js +3 -2
  87. package/dist/admin/admin/src/hooks/useElementOnScreen.js.map +1 -1
  88. package/dist/admin/admin/src/hooks/useEnterprise.js +3 -2
  89. package/dist/admin/admin/src/hooks/useEnterprise.js.map +1 -1
  90. package/dist/admin/admin/src/hooks/useFetchClient.js +3 -2
  91. package/dist/admin/admin/src/hooks/useFetchClient.js.map +1 -1
  92. package/dist/admin/admin/src/hooks/useForceUpdate.js +3 -2
  93. package/dist/admin/admin/src/hooks/useForceUpdate.js.map +1 -1
  94. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +85 -15
  95. package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -1
  96. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +82 -14
  97. package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -1
  98. package/dist/admin/admin/src/hooks/useIsMounted.js +3 -2
  99. package/dist/admin/admin/src/hooks/useIsMounted.js.map +1 -1
  100. package/dist/admin/admin/src/hooks/useMediaQuery.js +3 -2
  101. package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
  102. package/dist/admin/admin/src/hooks/useMenu.js +7 -3
  103. package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
  104. package/dist/admin/admin/src/hooks/useOnce.js +3 -2
  105. package/dist/admin/admin/src/hooks/useOnce.js.map +1 -1
  106. package/dist/admin/admin/src/hooks/useRBAC.js +7 -3
  107. package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
  108. package/dist/admin/admin/src/hooks/useSettingsMenu.js +7 -3
  109. package/dist/admin/admin/src/hooks/useSettingsMenu.js.map +1 -1
  110. package/dist/admin/admin/src/hooks/useThrottledCallback.js +5 -1
  111. package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
  112. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +11 -5
  113. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  114. package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js +3 -2
  115. package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js.map +1 -1
  116. package/dist/admin/admin/src/pages/Auth/components/Login.js +8 -4
  117. package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
  118. package/dist/admin/admin/src/pages/Auth/components/Oops.js +3 -2
  119. package/dist/admin/admin/src/pages/Auth/components/Oops.js.map +1 -1
  120. package/dist/admin/admin/src/pages/Auth/components/Register.js +9 -5
  121. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  122. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +4 -3
  123. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  124. package/dist/admin/admin/src/pages/Home/HomePage.js +3 -2
  125. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  126. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +8 -4
  127. package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
  128. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +7 -3
  129. package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
  130. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +7 -3
  131. package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
  132. package/dist/admin/admin/src/pages/ProfilePage.js +8 -4
  133. package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
  134. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +3 -2
  135. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  136. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -2
  137. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  138. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +3 -2
  139. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
  140. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js +3 -2
  141. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -1
  142. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +3 -2
  143. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -1
  144. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +3 -2
  145. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -1
  146. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +4 -3
  147. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -1
  148. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +3 -2
  149. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  150. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +7 -2
  151. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
  152. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +5 -1
  153. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  154. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js +6 -2
  155. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
  156. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +4 -3
  157. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  158. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +3 -2
  159. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
  160. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +7 -3
  161. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  162. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js +3 -2
  163. package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
  164. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +4 -3
  165. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  166. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +4 -3
  167. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  168. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js +3 -2
  169. package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
  170. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +10 -6
  171. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  172. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js +3 -2
  173. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
  174. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +13 -7
  175. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  176. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +15 -9
  177. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  178. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +9 -5
  179. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  180. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +33 -25
  181. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  182. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +10 -6
  183. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  184. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +3 -2
  185. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  186. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js +9 -3
  187. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js.map +1 -1
  188. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js +8 -3
  189. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
  190. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js +6 -2
  191. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js.map +1 -1
  192. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js +8 -3
  193. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js.map +1 -1
  194. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +4 -3
  195. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  196. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +4 -3
  197. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
  198. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -5
  199. package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
  200. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +4 -3
  201. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  202. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +3 -2
  203. package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
  204. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js +4 -3
  205. package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
  206. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +3 -2
  207. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
  208. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js +3 -2
  209. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
  210. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +3 -2
  211. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
  212. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +3 -2
  213. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
  214. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +4 -3
  215. package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
  216. package/dist/admin/admin/src/pages/UseCasePage.js +3 -2
  217. package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
  218. package/dist/admin/admin/src/utils/getFetchClient.js +7 -2
  219. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  220. package/dist/admin/admin/src/utils/locales.js +3 -2
  221. package/dist/admin/admin/src/utils/locales.js.map +1 -1
  222. package/dist/admin/admin/src/utils/objects.js +9 -4
  223. package/dist/admin/admin/src/utils/objects.js.map +1 -1
  224. package/dist/admin/admin/src/utils/rulesEngine.js +5 -1
  225. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  226. package/dist/admin/admin/src/utils/urls.js +5 -1
  227. package/dist/admin/admin/src/utils/urls.js.map +1 -1
  228. package/dist/admin/admin/tests/utils.js +3 -2
  229. package/dist/admin/admin/tests/utils.js.map +1 -1
  230. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +7 -3
  231. package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
  232. package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js +3 -2
  233. package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js.map +1 -1
  234. package/dist/admin/ee/admin/src/pages/AuthResponse.js +3 -2
  235. package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
  236. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +3 -2
  237. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
  238. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +3 -2
  239. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
  240. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js +5 -1
  241. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
  242. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +3 -2
  243. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  244. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +7 -3
  245. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
  246. package/dist/admin/src/StrapiApp.d.ts +7 -1
  247. package/dist/admin/src/core/apis/router.d.ts +1 -2
  248. package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +66 -12
  249. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +5 -1
  250. package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
  251. package/dist/server/ee/server/src/controllers/authentication.js +5 -1
  252. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  253. package/dist/server/ee/server/src/controllers/user.js +6 -2
  254. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  255. package/dist/server/ee/server/src/services/auth.js +5 -1
  256. package/dist/server/ee/server/src/services/auth.js.map +1 -1
  257. package/dist/server/ee/server/src/services/user.js +8 -4
  258. package/dist/server/ee/server/src/services/user.js.map +1 -1
  259. package/dist/server/index.js +6 -2
  260. package/dist/server/index.js.map +1 -1
  261. package/dist/server/server/src/ai/services/ai.js +10 -4
  262. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  263. package/dist/server/server/src/controllers/admin.js +9 -4
  264. package/dist/server/server/src/controllers/admin.js.map +1 -1
  265. package/dist/server/server/src/controllers/authentication.js +7 -2
  266. package/dist/server/server/src/controllers/authentication.js.map +1 -1
  267. package/dist/server/server/src/controllers/user.js +3 -2
  268. package/dist/server/server/src/controllers/user.js.map +1 -1
  269. package/dist/server/server/src/controllers/webhooks.js +7 -2
  270. package/dist/server/server/src/controllers/webhooks.js.map +1 -1
  271. package/dist/server/server/src/middlewares/rateLimit.js +7 -2
  272. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  273. package/dist/server/server/src/policies/hasPermissions.js +7 -3
  274. package/dist/server/server/src/policies/hasPermissions.js.map +1 -1
  275. package/dist/server/server/src/routes/serve-admin-panel.js +8 -3
  276. package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
  277. package/dist/server/server/src/services/api-token.js +7 -3
  278. package/dist/server/server/src/services/api-token.js.map +1 -1
  279. package/dist/server/server/src/services/auth.js +8 -3
  280. package/dist/server/server/src/services/auth.js.map +1 -1
  281. package/dist/server/server/src/services/content-type.js +6 -2
  282. package/dist/server/server/src/services/content-type.js.map +1 -1
  283. package/dist/server/server/src/services/encryption.js +8 -4
  284. package/dist/server/server/src/services/encryption.js.map +1 -1
  285. package/dist/server/server/src/services/passport.js +6 -2
  286. package/dist/server/server/src/services/passport.js.map +1 -1
  287. package/dist/server/server/src/services/permission/engine.js +5 -1
  288. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  289. package/dist/server/server/src/services/permission/permissions-manager/index.js +5 -1
  290. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  291. package/dist/server/server/src/services/permission/permissions-manager/query-builders.js +14 -10
  292. package/dist/server/server/src/services/permission/permissions-manager/query-builders.js.map +1 -1
  293. package/dist/server/server/src/services/permission/queries.js +5 -1
  294. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  295. package/dist/server/server/src/services/project-settings.js +6 -2
  296. package/dist/server/server/src/services/project-settings.js.map +1 -1
  297. package/dist/server/server/src/services/role.js +8 -4
  298. package/dist/server/server/src/services/role.js.map +1 -1
  299. package/dist/server/server/src/services/token.js +7 -2
  300. package/dist/server/server/src/services/token.js.map +1 -1
  301. package/dist/server/server/src/services/transfer/permission.js +5 -1
  302. package/dist/server/server/src/services/transfer/permission.js.map +1 -1
  303. package/dist/server/server/src/services/transfer/token.js +10 -5
  304. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  305. package/dist/server/server/src/services/user.js +10 -6
  306. package/dist/server/server/src/services/user.js.map +1 -1
  307. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js +5 -1
  308. package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
  309. package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js +6 -2
  310. package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -1
  311. package/dist/server/server/src/validation/common-validators.js +6 -2
  312. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  313. package/dist/server/server/src/validation/policies/hasPermissions.js +6 -2
  314. package/dist/server/server/src/validation/policies/hasPermissions.js.map +1 -1
  315. package/dist/server/shared/utils/session-auth.js +5 -1
  316. package/dist/server/shared/utils/session-auth.js.map +1 -1
  317. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n Grid,\n JSONInput,\n Loader,\n Modal as DSModal,\n Typography,\n Breadcrumbs,\n Crumb,\n Field,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { AuditLog } from '../../../../../../../../shared/contracts/audit-logs';\nimport { useGetAuditLogQuery } from '../../../../../services/auditLogs';\nimport { useFormatTimeStamp } from '../hooks/useFormatTimeStamp';\nimport { actionTypes, getDefaultMessage } from '../utils/getActionTypesDefaultMessages';\n\ninterface ModalProps {\n handleClose: () => void;\n logId: string;\n}\n\nexport const Modal = ({ handleClose, logId }: ModalProps) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading } = useGetAuditLogQuery(logId);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n handleClose();\n }\n }, [error, formatAPIError, handleClose, toggleNotification]);\n\n const formatTimeStamp = useFormatTimeStamp();\n const formattedDate = data && 'date' in data ? formatTimeStamp(data.date) : '';\n\n return (\n <DSModal.Root defaultOpen onOpenChange={handleClose}>\n <DSModal.Content>\n <DSModal.Header>\n {/**\n * TODO: this is not semantically correct and should be amended.\n */}\n <Breadcrumbs label={formattedDate} id=\"title\">\n <Crumb isCurrent>{formattedDate}</Crumb>\n </Breadcrumbs>\n </DSModal.Header>\n <DSModal.Body>\n <ActionBody isLoading={isLoading} data={data as AuditLog} formattedDate={formattedDate} />\n </DSModal.Body>\n </DSModal.Content>\n </DSModal.Root>\n );\n};\n\ninterface ActionBodyProps {\n isLoading?: boolean;\n data: AuditLog;\n formattedDate: string;\n}\n\nconst ActionBody = ({ isLoading, data, formattedDate }: ActionBodyProps) => {\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <Flex padding={7} justifyContent=\"center\" alignItems=\"center\">\n {/**\n * TODO: this will need to be translated.\n */}\n <Loader>Loading content...</Loader>\n </Flex>\n );\n }\n\n const { action, user, payload } = data;\n\n return (\n <>\n <Box marginBottom={3}>\n <Typography variant=\"delta\" id=\"title\">\n {formatMessage({\n id: 'Settings.permissions.auditLogs.details',\n defaultMessage: 'Log Details',\n })}\n </Typography>\n </Box>\n <Grid.Root\n gap={4}\n gridCols={2}\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={6}\n marginBottom={4}\n background=\"neutral100\"\n hasRadius\n >\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n })}\n actionName={formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action as keyof typeof actionTypes),\n },\n // @ts-expect-error - any\n { model: payload?.model }\n )}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n })}\n actionName={formattedDate}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n })}\n actionName={user?.displayName || '-'}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.userId',\n defaultMessage: 'User ID',\n })}\n actionName={user?.id.toString() || '-'}\n />\n </Grid.Root>\n <Field.Root>\n <Field.Label>\n {formatMessage({\n id: 'Settings.permissions.auditLogs.payload',\n defaultMessage: 'Payload',\n })}\n </Field.Label>\n <Payload value={JSON.stringify(payload, null, 2)} disabled />\n </Field.Root>\n </>\n );\n};\n\nconst Payload = styled(JSONInput)`\n max-width: 100%;\n overflow: scroll;\n`;\n\ninterface ActionItemProps {\n actionLabel: string;\n actionName: string;\n}\n\nconst ActionItem = ({ actionLabel, actionName }: ActionItemProps) => {\n return (\n <Flex direction=\"column\" alignItems=\"baseline\" gap={1}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {actionLabel}\n </Typography>\n <Typography textColor=\"neutral600\">{actionName}</Typography>\n </Flex>\n );\n};\n"],"names":["Modal","handleClose","logId","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","data","error","isLoading","useGetAuditLogQuery","React","useEffect","type","message","formatTimeStamp","useFormatTimeStamp","formattedDate","date","_jsx","DSModal","Root","defaultOpen","onOpenChange","_jsxs","Content","Header","Breadcrumbs","label","id","Crumb","isCurrent","Body","ActionBody","formatMessage","useIntl","Flex","padding","justifyContent","alignItems","Loader","action","user","payload","_Fragment","Box","marginBottom","Typography","variant","defaultMessage","Grid","gap","gridCols","paddingTop","paddingBottom","paddingLeft","paddingRight","background","hasRadius","ActionItem","actionLabel","actionName","getDefaultMessage","model","displayName","toString","Field","Label","Payload","value","JSON","stringify","disabled","styled","JSONInput","direction","textColor"],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n Grid,\n JSONInput,\n Loader,\n Modal as DSModal,\n Typography,\n Breadcrumbs,\n Crumb,\n Field,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { AuditLog } from '../../../../../../../../shared/contracts/audit-logs';\nimport { useGetAuditLogQuery } from '../../../../../services/auditLogs';\nimport { useFormatTimeStamp } from '../hooks/useFormatTimeStamp';\nimport { actionTypes, getDefaultMessage } from '../utils/getActionTypesDefaultMessages';\n\ninterface ModalProps {\n handleClose: () => void;\n logId: string;\n}\n\nexport const Modal = ({ handleClose, logId }: ModalProps) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const { data, error, isLoading } = useGetAuditLogQuery(logId);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n handleClose();\n }\n }, [error, formatAPIError, handleClose, toggleNotification]);\n\n const formatTimeStamp = useFormatTimeStamp();\n const formattedDate = data && 'date' in data ? formatTimeStamp(data.date) : '';\n\n return (\n <DSModal.Root defaultOpen onOpenChange={handleClose}>\n <DSModal.Content>\n <DSModal.Header>\n {/**\n * TODO: this is not semantically correct and should be amended.\n */}\n <Breadcrumbs label={formattedDate} id=\"title\">\n <Crumb isCurrent>{formattedDate}</Crumb>\n </Breadcrumbs>\n </DSModal.Header>\n <DSModal.Body>\n <ActionBody isLoading={isLoading} data={data as AuditLog} formattedDate={formattedDate} />\n </DSModal.Body>\n </DSModal.Content>\n </DSModal.Root>\n );\n};\n\ninterface ActionBodyProps {\n isLoading?: boolean;\n data: AuditLog;\n formattedDate: string;\n}\n\nconst ActionBody = ({ isLoading, data, formattedDate }: ActionBodyProps) => {\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <Flex padding={7} justifyContent=\"center\" alignItems=\"center\">\n {/**\n * TODO: this will need to be translated.\n */}\n <Loader>Loading content...</Loader>\n </Flex>\n );\n }\n\n const { action, user, payload } = data;\n\n return (\n <>\n <Box marginBottom={3}>\n <Typography variant=\"delta\" id=\"title\">\n {formatMessage({\n id: 'Settings.permissions.auditLogs.details',\n defaultMessage: 'Log Details',\n })}\n </Typography>\n </Box>\n <Grid.Root\n gap={4}\n gridCols={2}\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={6}\n marginBottom={4}\n background=\"neutral100\"\n hasRadius\n >\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n })}\n actionName={formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action as keyof typeof actionTypes),\n },\n // @ts-expect-error - any\n { model: payload?.model }\n )}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n })}\n actionName={formattedDate}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n })}\n actionName={user?.displayName || '-'}\n />\n <ActionItem\n actionLabel={formatMessage({\n id: 'Settings.permissions.auditLogs.userId',\n defaultMessage: 'User ID',\n })}\n actionName={user?.id.toString() || '-'}\n />\n </Grid.Root>\n <Field.Root>\n <Field.Label>\n {formatMessage({\n id: 'Settings.permissions.auditLogs.payload',\n defaultMessage: 'Payload',\n })}\n </Field.Label>\n <Payload value={JSON.stringify(payload, null, 2)} disabled />\n </Field.Root>\n </>\n );\n};\n\nconst Payload = styled(JSONInput)`\n max-width: 100%;\n overflow: scroll;\n`;\n\ninterface ActionItemProps {\n actionLabel: string;\n actionName: string;\n}\n\nconst ActionItem = ({ actionLabel, actionName }: ActionItemProps) => {\n return (\n <Flex direction=\"column\" alignItems=\"baseline\" gap={1}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {actionLabel}\n </Typography>\n <Typography textColor=\"neutral600\">{actionName}</Typography>\n </Flex>\n );\n};\n"],"names":["Modal","handleClose","logId","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","data","error","isLoading","useGetAuditLogQuery","React","useEffect","type","message","formatTimeStamp","useFormatTimeStamp","formattedDate","date","_jsx","DSModal","Root","defaultOpen","onOpenChange","_jsxs","Content","Header","Breadcrumbs","label","id","Crumb","isCurrent","Body","ActionBody","formatMessage","useIntl","Flex","padding","justifyContent","alignItems","Loader","action","user","payload","_Fragment","Box","marginBottom","Typography","variant","defaultMessage","Grid","gap","gridCols","paddingTop","paddingBottom","paddingLeft","paddingRight","background","hasRadius","ActionItem","actionLabel","actionName","getDefaultMessage","model","displayName","toString","Field","Label","Payload","value","JSON","stringify","disabled","styled","JSONInput","direction","textColor"],"mappings":"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"}
@@ -7,7 +7,8 @@ var useQueryParams = require('../../../../../../../../admin/src/hooks/useQueryPa
7
7
  var users = require('../../../../../../../../admin/src/services/users.js');
8
8
  var auditLogs = require('../../../../../services/auditLogs.js');
9
9
 
10
- function _interopNamespaceDefault(e) {
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
11
12
  var n = Object.create(null);
12
13
  if (e) {
13
14
  Object.keys(e).forEach(function (k) {
@@ -24,7 +25,7 @@ function _interopNamespaceDefault(e) {
24
25
  return Object.freeze(n);
25
26
  }
26
27
 
27
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
29
 
29
30
  const useAuditLogsData = ({ canReadAuditLogs, canReadUsers })=>{
30
31
  const { toggleNotification } = Notifications.useNotification();
@@ -1 +1 @@
1
- {"version":3,"file":"useAuditLogsData.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams';\nimport { useAdminUsers } from '../../../../../../../../admin/src/services/users';\nimport { useGetAuditLogsQuery } from '../../../../../services/auditLogs';\n\nexport const useAuditLogsData = ({\n canReadAuditLogs,\n canReadUsers,\n}: {\n canReadAuditLogs: boolean;\n canReadUsers: boolean;\n}) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams();\n\n const {\n data,\n error,\n isError: isUsersError,\n isLoading: isLoadingUsers,\n } = useAdminUsers(\n {},\n {\n skip: !canReadUsers,\n refetchOnMountOrArgChange: true,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const {\n data: auditLogs,\n isLoading: isLoadingAuditLogs,\n isError: isAuditLogsError,\n error: auditLogsError,\n } = useGetAuditLogsQuery(query, {\n refetchOnMountOrArgChange: true,\n skip: !canReadAuditLogs,\n });\n\n React.useEffect(() => {\n if (auditLogsError) {\n toggleNotification({ type: 'danger', message: formatAPIError(auditLogsError) });\n }\n }, [auditLogsError, toggleNotification, formatAPIError]);\n\n return {\n auditLogs,\n users: data?.users ?? [],\n isLoading: isLoadingUsers || isLoadingAuditLogs,\n hasError: isAuditLogsError || isUsersError,\n };\n};\n"],"names":["useAuditLogsData","canReadAuditLogs","canReadUsers","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","query","useQueryParams","data","error","isError","isUsersError","isLoading","isLoadingUsers","useAdminUsers","skip","refetchOnMountOrArgChange","React","useEffect","type","message","auditLogs","isLoadingAuditLogs","isAuditLogsError","auditLogsError","useGetAuditLogsQuery","users","hasError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQaA,gBAAAA,GAAmB,CAAC,EAC/BC,gBAAgB,EAChBC,YAAY,EAIb,GAAA;IACC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,qCAAAA,EAAAA;AACpD,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,6BAAAA,EAAAA;AAEpB,IAAA,MAAM,EACJC,IAAI,EACJC,KAAK,EACLC,OAAAA,EAASC,YAAY,EACrBC,SAAAA,EAAWC,cAAc,EAC1B,GAAGC,mBAAAA,CACF,EAAC,EACD;AACEC,QAAAA,IAAAA,EAAM,CAACf,YAAAA;QACPgB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;AAGFC,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIT,KAAAA,EAAO;YACTR,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeK,KAAAA;AAAO,aAAA,CAAA;AACtE,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOR,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;AAE9C,IAAA,MAAM,EACJI,IAAAA,EAAMa,WAAS,EACfT,WAAWU,kBAAkB,EAC7BZ,OAAAA,EAASa,gBAAgB,EACzBd,KAAAA,EAAOe,cAAc,EACtB,GAAGC,+BAAqBnB,KAAAA,EAAO;QAC9BU,yBAAAA,EAA2B,IAAA;AAC3BD,QAAAA,IAAAA,EAAM,CAAChB;AACT,KAAA,CAAA;AAEAkB,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIM,cAAAA,EAAgB;YAClBvB,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeoB,cAAAA;AAAgB,aAAA,CAAA;AAC/E,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,cAAAA;AAAgBvB,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;IAEvD,OAAO;AACLiB,mBAAAA,WAAAA;QACAK,KAAAA,EAAOlB,IAAAA,EAAMkB,SAAS,EAAE;AACxBd,QAAAA,SAAAA,EAAWC,cAAAA,IAAkBS,kBAAAA;AAC7BK,QAAAA,QAAAA,EAAUJ,gBAAAA,IAAoBZ;AAChC,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"useAuditLogsData.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport { useAPIErrorHandler } from '../../../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useQueryParams } from '../../../../../../../../admin/src/hooks/useQueryParams';\nimport { useAdminUsers } from '../../../../../../../../admin/src/services/users';\nimport { useGetAuditLogsQuery } from '../../../../../services/auditLogs';\n\nexport const useAuditLogsData = ({\n canReadAuditLogs,\n canReadUsers,\n}: {\n canReadAuditLogs: boolean;\n canReadUsers: boolean;\n}) => {\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams();\n\n const {\n data,\n error,\n isError: isUsersError,\n isLoading: isLoadingUsers,\n } = useAdminUsers(\n {},\n {\n skip: !canReadUsers,\n refetchOnMountOrArgChange: true,\n }\n );\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({ type: 'danger', message: formatAPIError(error) });\n }\n }, [error, toggleNotification, formatAPIError]);\n\n const {\n data: auditLogs,\n isLoading: isLoadingAuditLogs,\n isError: isAuditLogsError,\n error: auditLogsError,\n } = useGetAuditLogsQuery(query, {\n refetchOnMountOrArgChange: true,\n skip: !canReadAuditLogs,\n });\n\n React.useEffect(() => {\n if (auditLogsError) {\n toggleNotification({ type: 'danger', message: formatAPIError(auditLogsError) });\n }\n }, [auditLogsError, toggleNotification, formatAPIError]);\n\n return {\n auditLogs,\n users: data?.users ?? [],\n isLoading: isLoadingUsers || isLoadingAuditLogs,\n hasError: isAuditLogsError || isUsersError,\n };\n};\n"],"names":["useAuditLogsData","canReadAuditLogs","canReadUsers","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","query","useQueryParams","data","error","isError","isUsersError","isLoading","isLoadingUsers","useAdminUsers","skip","refetchOnMountOrArgChange","React","useEffect","type","message","auditLogs","isLoadingAuditLogs","isAuditLogsError","auditLogsError","useGetAuditLogsQuery","users","hasError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQaA,gBAAAA,GAAmB,CAAC,EAC/BC,gBAAgB,EAChBC,YAAY,EAIb,GAAA;IACC,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,qCAAAA,EAAAA;AACpD,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,6BAAAA,EAAAA;AAEpB,IAAA,MAAM,EACJC,IAAI,EACJC,KAAK,EACLC,OAAAA,EAASC,YAAY,EACrBC,SAAAA,EAAWC,cAAc,EAC1B,GAAGC,mBAAAA,CACF,EAAC,EACD;AACEC,QAAAA,IAAAA,EAAM,CAACf,YAAAA;QACPgB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;AAGFC,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIT,KAAAA,EAAO;YACTR,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeK,KAAAA;AAAO,aAAA,CAAA;AACtE,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOR,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;AAE9C,IAAA,MAAM,EACJI,IAAAA,EAAMa,WAAS,EACfT,WAAWU,kBAAkB,EAC7BZ,OAAAA,EAASa,gBAAgB,EACzBd,KAAAA,EAAOe,cAAc,EACtB,GAAGC,+BAAqBnB,KAAAA,EAAO;QAC9BU,yBAAAA,EAA2B,IAAA;AAC3BD,QAAAA,IAAAA,EAAM,CAAChB;AACT,KAAA,CAAA;AAEAkB,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIM,cAAAA,EAAgB;YAClBvB,kBAAAA,CAAmB;gBAAEkB,IAAAA,EAAM,QAAA;AAAUC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeoB,cAAAA;AAAgB,aAAA,CAAA;AAC/E,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,cAAAA;AAAgBvB,QAAAA,kBAAAA;AAAoBG,QAAAA;AAAe,KAAA,CAAA;IAEvD,OAAO;AACLiB,mBAAAA,WAAAA;QACAK,KAAAA,EAAOlB,IAAAA,EAAMkB,SAAS,EAAE;AACxBd,QAAAA,SAAAA,EAAWC,cAAAA,IAAkBS,kBAAAA;AAC7BK,QAAAA,QAAAA,EAAUJ,gBAAAA,IAAoBZ;AAChC,KAAA;AACF;;;;"}
@@ -3,10 +3,14 @@
3
3
  var parseISO = require('date-fns/parseISO');
4
4
  var reactIntl = require('react-intl');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var parseISO__default = /*#__PURE__*/_interopDefault(parseISO);
9
+
6
10
  const useFormatTimeStamp = ()=>{
7
11
  const { formatDate } = reactIntl.useIntl();
8
12
  const formatTimeStamp = (value)=>{
9
- const date = parseISO(value);
13
+ const date = parseISO__default.default(value);
10
14
  const formattedDate = formatDate(date, {
11
15
  dateStyle: 'long'
12
16
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useFormatTimeStamp.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.ts"],"sourcesContent":["import parseISO from 'date-fns/parseISO';\nimport { useIntl } from 'react-intl';\n\nexport const useFormatTimeStamp = () => {\n const { formatDate } = useIntl();\n\n const formatTimeStamp = (value: string) => {\n const date = parseISO(value);\n\n const formattedDate = formatDate(date, {\n dateStyle: 'long',\n });\n const formattedTime = formatDate(date, {\n timeStyle: 'medium',\n hourCycle: 'h24',\n });\n\n return `${formattedDate}, ${formattedTime}`;\n };\n\n return formatTimeStamp;\n};\n"],"names":["useFormatTimeStamp","formatDate","useIntl","formatTimeStamp","value","date","parseISO","formattedDate","dateStyle","formattedTime","timeStyle","hourCycle"],"mappings":";;;;;MAGaA,kBAAAA,GAAqB,IAAA;IAChC,MAAM,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;AAEvB,IAAA,MAAMC,kBAAkB,CAACC,KAAAA,GAAAA;AACvB,QAAA,MAAMC,OAAOC,QAAAA,CAASF,KAAAA,CAAAA;QAEtB,MAAMG,aAAAA,GAAgBN,WAAWI,IAAAA,EAAM;YACrCG,SAAAA,EAAW;AACb,SAAA,CAAA;QACA,MAAMC,aAAAA,GAAgBR,WAAWI,IAAAA,EAAM;YACrCK,SAAAA,EAAW,QAAA;YACXC,SAAAA,EAAW;AACb,SAAA,CAAA;AAEA,QAAA,OAAO,CAAA,EAAGJ,aAAAA,CAAc,EAAE,EAAEE,aAAAA,CAAAA,CAAe;AAC7C,IAAA,CAAA;IAEA,OAAON,eAAAA;AACT;;;;"}
1
+ {"version":3,"file":"useFormatTimeStamp.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.ts"],"sourcesContent":["import parseISO from 'date-fns/parseISO';\nimport { useIntl } from 'react-intl';\n\nexport const useFormatTimeStamp = () => {\n const { formatDate } = useIntl();\n\n const formatTimeStamp = (value: string) => {\n const date = parseISO(value);\n\n const formattedDate = formatDate(date, {\n dateStyle: 'long',\n });\n const formattedTime = formatDate(date, {\n timeStyle: 'medium',\n hourCycle: 'h24',\n });\n\n return `${formattedDate}, ${formattedTime}`;\n };\n\n return formatTimeStamp;\n};\n"],"names":["useFormatTimeStamp","formatDate","useIntl","formatTimeStamp","value","date","parseISO","formattedDate","dateStyle","formattedTime","timeStyle","hourCycle"],"mappings":";;;;;;;;;MAGaA,kBAAAA,GAAqB,IAAA;IAChC,MAAM,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;AAEvB,IAAA,MAAMC,kBAAkB,CAACC,KAAAA,GAAAA;AACvB,QAAA,MAAMC,OAAOC,yBAAAA,CAASF,KAAAA,CAAAA;QAEtB,MAAMG,aAAAA,GAAgBN,WAAWI,IAAAA,EAAM;YACrCG,SAAAA,EAAW;AACb,SAAA,CAAA;QACA,MAAMC,aAAAA,GAAgBR,WAAWI,IAAAA,EAAM;YACrCK,SAAAA,EAAW,QAAA;YACXC,SAAAA,EAAW;AACb,SAAA,CAAA;AAEA,QAAA,OAAO,CAAA,EAAGJ,aAAAA,CAAc,EAAE,EAAEE,aAAAA,CAAAA,CAAe;AAC7C,IAAA,CAAA;IAEA,OAAON,eAAAA;AACT;;;;"}
@@ -19,7 +19,8 @@ var auth = require('../../../../../../admin/src/services/auth.js');
19
19
  var baseQuery = require('../../../../../../admin/src/utils/baseQuery.js');
20
20
  var translatedErrors = require('../../../../../../admin/src/utils/translatedErrors.js');
21
21
 
22
- function _interopNamespaceDefault(e) {
22
+ function _interopNamespace(e) {
23
+ if (e && e.__esModule) return e;
23
24
  var n = Object.create(null);
24
25
  if (e) {
25
26
  Object.keys(e).forEach(function (k) {
@@ -36,7 +37,7 @@ function _interopNamespaceDefault(e) {
36
37
  return Object.freeze(n);
37
38
  }
38
39
 
39
- var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
40
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
40
41
 
41
42
  const SCHEMA = yup__namespace.object().shape({
42
43
  autoRegister: yup__namespace.bool().required(translatedErrors.translatedErrors.required),
@@ -1 +1 @@
1
- {"version":3,"file":"SingleSignOnPage.js","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","err","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"SingleSignOnPage.js","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","err","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":"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"}
@@ -8,7 +8,10 @@ var isNil = require('lodash/isNil');
8
8
  var reactIntl = require('react-intl');
9
9
  var useLicenseLimits = require('../../../../../hooks/useLicenseLimits.js');
10
10
 
11
- function _interopNamespaceDefault(e) {
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ function _interopNamespace(e) {
14
+ if (e && e.__esModule) return e;
12
15
  var n = Object.create(null);
13
16
  if (e) {
14
17
  Object.keys(e).forEach(function (k) {
@@ -25,7 +28,8 @@ function _interopNamespaceDefault(e) {
25
28
  return Object.freeze(n);
26
29
  }
27
30
 
28
- var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
31
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
32
+ var isNil__default = /*#__PURE__*/_interopDefault(isNil);
29
33
 
30
34
  const CreateActionEE = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
31
35
  const { formatMessage } = reactIntl.useIntl();
@@ -38,7 +42,7 @@ const CreateActionEE = /*#__PURE__*/ React__namespace.forwardRef((props, ref)=>{
38
42
  width: "100%",
39
43
  gap: 2,
40
44
  children: [
41
- !isNil(permittedSeats) && shouldStopCreate && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
45
+ !isNil__default.default(permittedSeats) && shouldStopCreate && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
42
46
  label: formatMessage({
43
47
  id: 'Settings.application.admin-seats.at-limit-tooltip',
44
48
  defaultMessage: 'At limit: add seats to invite more users'
@@ -1 +1 @@
1
- {"version":3,"file":"CreateActionEE.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Tooltip } from '@strapi/design-system';\nimport { Mail, WarningCircle } from '@strapi/icons';\nimport isNil from 'lodash/isNil';\nimport { useIntl } from 'react-intl';\n\nimport { useLicenseLimits } from '../../../../../hooks/useLicenseLimits';\n\nimport type { CreateActionCEProps } from '../../../../../../../../admin/src/pages/Settings/pages/Users/components/CreateActionCE';\n\nexport const CreateActionEE = React.forwardRef<HTMLButtonElement, CreateActionCEProps>(\n (props, ref) => {\n const { formatMessage } = useIntl();\n const { license, isError, isLoading } = useLicenseLimits();\n\n const { permittedSeats, shouldStopCreate } = license ?? {};\n\n if (isError || isLoading) {\n return null;\n }\n\n return (\n <Flex width=\"100%\" gap={2}>\n {!isNil(permittedSeats) && shouldStopCreate && (\n <Tooltip\n label={formatMessage({\n id: 'Settings.application.admin-seats.at-limit-tooltip',\n defaultMessage: 'At limit: add seats to invite more users',\n })}\n side=\"left\"\n >\n <WarningCircle width=\"1.4rem\" height=\"1.4rem\" fill=\"danger500\" />\n </Tooltip>\n )}\n <Button\n ref={ref}\n data-testid=\"create-user-button\"\n startIcon={<Mail />}\n size=\"S\"\n disabled={shouldStopCreate}\n {...props}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.permissions.users.create',\n defaultMessage: 'Invite new user',\n })}\n </Button>\n </Flex>\n );\n }\n);\n"],"names":["CreateActionEE","React","forwardRef","props","ref","formatMessage","useIntl","license","isError","isLoading","useLicenseLimits","permittedSeats","shouldStopCreate","_jsxs","Flex","width","gap","isNil","_jsx","Tooltip","label","id","defaultMessage","side","WarningCircle","height","fill","Button","data-testid","startIcon","Mail","size","disabled","fullWidth"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAWaA,cAAAA,iBAAiBC,gBAAAA,CAAMC,UAAU,CAC5C,CAACC,KAAAA,EAAOC,GAAAA,GAAAA;IACN,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,iCAAAA,EAAAA;AAExC,IAAA,MAAM,EAAEC,cAAc,EAAEC,gBAAgB,EAAE,GAAGL,WAAW,EAAC;AAEzD,IAAA,IAAIC,WAAWC,SAAAA,EAAW;QACxB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEI,eAAA,CAACC,iBAAAA,EAAAA;QAAKC,KAAAA,EAAM,MAAA;QAAOC,GAAAA,EAAK,CAAA;;YACrB,CAACC,KAAAA,CAAMN,cAAAA,CAAAA,IAAmBC,gBAAAA,kBACzBM,cAAA,CAACC,oBAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAOf,aAAAA,CAAc;oBACnBgB,EAAAA,EAAI,mDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAC,IAAAA,EAAK,MAAA;AAEL,gBAAA,QAAA,gBAAAL,cAAA,CAACM,mBAAAA,EAAAA;oBAAcT,KAAAA,EAAM,QAAA;oBAASU,MAAAA,EAAO,QAAA;oBAASC,IAAAA,EAAK;;;0BAGvDR,cAAA,CAACS,mBAAAA,EAAAA;gBACCvB,GAAAA,EAAKA,GAAAA;gBACLwB,aAAAA,EAAY,oBAAA;AACZC,gBAAAA,SAAAA,gBAAWX,cAAA,CAACY,UAAAA,EAAAA,EAAAA,CAAAA;gBACZC,IAAAA,EAAK,GAAA;gBACLC,QAAAA,EAAUpB,gBAAAA;AACT,gBAAA,GAAGT,KAAK;gBACT8B,SAAS,EAAA,IAAA;0BAER5B,aAAAA,CAAc;oBACbgB,EAAAA,EAAI,mCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;;;;"}
1
+ {"version":3,"file":"CreateActionEE.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Tooltip } from '@strapi/design-system';\nimport { Mail, WarningCircle } from '@strapi/icons';\nimport isNil from 'lodash/isNil';\nimport { useIntl } from 'react-intl';\n\nimport { useLicenseLimits } from '../../../../../hooks/useLicenseLimits';\n\nimport type { CreateActionCEProps } from '../../../../../../../../admin/src/pages/Settings/pages/Users/components/CreateActionCE';\n\nexport const CreateActionEE = React.forwardRef<HTMLButtonElement, CreateActionCEProps>(\n (props, ref) => {\n const { formatMessage } = useIntl();\n const { license, isError, isLoading } = useLicenseLimits();\n\n const { permittedSeats, shouldStopCreate } = license ?? {};\n\n if (isError || isLoading) {\n return null;\n }\n\n return (\n <Flex width=\"100%\" gap={2}>\n {!isNil(permittedSeats) && shouldStopCreate && (\n <Tooltip\n label={formatMessage({\n id: 'Settings.application.admin-seats.at-limit-tooltip',\n defaultMessage: 'At limit: add seats to invite more users',\n })}\n side=\"left\"\n >\n <WarningCircle width=\"1.4rem\" height=\"1.4rem\" fill=\"danger500\" />\n </Tooltip>\n )}\n <Button\n ref={ref}\n data-testid=\"create-user-button\"\n startIcon={<Mail />}\n size=\"S\"\n disabled={shouldStopCreate}\n {...props}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.permissions.users.create',\n defaultMessage: 'Invite new user',\n })}\n </Button>\n </Flex>\n );\n }\n);\n"],"names":["CreateActionEE","React","forwardRef","props","ref","formatMessage","useIntl","license","isError","isLoading","useLicenseLimits","permittedSeats","shouldStopCreate","_jsxs","Flex","width","gap","isNil","_jsx","Tooltip","label","id","defaultMessage","side","WarningCircle","height","fill","Button","data-testid","startIcon","Mail","size","disabled","fullWidth"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAWaA,cAAAA,iBAAiBC,gBAAAA,CAAMC,UAAU,CAC5C,CAACC,KAAAA,EAAOC,GAAAA,GAAAA;IACN,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,iCAAAA,EAAAA;AAExC,IAAA,MAAM,EAAEC,cAAc,EAAEC,gBAAgB,EAAE,GAAGL,WAAW,EAAC;AAEzD,IAAA,IAAIC,WAAWC,SAAAA,EAAW;QACxB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEI,eAAA,CAACC,iBAAAA,EAAAA;QAAKC,KAAAA,EAAM,MAAA;QAAOC,GAAAA,EAAK,CAAA;;YACrB,CAACC,sBAAAA,CAAMN,cAAAA,CAAAA,IAAmBC,gBAAAA,kBACzBM,cAAA,CAACC,oBAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAOf,aAAAA,CAAc;oBACnBgB,EAAAA,EAAI,mDAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAC,IAAAA,EAAK,MAAA;AAEL,gBAAA,QAAA,gBAAAL,cAAA,CAACM,mBAAAA,EAAAA;oBAAcT,KAAAA,EAAM,QAAA;oBAASU,MAAAA,EAAO,QAAA;oBAASC,IAAAA,EAAK;;;0BAGvDR,cAAA,CAACS,mBAAAA,EAAAA;gBACCvB,GAAAA,EAAKA,GAAAA;gBACLwB,aAAAA,EAAY,oBAAA;AACZC,gBAAAA,SAAAA,gBAAWX,cAAA,CAACY,UAAAA,EAAAA,EAAAA,CAAAA;gBACZC,IAAAA,EAAK,GAAA;gBACLC,QAAAA,EAAUpB,gBAAAA;AACT,gBAAA,GAAGT,KAAK;gBACT8B,SAAS,EAAA,IAAA;0BAER5B,aAAAA,CAAc;oBACbgB,EAAAA,EAAI,mCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;;;;"}
@@ -108,7 +108,13 @@ declare class StrapiApp {
108
108
  * create the section and links at the same time.
109
109
  */
110
110
  createSettingSection: (section: Pick<StrapiAppSetting, 'id' | 'intlLabel'>, links: UnloadedSettingsLink[]) => void;
111
- addSettingsLink: (sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>, link: UnloadedSettingsLink) => void;
111
+ /**
112
+ * Register one or more settings links under an existing or new section.
113
+ *
114
+ * @param sectionId - Section id string, or section metadata to create a new section
115
+ * @param link - A single link or an array of links to register
116
+ */
117
+ addSettingsLink: (sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>, link: UnloadedSettingsLink | UnloadedSettingsLink[]) => void;
112
118
  bootstrap(customBootstrap?: unknown): Promise<void>;
113
119
  createCustomConfigurations: (customConfig: NonNullable<StrapiAppConstructorArgs['config']>) => void;
114
120
  createHook: (name: string) => void;
@@ -59,8 +59,7 @@ declare class Router {
59
59
  addSettingsLink(section: Pick<StrapiAppSetting, 'id' | 'intlLabel'> & {
60
60
  links: UnloadedSettingsLink[];
61
61
  }, links?: never): void;
62
- addSettingsLink(sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>, link: UnloadedSettingsLink): void;
63
- addSettingsLink(sectionId: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>, link: UnloadedSettingsLink[]): void;
62
+ addSettingsLink(section: string | Pick<StrapiAppSetting, 'id' | 'intlLabel'>, link: UnloadedSettingsLink | UnloadedSettingsLink[]): void;
64
63
  private createSettingsLink;
65
64
  /**
66
65
  * @alpha
@@ -1,14 +1,58 @@
1
1
  declare const SESSION_EXPIRY_BUFFER_MS = 1000;
2
+ /**
3
+ * How long before the access token's `exp` an active tab renews. Renewing
4
+ * ahead of expiry (rather than at it) means the refreshed token is already in
5
+ * shared storage by the time any *other* tab's logout timer fires — so an idle
6
+ * sibling re-syncs instead of racing the refresh and logging itself out.
7
+ */
8
+ declare const SESSION_RENEW_MARGIN_MS = 10000;
2
9
  interface UseIdleSessionLogoutOptions {
3
10
  /**
4
11
  * The current admin access JWT (from Redux), or `null` when logged out.
5
12
  */
6
13
  token: string | null;
7
14
  /**
8
- * Called when the timer fires. Typically clears local auth state and
9
- * navigates to /auth/login.
15
+ * Called when the timer fires and the user is genuinely idle. Should clear
16
+ * *this tab's* local auth state and navigate to /auth/login. It must NOT
17
+ * broadcast a global logout (e.g. by removing the shared `isLoggedIn` key),
18
+ * otherwise an idle tab firing on a stale token would log out other tabs that
19
+ * are still active — see the cross-tab handling below.
10
20
  */
11
21
  onExpired: () => void;
22
+ /**
23
+ * Called when a renewal attempt is rejected by the server (the session is
24
+ * truly over: refresh token idle/max window elapsed). This is a
25
+ * server-confirmed end of session, so unlike `onExpired` it SHOULD broadcast
26
+ * a global logout to every tab. Falls back to `onExpired` when omitted.
27
+ */
28
+ onSessionDead?: () => void;
29
+ /**
30
+ * Read the access token currently in shared storage (localStorage/cookie).
31
+ * Because every open tab shares the same refresh cookie, an active tab that
32
+ * refreshes writes a newer access token here. When omitted, the hook never
33
+ * re-syncs across tabs.
34
+ */
35
+ getStoredToken?: () => string | null;
36
+ /**
37
+ * Adopt a newer shared token instead of expiring. Typically dispatches
38
+ * `setToken`, which updates Redux and causes this hook to re-arm against the
39
+ * later `exp`. Only called when `getStoredToken` returns a token whose `exp`
40
+ * is later than the in-memory one.
41
+ */
42
+ onResync?: (token: string) => void;
43
+ /**
44
+ * Epoch ms of the user's last interaction (pointer, key, scroll, …). Used to
45
+ * decide whether to silently renew (active) or log out (idle) when the access
46
+ * token expires. When omitted, the hook always treats expiry as idle.
47
+ */
48
+ getLastActivityAt?: () => number;
49
+ /**
50
+ * Silently renew the session (rotate the refresh token + mint a new access
51
+ * token). Resolves `true` on success — the resulting `setToken` re-arms this
52
+ * hook against the new `exp` — or `false` when the server rejects it. Only
53
+ * called when the user was active during the current token's lifetime.
54
+ */
55
+ renewSession?: () => Promise<boolean>;
12
56
  /**
13
57
  * Escape hatch for tests / dev environments where we don't want the
14
58
  * automatic logout behavior. Mirrors the existing `_disableRenewToken`
@@ -17,17 +61,27 @@ interface UseIdleSessionLogoutOptions {
17
61
  disabled?: boolean;
18
62
  }
19
63
  /**
20
- * Schedule a one-shot logout when the access token's `exp` elapses.
64
+ * Keep the admin session alive while the user is active, and end it when they
65
+ * are genuinely idle — without one tab tearing down another.
66
+ *
67
+ * The access token is short-lived (`accessTokenLifespan`, e.g. 30 min) and is
68
+ * meant to be refreshed, not to be the session length. Two timers are armed per
69
+ * token:
21
70
  *
22
- * The hook re-runs whenever `token` changes. While the user is active, every
23
- * API call that hits a 401 transparently refreshes the access token (see
24
- * `withTokenRefresh` in `getFetchClient.ts`), which dispatches `setToken` and
25
- * causes this effect to re-arm with the new, later `exp`.
71
+ * - Renew (at `exp` minus a margin): if the user interacted during this token's
72
+ * lifetime, silently renew *ahead* of expiry. The new `setToken` re-arms the
73
+ * hook; a server rejection (`onSessionDead`) ends the session globally.
74
+ * Renewing early guarantees the refreshed token reaches shared storage before
75
+ * any sibling tab's logout timer fires.
76
+ * - Logout (just after `exp`): the fallback when this tab did not renew. It
77
+ * first re-syncs from a token another tab refreshed (so an idle tab rides on
78
+ * an active sibling), then renews if activity arrived late, and only otherwise
79
+ * logs out — locally, so idle tabs never force-logout active ones.
26
80
  *
27
- * If the JWT can't be decoded (malformed, missing `exp`), the timer is
28
- * skipped silently — the active-tab redirect on 401 still covers the
29
- * symptom on the next user-initiated request.
81
+ * If the JWT can't be decoded (malformed, missing `exp`), the timers are skipped
82
+ * silently — the active-tab redirect on 401 still covers the symptom on the next
83
+ * user-initiated request.
30
84
  */
31
- declare const useIdleSessionLogout: ({ token, onExpired, disabled, }: UseIdleSessionLogoutOptions) => void;
32
- export { useIdleSessionLogout, SESSION_EXPIRY_BUFFER_MS };
85
+ declare const useIdleSessionLogout: ({ token, onExpired, onSessionDead, getStoredToken, onResync, getLastActivityAt, renewSession, disabled, }: UseIdleSessionLogoutOptions) => void;
86
+ export { useIdleSessionLogout, SESSION_EXPIRY_BUFFER_MS, SESSION_RENEW_MARGIN_MS };
33
87
  export type { UseIdleSessionLogoutOptions };
@@ -7,12 +7,16 @@ var index = require('../../utils/index.js');
7
7
  var utils = require('./utils.js');
8
8
  var sessionAuth = require('../../../../../shared/utils/session-auth.js');
9
9
 
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var passport__default = /*#__PURE__*/_interopDefault(passport);
13
+
10
14
  const defaultConnectionError = ()=>new Error('Invalid connection payload');
11
15
  const authenticate = async (ctx, next)=>{
12
16
  const { params: { provider } } = ctx;
13
17
  const redirectUrls = utils.default.getPrefixedRedirectUrls();
14
18
  // @ts-expect-error - can not use null to authenticate
15
- return passport.authenticate(provider, null, async (error, profile)=>{
19
+ return passport__default.default.authenticate(provider, null, async (error, profile)=>{
16
20
  if (error || !profile || !profile.email) {
17
21
  if (error) {
18
22
  strapi.log.error(error);
@@ -1 +1 @@
1
- {"version":3,"file":"middlewares.js","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/middlewares.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport passport from 'koa-passport';\nimport { getService } from '../../utils';\nimport utils from './utils';\nimport {\n REFRESH_COOKIE_NAME,\n buildCookieOptionsWithExpiry,\n getSessionManager,\n generateDeviceId,\n} from '../../../../../shared/utils/session-auth';\n\nconst defaultConnectionError = () => new Error('Invalid connection payload');\n\nexport const authenticate: Core.MiddlewareHandler = async (ctx, next) => {\n const {\n params: { provider },\n } = ctx;\n const redirectUrls = utils.getPrefixedRedirectUrls();\n\n // @ts-expect-error - can not use null to authenticate\n return passport.authenticate(provider, null, async (error, profile) => {\n if (error || !profile || !profile.email) {\n if (error) {\n strapi.log.error(error);\n }\n\n strapi.eventHub.emit('admin.auth.error', {\n error: error || defaultConnectionError(),\n provider,\n });\n\n return ctx.redirect(redirectUrls.error);\n }\n\n const user = await getService('user').findOneByEmail(profile.email);\n const scenario = user ? existingUserScenario : nonExistingUserScenario;\n\n return scenario(ctx, next)(user || profile, provider);\n })(ctx, next);\n};\n\nconst existingUserScenario: Core.MiddlewareHandler =\n (ctx, next) => async (user: any, provider: any) => {\n const redirectUrls = utils.getPrefixedRedirectUrls();\n\n if (!user.isActive) {\n strapi.eventHub.emit('admin.auth.error', {\n error: new Error(`Deactivated user tried to login (${user.id})`),\n provider,\n });\n return ctx.redirect(redirectUrls.error);\n }\n\n ctx.state.user = user;\n return next();\n };\n\nconst nonExistingUserScenario: Core.MiddlewareHandler =\n (ctx, next) => async (profile: any, provider: any) => {\n const { email, firstname, lastname, username } = profile;\n const redirectUrls = utils.getPrefixedRedirectUrls();\n const adminStore = await utils.getAdminStore();\n const { providers } = (await adminStore.get({ key: 'auth' })) as any;\n\n // We need at least the username or the firstname/lastname combination to register a new user\n const isMissingRegisterFields = !username && (!firstname || !lastname);\n\n if (!providers.autoRegister || !providers.defaultRole || isMissingRegisterFields) {\n strapi.eventHub.emit('admin.auth.error', { error: defaultConnectionError(), provider });\n return ctx.redirect(redirectUrls.error);\n }\n\n const defaultRole = await getService('role').findOne({ id: providers.defaultRole });\n\n // If the default role has been misconfigured, redirect with an error\n if (!defaultRole) {\n strapi.eventHub.emit('admin.auth.error', { error: defaultConnectionError(), provider });\n return ctx.redirect(redirectUrls.error);\n }\n\n // Register a new user with the information given by the provider and login with it\n ctx.state.user = await getService('user').create({\n email,\n username,\n firstname,\n lastname,\n roles: [defaultRole.id],\n isActive: true,\n registrationToken: null,\n });\n\n strapi.eventHub.emit('admin.auth.autoRegistration', {\n user: ctx.state.user,\n provider,\n });\n\n return next();\n };\n\nexport const redirectWithAuth: Core.MiddlewareHandler = async (ctx) => {\n const {\n params: { provider },\n } = ctx;\n const redirectUrls = utils.getPrefixedRedirectUrls();\n const { user } = ctx.state;\n\n try {\n const sessionManager = getSessionManager();\n if (!sessionManager) {\n strapi.log.error('SessionManager not available for SSO authentication');\n return ctx.redirect(redirectUrls.error);\n }\n\n const userId = String(user.id);\n const deviceId = generateDeviceId();\n\n const { token: refreshToken, absoluteExpiresAt } = await sessionManager(\n 'admin'\n ).generateRefreshToken(userId, deviceId, {\n type: 'refresh',\n });\n\n const cookieOptions = buildCookieOptionsWithExpiry('refresh', absoluteExpiresAt);\n ctx.cookies.set(REFRESH_COOKIE_NAME, refreshToken, cookieOptions);\n\n const accessResult = await sessionManager('admin').generateAccessToken(refreshToken);\n if ('error' in accessResult) {\n strapi.log.error('Failed to generate access token for SSO user');\n return ctx.redirect(redirectUrls.error);\n }\n\n const { token: accessToken } = accessResult;\n\n const configuredSecure = strapi.config.get('admin.auth.cookie.secure');\n const isProduction = process.env.NODE_ENV === 'production';\n const isSecure = typeof configuredSecure === 'boolean' ? configuredSecure : isProduction;\n\n const domain: string | undefined = strapi.config.get('admin.auth.domain');\n ctx.cookies.set('jwtToken', accessToken, {\n httpOnly: false,\n secure: isSecure,\n overwrite: true,\n domain,\n });\n\n const sanitizedUser = getService('user').sanitizeUser(user);\n strapi.eventHub.emit('admin.auth.success', { user: sanitizedUser, provider });\n\n ctx.redirect(redirectUrls.success);\n } catch (error) {\n strapi.log.error('SSO authentication failed during token generation', error);\n strapi.eventHub.emit('admin.auth.error', {\n error: error instanceof Error ? error : new Error('Unknown SSO error'),\n provider,\n });\n return ctx.redirect(redirectUrls.error);\n }\n};\n\nexport default {\n authenticate,\n redirectWithAuth,\n};\n"],"names":["defaultConnectionError","Error","authenticate","ctx","next","params","provider","redirectUrls","utils","getPrefixedRedirectUrls","passport","error","profile","email","strapi","log","eventHub","emit","redirect","user","getService","findOneByEmail","scenario","existingUserScenario","nonExistingUserScenario","isActive","id","state","firstname","lastname","username","adminStore","getAdminStore","providers","get","key","isMissingRegisterFields","autoRegister","defaultRole","findOne","create","roles","registrationToken","redirectWithAuth","sessionManager","getSessionManager","userId","String","deviceId","generateDeviceId","token","refreshToken","absoluteExpiresAt","generateRefreshToken","type","cookieOptions","buildCookieOptionsWithExpiry","cookies","set","REFRESH_COOKIE_NAME","accessResult","generateAccessToken","accessToken","configuredSecure","config","isProduction","process","env","NODE_ENV","isSecure","domain","httpOnly","secure","overwrite","sanitizedUser","sanitizeUser","success"],"mappings":"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"}
1
+ {"version":3,"file":"middlewares.js","sources":["../../../../../../../ee/server/src/controllers/authentication-utils/middlewares.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport passport from 'koa-passport';\nimport { getService } from '../../utils';\nimport utils from './utils';\nimport {\n REFRESH_COOKIE_NAME,\n buildCookieOptionsWithExpiry,\n getSessionManager,\n generateDeviceId,\n} from '../../../../../shared/utils/session-auth';\n\nconst defaultConnectionError = () => new Error('Invalid connection payload');\n\nexport const authenticate: Core.MiddlewareHandler = async (ctx, next) => {\n const {\n params: { provider },\n } = ctx;\n const redirectUrls = utils.getPrefixedRedirectUrls();\n\n // @ts-expect-error - can not use null to authenticate\n return passport.authenticate(provider, null, async (error, profile) => {\n if (error || !profile || !profile.email) {\n if (error) {\n strapi.log.error(error);\n }\n\n strapi.eventHub.emit('admin.auth.error', {\n error: error || defaultConnectionError(),\n provider,\n });\n\n return ctx.redirect(redirectUrls.error);\n }\n\n const user = await getService('user').findOneByEmail(profile.email);\n const scenario = user ? existingUserScenario : nonExistingUserScenario;\n\n return scenario(ctx, next)(user || profile, provider);\n })(ctx, next);\n};\n\nconst existingUserScenario: Core.MiddlewareHandler =\n (ctx, next) => async (user: any, provider: any) => {\n const redirectUrls = utils.getPrefixedRedirectUrls();\n\n if (!user.isActive) {\n strapi.eventHub.emit('admin.auth.error', {\n error: new Error(`Deactivated user tried to login (${user.id})`),\n provider,\n });\n return ctx.redirect(redirectUrls.error);\n }\n\n ctx.state.user = user;\n return next();\n };\n\nconst nonExistingUserScenario: Core.MiddlewareHandler =\n (ctx, next) => async (profile: any, provider: any) => {\n const { email, firstname, lastname, username } = profile;\n const redirectUrls = utils.getPrefixedRedirectUrls();\n const adminStore = await utils.getAdminStore();\n const { providers } = (await adminStore.get({ key: 'auth' })) as any;\n\n // We need at least the username or the firstname/lastname combination to register a new user\n const isMissingRegisterFields = !username && (!firstname || !lastname);\n\n if (!providers.autoRegister || !providers.defaultRole || isMissingRegisterFields) {\n strapi.eventHub.emit('admin.auth.error', { error: defaultConnectionError(), provider });\n return ctx.redirect(redirectUrls.error);\n }\n\n const defaultRole = await getService('role').findOne({ id: providers.defaultRole });\n\n // If the default role has been misconfigured, redirect with an error\n if (!defaultRole) {\n strapi.eventHub.emit('admin.auth.error', { error: defaultConnectionError(), provider });\n return ctx.redirect(redirectUrls.error);\n }\n\n // Register a new user with the information given by the provider and login with it\n ctx.state.user = await getService('user').create({\n email,\n username,\n firstname,\n lastname,\n roles: [defaultRole.id],\n isActive: true,\n registrationToken: null,\n });\n\n strapi.eventHub.emit('admin.auth.autoRegistration', {\n user: ctx.state.user,\n provider,\n });\n\n return next();\n };\n\nexport const redirectWithAuth: Core.MiddlewareHandler = async (ctx) => {\n const {\n params: { provider },\n } = ctx;\n const redirectUrls = utils.getPrefixedRedirectUrls();\n const { user } = ctx.state;\n\n try {\n const sessionManager = getSessionManager();\n if (!sessionManager) {\n strapi.log.error('SessionManager not available for SSO authentication');\n return ctx.redirect(redirectUrls.error);\n }\n\n const userId = String(user.id);\n const deviceId = generateDeviceId();\n\n const { token: refreshToken, absoluteExpiresAt } = await sessionManager(\n 'admin'\n ).generateRefreshToken(userId, deviceId, {\n type: 'refresh',\n });\n\n const cookieOptions = buildCookieOptionsWithExpiry('refresh', absoluteExpiresAt);\n ctx.cookies.set(REFRESH_COOKIE_NAME, refreshToken, cookieOptions);\n\n const accessResult = await sessionManager('admin').generateAccessToken(refreshToken);\n if ('error' in accessResult) {\n strapi.log.error('Failed to generate access token for SSO user');\n return ctx.redirect(redirectUrls.error);\n }\n\n const { token: accessToken } = accessResult;\n\n const configuredSecure = strapi.config.get('admin.auth.cookie.secure');\n const isProduction = process.env.NODE_ENV === 'production';\n const isSecure = typeof configuredSecure === 'boolean' ? configuredSecure : isProduction;\n\n const domain: string | undefined = strapi.config.get('admin.auth.domain');\n ctx.cookies.set('jwtToken', accessToken, {\n httpOnly: false,\n secure: isSecure,\n overwrite: true,\n domain,\n });\n\n const sanitizedUser = getService('user').sanitizeUser(user);\n strapi.eventHub.emit('admin.auth.success', { user: sanitizedUser, provider });\n\n ctx.redirect(redirectUrls.success);\n } catch (error) {\n strapi.log.error('SSO authentication failed during token generation', error);\n strapi.eventHub.emit('admin.auth.error', {\n error: error instanceof Error ? error : new Error('Unknown SSO error'),\n provider,\n });\n return ctx.redirect(redirectUrls.error);\n }\n};\n\nexport default {\n authenticate,\n redirectWithAuth,\n};\n"],"names":["defaultConnectionError","Error","authenticate","ctx","next","params","provider","redirectUrls","utils","getPrefixedRedirectUrls","passport","error","profile","email","strapi","log","eventHub","emit","redirect","user","getService","findOneByEmail","scenario","existingUserScenario","nonExistingUserScenario","isActive","id","state","firstname","lastname","username","adminStore","getAdminStore","providers","get","key","isMissingRegisterFields","autoRegister","defaultRole","findOne","create","roles","registrationToken","redirectWithAuth","sessionManager","getSessionManager","userId","String","deviceId","generateDeviceId","token","refreshToken","absoluteExpiresAt","generateRefreshToken","type","cookieOptions","buildCookieOptionsWithExpiry","cookies","set","REFRESH_COOKIE_NAME","accessResult","generateAccessToken","accessToken","configuredSecure","config","isProduction","process","env","NODE_ENV","isSecure","domain","httpOnly","secure","overwrite","sanitizedUser","sanitizeUser","success"],"mappings":"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"}
@@ -7,6 +7,10 @@ var authentication$1 = require('../validation/authentication.js');
7
7
  var middlewares = require('./authentication-utils/middlewares.js');
8
8
  var utils$1 = require('./authentication-utils/utils.js');
9
9
 
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var compose__default = /*#__PURE__*/_interopDefault(compose);
13
+
10
14
  const toProviderDTO = fp.pick([
11
15
  'uid',
12
16
  'displayName',
@@ -18,7 +22,7 @@ const toProviderLoginOptionsDTO = fp.pick([
18
22
  'ssoLockedRoles'
19
23
  ]);
20
24
  const { ValidationError } = utils.errors;
21
- const providerAuthenticationFlow = compose([
25
+ const providerAuthenticationFlow = compose__default.default([
22
26
  middlewares.default.authenticate,
23
27
  middlewares.default.redirectWithAuth
24
28
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.js","sources":["../../../../../../ee/server/src/controllers/authentication.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\n\nimport { pick } from 'lodash/fp';\nimport compose from 'koa-compose';\nimport { errors } from '@strapi/utils';\nimport { validateProviderOptionsUpdate } from '../validation/authentication';\nimport { middlewares, utils } from './authentication-utils';\n\nconst toProviderDTO = pick(['uid', 'displayName', 'icon']);\nconst toProviderLoginOptionsDTO = pick(['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\nconst { ValidationError } = errors;\n\nconst providerAuthenticationFlow = compose([\n middlewares.authenticate,\n middlewares.redirectWithAuth,\n]);\n\nexport default {\n async getProviders(ctx: Context) {\n const { providerRegistry } = strapi.service('admin::passport');\n\n ctx.body = providerRegistry.getAll().map(toProviderDTO);\n },\n\n async getProviderLoginOptions(ctx: Context) {\n const adminStore = await utils.getAdminStore();\n const { providers: providersOptions } = (await adminStore.get({ key: 'auth' })) as any;\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(providersOptions),\n };\n },\n\n async updateProviderLoginOptions(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n await validateProviderOptionsUpdate(body);\n\n const adminStore = await utils.getAdminStore();\n const currentAuthOptions = (await adminStore.get({ key: 'auth' })) as any;\n const newAuthOptions = { ...currentAuthOptions, providers: body };\n await adminStore.set({ key: 'auth', value: newAuthOptions });\n\n strapi.telemetry.send('didUpdateSSOSettings');\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(newAuthOptions.providers),\n };\n },\n\n providerLogin(ctx: Context, next: Next) {\n const {\n params: { provider: providerName },\n } = ctx;\n\n const { providerRegistry } = strapi.service('admin::passport');\n\n if (!providerRegistry.has(providerName)) {\n throw new ValidationError(`Invalid provider supplied: ${providerName}`);\n }\n\n return providerAuthenticationFlow(ctx, next);\n },\n};\n"],"names":["toProviderDTO","pick","toProviderLoginOptionsDTO","ValidationError","errors","providerAuthenticationFlow","compose","middlewares","authenticate","redirectWithAuth","getProviders","ctx","providerRegistry","strapi","service","body","getAll","map","getProviderLoginOptions","adminStore","utils","getAdminStore","providers","providersOptions","get","key","data","updateProviderLoginOptions","request","validateProviderOptionsUpdate","currentAuthOptions","newAuthOptions","set","value","telemetry","send","providerLogin","next","params","provider","providerName","has"],"mappings":";;;;;;;;;AAQA,MAAMA,gBAAgBC,OAAAA,CAAK;AAAC,IAAA,KAAA;AAAO,IAAA,aAAA;AAAe,IAAA;AAAO,CAAA,CAAA;AACzD,MAAMC,4BAA4BD,OAAAA,CAAK;AAAC,IAAA,cAAA;AAAgB,IAAA,aAAA;AAAe,IAAA;AAAiB,CAAA,CAAA;AAExF,MAAM,EAAEE,eAAe,EAAE,GAAGC,YAAAA;AAE5B,MAAMC,6BAA6BC,OAAAA,CAAQ;AACzCC,IAAAA,mBAAAA,CAAYC,YAAY;AACxBD,IAAAA,mBAAAA,CAAYE;AACb,CAAA,CAAA;AAED,qBAAe;AACb,IAAA,MAAMC,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5CH,QAAAA,GAAAA,CAAII,IAAI,GAAGH,gBAAAA,CAAiBI,MAAM,EAAA,CAAGC,GAAG,CAACjB,aAAAA,CAAAA;AAC3C,IAAA,CAAA;AAEA,IAAA,MAAMkB,yBAAwBP,GAAY,EAAA;QACxC,MAAMQ,UAAAA,GAAa,MAAMC,eAAAA,CAAMC,aAAa,EAAA;QAC5C,MAAM,EAAEC,WAAWC,gBAAgB,EAAE,GAAI,MAAMJ,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAAA,EAAK;AAAO,SAAA,CAAA;AAE5Ed,QAAAA,GAAAA,CAAII,IAAI,GAAG;AACTW,YAAAA,IAAAA,EAAMxB,yBAAAA,CAA0BqB,gBAAAA;AAClC,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMI,4BAA2BhB,GAAY,EAAA;AAC3C,QAAA,MAAM,EACJiB,OAAAA,EAAS,EAAEb,IAAI,EAAE,EAClB,GAAGJ,GAAAA;AAEJ,QAAA,MAAMkB,8CAAAA,CAA8Bd,IAAAA,CAAAA;QAEpC,MAAMI,UAAAA,GAAa,MAAMC,eAAAA,CAAMC,aAAa,EAAA;AAC5C,QAAA,MAAMS,kBAAAA,GAAsB,MAAMX,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAAA,EAAK;AAAO,SAAA,CAAA;AAC/D,QAAA,MAAMM,cAAAA,GAAiB;AAAE,YAAA,GAAGD,kBAAkB;YAAER,SAAAA,EAAWP;AAAK,SAAA;QAChE,MAAMI,UAAAA,CAAWa,GAAG,CAAC;YAAEP,GAAAA,EAAK,MAAA;YAAQQ,KAAAA,EAAOF;AAAe,SAAA,CAAA;QAE1DlB,MAAAA,CAAOqB,SAAS,CAACC,IAAI,CAAC,sBAAA,CAAA;AAEtBxB,QAAAA,GAAAA,CAAII,IAAI,GAAG;YACTW,IAAAA,EAAMxB,yBAAAA,CAA0B6B,eAAeT,SAAS;AAC1D,SAAA;AACF,IAAA,CAAA;IAEAc,aAAAA,CAAAA,CAAczB,GAAY,EAAE0B,IAAU,EAAA;AACpC,QAAA,MAAM,EACJC,MAAAA,EAAQ,EAAEC,UAAUC,YAAY,EAAE,EACnC,GAAG7B,GAAAA;AAEJ,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5C,QAAA,IAAI,CAACF,gBAAAA,CAAiB6B,GAAG,CAACD,YAAAA,CAAAA,EAAe;AACvC,YAAA,MAAM,IAAIrC,eAAAA,CAAgB,CAAC,2BAA2B,EAAEqC,YAAAA,CAAAA,CAAc,CAAA;AACxE,QAAA;AAEA,QAAA,OAAOnC,2BAA2BM,GAAAA,EAAK0B,IAAAA,CAAAA;AACzC,IAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"authentication.js","sources":["../../../../../../ee/server/src/controllers/authentication.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\n\nimport { pick } from 'lodash/fp';\nimport compose from 'koa-compose';\nimport { errors } from '@strapi/utils';\nimport { validateProviderOptionsUpdate } from '../validation/authentication';\nimport { middlewares, utils } from './authentication-utils';\n\nconst toProviderDTO = pick(['uid', 'displayName', 'icon']);\nconst toProviderLoginOptionsDTO = pick(['autoRegister', 'defaultRole', 'ssoLockedRoles']);\n\nconst { ValidationError } = errors;\n\nconst providerAuthenticationFlow = compose([\n middlewares.authenticate,\n middlewares.redirectWithAuth,\n]);\n\nexport default {\n async getProviders(ctx: Context) {\n const { providerRegistry } = strapi.service('admin::passport');\n\n ctx.body = providerRegistry.getAll().map(toProviderDTO);\n },\n\n async getProviderLoginOptions(ctx: Context) {\n const adminStore = await utils.getAdminStore();\n const { providers: providersOptions } = (await adminStore.get({ key: 'auth' })) as any;\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(providersOptions),\n };\n },\n\n async updateProviderLoginOptions(ctx: Context) {\n const {\n request: { body },\n } = ctx;\n\n await validateProviderOptionsUpdate(body);\n\n const adminStore = await utils.getAdminStore();\n const currentAuthOptions = (await adminStore.get({ key: 'auth' })) as any;\n const newAuthOptions = { ...currentAuthOptions, providers: body };\n await adminStore.set({ key: 'auth', value: newAuthOptions });\n\n strapi.telemetry.send('didUpdateSSOSettings');\n\n ctx.body = {\n data: toProviderLoginOptionsDTO(newAuthOptions.providers),\n };\n },\n\n providerLogin(ctx: Context, next: Next) {\n const {\n params: { provider: providerName },\n } = ctx;\n\n const { providerRegistry } = strapi.service('admin::passport');\n\n if (!providerRegistry.has(providerName)) {\n throw new ValidationError(`Invalid provider supplied: ${providerName}`);\n }\n\n return providerAuthenticationFlow(ctx, next);\n },\n};\n"],"names":["toProviderDTO","pick","toProviderLoginOptionsDTO","ValidationError","errors","providerAuthenticationFlow","compose","middlewares","authenticate","redirectWithAuth","getProviders","ctx","providerRegistry","strapi","service","body","getAll","map","getProviderLoginOptions","adminStore","utils","getAdminStore","providers","providersOptions","get","key","data","updateProviderLoginOptions","request","validateProviderOptionsUpdate","currentAuthOptions","newAuthOptions","set","value","telemetry","send","providerLogin","next","params","provider","providerName","has"],"mappings":";;;;;;;;;;;;;AAQA,MAAMA,gBAAgBC,OAAAA,CAAK;AAAC,IAAA,KAAA;AAAO,IAAA,aAAA;AAAe,IAAA;AAAO,CAAA,CAAA;AACzD,MAAMC,4BAA4BD,OAAAA,CAAK;AAAC,IAAA,cAAA;AAAgB,IAAA,aAAA;AAAe,IAAA;AAAiB,CAAA,CAAA;AAExF,MAAM,EAAEE,eAAe,EAAE,GAAGC,YAAAA;AAE5B,MAAMC,6BAA6BC,wBAAAA,CAAQ;AACzCC,IAAAA,mBAAAA,CAAYC,YAAY;AACxBD,IAAAA,mBAAAA,CAAYE;AACb,CAAA,CAAA;AAED,qBAAe;AACb,IAAA,MAAMC,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5CH,QAAAA,GAAAA,CAAII,IAAI,GAAGH,gBAAAA,CAAiBI,MAAM,EAAA,CAAGC,GAAG,CAACjB,aAAAA,CAAAA;AAC3C,IAAA,CAAA;AAEA,IAAA,MAAMkB,yBAAwBP,GAAY,EAAA;QACxC,MAAMQ,UAAAA,GAAa,MAAMC,eAAAA,CAAMC,aAAa,EAAA;QAC5C,MAAM,EAAEC,WAAWC,gBAAgB,EAAE,GAAI,MAAMJ,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAAA,EAAK;AAAO,SAAA,CAAA;AAE5Ed,QAAAA,GAAAA,CAAII,IAAI,GAAG;AACTW,YAAAA,IAAAA,EAAMxB,yBAAAA,CAA0BqB,gBAAAA;AAClC,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMI,4BAA2BhB,GAAY,EAAA;AAC3C,QAAA,MAAM,EACJiB,OAAAA,EAAS,EAAEb,IAAI,EAAE,EAClB,GAAGJ,GAAAA;AAEJ,QAAA,MAAMkB,8CAAAA,CAA8Bd,IAAAA,CAAAA;QAEpC,MAAMI,UAAAA,GAAa,MAAMC,eAAAA,CAAMC,aAAa,EAAA;AAC5C,QAAA,MAAMS,kBAAAA,GAAsB,MAAMX,UAAAA,CAAWK,GAAG,CAAC;YAAEC,GAAAA,EAAK;AAAO,SAAA,CAAA;AAC/D,QAAA,MAAMM,cAAAA,GAAiB;AAAE,YAAA,GAAGD,kBAAkB;YAAER,SAAAA,EAAWP;AAAK,SAAA;QAChE,MAAMI,UAAAA,CAAWa,GAAG,CAAC;YAAEP,GAAAA,EAAK,MAAA;YAAQQ,KAAAA,EAAOF;AAAe,SAAA,CAAA;QAE1DlB,MAAAA,CAAOqB,SAAS,CAACC,IAAI,CAAC,sBAAA,CAAA;AAEtBxB,QAAAA,GAAAA,CAAII,IAAI,GAAG;YACTW,IAAAA,EAAMxB,yBAAAA,CAA0B6B,eAAeT,SAAS;AAC1D,SAAA;AACF,IAAA,CAAA;IAEAc,aAAAA,CAAAA,CAAczB,GAAY,EAAE0B,IAAU,EAAA;AACpC,QAAA,MAAM,EACJC,MAAAA,EAAQ,EAAEC,UAAUC,YAAY,EAAE,EACnC,GAAG7B,GAAAA;AAEJ,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,MAAAA,CAAOC,OAAO,CAAC,iBAAA,CAAA;AAE5C,QAAA,IAAI,CAACF,gBAAAA,CAAiB6B,GAAG,CAACD,YAAAA,CAAAA,EAAe;AACvC,YAAA,MAAM,IAAIrC,eAAAA,CAAgB,CAAC,2BAA2B,EAAEqC,YAAAA,CAAAA,CAAc,CAAA;AACxE,QAAA;AAEA,QAAA,OAAOnC,2BAA2BM,GAAAA,EAAK0B,IAAAA,CAAAA;AACzC,IAAA;AACF,CAAA;;;;"}
@@ -9,6 +9,10 @@ var normalizeEmail = require('../../../../server/src/utils/normalize-email.js');
9
9
  var index = require('../utils/index.js');
10
10
  var ssoLock = require('../utils/sso-lock.js');
11
11
 
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
+
14
+ var ___default = /*#__PURE__*/_interopDefault(_);
15
+
12
16
  const { ApplicationError, ForbiddenError } = utils.errors;
13
17
  const pickUserCreationAttributes = fp.pick([
14
18
  'firstname',
@@ -37,7 +41,7 @@ var user = {
37
41
  const { body } = ctx.request;
38
42
  const cleanData = {
39
43
  ...body,
40
- email: _.get(body, `email`, ``).toLowerCase()
44
+ email: ___default.default.get(body, `email`, ``).toLowerCase()
41
45
  };
42
46
  await user$2.validateUserCreationInput(cleanData);
43
47
  const attributes = pickUserCreationAttributes(cleanData);
@@ -69,7 +73,7 @@ var user = {
69
73
  const { id } = ctx.params;
70
74
  const data = normalizeEmail.normalizeEmail(ctx.request.body);
71
75
  await user$1.validateUserUpdateInput(data);
72
- if (_.has(data, 'email')) {
76
+ if (___default.default.has(data, 'email')) {
73
77
  const uniqueEmailCheck = await index.getService('user').exists({
74
78
  id: {
75
79
  $ne: id