@strapi/admin 5.0.0-beta.7 → 5.0.0-beta.9
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.
- package/dist/admin/{AdminSeatInfo-f4TfgHFE.mjs → AdminSeatInfo-_UxgNKbX.mjs} +5 -5
- package/dist/admin/AdminSeatInfo-_UxgNKbX.mjs.map +1 -0
- package/dist/admin/{AdminSeatInfo-jSvlksaP.js → AdminSeatInfo-cqB8nHFZ.js} +5 -5
- package/dist/admin/AdminSeatInfo-cqB8nHFZ.js.map +1 -0
- package/dist/admin/{ApplicationInfoPage-aB-vx1uX.mjs → ApplicationInfoPage-6PD2owY8.mjs} +7 -7
- package/dist/admin/ApplicationInfoPage-6PD2owY8.mjs.map +1 -0
- package/dist/admin/{ApplicationInfoPage-75RPd0Ro.js → ApplicationInfoPage-S18loXTF.js} +7 -7
- package/dist/admin/ApplicationInfoPage-S18loXTF.js.map +1 -0
- package/dist/admin/{AuthResponse-YXlkDXrI.js → AuthResponse-EiDRhJY8.js} +3 -3
- package/dist/admin/AuthResponse-EiDRhJY8.js.map +1 -0
- package/dist/admin/{AuthResponse-HbQI8hB8.mjs → AuthResponse-Y4lblDuD.mjs} +3 -3
- package/dist/admin/AuthResponse-Y4lblDuD.mjs.map +1 -0
- package/dist/admin/{AuthenticatedLayout-xkecaUXJ.js → AuthenticatedLayout-MDNNJRPg.js} +96 -112
- package/dist/admin/AuthenticatedLayout-MDNNJRPg.js.map +1 -0
- package/dist/admin/{AuthenticatedLayout-LYVDZ-jl.mjs → AuthenticatedLayout-gOaUXjO8.mjs} +98 -114
- package/dist/admin/AuthenticatedLayout-gOaUXjO8.mjs.map +1 -0
- package/dist/admin/{CreateActionEE-9Z-woKCk.js → CreateActionEE-dGj-JbWV.js} +4 -4
- package/dist/admin/CreateActionEE-dGj-JbWV.js.map +1 -0
- package/dist/admin/{CreateActionEE-QiVnA7Rx.mjs → CreateActionEE-uBGAkLbn.mjs} +4 -4
- package/dist/admin/CreateActionEE-uBGAkLbn.mjs.map +1 -0
- package/dist/admin/{CreatePage-uHcWJ0EG.js → CreatePage-5V60DKB0.js} +5 -5
- package/dist/admin/{CreatePage-uHcWJ0EG.js.map → CreatePage-5V60DKB0.js.map} +1 -1
- package/dist/admin/{CreatePage-jsVARlnB.mjs → CreatePage-GD7KENsP.mjs} +3 -3
- package/dist/admin/{CreatePage-jsVARlnB.mjs.map → CreatePage-GD7KENsP.mjs.map} +1 -1
- package/dist/admin/{CreatePage-ZrJXDmLJ.js → CreatePage-Z_y-A5xj.js} +3 -3
- package/dist/admin/{CreatePage-ZrJXDmLJ.js.map → CreatePage-Z_y-A5xj.js.map} +1 -1
- package/dist/admin/{CreatePage-1iAK5V1h.mjs → CreatePage-puzZjQXr.mjs} +5 -5
- package/dist/admin/{CreatePage-1iAK5V1h.mjs.map → CreatePage-puzZjQXr.mjs.map} +1 -1
- package/dist/admin/{CreateView-HhvACL4t.js → CreateView-5V271zBl.js} +3 -3
- package/dist/admin/{CreateView-HhvACL4t.js.map → CreateView-5V271zBl.js.map} +1 -1
- package/dist/admin/{CreateView-tSUpjqXs.mjs → CreateView-EjqRVjU_.mjs} +3 -3
- package/dist/admin/{CreateView-tSUpjqXs.mjs.map → CreateView-EjqRVjU_.mjs.map} +1 -1
- package/dist/admin/{CreateView-1WqjD6uO.js → CreateView-VYprogwB.js} +3 -3
- package/dist/admin/{CreateView-1WqjD6uO.js.map → CreateView-VYprogwB.js.map} +1 -1
- package/dist/admin/{CreateView-Bi2p6uqA.mjs → CreateView-jM_w7R83.mjs} +3 -3
- package/dist/admin/{CreateView-Bi2p6uqA.mjs.map → CreateView-jM_w7R83.mjs.map} +1 -1
- package/dist/admin/{EditPage-xQSTfVfO.mjs → EditPage-8_dXc9y1.mjs} +6 -6
- package/dist/admin/{EditPage-xQSTfVfO.mjs.map → EditPage-8_dXc9y1.mjs.map} +1 -1
- package/dist/admin/{EditPage-JmGISZmG.mjs → EditPage-8fk5JEO7.mjs} +10 -10
- package/dist/admin/{EditPage-JmGISZmG.mjs.map → EditPage-8fk5JEO7.mjs.map} +1 -1
- package/dist/admin/{EditPage-LMYuiLOp.js → EditPage-HsLjcfgK.js} +6 -6
- package/dist/admin/{EditPage-LMYuiLOp.js.map → EditPage-HsLjcfgK.js.map} +1 -1
- package/dist/admin/{EditPage-yFuP3hZG.mjs → EditPage-W_qlhF-2.mjs} +9 -9
- package/dist/admin/{EditPage-yFuP3hZG.mjs.map → EditPage-W_qlhF-2.mjs.map} +1 -1
- package/dist/admin/{EditPage-2l5T1lDC.js → EditPage-WuJtih1X.js} +10 -10
- package/dist/admin/{EditPage-2l5T1lDC.js.map → EditPage-WuJtih1X.js.map} +1 -1
- package/dist/admin/{EditPage-MGQBBDmf.js → EditPage-vRwS2OJZ.js} +9 -9
- package/dist/admin/{EditPage-MGQBBDmf.js.map → EditPage-vRwS2OJZ.js.map} +1 -1
- package/dist/admin/{EditView-06IK7yeo.mjs → EditView-Cac025JW.mjs} +6 -6
- package/dist/admin/{EditView-06IK7yeo.mjs.map → EditView-Cac025JW.mjs.map} +1 -1
- package/dist/admin/{EditView-9cnQdotQ.js → EditView-lhhZAQtN.js} +6 -6
- package/dist/admin/{EditView-9cnQdotQ.js.map → EditView-lhhZAQtN.js.map} +1 -1
- package/dist/admin/{EditViewPage-ZTHin7cu.js → EditViewPage-Q7N1TLU9.js} +71 -95
- package/dist/admin/EditViewPage-Q7N1TLU9.js.map +1 -0
- package/dist/admin/{EditViewPage-x06h850j.mjs → EditViewPage-f56oKqQ-.mjs} +72 -96
- package/dist/admin/EditViewPage-f56oKqQ-.mjs.map +1 -0
- package/dist/admin/{EventsTable-uKf7y-DM.mjs → EventsTable-duSraBTj.mjs} +2 -2
- package/dist/admin/{EventsTable-uKf7y-DM.mjs.map → EventsTable-duSraBTj.mjs.map} +1 -1
- package/dist/admin/{EventsTable-i6DpZCjP.js → EventsTable-y6XT7dVi.js} +2 -2
- package/dist/admin/{EventsTable-i6DpZCjP.js.map → EventsTable-y6XT7dVi.js.map} +1 -1
- package/dist/admin/{HomePage-VKuqPKIc.js → HomePage-4Hk9puW_.js} +23 -20
- package/dist/admin/HomePage-4Hk9puW_.js.map +1 -0
- package/dist/admin/{HomePage-Dk_BC7we.mjs → HomePage-UTLFs-4n.mjs} +3 -3
- package/dist/admin/{HomePage-Dk_BC7we.mjs.map → HomePage-UTLFs-4n.mjs.map} +1 -1
- package/dist/admin/{HomePage-ytofle46.mjs → HomePage-d4h0KEnw.mjs} +23 -20
- package/dist/admin/HomePage-d4h0KEnw.mjs.map +1 -0
- package/dist/admin/{HomePage-tgoADIWe.js → HomePage-vTms2gld.js} +3 -3
- package/dist/admin/{HomePage-tgoADIWe.js.map → HomePage-vTms2gld.js.map} +1 -1
- package/dist/admin/{InstalledPluginsPage-5fDQJ3wY.js → InstalledPluginsPage-9ooKCsS7.js} +5 -5
- package/dist/admin/{InstalledPluginsPage-5fDQJ3wY.js.map → InstalledPluginsPage-9ooKCsS7.js.map} +1 -1
- package/dist/admin/{InstalledPluginsPage--iVM14K3.mjs → InstalledPluginsPage-nCdAsAAu.mjs} +5 -5
- package/dist/admin/{InstalledPluginsPage--iVM14K3.mjs.map → InstalledPluginsPage-nCdAsAAu.mjs.map} +1 -1
- package/dist/admin/{Layout-woodqxaL.mjs → Layout-Ax9QtxH1.mjs} +5 -5
- package/dist/admin/{Layout-woodqxaL.mjs.map → Layout-Ax9QtxH1.mjs.map} +1 -1
- package/dist/admin/{Layout-BYaZsvrJ.js → Layout-Bmmqv9h6.js} +5 -5
- package/dist/admin/{Layout-BYaZsvrJ.js.map → Layout-Bmmqv9h6.js.map} +1 -1
- package/dist/admin/{ListPage-MxOKlYmC.js → ListPage-10_h7FUt.js} +14 -14
- package/dist/admin/ListPage-10_h7FUt.js.map +1 -0
- package/dist/admin/{ListPage-7wUYXUgs.mjs → ListPage-4kGSO2Ri.mjs} +14 -14
- package/dist/admin/ListPage-4kGSO2Ri.mjs.map +1 -0
- package/dist/admin/{ListPage-XZshrlES.js → ListPage-4n-Xb2aE.js} +3 -3
- package/dist/admin/{ListPage-XZshrlES.js.map → ListPage-4n-Xb2aE.js.map} +1 -1
- package/dist/admin/{ListPage-V26wHeo6.js → ListPage-4nzagne8.js} +9 -9
- package/dist/admin/ListPage-4nzagne8.js.map +1 -0
- package/dist/admin/{ListPage-HCUzAC2B.mjs → ListPage-EPIYY3Uf.mjs} +9 -9
- package/dist/admin/ListPage-EPIYY3Uf.mjs.map +1 -0
- package/dist/admin/{ListPage-0zYjdNsU.js → ListPage-IgkmnCSY.js} +15 -20
- package/dist/admin/ListPage-IgkmnCSY.js.map +1 -0
- package/dist/admin/{ListPage-NURPzLD-.mjs → ListPage-OE9xQffQ.mjs} +8 -7
- package/dist/admin/{ListPage-NURPzLD-.mjs.map → ListPage-OE9xQffQ.mjs.map} +1 -1
- package/dist/admin/{ListPage-5OElNgYk.js → ListPage-TWLqkRt6.js} +8 -7
- package/dist/admin/{ListPage-5OElNgYk.js.map → ListPage-TWLqkRt6.js.map} +1 -1
- package/dist/admin/{ListPage-wtqw0RXL.mjs → ListPage-VGqEsiEA.mjs} +15 -20
- package/dist/admin/ListPage-VGqEsiEA.mjs.map +1 -0
- package/dist/admin/{ListPage-4VNlnYoD.mjs → ListPage-gbCO5Otz.mjs} +3 -3
- package/dist/admin/{ListPage-4VNlnYoD.mjs.map → ListPage-gbCO5Otz.mjs.map} +1 -1
- package/dist/admin/{ListView-hi5fg7r8.mjs → ListView-Zvs5X2St.mjs} +5 -5
- package/dist/admin/{ListView-hi5fg7r8.mjs.map → ListView-Zvs5X2St.mjs.map} +1 -1
- package/dist/admin/{ListView-VRdl68JN.mjs → ListView-gKrpPLEM.mjs} +5 -5
- package/dist/admin/{ListView-VRdl68JN.mjs.map → ListView-gKrpPLEM.mjs.map} +1 -1
- package/dist/admin/{ListView-SmHj4MFz.js → ListView-pT2a-fdi.js} +5 -5
- package/dist/admin/{ListView-SmHj4MFz.js.map → ListView-pT2a-fdi.js.map} +1 -1
- package/dist/admin/{ListView-siyyh4f7.js → ListView-uHb_Hgib.js} +5 -5
- package/dist/admin/{ListView-siyyh4f7.js.map → ListView-uHb_Hgib.js.map} +1 -1
- package/dist/admin/{Login-bGhxScoT.js → Login-EcSP4AMG.js} +3 -3
- package/dist/admin/{Login-bGhxScoT.js.map → Login-EcSP4AMG.js.map} +1 -1
- package/dist/admin/{Login-9hdTvAlD.mjs → Login-w4BUlNaE.mjs} +3 -3
- package/dist/admin/{Login-9hdTvAlD.mjs.map → Login-w4BUlNaE.mjs.map} +1 -1
- package/dist/admin/{MagicLinkEE-cAwS-v3S.mjs → MagicLinkEE-b9NK8XXY.mjs} +3 -3
- package/dist/admin/{MagicLinkEE-cAwS-v3S.mjs.map → MagicLinkEE-b9NK8XXY.mjs.map} +1 -1
- package/dist/admin/{MagicLinkEE-5c7HTc8n.js → MagicLinkEE-qT5OE9Pm.js} +3 -3
- package/dist/admin/{MagicLinkEE-5c7HTc8n.js.map → MagicLinkEE-qT5OE9Pm.js.map} +1 -1
- package/dist/admin/{MarketplacePage-t6FAhfMK.js → MarketplacePage-MVRrpUSk.js} +9 -11
- package/dist/admin/MarketplacePage-MVRrpUSk.js.map +1 -0
- package/dist/admin/{MarketplacePage-hCtNAEWd.mjs → MarketplacePage-oGhZBKgX.mjs} +9 -11
- package/dist/admin/MarketplacePage-oGhZBKgX.mjs.map +1 -0
- package/dist/admin/{Permissions-aRi-vOk-.js → Permissions-kNVZVLmu.js} +30 -50
- package/dist/admin/Permissions-kNVZVLmu.js.map +1 -0
- package/dist/admin/{Permissions-Ng22nlYS.mjs → Permissions-lf6dNG4S.mjs} +31 -51
- package/dist/admin/Permissions-lf6dNG4S.mjs.map +1 -0
- package/dist/admin/{PrivateRoute-hfATZKl-.mjs → PrivateRoute-1hyhztQM.mjs} +2 -2
- package/dist/admin/{PrivateRoute-hfATZKl-.mjs.map → PrivateRoute-1hyhztQM.mjs.map} +1 -1
- package/dist/admin/{PrivateRoute--JuZZan_.js → PrivateRoute-wBE5vMxe.js} +2 -2
- package/dist/admin/{PrivateRoute--JuZZan_.js.map → PrivateRoute-wBE5vMxe.js.map} +1 -1
- package/dist/admin/{ProfilePage-8ieqgIrW.js → ProfilePage-ZlpnTKEF.js} +8 -8
- package/dist/admin/{ProfilePage-8ieqgIrW.js.map → ProfilePage-ZlpnTKEF.js.map} +1 -1
- package/dist/admin/{ProfilePage-imi1Exl5.mjs → ProfilePage-zk-Py9wt.mjs} +8 -8
- package/dist/admin/{ProfilePage-imi1Exl5.mjs.map → ProfilePage-zk-Py9wt.mjs.map} +1 -1
- package/dist/admin/{PurchaseAuditLogs-xUopaGaS.js → PurchaseAuditLogs-9reb0oGz.js} +2 -2
- package/dist/admin/{PurchaseAuditLogs-xUopaGaS.js.map → PurchaseAuditLogs-9reb0oGz.js.map} +1 -1
- package/dist/admin/{PurchaseAuditLogs-RGCYZl25.mjs → PurchaseAuditLogs-iOYsTJA-.mjs} +2 -2
- package/dist/admin/{PurchaseAuditLogs-RGCYZl25.mjs.map → PurchaseAuditLogs-iOYsTJA-.mjs.map} +1 -1
- package/dist/admin/{PurchaseSingleSignOn-XOgkJmcn.js → PurchaseSingleSignOn-S3xLiiv7.js} +2 -2
- package/dist/admin/{PurchaseSingleSignOn-XOgkJmcn.js.map → PurchaseSingleSignOn-S3xLiiv7.js.map} +1 -1
- package/dist/admin/{PurchaseSingleSignOn-uMysWmJV.mjs → PurchaseSingleSignOn-X629iA7K.mjs} +2 -2
- package/dist/admin/{PurchaseSingleSignOn-uMysWmJV.mjs.map → PurchaseSingleSignOn-X629iA7K.mjs.map} +1 -1
- package/dist/admin/{SelectRoles-uO7YohIC.js → SelectRoles-hyiyvsCG.js} +5 -5
- package/dist/admin/SelectRoles-hyiyvsCG.js.map +1 -0
- package/dist/admin/{SelectRoles-kh6E_r88.mjs → SelectRoles-yM-LT458.mjs} +5 -5
- package/dist/admin/SelectRoles-yM-LT458.mjs.map +1 -0
- package/dist/admin/{SingleSignOnPage-bnlsJPDh.js → SingleSignOnPage-3Mfu4dgn.js} +6 -6
- package/dist/admin/{SingleSignOnPage-bnlsJPDh.js.map → SingleSignOnPage-3Mfu4dgn.js.map} +1 -1
- package/dist/admin/{SingleSignOnPage-T90Opl7K.mjs → SingleSignOnPage-wPZ1tqEk.mjs} +6 -6
- package/dist/admin/{SingleSignOnPage-T90Opl7K.mjs.map → SingleSignOnPage-wPZ1tqEk.mjs.map} +1 -1
- package/dist/admin/{Table-qGOQznHA.js → Table-N9PZc6xL.js} +4 -4
- package/dist/admin/{Table-qGOQznHA.js.map → Table-N9PZc6xL.js.map} +1 -1
- package/dist/admin/{Table-XkC1iUuN.mjs → Table-OcYvBab7.mjs} +4 -4
- package/dist/admin/{Table-XkC1iUuN.mjs.map → Table-OcYvBab7.mjs.map} +1 -1
- package/dist/admin/{TokenTypeSelect-733TgUaC.js → TokenTypeSelect-dWn05yGP.js} +7 -7
- package/dist/admin/TokenTypeSelect-dWn05yGP.js.map +1 -0
- package/dist/admin/{TokenTypeSelect-kjhQiPbj.mjs → TokenTypeSelect-v6IYPaBF.mjs} +6 -6
- package/dist/admin/TokenTypeSelect-v6IYPaBF.mjs.map +1 -0
- package/dist/admin/{UseCasePage-cNK2fN9i.mjs → UseCasePage-P4AFdcDQ.mjs} +4 -4
- package/dist/admin/{UseCasePage-cNK2fN9i.mjs.map → UseCasePage-P4AFdcDQ.mjs.map} +1 -1
- package/dist/admin/{UseCasePage-uk5jmSsj.js → UseCasePage-ijq-Bur_.js} +4 -4
- package/dist/admin/{UseCasePage-uk5jmSsj.js.map → UseCasePage-ijq-Bur_.js.map} +1 -1
- package/dist/admin/{admin-dE-jnuNr.mjs → admin-B6AW0Kov.mjs} +7 -28
- package/dist/admin/admin-B6AW0Kov.mjs.map +1 -0
- package/dist/admin/{admin-sk7xXllW.js → admin-p0djr5G6.js} +7 -28
- package/dist/admin/admin-p0djr5G6.js.map +1 -0
- package/dist/admin/{apiTokens-W-bmo-dU.mjs → apiTokens-YMUmHnrH.mjs} +7 -6
- package/dist/admin/apiTokens-YMUmHnrH.mjs.map +1 -0
- package/dist/admin/{apiTokens-amUH0Wax.js → apiTokens-YxfAnO7_.js} +7 -6
- package/dist/admin/apiTokens-YxfAnO7_.js.map +1 -0
- package/dist/admin/{constants-K5IOuR0b.mjs → constants-Z-zrJ7Zs.mjs} +3 -3
- package/dist/admin/{constants-K5IOuR0b.mjs.map → constants-Z-zrJ7Zs.mjs.map} +1 -1
- package/dist/admin/{constants-ZW8_ZgiN.js → constants-sfZ2gFzJ.js} +3 -3
- package/dist/admin/{constants-ZW8_ZgiN.js.map → constants-sfZ2gFzJ.js.map} +1 -1
- package/dist/admin/ee.js +1 -1
- package/dist/admin/ee.mjs +1 -1
- package/dist/admin/{en-zVbLVH-h.js → en-G-ukrF2h.js} +2 -1
- package/dist/admin/{en-zVbLVH-h.js.map → en-G-ukrF2h.js.map} +1 -1
- package/dist/admin/{en-D7rooMTs.mjs → en-K35WIWVM.mjs} +2 -1
- package/dist/admin/{en-D7rooMTs.mjs.map → en-K35WIWVM.mjs.map} +1 -1
- package/dist/admin/{index--VHJr8__.mjs → index-EQL2s09p.mjs} +106 -93
- package/dist/admin/index-EQL2s09p.mjs.map +1 -0
- package/dist/admin/{index-8r8zglVb.js → index-duYn5r8_.js} +107 -93
- package/dist/admin/index-duYn5r8_.js.map +1 -0
- package/dist/admin/index.js +8 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +3 -3
- package/dist/admin/{rbac-xo8GO653.js → rbac-5b9ylhpa.js} +8 -5
- package/dist/admin/rbac-5b9ylhpa.js.map +1 -0
- package/dist/admin/{rbac-OjYDiE2n.mjs → rbac-oJEkQdXG.mjs} +9 -6
- package/dist/admin/rbac-oJEkQdXG.mjs.map +1 -0
- package/dist/admin/{selectors-k4OkEbL7.mjs → selectors-Ilww6FA-.mjs} +2 -2
- package/dist/admin/{selectors-k4OkEbL7.mjs.map → selectors-Ilww6FA-.mjs.map} +1 -1
- package/dist/admin/{selectors-lQOnkFXz.js → selectors-NDEu6dJa.js} +2 -2
- package/dist/admin/{selectors-lQOnkFXz.js.map → selectors-NDEu6dJa.js.map} +1 -1
- package/dist/admin/src/StrapiApp.d.ts +1 -0
- package/dist/admin/src/components/Form.d.ts +7 -2
- package/dist/admin/src/components/FormInputs/Boolean.d.ts +2 -2
- package/dist/admin/src/components/FormInputs/Checkbox.d.ts +2 -2
- package/dist/admin/src/components/FormInputs/Date.d.ts +2 -2
- package/dist/admin/src/components/FormInputs/DateTime.d.ts +2 -2
- package/dist/admin/src/components/FormInputs/Email.d.ts +2 -1
- package/dist/admin/src/components/FormInputs/Enumeration.d.ts +2 -1
- package/dist/admin/src/components/FormInputs/Json.d.ts +2 -1
- package/dist/admin/src/components/FormInputs/Number.d.ts +2 -2
- package/dist/admin/src/components/FormInputs/Password.d.ts +2 -1
- package/dist/admin/src/components/FormInputs/Renderer.d.ts +2 -8
- package/dist/admin/src/components/FormInputs/String.d.ts +2 -1
- package/dist/admin/src/components/FormInputs/Textarea.d.ts +2 -1
- package/dist/admin/src/components/FormInputs/Time.d.ts +2 -2
- package/dist/admin/src/components/Layouts/GridLayout.d.ts +1 -1
- package/dist/admin/src/components/Layouts/Layout.d.ts +18 -0
- package/dist/admin/src/components/MainNav/NavLink.d.ts +3 -3
- package/dist/admin/src/components/PageHelpers.d.ts +1 -1
- package/dist/admin/src/core/store/configure.d.ts +3 -9
- package/dist/admin/src/core/store/hooks.d.ts +3 -9
- package/dist/admin/src/features/Tracking.d.ts +1 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/hooks/useFetchClient.d.ts +1 -6
- package/dist/admin/src/hooks/useMenu.d.ts +1 -1
- package/dist/admin/src/index.d.ts +5 -3
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/{CollabsableContentType.d.ts → CollapsableContentType.d.ts} +1 -3
- package/dist/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.d.ts +2 -4
- package/dist/admin/src/pages/Settings/pages/Roles/components/RoleRow.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
- package/dist/admin/src/selectors.d.ts +2 -6
- package/dist/admin/src/services/admin.d.ts +5 -5
- package/dist/admin/src/services/api.d.ts +11 -9
- package/dist/admin/src/services/apiTokens.d.ts +1 -1
- package/dist/admin/src/services/auth.d.ts +13 -11
- package/dist/admin/src/services/contentApi.d.ts +2 -2
- package/dist/admin/src/services/contentManager.d.ts +5 -1
- package/dist/admin/src/services/transferTokens.d.ts +2 -2
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/services/webhooks.d.ts +2 -2
- package/dist/admin/src/types/adminConfiguration.d.ts +90 -0
- package/dist/admin/src/utils/baseQuery.d.ts +6 -5
- package/dist/admin/src/utils/getFetchClient.d.ts +9 -9
- package/dist/admin/test.js +10 -7
- package/dist/admin/test.js.map +1 -1
- package/dist/admin/test.mjs +10 -7
- package/dist/admin/test.mjs.map +1 -1
- package/dist/admin/tests/utils.d.ts +1 -3
- package/dist/admin/{transferTokens-i692XANY.mjs → transferTokens-CNI0TFdA.mjs} +15 -5
- package/dist/admin/transferTokens-CNI0TFdA.mjs.map +1 -0
- package/dist/admin/{transferTokens-6WfQBaQ-.js → transferTokens-HcVXmOrq.js} +15 -4
- package/dist/admin/transferTokens-HcVXmOrq.js.map +1 -0
- package/dist/admin/{useAdminRoles-Y5UQ6Egv.js → useAdminRoles-2VDDweuC.js} +2 -2
- package/dist/admin/{useAdminRoles-Y5UQ6Egv.js.map → useAdminRoles-2VDDweuC.js.map} +1 -1
- package/dist/admin/{useAdminRoles-eVMCxlw1.mjs → useAdminRoles-cq3ZckdQ.mjs} +2 -2
- package/dist/admin/{useAdminRoles-eVMCxlw1.mjs.map → useAdminRoles-cq3ZckdQ.mjs.map} +1 -1
- package/dist/admin/{useLicenseLimitNotification-OHVMxaBa.mjs → useLicenseLimitNotification-1Xo24v-C.mjs} +3 -3
- package/dist/admin/{useLicenseLimitNotification-OHVMxaBa.mjs.map → useLicenseLimitNotification-1Xo24v-C.mjs.map} +1 -1
- package/dist/admin/{useLicenseLimitNotification-sfaZoueO.js → useLicenseLimitNotification-9iq0TFuF.js} +3 -3
- package/dist/admin/{useLicenseLimitNotification-sfaZoueO.js.map → useLicenseLimitNotification-9iq0TFuF.js.map} +1 -1
- package/dist/admin/{useLicenseLimits-mA4KtQ81.js → useLicenseLimits-FtmLXkwK.js} +2 -2
- package/dist/admin/{useLicenseLimits-mA4KtQ81.js.map → useLicenseLimits-FtmLXkwK.js.map} +1 -1
- package/dist/admin/{useLicenseLimits--WDjYzSj.mjs → useLicenseLimits-Jy6E6qc2.mjs} +2 -2
- package/dist/admin/{useLicenseLimits--WDjYzSj.mjs.map → useLicenseLimits-Jy6E6qc2.mjs.map} +1 -1
- package/dist/admin/{useWebhooks-0pDqX-k4.mjs → useWebhooks-bgdpL7W6.mjs} +5 -3
- package/dist/admin/useWebhooks-bgdpL7W6.mjs.map +1 -0
- package/dist/admin/{useWebhooks-BBj9Ew7F.js → useWebhooks-opYGugiT.js} +5 -3
- package/dist/admin/useWebhooks-opYGugiT.js.map +1 -0
- package/dist/admin/{validation-hp8oweyu.js → validation-6PUPWFkz.js} +2 -2
- package/dist/admin/{validation-hp8oweyu.js.map → validation-6PUPWFkz.js.map} +1 -1
- package/dist/admin/{validation-xeirflOd.mjs → validation-qUTUIssJ.mjs} +2 -2
- package/dist/admin/{validation-xeirflOd.mjs.map → validation-qUTUIssJ.mjs.map} +1 -1
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/index.js +514 -446
- package/dist/ee/server/index.js.map +1 -1
- package/dist/ee/server/index.mjs +514 -444
- package/dist/ee/server/index.mjs.map +1 -1
- package/dist/package.json.d.ts +15 -15
- package/dist/server/index.js +44 -36
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +44 -36
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +7 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts +8 -6
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/shared/contracts/webhooks.d.ts +5 -5
- package/dist/shared/contracts/webhooks.d.ts.map +1 -1
- package/package.json +16 -16
- package/strapi-server.js +1 -0
- package/dist/admin/AdminSeatInfo-f4TfgHFE.mjs.map +0 -1
- package/dist/admin/AdminSeatInfo-jSvlksaP.js.map +0 -1
- package/dist/admin/ApplicationInfoPage-75RPd0Ro.js.map +0 -1
- package/dist/admin/ApplicationInfoPage-aB-vx1uX.mjs.map +0 -1
- package/dist/admin/AuthResponse-HbQI8hB8.mjs.map +0 -1
- package/dist/admin/AuthResponse-YXlkDXrI.js.map +0 -1
- package/dist/admin/AuthenticatedLayout-LYVDZ-jl.mjs.map +0 -1
- package/dist/admin/AuthenticatedLayout-xkecaUXJ.js.map +0 -1
- package/dist/admin/CreateActionEE-9Z-woKCk.js.map +0 -1
- package/dist/admin/CreateActionEE-QiVnA7Rx.mjs.map +0 -1
- package/dist/admin/EditViewPage-ZTHin7cu.js.map +0 -1
- package/dist/admin/EditViewPage-x06h850j.mjs.map +0 -1
- package/dist/admin/HomePage-VKuqPKIc.js.map +0 -1
- package/dist/admin/HomePage-ytofle46.mjs.map +0 -1
- package/dist/admin/ListPage-0zYjdNsU.js.map +0 -1
- package/dist/admin/ListPage-7wUYXUgs.mjs.map +0 -1
- package/dist/admin/ListPage-HCUzAC2B.mjs.map +0 -1
- package/dist/admin/ListPage-MxOKlYmC.js.map +0 -1
- package/dist/admin/ListPage-V26wHeo6.js.map +0 -1
- package/dist/admin/ListPage-wtqw0RXL.mjs.map +0 -1
- package/dist/admin/MarketplacePage-hCtNAEWd.mjs.map +0 -1
- package/dist/admin/MarketplacePage-t6FAhfMK.js.map +0 -1
- package/dist/admin/Permissions-Ng22nlYS.mjs.map +0 -1
- package/dist/admin/Permissions-aRi-vOk-.js.map +0 -1
- package/dist/admin/SelectRoles-kh6E_r88.mjs.map +0 -1
- package/dist/admin/SelectRoles-uO7YohIC.js.map +0 -1
- package/dist/admin/TokenTypeSelect-733TgUaC.js.map +0 -1
- package/dist/admin/TokenTypeSelect-kjhQiPbj.mjs.map +0 -1
- package/dist/admin/admin-dE-jnuNr.mjs.map +0 -1
- package/dist/admin/admin-sk7xXllW.js.map +0 -1
- package/dist/admin/apiTokens-W-bmo-dU.mjs.map +0 -1
- package/dist/admin/apiTokens-amUH0Wax.js.map +0 -1
- package/dist/admin/index--VHJr8__.mjs.map +0 -1
- package/dist/admin/index-8r8zglVb.js.map +0 -1
- package/dist/admin/rbac-OjYDiE2n.mjs.map +0 -1
- package/dist/admin/rbac-xo8GO653.js.map +0 -1
- package/dist/admin/transferTokens-6WfQBaQ-.js.map +0 -1
- package/dist/admin/transferTokens-i692XANY.mjs.map +0 -1
- package/dist/admin/useWebhooks-0pDqX-k4.mjs.map +0 -1
- package/dist/admin/useWebhooks-BBj9Ew7F.js.map +0 -1
package/dist/ee/server/index.mjs
CHANGED
|
@@ -5,12 +5,11 @@ import { isNil, castArray, merge, map, uniq, difference, differenceWith, isEqual
|
|
|
5
5
|
import { differenceInHours, parseISO } from "date-fns";
|
|
6
6
|
import { errors, async, arrays, yup, validateYupSchema, env } from "@strapi/utils";
|
|
7
7
|
import "@strapi/types";
|
|
8
|
-
import localProvider from "@strapi/provider-audit-logs-local";
|
|
9
|
-
import { scheduleJob } from "node-schedule";
|
|
10
8
|
import _ from "lodash";
|
|
11
9
|
import { Strategy } from "passport-local";
|
|
12
10
|
import passport$2 from "koa-passport";
|
|
13
11
|
import compose from "koa-compose";
|
|
12
|
+
import { scheduleJob } from "node-schedule";
|
|
14
13
|
const registerAdminPanelRoute = ({ strapi: strapi2 }) => {
|
|
15
14
|
let buildDir = resolve(strapi2.dirs.dist.root, "build");
|
|
16
15
|
if (!fse.pathExistsSync(buildDir)) {
|
|
@@ -224,203 +223,9 @@ const executeCERegister = ({ strapi: strapi2 }) => {
|
|
|
224
223
|
registerAdminPanelRoute({ strapi: strapi2 });
|
|
225
224
|
}
|
|
226
225
|
};
|
|
227
|
-
async function migrateAuditLogsTable({ oldContentTypes, contentTypes }) {
|
|
228
|
-
const oldName = oldContentTypes?.["admin::audit-log"]?.collectionName;
|
|
229
|
-
const newName = contentTypes["admin::audit-log"]?.collectionName;
|
|
230
|
-
const hasRenamedAuditLogsTable = oldName === "audit_logs" && newName === "strapi_audit_logs";
|
|
231
|
-
if (!hasRenamedAuditLogsTable) {
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
const hasAuditLogsTable = await strapi.db.getSchemaConnection().hasTable("audit_logs");
|
|
235
|
-
const hasLinkTable = await strapi.db.getSchemaConnection().hasTable("audit_logs_user_links");
|
|
236
|
-
if (!hasAuditLogsTable || !hasLinkTable) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
const auditLogsColumnInfo = await strapi.db.connection("audit_logs").columnInfo();
|
|
240
|
-
const linkColumnInfo = await strapi.db.connection("audit_logs_user_links").columnInfo();
|
|
241
|
-
if (!auditLogsColumnInfo.action || !auditLogsColumnInfo.date || !auditLogsColumnInfo.payload || !linkColumnInfo.audit_log_id || !linkColumnInfo.user_id) {
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
await strapi.db.getSchemaConnection().renameTable("audit_logs", "strapi_audit_logs");
|
|
245
|
-
await strapi.db.getSchemaConnection().renameTable("audit_logs_user_links", "strapi_audit_logs_user_links");
|
|
246
|
-
}
|
|
247
|
-
const DEFAULT_RETENTION_DAYS = 90;
|
|
248
|
-
const defaultEvents = [
|
|
249
|
-
"entry.create",
|
|
250
|
-
"entry.update",
|
|
251
|
-
"entry.delete",
|
|
252
|
-
"entry.publish",
|
|
253
|
-
"entry.unpublish",
|
|
254
|
-
"media.create",
|
|
255
|
-
"media.update",
|
|
256
|
-
"media.delete",
|
|
257
|
-
"media-folder.create",
|
|
258
|
-
"media-folder.update",
|
|
259
|
-
"media-folder.delete",
|
|
260
|
-
"user.create",
|
|
261
|
-
"user.update",
|
|
262
|
-
"user.delete",
|
|
263
|
-
"admin.auth.success",
|
|
264
|
-
"admin.logout",
|
|
265
|
-
"content-type.create",
|
|
266
|
-
"content-type.update",
|
|
267
|
-
"content-type.delete",
|
|
268
|
-
"component.create",
|
|
269
|
-
"component.update",
|
|
270
|
-
"component.delete",
|
|
271
|
-
"role.create",
|
|
272
|
-
"role.update",
|
|
273
|
-
"role.delete",
|
|
274
|
-
"permission.create",
|
|
275
|
-
"permission.update",
|
|
276
|
-
"permission.delete"
|
|
277
|
-
];
|
|
278
|
-
const getSanitizedUser = (user2) => {
|
|
279
|
-
let displayName = user2.email;
|
|
280
|
-
if (user2.username) {
|
|
281
|
-
displayName = user2.username;
|
|
282
|
-
} else if (user2.firstname && user2.lastname) {
|
|
283
|
-
displayName = `${user2.firstname} ${user2.lastname}`;
|
|
284
|
-
}
|
|
285
|
-
return {
|
|
286
|
-
id: user2.id,
|
|
287
|
-
email: user2.email,
|
|
288
|
-
displayName
|
|
289
|
-
};
|
|
290
|
-
};
|
|
291
|
-
const getEventMap = (defaultEvents2) => {
|
|
292
|
-
const getDefaultPayload = (...args) => args[0];
|
|
293
|
-
return defaultEvents2.reduce((acc, event) => {
|
|
294
|
-
acc[event] = getDefaultPayload;
|
|
295
|
-
return acc;
|
|
296
|
-
}, {});
|
|
297
|
-
};
|
|
298
|
-
const getRetentionDays = (strapi2) => {
|
|
299
|
-
const licenseRetentionDays = strapi2.ee.features.get("audit-logs")?.options.retentionDays;
|
|
300
|
-
const userRetentionDays = strapi2.config.get("admin.auditLogs.retentionDays");
|
|
301
|
-
if (licenseRetentionDays == null) {
|
|
302
|
-
return userRetentionDays ?? DEFAULT_RETENTION_DAYS;
|
|
303
|
-
}
|
|
304
|
-
if (userRetentionDays && userRetentionDays < licenseRetentionDays) {
|
|
305
|
-
return userRetentionDays;
|
|
306
|
-
}
|
|
307
|
-
return licenseRetentionDays;
|
|
308
|
-
};
|
|
309
|
-
const createAuditLogsService = (strapi2) => {
|
|
310
|
-
const state = {};
|
|
311
|
-
const eventMap = getEventMap(defaultEvents);
|
|
312
|
-
const processEvent = (name2, ...args) => {
|
|
313
|
-
const requestState = strapi2.requestContext.get()?.state;
|
|
314
|
-
const isUsingAdminAuth = requestState?.auth?.strategy.name === "admin";
|
|
315
|
-
const user2 = requestState?.user;
|
|
316
|
-
if (!isUsingAdminAuth || !user2) {
|
|
317
|
-
return null;
|
|
318
|
-
}
|
|
319
|
-
const getPayload = eventMap[name2];
|
|
320
|
-
if (!getPayload) {
|
|
321
|
-
return null;
|
|
322
|
-
}
|
|
323
|
-
const ignoredUids = ["plugin::upload.file", "plugin::upload.folder"];
|
|
324
|
-
if (ignoredUids.includes(args[0]?.uid)) {
|
|
325
|
-
return null;
|
|
326
|
-
}
|
|
327
|
-
return {
|
|
328
|
-
action: name2,
|
|
329
|
-
date: (/* @__PURE__ */ new Date()).toISOString(),
|
|
330
|
-
payload: getPayload(...args) || {},
|
|
331
|
-
userId: user2.id
|
|
332
|
-
};
|
|
333
|
-
};
|
|
334
|
-
async function handleEvent(name2, ...args) {
|
|
335
|
-
const processedEvent = processEvent(name2, ...args);
|
|
336
|
-
if (processedEvent) {
|
|
337
|
-
await strapi2.db.transaction(({ onCommit }) => {
|
|
338
|
-
onCommit(() => state.provider.saveEvent(processedEvent));
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
return {
|
|
343
|
-
async register() {
|
|
344
|
-
if (!state.eeEnableUnsubscribe) {
|
|
345
|
-
state.eeEnableUnsubscribe = strapi2.eventHub.on("ee.enable", () => {
|
|
346
|
-
this.destroy();
|
|
347
|
-
this.register();
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
if (!state.eeUpdateUnsubscribe) {
|
|
351
|
-
state.eeUpdateUnsubscribe = strapi2.eventHub.on("ee.update", () => {
|
|
352
|
-
this.destroy();
|
|
353
|
-
this.register();
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
state.eeDisableUnsubscribe = strapi2.eventHub.on("ee.disable", () => {
|
|
357
|
-
this.destroy();
|
|
358
|
-
});
|
|
359
|
-
state.provider = await localProvider.register({ strapi: strapi2 });
|
|
360
|
-
if (!strapi2.ee.features.isEnabled("audit-logs")) {
|
|
361
|
-
return this;
|
|
362
|
-
}
|
|
363
|
-
state.eventHubUnsubscribe = strapi2.eventHub.subscribe(handleEvent.bind(this));
|
|
364
|
-
const retentionDays = getRetentionDays(strapi2);
|
|
365
|
-
state.deleteExpiredJob = scheduleJob("0 0 * * *", () => {
|
|
366
|
-
const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1e3);
|
|
367
|
-
state.provider.deleteExpiredEvents(expirationDate);
|
|
368
|
-
});
|
|
369
|
-
return this;
|
|
370
|
-
},
|
|
371
|
-
async findMany(query) {
|
|
372
|
-
const { results, pagination } = await state.provider.findMany(query);
|
|
373
|
-
const sanitizedResults = results.map((result) => {
|
|
374
|
-
const { user: user2, ...rest } = result;
|
|
375
|
-
return {
|
|
376
|
-
...rest,
|
|
377
|
-
user: user2 ? getSanitizedUser(user2) : null
|
|
378
|
-
};
|
|
379
|
-
});
|
|
380
|
-
return {
|
|
381
|
-
results: sanitizedResults,
|
|
382
|
-
pagination
|
|
383
|
-
};
|
|
384
|
-
},
|
|
385
|
-
async findOne(id) {
|
|
386
|
-
const result = await state.provider.findOne(id);
|
|
387
|
-
if (!result) {
|
|
388
|
-
return null;
|
|
389
|
-
}
|
|
390
|
-
const { user: user2, ...rest } = result;
|
|
391
|
-
return {
|
|
392
|
-
...rest,
|
|
393
|
-
user: user2 ? getSanitizedUser(user2) : null
|
|
394
|
-
};
|
|
395
|
-
},
|
|
396
|
-
unsubscribe() {
|
|
397
|
-
if (state.eeDisableUnsubscribe) {
|
|
398
|
-
state.eeDisableUnsubscribe();
|
|
399
|
-
}
|
|
400
|
-
if (state.eventHubUnsubscribe) {
|
|
401
|
-
state.eventHubUnsubscribe();
|
|
402
|
-
}
|
|
403
|
-
if (state.deleteExpiredJob) {
|
|
404
|
-
state.deleteExpiredJob.cancel();
|
|
405
|
-
}
|
|
406
|
-
return this;
|
|
407
|
-
},
|
|
408
|
-
destroy() {
|
|
409
|
-
return this.unsubscribe();
|
|
410
|
-
}
|
|
411
|
-
};
|
|
412
|
-
};
|
|
413
226
|
const register = async ({ strapi: strapi2 }) => {
|
|
414
|
-
const auditLogsIsEnabled = strapi2.config.get("admin.auditLogs.enabled", true);
|
|
415
|
-
if (auditLogsIsEnabled) {
|
|
416
|
-
strapi2.hook("strapi::content-types.beforeSync").register(migrateAuditLogsTable);
|
|
417
|
-
const auditLogsService = createAuditLogsService(strapi2);
|
|
418
|
-
strapi2.add("audit-logs", auditLogsService);
|
|
419
|
-
await auditLogsService.register();
|
|
420
|
-
}
|
|
421
227
|
await executeCERegister({ strapi: strapi2 });
|
|
422
228
|
};
|
|
423
|
-
const index$3 = {};
|
|
424
229
|
const actions$1 = [
|
|
425
230
|
{
|
|
426
231
|
uid: "marketplace.read",
|
|
@@ -727,7 +532,7 @@ const executeCEBootstrap = async ({ strapi: strapi2 }) => {
|
|
|
727
532
|
await userService.displayWarningIfUsersDontHaveRole();
|
|
728
533
|
await syncAuthSettings();
|
|
729
534
|
await syncAPITokensPermissions();
|
|
730
|
-
getService$1("metrics").sendUpdateProjectInformation(strapi2);
|
|
535
|
+
await getService$1("metrics").sendUpdateProjectInformation(strapi2);
|
|
731
536
|
getService$1("metrics").startCron(strapi2);
|
|
732
537
|
apiTokenService.checkSaltIsDefined();
|
|
733
538
|
transferService.token.checkSaltIsDefined();
|
|
@@ -825,222 +630,78 @@ const executeCEDestroy = async () => {
|
|
|
825
630
|
await actionProvider.clear();
|
|
826
631
|
};
|
|
827
632
|
const destroy = async ({ strapi: strapi2 }) => {
|
|
828
|
-
if (strapi2.ee.features.isEnabled("audit-logs")) {
|
|
829
|
-
strapi2.get("audit-logs").destroy();
|
|
830
|
-
}
|
|
831
633
|
await executeCEDestroy();
|
|
832
634
|
};
|
|
833
|
-
const
|
|
834
|
-
|
|
835
|
-
|
|
635
|
+
const adminContentTypes = {};
|
|
636
|
+
const isSsoLocked = async (user2) => {
|
|
637
|
+
if (!strapi.ee.features.isEnabled("sso")) {
|
|
638
|
+
return false;
|
|
836
639
|
}
|
|
837
|
-
|
|
640
|
+
if (!user2) {
|
|
641
|
+
throw new Error("Missing user object");
|
|
642
|
+
}
|
|
643
|
+
const adminStore = await strapi.store({ type: "core", name: "admin" });
|
|
644
|
+
const { providers } = await adminStore.get({ key: "auth" });
|
|
645
|
+
const lockedRoles = providers.ssoLockedRoles ?? [];
|
|
646
|
+
if (isEmpty(lockedRoles)) {
|
|
647
|
+
return false;
|
|
648
|
+
}
|
|
649
|
+
const roles2 = (
|
|
650
|
+
// If the roles are pre-loaded for the given user, then use them
|
|
651
|
+
user2.roles ?? // Otherwise, try to load the role based on the given user ID
|
|
652
|
+
await strapi.db.query("admin::user").load(user2, "roles", { roles: { fields: ["id"] } }) ?? // If the query fails somehow, default to an empty array
|
|
653
|
+
[]
|
|
654
|
+
);
|
|
655
|
+
const isLocked = lockedRoles.some(
|
|
656
|
+
(lockedId) => (
|
|
657
|
+
// lockedRoles will be a string to avoid issues with frontend and bigints
|
|
658
|
+
roles2.some((role2) => lockedId === role2.id.toString())
|
|
659
|
+
)
|
|
660
|
+
);
|
|
661
|
+
return isLocked;
|
|
838
662
|
};
|
|
839
|
-
const
|
|
840
|
-
|
|
841
|
-
|
|
663
|
+
const { ApplicationError: ApplicationError$2 } = errors;
|
|
664
|
+
const forgotPassword = async ({ email: email2 } = {}) => {
|
|
665
|
+
const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
|
|
666
|
+
if (!user2 || await isSsoLocked(user2)) {
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
const resetPasswordToken = getService("token").createToken();
|
|
670
|
+
await getService("user").updateById(user2.id, { resetPasswordToken });
|
|
671
|
+
const url = `${strapi.config.get(
|
|
672
|
+
"admin.absoluteUrl"
|
|
673
|
+
)}/auth/reset-password?code=${resetPasswordToken}`;
|
|
674
|
+
return strapi.plugin("email").service("email").sendTemplatedEmail(
|
|
842
675
|
{
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
config: {
|
|
847
|
-
middlewares: [enableFeatureMiddleware("sso")],
|
|
848
|
-
auth: false
|
|
849
|
-
}
|
|
676
|
+
to: user2.email,
|
|
677
|
+
from: strapi.config.get("admin.forgotPassword.from"),
|
|
678
|
+
replyTo: strapi.config.get("admin.forgotPassword.replyTo")
|
|
850
679
|
},
|
|
680
|
+
strapi.config.get("admin.forgotPassword.emailTemplate"),
|
|
851
681
|
{
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
policies: [
|
|
876
|
-
"admin::isAuthenticatedAdmin",
|
|
877
|
-
{ name: "admin::hasPermissions", config: { actions: ["admin::provider-login.read"] } }
|
|
878
|
-
]
|
|
879
|
-
}
|
|
880
|
-
},
|
|
881
|
-
{
|
|
882
|
-
method: "PUT",
|
|
883
|
-
path: "/providers/options",
|
|
884
|
-
handler: "authentication.updateProviderLoginOptions",
|
|
885
|
-
config: {
|
|
886
|
-
middlewares: [enableFeatureMiddleware("sso")],
|
|
887
|
-
policies: [
|
|
888
|
-
"admin::isAuthenticatedAdmin",
|
|
889
|
-
{ name: "admin::hasPermissions", config: { actions: ["admin::provider-login.update"] } }
|
|
890
|
-
]
|
|
891
|
-
}
|
|
892
|
-
},
|
|
893
|
-
{
|
|
894
|
-
method: "GET",
|
|
895
|
-
path: "/providers/isSSOLocked",
|
|
896
|
-
handler: "user.isSSOLocked",
|
|
897
|
-
config: {
|
|
898
|
-
middlewares: [enableFeatureMiddleware("sso")],
|
|
899
|
-
policies: ["admin::isAuthenticatedAdmin"]
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
]
|
|
903
|
-
};
|
|
904
|
-
const licenseLimit = {
|
|
905
|
-
type: "admin",
|
|
906
|
-
routes: [
|
|
907
|
-
// License limit infos
|
|
908
|
-
{
|
|
909
|
-
method: "GET",
|
|
910
|
-
path: "/license-limit-information",
|
|
911
|
-
handler: "admin.licenseLimitInformation",
|
|
912
|
-
config: {
|
|
913
|
-
policies: [
|
|
914
|
-
"admin::isAuthenticatedAdmin",
|
|
915
|
-
{
|
|
916
|
-
name: "admin::hasPermissions",
|
|
917
|
-
config: {
|
|
918
|
-
actions: [
|
|
919
|
-
"admin::users.create",
|
|
920
|
-
"admin::users.read",
|
|
921
|
-
"admin::users.update",
|
|
922
|
-
"admin::users.delete"
|
|
923
|
-
]
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
]
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
]
|
|
930
|
-
};
|
|
931
|
-
const auditLogs$1 = {
|
|
932
|
-
type: "admin",
|
|
933
|
-
routes: [
|
|
934
|
-
{
|
|
935
|
-
method: "GET",
|
|
936
|
-
path: "/audit-logs",
|
|
937
|
-
handler: "auditLogs.findMany",
|
|
938
|
-
config: {
|
|
939
|
-
middlewares: [enableFeatureMiddleware("audit-logs")],
|
|
940
|
-
policies: [
|
|
941
|
-
"admin::isAuthenticatedAdmin",
|
|
942
|
-
{
|
|
943
|
-
name: "admin::hasPermissions",
|
|
944
|
-
config: {
|
|
945
|
-
actions: ["admin::audit-logs.read"]
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
]
|
|
949
|
-
}
|
|
950
|
-
},
|
|
951
|
-
{
|
|
952
|
-
method: "GET",
|
|
953
|
-
path: "/audit-logs/:id",
|
|
954
|
-
handler: "auditLogs.findOne",
|
|
955
|
-
config: {
|
|
956
|
-
middlewares: [enableFeatureMiddleware("audit-logs")],
|
|
957
|
-
policies: [
|
|
958
|
-
"admin::isAuthenticatedAdmin",
|
|
959
|
-
{
|
|
960
|
-
name: "admin::hasPermissions",
|
|
961
|
-
config: {
|
|
962
|
-
actions: ["admin::audit-logs.read"]
|
|
963
|
-
}
|
|
964
|
-
}
|
|
965
|
-
]
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
]
|
|
969
|
-
};
|
|
970
|
-
const index$2 = {
|
|
971
|
-
sso: sso$1,
|
|
972
|
-
"license-limit": licenseLimit,
|
|
973
|
-
"audit-logs": auditLogs$1
|
|
974
|
-
};
|
|
975
|
-
const isSsoLocked = async (user2) => {
|
|
976
|
-
if (!strapi.ee.features.isEnabled("sso")) {
|
|
977
|
-
return false;
|
|
978
|
-
}
|
|
979
|
-
if (!user2) {
|
|
980
|
-
throw new Error("Missing user object");
|
|
981
|
-
}
|
|
982
|
-
const adminStore = await strapi.store({ type: "core", name: "admin" });
|
|
983
|
-
const { providers } = await adminStore.get({ key: "auth" });
|
|
984
|
-
const lockedRoles = providers.ssoLockedRoles ?? [];
|
|
985
|
-
if (isEmpty(lockedRoles)) {
|
|
986
|
-
return false;
|
|
987
|
-
}
|
|
988
|
-
const roles2 = (
|
|
989
|
-
// If the roles are pre-loaded for the given user, then use them
|
|
990
|
-
user2.roles ?? // Otherwise, try to load the role based on the given user ID
|
|
991
|
-
await strapi.db.query("admin::user").load(user2, "roles", { roles: { fields: ["id"] } }) ?? // If the query fails somehow, default to an empty array
|
|
992
|
-
[]
|
|
993
|
-
);
|
|
994
|
-
const isLocked = lockedRoles.some(
|
|
995
|
-
(lockedId) => (
|
|
996
|
-
// lockedRoles will be a string to avoid issues with frontend and bigints
|
|
997
|
-
roles2.some((role2) => lockedId === role2.id.toString())
|
|
998
|
-
)
|
|
999
|
-
);
|
|
1000
|
-
return isLocked;
|
|
1001
|
-
};
|
|
1002
|
-
const { ApplicationError: ApplicationError$2 } = errors;
|
|
1003
|
-
const forgotPassword = async ({ email: email2 } = {}) => {
|
|
1004
|
-
const user2 = await strapi.db.query("admin::user").findOne({ where: { email: email2, isActive: true } });
|
|
1005
|
-
if (!user2 || await isSsoLocked(user2)) {
|
|
1006
|
-
return;
|
|
1007
|
-
}
|
|
1008
|
-
const resetPasswordToken = getService("token").createToken();
|
|
1009
|
-
await getService("user").updateById(user2.id, { resetPasswordToken });
|
|
1010
|
-
const url = `${strapi.config.get(
|
|
1011
|
-
"admin.absoluteUrl"
|
|
1012
|
-
)}/auth/reset-password?code=${resetPasswordToken}`;
|
|
1013
|
-
return strapi.plugin("email").service("email").sendTemplatedEmail(
|
|
1014
|
-
{
|
|
1015
|
-
to: user2.email,
|
|
1016
|
-
from: strapi.config.get("admin.forgotPassword.from"),
|
|
1017
|
-
replyTo: strapi.config.get("admin.forgotPassword.replyTo")
|
|
1018
|
-
},
|
|
1019
|
-
strapi.config.get("admin.forgotPassword.emailTemplate"),
|
|
1020
|
-
{
|
|
1021
|
-
url,
|
|
1022
|
-
user: _.pick(user2, ["email", "firstname", "lastname", "username"])
|
|
1023
|
-
}
|
|
1024
|
-
).catch((err) => {
|
|
1025
|
-
strapi.log.error(err);
|
|
1026
|
-
});
|
|
1027
|
-
};
|
|
1028
|
-
const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
|
|
1029
|
-
const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
|
|
1030
|
-
if (!matchingUser || await isSsoLocked(matchingUser)) {
|
|
1031
|
-
throw new ApplicationError$2();
|
|
1032
|
-
}
|
|
1033
|
-
return getService("user").updateById(matchingUser.id, {
|
|
1034
|
-
password: password2,
|
|
1035
|
-
resetPasswordToken: null
|
|
1036
|
-
});
|
|
1037
|
-
};
|
|
1038
|
-
const auth = {
|
|
1039
|
-
forgotPassword,
|
|
1040
|
-
resetPassword
|
|
1041
|
-
};
|
|
1042
|
-
const createLocalStrategy = (strapi2, middleware) => {
|
|
1043
|
-
return new Strategy(
|
|
682
|
+
url,
|
|
683
|
+
user: _.pick(user2, ["email", "firstname", "lastname", "username"])
|
|
684
|
+
}
|
|
685
|
+
).catch((err) => {
|
|
686
|
+
strapi.log.error(err);
|
|
687
|
+
});
|
|
688
|
+
};
|
|
689
|
+
const resetPassword = async ({ resetPasswordToken, password: password2 } = {}) => {
|
|
690
|
+
const matchingUser = await strapi.db.query("admin::user").findOne({ where: { resetPasswordToken, isActive: true } });
|
|
691
|
+
if (!matchingUser || await isSsoLocked(matchingUser)) {
|
|
692
|
+
throw new ApplicationError$2();
|
|
693
|
+
}
|
|
694
|
+
return getService("user").updateById(matchingUser.id, {
|
|
695
|
+
password: password2,
|
|
696
|
+
resetPasswordToken: null
|
|
697
|
+
});
|
|
698
|
+
};
|
|
699
|
+
const auth = {
|
|
700
|
+
forgotPassword,
|
|
701
|
+
resetPassword
|
|
702
|
+
};
|
|
703
|
+
const createLocalStrategy = (strapi2, middleware) => {
|
|
704
|
+
return new Strategy(
|
|
1044
705
|
{
|
|
1045
706
|
usernameField: "email",
|
|
1046
707
|
passwordField: "password",
|
|
@@ -1117,7 +778,7 @@ const syncProviderRegistryWithConfig = () => {
|
|
|
1117
778
|
const SSOAuthEventsMapper = {
|
|
1118
779
|
onSSOAutoRegistration: "admin.auth.autoRegistration"
|
|
1119
780
|
};
|
|
1120
|
-
const sso = {
|
|
781
|
+
const sso$1 = {
|
|
1121
782
|
providerRegistry,
|
|
1122
783
|
getStrategyCallbackURL,
|
|
1123
784
|
syncProviderRegistryWithConfig,
|
|
@@ -1142,15 +803,15 @@ const getPassportStrategies = () => {
|
|
|
1142
803
|
}
|
|
1143
804
|
const localStrategy = createLocalStrategy(strapi, localStrategyMiddleware);
|
|
1144
805
|
if (!strapi.isLoaded) {
|
|
1145
|
-
sso.syncProviderRegistryWithConfig();
|
|
806
|
+
sso$1.syncProviderRegistryWithConfig();
|
|
1146
807
|
}
|
|
1147
|
-
const providers = sso.providerRegistry.getAll();
|
|
808
|
+
const providers = sso$1.providerRegistry.getAll();
|
|
1148
809
|
const strategies = providers.map((provider) => provider.createStrategy(strapi));
|
|
1149
810
|
return [localStrategy, ...strategies];
|
|
1150
811
|
};
|
|
1151
812
|
const passport = {
|
|
1152
813
|
getPassportStrategies,
|
|
1153
|
-
...sso
|
|
814
|
+
...sso$1
|
|
1154
815
|
};
|
|
1155
816
|
const { ApplicationError: ApplicationError$1 } = errors;
|
|
1156
817
|
const ssoCheckRolesIdForDeletion = async (ids) => {
|
|
@@ -1341,7 +1002,7 @@ const sendUpdateProjectInformation = async (strapi2) => {
|
|
|
1341
1002
|
if (strapi2.ee.features.isEnabled("cms-content-releases")) {
|
|
1342
1003
|
const numberOfContentReleases = await strapi2.db.query("plugin::content-releases.release").count();
|
|
1343
1004
|
const numberOfPublishedContentReleases = await strapi2.db.query("plugin::content-releases.release").count({
|
|
1344
|
-
|
|
1005
|
+
filters: { releasedAt: { $notNull: true } }
|
|
1345
1006
|
});
|
|
1346
1007
|
groupProperties = assign(groupProperties, {
|
|
1347
1008
|
numberOfContentReleases,
|
|
@@ -1441,7 +1102,7 @@ const seatEnforcement = {
|
|
|
1441
1102
|
seatEnforcementWorkflow,
|
|
1442
1103
|
getDisabledUserList
|
|
1443
1104
|
};
|
|
1444
|
-
const
|
|
1105
|
+
const services = {
|
|
1445
1106
|
auth,
|
|
1446
1107
|
passport,
|
|
1447
1108
|
role: role$1,
|
|
@@ -2022,29 +1683,6 @@ const user = {
|
|
|
2022
1683
|
};
|
|
2023
1684
|
}
|
|
2024
1685
|
};
|
|
2025
|
-
const ALLOWED_SORT_STRINGS = ["action:ASC", "action:DESC", "date:ASC", "date:DESC"];
|
|
2026
|
-
const validateFindManySchema = yup.object().shape({
|
|
2027
|
-
page: yup.number().integer().min(1),
|
|
2028
|
-
pageSize: yup.number().integer().min(1).max(100),
|
|
2029
|
-
sort: yup.mixed().oneOf(ALLOWED_SORT_STRINGS)
|
|
2030
|
-
}).required();
|
|
2031
|
-
const validateFindMany = validateYupSchema(validateFindManySchema, { strict: false });
|
|
2032
|
-
const auditLogs = {
|
|
2033
|
-
async findMany(ctx) {
|
|
2034
|
-
const { query } = ctx.request;
|
|
2035
|
-
await validateFindMany(query);
|
|
2036
|
-
const auditLogs2 = strapi.get("audit-logs");
|
|
2037
|
-
const body = await auditLogs2.findMany(query);
|
|
2038
|
-
ctx.body = body;
|
|
2039
|
-
},
|
|
2040
|
-
async findOne(ctx) {
|
|
2041
|
-
const { id } = ctx.params;
|
|
2042
|
-
const auditLogs2 = strapi.get("audit-logs");
|
|
2043
|
-
const body = await auditLogs2.findOne(id);
|
|
2044
|
-
ctx.body = body;
|
|
2045
|
-
strapi.telemetry.send("didWatchAnAuditLog");
|
|
2046
|
-
}
|
|
2047
|
-
};
|
|
2048
1686
|
const admin = {
|
|
2049
1687
|
// NOTE: Overrides CE admin controller
|
|
2050
1688
|
async getProjectType() {
|
|
@@ -2088,20 +1726,452 @@ const admin = {
|
|
|
2088
1726
|
return { data };
|
|
2089
1727
|
}
|
|
2090
1728
|
};
|
|
2091
|
-
const
|
|
1729
|
+
const controllers = {
|
|
2092
1730
|
authentication,
|
|
2093
1731
|
role,
|
|
2094
1732
|
user,
|
|
2095
|
-
auditLogs,
|
|
2096
1733
|
admin
|
|
2097
1734
|
};
|
|
1735
|
+
const enableFeatureMiddleware = (featureName) => (ctx, next) => {
|
|
1736
|
+
if (strapi.ee.features.isEnabled(featureName)) {
|
|
1737
|
+
return next();
|
|
1738
|
+
}
|
|
1739
|
+
ctx.status = 404;
|
|
1740
|
+
};
|
|
1741
|
+
const sso = {
|
|
1742
|
+
type: "admin",
|
|
1743
|
+
routes: [
|
|
1744
|
+
{
|
|
1745
|
+
method: "GET",
|
|
1746
|
+
path: "/providers",
|
|
1747
|
+
handler: "authentication.getProviders",
|
|
1748
|
+
config: {
|
|
1749
|
+
middlewares: [enableFeatureMiddleware("sso")],
|
|
1750
|
+
auth: false
|
|
1751
|
+
}
|
|
1752
|
+
},
|
|
1753
|
+
{
|
|
1754
|
+
method: "GET",
|
|
1755
|
+
path: "/connect/:provider",
|
|
1756
|
+
handler: "authentication.providerLogin",
|
|
1757
|
+
config: {
|
|
1758
|
+
middlewares: [enableFeatureMiddleware("sso")],
|
|
1759
|
+
auth: false
|
|
1760
|
+
}
|
|
1761
|
+
},
|
|
1762
|
+
{
|
|
1763
|
+
method: "POST",
|
|
1764
|
+
path: "/connect/:provider",
|
|
1765
|
+
handler: "authentication.providerLogin",
|
|
1766
|
+
config: {
|
|
1767
|
+
middlewares: [enableFeatureMiddleware("sso")],
|
|
1768
|
+
auth: false
|
|
1769
|
+
}
|
|
1770
|
+
},
|
|
1771
|
+
{
|
|
1772
|
+
method: "GET",
|
|
1773
|
+
path: "/providers/options",
|
|
1774
|
+
handler: "authentication.getProviderLoginOptions",
|
|
1775
|
+
config: {
|
|
1776
|
+
middlewares: [enableFeatureMiddleware("sso")],
|
|
1777
|
+
policies: [
|
|
1778
|
+
"admin::isAuthenticatedAdmin",
|
|
1779
|
+
{ name: "admin::hasPermissions", config: { actions: ["admin::provider-login.read"] } }
|
|
1780
|
+
]
|
|
1781
|
+
}
|
|
1782
|
+
},
|
|
1783
|
+
{
|
|
1784
|
+
method: "PUT",
|
|
1785
|
+
path: "/providers/options",
|
|
1786
|
+
handler: "authentication.updateProviderLoginOptions",
|
|
1787
|
+
config: {
|
|
1788
|
+
middlewares: [enableFeatureMiddleware("sso")],
|
|
1789
|
+
policies: [
|
|
1790
|
+
"admin::isAuthenticatedAdmin",
|
|
1791
|
+
{ name: "admin::hasPermissions", config: { actions: ["admin::provider-login.update"] } }
|
|
1792
|
+
]
|
|
1793
|
+
}
|
|
1794
|
+
},
|
|
1795
|
+
{
|
|
1796
|
+
method: "GET",
|
|
1797
|
+
path: "/providers/isSSOLocked",
|
|
1798
|
+
handler: "user.isSSOLocked",
|
|
1799
|
+
config: {
|
|
1800
|
+
middlewares: [enableFeatureMiddleware("sso")],
|
|
1801
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
]
|
|
1805
|
+
};
|
|
1806
|
+
const licenseLimit = {
|
|
1807
|
+
type: "admin",
|
|
1808
|
+
routes: [
|
|
1809
|
+
// License limit infos
|
|
1810
|
+
{
|
|
1811
|
+
method: "GET",
|
|
1812
|
+
path: "/license-limit-information",
|
|
1813
|
+
handler: "admin.licenseLimitInformation",
|
|
1814
|
+
config: {
|
|
1815
|
+
policies: [
|
|
1816
|
+
"admin::isAuthenticatedAdmin",
|
|
1817
|
+
{
|
|
1818
|
+
name: "admin::hasPermissions",
|
|
1819
|
+
config: {
|
|
1820
|
+
actions: [
|
|
1821
|
+
"admin::users.create",
|
|
1822
|
+
"admin::users.read",
|
|
1823
|
+
"admin::users.update",
|
|
1824
|
+
"admin::users.delete"
|
|
1825
|
+
]
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
]
|
|
1829
|
+
}
|
|
1830
|
+
}
|
|
1831
|
+
]
|
|
1832
|
+
};
|
|
1833
|
+
const routes = {
|
|
1834
|
+
sso,
|
|
1835
|
+
"license-limit": licenseLimit
|
|
1836
|
+
};
|
|
1837
|
+
const auditLogsRoutes = {
|
|
1838
|
+
type: "admin",
|
|
1839
|
+
routes: [
|
|
1840
|
+
{
|
|
1841
|
+
method: "GET",
|
|
1842
|
+
path: "/audit-logs",
|
|
1843
|
+
handler: "audit-logs.findMany",
|
|
1844
|
+
config: {
|
|
1845
|
+
middlewares: [enableFeatureMiddleware("audit-logs")],
|
|
1846
|
+
policies: [
|
|
1847
|
+
"admin::isAuthenticatedAdmin",
|
|
1848
|
+
{
|
|
1849
|
+
name: "admin::hasPermissions",
|
|
1850
|
+
config: {
|
|
1851
|
+
actions: ["admin::audit-logs.read"]
|
|
1852
|
+
}
|
|
1853
|
+
}
|
|
1854
|
+
]
|
|
1855
|
+
}
|
|
1856
|
+
},
|
|
1857
|
+
{
|
|
1858
|
+
method: "GET",
|
|
1859
|
+
path: "/audit-logs/:id",
|
|
1860
|
+
handler: "audit-logs.findOne",
|
|
1861
|
+
config: {
|
|
1862
|
+
middlewares: [enableFeatureMiddleware("audit-logs")],
|
|
1863
|
+
policies: [
|
|
1864
|
+
"admin::isAuthenticatedAdmin",
|
|
1865
|
+
{
|
|
1866
|
+
name: "admin::hasPermissions",
|
|
1867
|
+
config: {
|
|
1868
|
+
actions: ["admin::audit-logs.read"]
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
]
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
]
|
|
1875
|
+
};
|
|
1876
|
+
const ALLOWED_SORT_STRINGS = ["action:ASC", "action:DESC", "date:ASC", "date:DESC"];
|
|
1877
|
+
const validateFindManySchema = yup.object().shape({
|
|
1878
|
+
page: yup.number().integer().min(1),
|
|
1879
|
+
pageSize: yup.number().integer().min(1).max(100),
|
|
1880
|
+
sort: yup.mixed().oneOf(ALLOWED_SORT_STRINGS)
|
|
1881
|
+
}).required();
|
|
1882
|
+
const validateFindMany = validateYupSchema(validateFindManySchema, { strict: false });
|
|
1883
|
+
const auditLogsController = {
|
|
1884
|
+
async findMany(ctx) {
|
|
1885
|
+
const { query } = ctx.request;
|
|
1886
|
+
await validateFindMany(query);
|
|
1887
|
+
const auditLogs = strapi.get("audit-logs");
|
|
1888
|
+
const body = await auditLogs.findMany(query);
|
|
1889
|
+
ctx.body = body;
|
|
1890
|
+
},
|
|
1891
|
+
async findOne(ctx) {
|
|
1892
|
+
const { id } = ctx.params;
|
|
1893
|
+
const auditLogs = strapi.get("audit-logs");
|
|
1894
|
+
const body = await auditLogs.findOne(id);
|
|
1895
|
+
ctx.body = body;
|
|
1896
|
+
strapi.telemetry.send("didWatchAnAuditLog");
|
|
1897
|
+
}
|
|
1898
|
+
};
|
|
1899
|
+
const getSanitizedUser = (user2) => {
|
|
1900
|
+
let displayName = user2.email;
|
|
1901
|
+
if (user2.username) {
|
|
1902
|
+
displayName = user2.username;
|
|
1903
|
+
} else if (user2.firstname && user2.lastname) {
|
|
1904
|
+
displayName = `${user2.firstname} ${user2.lastname}`;
|
|
1905
|
+
}
|
|
1906
|
+
return {
|
|
1907
|
+
id: user2.id,
|
|
1908
|
+
email: user2.email,
|
|
1909
|
+
displayName
|
|
1910
|
+
};
|
|
1911
|
+
};
|
|
1912
|
+
const createAuditLogsService = (strapi2) => {
|
|
1913
|
+
return {
|
|
1914
|
+
async saveEvent(event) {
|
|
1915
|
+
const { userId, ...rest } = event;
|
|
1916
|
+
const auditLog2 = { ...rest, user: userId };
|
|
1917
|
+
await strapi2.db?.query("admin::audit-log").create({ data: auditLog2 });
|
|
1918
|
+
return this;
|
|
1919
|
+
},
|
|
1920
|
+
async findMany(query) {
|
|
1921
|
+
const { results, pagination } = await strapi2.db?.query("admin::audit-log").findPage({
|
|
1922
|
+
populate: ["user"],
|
|
1923
|
+
select: ["action", "date", "payload"],
|
|
1924
|
+
...strapi2.get("query-params").transform("admin::audit-log", query)
|
|
1925
|
+
});
|
|
1926
|
+
const sanitizedResults = results.map((result) => {
|
|
1927
|
+
const { user: user2, ...rest } = result;
|
|
1928
|
+
return {
|
|
1929
|
+
...rest,
|
|
1930
|
+
user: user2 ? getSanitizedUser(user2) : null
|
|
1931
|
+
};
|
|
1932
|
+
});
|
|
1933
|
+
return {
|
|
1934
|
+
results: sanitizedResults,
|
|
1935
|
+
pagination
|
|
1936
|
+
};
|
|
1937
|
+
},
|
|
1938
|
+
async findOne(id) {
|
|
1939
|
+
const result = await strapi2.db?.query("admin::audit-log").findOne({
|
|
1940
|
+
where: { id },
|
|
1941
|
+
populate: ["user"],
|
|
1942
|
+
select: ["action", "date", "payload"]
|
|
1943
|
+
});
|
|
1944
|
+
if (!result) {
|
|
1945
|
+
return null;
|
|
1946
|
+
}
|
|
1947
|
+
const { user: user2, ...rest } = result;
|
|
1948
|
+
return {
|
|
1949
|
+
...rest,
|
|
1950
|
+
user: user2 ? getSanitizedUser(user2) : null
|
|
1951
|
+
};
|
|
1952
|
+
},
|
|
1953
|
+
deleteExpiredEvents(expirationDate) {
|
|
1954
|
+
return strapi2.db?.query("admin::audit-log").deleteMany({
|
|
1955
|
+
where: {
|
|
1956
|
+
date: {
|
|
1957
|
+
$lt: expirationDate.toISOString()
|
|
1958
|
+
}
|
|
1959
|
+
}
|
|
1960
|
+
});
|
|
1961
|
+
}
|
|
1962
|
+
};
|
|
1963
|
+
};
|
|
1964
|
+
const DEFAULT_RETENTION_DAYS = 90;
|
|
1965
|
+
const defaultEvents = [
|
|
1966
|
+
"entry.create",
|
|
1967
|
+
"entry.update",
|
|
1968
|
+
"entry.delete",
|
|
1969
|
+
"entry.publish",
|
|
1970
|
+
"entry.unpublish",
|
|
1971
|
+
"media.create",
|
|
1972
|
+
"media.update",
|
|
1973
|
+
"media.delete",
|
|
1974
|
+
"media-folder.create",
|
|
1975
|
+
"media-folder.update",
|
|
1976
|
+
"media-folder.delete",
|
|
1977
|
+
"user.create",
|
|
1978
|
+
"user.update",
|
|
1979
|
+
"user.delete",
|
|
1980
|
+
"admin.auth.success",
|
|
1981
|
+
"admin.logout",
|
|
1982
|
+
"content-type.create",
|
|
1983
|
+
"content-type.update",
|
|
1984
|
+
"content-type.delete",
|
|
1985
|
+
"component.create",
|
|
1986
|
+
"component.update",
|
|
1987
|
+
"component.delete",
|
|
1988
|
+
"role.create",
|
|
1989
|
+
"role.update",
|
|
1990
|
+
"role.delete",
|
|
1991
|
+
"permission.create",
|
|
1992
|
+
"permission.update",
|
|
1993
|
+
"permission.delete"
|
|
1994
|
+
];
|
|
1995
|
+
const getEventMap = (defaultEvents2) => {
|
|
1996
|
+
const getDefaultPayload = (...args) => args[0];
|
|
1997
|
+
return defaultEvents2.reduce((acc, event) => {
|
|
1998
|
+
acc[event] = getDefaultPayload;
|
|
1999
|
+
return acc;
|
|
2000
|
+
}, {});
|
|
2001
|
+
};
|
|
2002
|
+
const getRetentionDays = (strapi2) => {
|
|
2003
|
+
const featureConfig = strapi2.ee.features.get("audit-logs");
|
|
2004
|
+
const licenseRetentionDays = typeof featureConfig === "object" && featureConfig?.options.retentionDays;
|
|
2005
|
+
const userRetentionDays = strapi2.config.get("admin.auditLogs.retentionDays");
|
|
2006
|
+
if (licenseRetentionDays == null) {
|
|
2007
|
+
return userRetentionDays ?? DEFAULT_RETENTION_DAYS;
|
|
2008
|
+
}
|
|
2009
|
+
if (userRetentionDays && userRetentionDays < licenseRetentionDays) {
|
|
2010
|
+
return userRetentionDays;
|
|
2011
|
+
}
|
|
2012
|
+
return licenseRetentionDays;
|
|
2013
|
+
};
|
|
2014
|
+
const createAuditLogsLifecycleService = (strapi2) => {
|
|
2015
|
+
const state = {};
|
|
2016
|
+
const auditLogsService = strapi2.get("audit-logs");
|
|
2017
|
+
const eventMap = getEventMap(defaultEvents);
|
|
2018
|
+
const processEvent = (name2, ...args) => {
|
|
2019
|
+
const requestState = strapi2.requestContext.get()?.state;
|
|
2020
|
+
const isUsingAdminAuth = requestState?.route.info.type === "admin";
|
|
2021
|
+
const user2 = requestState?.user;
|
|
2022
|
+
if (!isUsingAdminAuth || !user2) {
|
|
2023
|
+
return null;
|
|
2024
|
+
}
|
|
2025
|
+
const getPayload = eventMap[name2];
|
|
2026
|
+
if (!getPayload) {
|
|
2027
|
+
return null;
|
|
2028
|
+
}
|
|
2029
|
+
const ignoredUids = ["plugin::upload.file", "plugin::upload.folder"];
|
|
2030
|
+
if (ignoredUids.includes(args[0]?.uid)) {
|
|
2031
|
+
return null;
|
|
2032
|
+
}
|
|
2033
|
+
return {
|
|
2034
|
+
action: name2,
|
|
2035
|
+
date: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2036
|
+
payload: getPayload(...args) || {},
|
|
2037
|
+
userId: user2.id
|
|
2038
|
+
};
|
|
2039
|
+
};
|
|
2040
|
+
const handleEvent = async (name2, ...args) => {
|
|
2041
|
+
const processedEvent = processEvent(name2, ...args);
|
|
2042
|
+
if (processedEvent) {
|
|
2043
|
+
await strapi2.db.transaction(({ onCommit }) => {
|
|
2044
|
+
onCommit(() => auditLogsService.saveEvent(processedEvent));
|
|
2045
|
+
});
|
|
2046
|
+
}
|
|
2047
|
+
};
|
|
2048
|
+
return {
|
|
2049
|
+
async register() {
|
|
2050
|
+
if (!state.eeEnableUnsubscribe) {
|
|
2051
|
+
state.eeEnableUnsubscribe = strapi2.eventHub.on("ee.enable", () => {
|
|
2052
|
+
this.destroy();
|
|
2053
|
+
this.register();
|
|
2054
|
+
});
|
|
2055
|
+
}
|
|
2056
|
+
if (!state.eeUpdateUnsubscribe) {
|
|
2057
|
+
state.eeUpdateUnsubscribe = strapi2.eventHub.on("ee.update", () => {
|
|
2058
|
+
this.destroy();
|
|
2059
|
+
this.register();
|
|
2060
|
+
});
|
|
2061
|
+
}
|
|
2062
|
+
state.eeDisableUnsubscribe = strapi2.eventHub.on("ee.disable", () => {
|
|
2063
|
+
this.destroy();
|
|
2064
|
+
});
|
|
2065
|
+
if (!strapi2.ee.features.isEnabled("audit-logs")) {
|
|
2066
|
+
return this;
|
|
2067
|
+
}
|
|
2068
|
+
state.eventHubUnsubscribe = strapi2.eventHub.subscribe(handleEvent);
|
|
2069
|
+
const retentionDays = getRetentionDays(strapi2);
|
|
2070
|
+
state.deleteExpiredJob = scheduleJob("0 0 * * *", () => {
|
|
2071
|
+
const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1e3);
|
|
2072
|
+
auditLogsService.deleteExpiredEvents(expirationDate);
|
|
2073
|
+
});
|
|
2074
|
+
return this;
|
|
2075
|
+
},
|
|
2076
|
+
unsubscribe() {
|
|
2077
|
+
if (state.eeDisableUnsubscribe) {
|
|
2078
|
+
state.eeDisableUnsubscribe();
|
|
2079
|
+
}
|
|
2080
|
+
if (state.eventHubUnsubscribe) {
|
|
2081
|
+
state.eventHubUnsubscribe();
|
|
2082
|
+
}
|
|
2083
|
+
if (state.deleteExpiredJob) {
|
|
2084
|
+
state.deleteExpiredJob.cancel();
|
|
2085
|
+
}
|
|
2086
|
+
return this;
|
|
2087
|
+
},
|
|
2088
|
+
destroy() {
|
|
2089
|
+
return this.unsubscribe();
|
|
2090
|
+
}
|
|
2091
|
+
};
|
|
2092
|
+
};
|
|
2093
|
+
const auditLog = {
|
|
2094
|
+
schema: {
|
|
2095
|
+
kind: "collectionType",
|
|
2096
|
+
collectionName: "strapi_audit_logs",
|
|
2097
|
+
info: {
|
|
2098
|
+
singularName: "audit-log",
|
|
2099
|
+
pluralName: "audit-logs",
|
|
2100
|
+
displayName: "Audit Log"
|
|
2101
|
+
},
|
|
2102
|
+
options: {
|
|
2103
|
+
timestamps: false
|
|
2104
|
+
},
|
|
2105
|
+
pluginOptions: {
|
|
2106
|
+
"content-manager": {
|
|
2107
|
+
visible: false
|
|
2108
|
+
},
|
|
2109
|
+
"content-type-builder": {
|
|
2110
|
+
visible: false
|
|
2111
|
+
}
|
|
2112
|
+
},
|
|
2113
|
+
attributes: {
|
|
2114
|
+
action: {
|
|
2115
|
+
type: "string",
|
|
2116
|
+
required: true
|
|
2117
|
+
},
|
|
2118
|
+
date: {
|
|
2119
|
+
type: "datetime",
|
|
2120
|
+
required: true
|
|
2121
|
+
},
|
|
2122
|
+
user: {
|
|
2123
|
+
type: "relation",
|
|
2124
|
+
relation: "oneToOne",
|
|
2125
|
+
target: "admin::user"
|
|
2126
|
+
},
|
|
2127
|
+
payload: {
|
|
2128
|
+
type: "json"
|
|
2129
|
+
}
|
|
2130
|
+
}
|
|
2131
|
+
}
|
|
2132
|
+
};
|
|
2133
|
+
const getAdminEE = () => {
|
|
2134
|
+
const eeAdmin = {
|
|
2135
|
+
register,
|
|
2136
|
+
bootstrap,
|
|
2137
|
+
destroy,
|
|
2138
|
+
contentTypes: {
|
|
2139
|
+
// Always register the audit-log content type to prevent data loss
|
|
2140
|
+
"audit-log": auditLog,
|
|
2141
|
+
...adminContentTypes
|
|
2142
|
+
},
|
|
2143
|
+
services,
|
|
2144
|
+
controllers,
|
|
2145
|
+
routes
|
|
2146
|
+
};
|
|
2147
|
+
if (strapi.config.get("admin.auditLogs.enabled", true) && strapi.ee.features.isEnabled("audit-logs")) {
|
|
2148
|
+
return {
|
|
2149
|
+
...eeAdmin,
|
|
2150
|
+
controllers: {
|
|
2151
|
+
...eeAdmin.controllers,
|
|
2152
|
+
"audit-logs": auditLogsController
|
|
2153
|
+
},
|
|
2154
|
+
routes: {
|
|
2155
|
+
...eeAdmin.routes,
|
|
2156
|
+
"audit-logs": auditLogsRoutes
|
|
2157
|
+
},
|
|
2158
|
+
async register({ strapi: strapi2 }) {
|
|
2159
|
+
await eeAdmin.register({ strapi: strapi2 });
|
|
2160
|
+
strapi2.add("audit-logs", createAuditLogsService(strapi2));
|
|
2161
|
+
const auditLogsLifecycle = createAuditLogsLifecycleService(strapi2);
|
|
2162
|
+
strapi2.add("audit-logs-lifecycle", auditLogsLifecycle);
|
|
2163
|
+
await auditLogsLifecycle.register();
|
|
2164
|
+
},
|
|
2165
|
+
async destroy({ strapi: strapi2 }) {
|
|
2166
|
+
strapi2.get("audit-logs-lifecycle").destroy();
|
|
2167
|
+
await eeAdmin.destroy({ strapi: strapi2 });
|
|
2168
|
+
}
|
|
2169
|
+
};
|
|
2170
|
+
}
|
|
2171
|
+
return eeAdmin;
|
|
2172
|
+
};
|
|
2173
|
+
const index = getAdminEE();
|
|
2098
2174
|
export {
|
|
2099
|
-
|
|
2100
|
-
index$3 as contentTypes,
|
|
2101
|
-
index as controllers,
|
|
2102
|
-
destroy,
|
|
2103
|
-
register,
|
|
2104
|
-
index$2 as routes,
|
|
2105
|
-
index$1 as services
|
|
2175
|
+
index as default
|
|
2106
2176
|
};
|
|
2107
2177
|
//# sourceMappingURL=index.mjs.map
|