@strapi/admin 5.56.0 → 5.57.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.
- package/dist/admin/admin/src/components/Filters.js +1 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +1 -1
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -2
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -2
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/MediaLibraryBanner.js +38 -2
- package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -1
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +18 -2
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +9 -0
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +10 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/TopBanners.js +52 -0
- package/dist/admin/admin/src/components/TopBanners.js.map +1 -0
- package/dist/admin/admin/src/components/TopBanners.mjs +30 -0
- package/dist/admin/admin/src/components/TopBanners.mjs.map +1 -0
- package/dist/admin/admin/src/features/Tracking.js +28 -8
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +29 -10
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
- package/dist/admin/admin/src/translations/en.json.js +5 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +5 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +3 -3
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +2 -2
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +6 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +6 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/src/components/MediaLibraryBanner.d.ts +10 -1
- package/dist/admin/src/components/TopBanners.d.ts +8 -0
- package/dist/admin/src/features/Tracking.d.ts +12 -1
- package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +5 -0
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +8 -2
- package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/user.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +4 -1
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/index.d.ts +4 -1
- package/dist/ee/server/src/services/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
- package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
- package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
- package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +3 -4
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +3 -4
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.js +2 -2
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +2 -2
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js +11 -11
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
- package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js +7 -8
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.mjs +8 -9
- package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
- package/dist/server/ee/server/src/services/metrics.js +9 -7
- package/dist/server/ee/server/src/services/metrics.js.map +1 -1
- package/dist/server/ee/server/src/services/metrics.mjs +9 -7
- package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js +3 -4
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/ee/server/src/services/role.js +2 -2
- package/dist/server/ee/server/src/services/role.js.map +1 -1
- package/dist/server/ee/server/src/services/role.mjs +1 -1
- package/dist/server/ee/server/src/services/role.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/services/user.js +1 -2
- package/dist/server/ee/server/src/services/user.js.map +1 -1
- package/dist/server/ee/server/src/services/user.mjs +2 -3
- package/dist/server/ee/server/src/services/user.mjs.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
- package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/admin-users.js +3 -3
- package/dist/server/server/src/audit-logs/admin-users.js.map +1 -1
- package/dist/server/server/src/audit-logs/admin-users.mjs +2 -2
- package/dist/server/server/src/audit-logs/admin-users.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/tokens.js +3 -3
- package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
- package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
- package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/webhooks.js +2 -2
- package/dist/server/server/src/audit-logs/webhooks.js.map +1 -1
- package/dist/server/server/src/audit-logs/webhooks.mjs +1 -1
- package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -1
- package/dist/server/server/src/bootstrap.js +6 -4
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +6 -4
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin-token.js +8 -8
- package/dist/server/server/src/controllers/admin-token.js.map +1 -1
- package/dist/server/server/src/controllers/admin-token.mjs +4 -4
- package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +3 -5
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +2 -4
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/api-token.js +8 -8
- package/dist/server/server/src/controllers/api-token.js.map +1 -1
- package/dist/server/server/src/controllers/api-token.mjs +4 -4
- package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/formatters/conditions.js +2 -2
- package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
- package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
- package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.js +2 -2
- package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
- package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.js +8 -8
- package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
- package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/domain/action/index.js +18 -16
- package/dist/server/server/src/domain/action/index.js.map +1 -1
- package/dist/server/server/src/domain/action/index.mjs +16 -14
- package/dist/server/server/src/domain/action/index.mjs.map +1 -1
- package/dist/server/server/src/domain/action/provider.mjs +4 -4
- package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
- package/dist/server/server/src/domain/condition/index.js +7 -4
- package/dist/server/server/src/domain/condition/index.js.map +1 -1
- package/dist/server/server/src/domain/condition/index.mjs +7 -4
- package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js +24 -15
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs +21 -12
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +5 -5
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/register.js +6 -0
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +6 -0
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/services/action.js +1 -2
- package/dist/server/server/src/services/action.js.map +1 -1
- package/dist/server/server/src/services/action.mjs +1 -2
- package/dist/server/server/src/services/action.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +61 -49
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +53 -41
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/condition.js +2 -2
- package/dist/server/server/src/services/condition.js.map +1 -1
- package/dist/server/server/src/services/condition.mjs +1 -1
- package/dist/server/server/src/services/condition.mjs.map +1 -1
- package/dist/server/server/src/services/content-type.js +5 -4
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/content-type.mjs +8 -7
- package/dist/server/server/src/services/content-type.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js +2 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs +2 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- package/dist/server/server/src/services/passport/local-strategy.js +2 -2
- package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
- package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
- package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
- package/dist/server/server/src/services/passport.js +1 -2
- package/dist/server/server/src/services/passport.js.map +1 -1
- package/dist/server/server/src/services/passport.mjs +1 -2
- package/dist/server/server/src/services/passport.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +4 -4
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +2 -2
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
- package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
- package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +44 -38
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.js +30 -26
- package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +28 -24
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +9 -9
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.mjs +9 -9
- package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.js +118 -0
- package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
- package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
- package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
- package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
- package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
- package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
- package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
- package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
- package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
- package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +20 -19
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +20 -19
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/token.js +20 -16
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.mjs +14 -10
- package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +2 -3
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +3 -4
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/server/src/strategies/api-token-utils.js +2 -3
- package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
- package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
- package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
- package/dist/server/server/src/strategies/content-api-token.js +3 -3
- package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
- package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
- package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.js +4 -4
- package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
- package/dist/server/server/src/strategies/data-transfer.mjs.map +1 -1
- package/dist/server/server/src/validation/common-validators.js +9 -10
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs +13 -14
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/server/src/validation/user.js +1 -2
- package/dist/server/server/src/validation/user.js.map +1 -1
- package/dist/server/server/src/validation/user.mjs +1 -2
- package/dist/server/server/src/validation/user.mjs.map +1 -1
- package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-token.d.ts.map +1 -1
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/api-token.d.ts.map +1 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
- package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
- package/dist/server/src/domain/action/index.d.ts +1 -0
- package/dist/server/src/domain/action/index.d.ts.map +1 -1
- package/dist/server/src/domain/condition/index.d.ts +2 -2
- package/dist/server/src/domain/condition/index.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -3
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/services/action.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/condition.d.ts.map +1 -1
- package/dist/server/src/services/content-type.d.ts.map +1 -1
- package/dist/server/src/services/homepage.d.ts +1 -1
- package/dist/server/src/services/homepage.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +2 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
- package/dist/server/src/services/passport.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
- package/dist/server/src/services/permission/queries.d.ts.map +1 -1
- package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
- package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
- package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/services/transfer/token.d.ts.map +1 -1
- package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
- package/dist/server/src/validation/user.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { differenceWith, omit, pick, difference, isEqual, isEmpty, isNumber } from 'lodash';
|
|
1
2
|
import crypto from 'crypto';
|
|
2
|
-
import { pick, uniq, differenceWith, prop, omit, map, difference, isEqual, isArray, isEmpty, isNumber, isNil } from 'lodash/fp';
|
|
3
3
|
import { errors, emitAudit } from '@strapi/utils';
|
|
4
4
|
import constants from './constants.mjs';
|
|
5
5
|
import { getService } from '../utils/index.mjs';
|
|
@@ -93,7 +93,7 @@ const UPDATABLE_FIELDS = [
|
|
|
93
93
|
throw new ValidationError('Non-custom tokens should not reference permissions');
|
|
94
94
|
}
|
|
95
95
|
// Custom type tokens should always have permissions attached to them
|
|
96
|
-
if (type === constants.API_TOKEN_TYPE.CUSTOM && !isArray(permissions)) {
|
|
96
|
+
if (type === constants.API_TOKEN_TYPE.CUSTOM && !Array.isArray(permissions)) {
|
|
97
97
|
throw new ValidationError('Missing permissions attribute for custom token');
|
|
98
98
|
}
|
|
99
99
|
// Permissions provided for a custom type token should be valid/registered permissions UID
|
|
@@ -108,7 +108,7 @@ const UPDATABLE_FIELDS = [
|
|
|
108
108
|
/**
|
|
109
109
|
* Check if a token's lifespan is valid
|
|
110
110
|
*/ const isValidLifespan = (lifespan)=>{
|
|
111
|
-
if (
|
|
111
|
+
if (lifespan == null) {
|
|
112
112
|
return true;
|
|
113
113
|
}
|
|
114
114
|
if (!isNumber(lifespan) || !Object.values(constants.API_TOKEN_LIFESPANS).includes(lifespan)) {
|
|
@@ -226,7 +226,9 @@ const UPDATABLE_FIELDS = [
|
|
|
226
226
|
const anyUserPermHasAllFields = matchingUserPerms.some((p)=>!p.properties?.fields || p.properties.fields.length === 0);
|
|
227
227
|
const requestedFields = requested.properties?.fields;
|
|
228
228
|
if (!anyUserPermHasAllFields) {
|
|
229
|
-
const effectiveUserFields =
|
|
229
|
+
const effectiveUserFields = [
|
|
230
|
+
...new Set(matchingUserPerms.flatMap((p)=>p.properties?.fields || []))
|
|
231
|
+
];
|
|
230
232
|
// When the owner is field-restricted, omitting fields would widen access to all fields.
|
|
231
233
|
// Force explicit field selection so token scope can't exceed the owner's ceiling.
|
|
232
234
|
if (requestedFields === undefined || requestedFields === null) {
|
|
@@ -246,7 +248,9 @@ const UPDATABLE_FIELDS = [
|
|
|
246
248
|
// If any matching user perm is unconditional → token gets no conditions.
|
|
247
249
|
// Otherwise → union of conditions across matching perms.
|
|
248
250
|
const anyUserPermIsUnconditional = matchingUserPerms.some((p)=>!p.conditions || p.conditions.length === 0);
|
|
249
|
-
const enforcedConditions = anyUserPermIsUnconditional ? [] :
|
|
251
|
+
const enforcedConditions = anyUserPermIsUnconditional ? [] : [
|
|
252
|
+
...new Set(matchingUserPerms.flatMap((p)=>p.conditions || []))
|
|
253
|
+
];
|
|
250
254
|
return {
|
|
251
255
|
...requested,
|
|
252
256
|
conditions: enforcedConditions
|
|
@@ -286,7 +290,7 @@ const UPDATABLE_FIELDS = [
|
|
|
286
290
|
'action',
|
|
287
291
|
'actionParameters'
|
|
288
292
|
];
|
|
289
|
-
const pickComparableFields = pick(COMPARABLE_FIELDS);
|
|
293
|
+
const pickComparableFields = (permission)=>pick(permission, COMPARABLE_FIELDS);
|
|
290
294
|
/**
|
|
291
295
|
* Helper to clean JSON (remove undefined values)
|
|
292
296
|
*/ const jsonClean = (data)=>JSON.parse(JSON.stringify(data));
|
|
@@ -317,10 +321,10 @@ const pickComparableFields = pick(COMPARABLE_FIELDS);
|
|
|
317
321
|
}
|
|
318
322
|
}
|
|
319
323
|
});
|
|
320
|
-
const permissionsToAdd = differenceWith(
|
|
321
|
-
const permissionsToDelete = differenceWith(
|
|
324
|
+
const permissionsToAdd = differenceWith(permissionsWithToken, existingPermissions, arePermissionsEqual);
|
|
325
|
+
const permissionsToDelete = differenceWith(existingPermissions, permissionsWithToken, arePermissionsEqual);
|
|
322
326
|
if (permissionsToDelete.length > 0) {
|
|
323
|
-
await getService('permission').deleteByIds(permissionsToDelete.map(
|
|
327
|
+
await getService('permission').deleteByIds(permissionsToDelete.map((permission)=>permission?.id));
|
|
324
328
|
}
|
|
325
329
|
if (permissionsToAdd.length > 0) {
|
|
326
330
|
await createApiTokenAdminPermissions(tokenId, permissionsToAdd);
|
|
@@ -357,7 +361,9 @@ const pickComparableFields = pick(COMPARABLE_FIELDS);
|
|
|
357
361
|
const anyUserPermHasAllFields = matchingUserPerms.some((p)=>!p.properties?.fields || p.properties.fields.length === 0);
|
|
358
362
|
const tokenFields = tokenPerm.properties?.fields;
|
|
359
363
|
const fieldCeilingExceeded = !anyUserPermHasAllFields && tokenFields !== undefined && tokenFields !== null && tokenFields.length > 0 && (()=>{
|
|
360
|
-
const effectiveUserFields =
|
|
364
|
+
const effectiveUserFields = [
|
|
365
|
+
...new Set(matchingUserPerms.flatMap((p)=>p.properties?.fields || []))
|
|
366
|
+
];
|
|
361
367
|
return tokenFields.some((f)=>!effectiveUserFields.includes(f));
|
|
362
368
|
})();
|
|
363
369
|
if (fieldCeilingExceeded) {
|
|
@@ -366,7 +372,9 @@ const pickComparableFields = pick(COMPARABLE_FIELDS);
|
|
|
366
372
|
}
|
|
367
373
|
// Condition: force conditions to be the ones of the user permission(s)
|
|
368
374
|
const anyUserPermIsUnconditional = matchingUserPerms.some((p)=>!p.conditions || p.conditions.length === 0);
|
|
369
|
-
const enforcedConditions = anyUserPermIsUnconditional ? [] :
|
|
375
|
+
const enforcedConditions = anyUserPermIsUnconditional ? [] : [
|
|
376
|
+
...new Set(matchingUserPerms.flatMap((p)=>p.conditions || []))
|
|
377
|
+
];
|
|
370
378
|
const currentConditions = tokenPerm.conditions || [];
|
|
371
379
|
const conditionsChanged = enforcedConditions.length !== currentConditions.length || enforcedConditions.some((c)=>!currentConditions.includes(c));
|
|
372
380
|
if (conditionsChanged) {
|
|
@@ -448,7 +456,7 @@ const pickComparableFields = pick(COMPARABLE_FIELDS);
|
|
|
448
456
|
/**
|
|
449
457
|
* Flatten a token's database permissions objects to an array of strings
|
|
450
458
|
*/ const flattenTokenPermissions = (permissions)=>{
|
|
451
|
-
return isArray(permissions) ?
|
|
459
|
+
return Array.isArray(permissions) ? Array.from(permissions, (permission)=>permission?.action) : [];
|
|
452
460
|
};
|
|
453
461
|
/**
|
|
454
462
|
* Get a token.
|
|
@@ -473,14 +481,14 @@ const pickComparableFields = pick(COMPARABLE_FIELDS);
|
|
|
473
481
|
}
|
|
474
482
|
// Tokens created before kind introduction case: force kind to be content-api
|
|
475
483
|
const computedKind = token.kind ?? 'content-api';
|
|
476
|
-
const result = omit([
|
|
484
|
+
const result = omit(token, [
|
|
477
485
|
'accessKey',
|
|
478
486
|
'encryptedKey',
|
|
479
487
|
'type',
|
|
480
488
|
'permissions',
|
|
481
489
|
'adminPermissions',
|
|
482
490
|
'adminUserOwner'
|
|
483
|
-
]
|
|
491
|
+
]);
|
|
484
492
|
if (computedKind === 'content-api') {
|
|
485
493
|
Object.assign(result, {
|
|
486
494
|
kind: 'content-api',
|
|
@@ -574,7 +582,7 @@ const authenticateAdminToken = async (accessToken)=>{
|
|
|
574
582
|
const getExpirationFields = (lifespan)=>{
|
|
575
583
|
// it must be nil or a finite number >= 0
|
|
576
584
|
const isValidNumber = isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;
|
|
577
|
-
if (!isValidNumber &&
|
|
585
|
+
if (!isValidNumber && lifespan != null) {
|
|
578
586
|
throw new ValidationError('lifespan must be a positive number or null');
|
|
579
587
|
}
|
|
580
588
|
return {
|
|
@@ -598,11 +606,11 @@ const getExpirationFields = (lifespan)=>{
|
|
|
598
606
|
select: SELECT_FIELDS,
|
|
599
607
|
populate: POPULATE_FIELDS,
|
|
600
608
|
data: {
|
|
601
|
-
...omit([
|
|
609
|
+
...omit(attributes, [
|
|
602
610
|
'permissions',
|
|
603
611
|
'adminPermissions',
|
|
604
612
|
'adminUserOwner'
|
|
605
|
-
]
|
|
613
|
+
]),
|
|
606
614
|
accessKey: hash(accessKey),
|
|
607
615
|
encryptedKey,
|
|
608
616
|
adminUserOwner: null,
|
|
@@ -616,7 +624,9 @@ const getExpirationFields = (lifespan)=>{
|
|
|
616
624
|
// If this is a custom type token, create the related content-API permissions
|
|
617
625
|
if (castedContentApiApiTokenBody.type === constants.API_TOKEN_TYPE.CUSTOM) {
|
|
618
626
|
// TODO: createMany doesn't seem to create relation properly, implement a better way rather than a ton of queries
|
|
619
|
-
await Promise.all(
|
|
627
|
+
await Promise.all([
|
|
628
|
+
...new Set(castedContentApiApiTokenBody.permissions)
|
|
629
|
+
].map((action)=>strapi.db.query('admin::api-token-permission').create({
|
|
620
630
|
data: {
|
|
621
631
|
action,
|
|
622
632
|
token: apiToken
|
|
@@ -644,10 +654,10 @@ const getExpirationFields = (lifespan)=>{
|
|
|
644
654
|
}
|
|
645
655
|
});
|
|
646
656
|
// Casted to any to avoid complex type duplication
|
|
647
|
-
return omit([
|
|
657
|
+
return omit(result, [
|
|
648
658
|
'adminPermissions',
|
|
649
659
|
'adminUserOwner'
|
|
650
|
-
]
|
|
660
|
+
]);
|
|
651
661
|
}
|
|
652
662
|
// kind === 'admin'
|
|
653
663
|
assertAdminKindFields(attributes);
|
|
@@ -670,11 +680,11 @@ const getExpirationFields = (lifespan)=>{
|
|
|
670
680
|
select: SELECT_FIELDS,
|
|
671
681
|
populate: POPULATE_FIELDS,
|
|
672
682
|
data: {
|
|
673
|
-
...omit([
|
|
683
|
+
...omit(attributes, [
|
|
674
684
|
'permissions',
|
|
675
685
|
'adminPermissions',
|
|
676
686
|
'adminUserOwner'
|
|
677
|
-
]
|
|
687
|
+
]),
|
|
678
688
|
accessKey: hash(accessKey),
|
|
679
689
|
encryptedKey,
|
|
680
690
|
adminUserOwner: ownerId,
|
|
@@ -709,9 +719,9 @@ const getExpirationFields = (lifespan)=>{
|
|
|
709
719
|
});
|
|
710
720
|
// Casted to any to avoid complex type duplication
|
|
711
721
|
return {
|
|
712
|
-
...omit([
|
|
722
|
+
...omit(result, [
|
|
713
723
|
'permissions'
|
|
714
|
-
]
|
|
724
|
+
]),
|
|
715
725
|
adminUserOwner: toAdminTokenOwner(result.adminUserOwner)
|
|
716
726
|
};
|
|
717
727
|
};
|
|
@@ -757,9 +767,9 @@ const regenerate = async (id)=>{
|
|
|
757
767
|
}
|
|
758
768
|
});
|
|
759
769
|
return {
|
|
760
|
-
...omit([
|
|
770
|
+
...omit(apiToken, [
|
|
761
771
|
'adminUserOwner'
|
|
762
|
-
]
|
|
772
|
+
]),
|
|
763
773
|
kind: apiToken.kind ?? 'content-api',
|
|
764
774
|
accessKey
|
|
765
775
|
};
|
|
@@ -829,18 +839,18 @@ For security reasons, prefer storing the secret in an environment variable and r
|
|
|
829
839
|
if (!tokens) {
|
|
830
840
|
return tokens;
|
|
831
841
|
}
|
|
832
|
-
return tokens.map((token)=>token.kind === null || token.kind === 'content-api' ? omit(
|
|
833
|
-
'adminPermissions',
|
|
834
|
-
'adminUserOwner'
|
|
835
|
-
], {
|
|
842
|
+
return tokens.map((token)=>token.kind === null || token.kind === 'content-api' ? omit({
|
|
836
843
|
...token,
|
|
837
844
|
// Tokens created before kind introduction case: force kind to be content-api
|
|
838
845
|
kind: 'content-api',
|
|
839
846
|
permissions: flattenTokenPermissions(token.permissions)
|
|
840
|
-
}
|
|
841
|
-
|
|
847
|
+
}, [
|
|
848
|
+
'adminPermissions',
|
|
849
|
+
'adminUserOwner'
|
|
850
|
+
]) : {
|
|
851
|
+
...omit(token, [
|
|
842
852
|
'permissions'
|
|
843
|
-
]
|
|
853
|
+
]),
|
|
844
854
|
adminUserOwner: token.adminUserOwner !== null && token.adminUserOwner !== undefined ? toAdminTokenOwner(token.adminUserOwner) : null
|
|
845
855
|
});
|
|
846
856
|
};
|
|
@@ -892,14 +902,14 @@ For security reasons, prefer storing the secret in an environment variable and r
|
|
|
892
902
|
};
|
|
893
903
|
}
|
|
894
904
|
// content-api tokens (including legacy null-kind rows): normalise shape
|
|
895
|
-
return omit(
|
|
896
|
-
'adminPermissions',
|
|
897
|
-
'adminUserOwner'
|
|
898
|
-
], {
|
|
905
|
+
return omit({
|
|
899
906
|
...deletedToken,
|
|
900
907
|
kind: 'content-api',
|
|
901
908
|
permissions: flattenTokenPermissions(deletedToken.permissions)
|
|
902
|
-
}
|
|
909
|
+
}, [
|
|
910
|
+
'adminPermissions',
|
|
911
|
+
'adminUserOwner'
|
|
912
|
+
]);
|
|
903
913
|
};
|
|
904
914
|
/**
|
|
905
915
|
* Update a token and its permissions
|
|
@@ -992,7 +1002,7 @@ For security reasons, prefer storing the secret in an environment variable and r
|
|
|
992
1002
|
}
|
|
993
1003
|
}
|
|
994
1004
|
}
|
|
995
|
-
const baseData = pick(
|
|
1005
|
+
const baseData = pick(attributes, UPDATABLE_FIELDS);
|
|
996
1006
|
// Migrate legacy null-kind rows to the explicit value on first write
|
|
997
1007
|
if (originalToken.kind === null) {
|
|
998
1008
|
baseData.kind = 'content-api';
|
|
@@ -1009,8 +1019,10 @@ For security reasons, prefer storing the secret in an environment variable and r
|
|
|
1009
1019
|
// custom tokens need to have their permissions updated as well
|
|
1010
1020
|
if (updatedToken.type === constants.API_TOKEN_TYPE.CUSTOM && incomingPermissions !== undefined) {
|
|
1011
1021
|
const currentPermissionsResult = await strapi.db.query('admin::api-token').load(updatedToken, 'permissions');
|
|
1012
|
-
const currentPermissions =
|
|
1013
|
-
const newPermissions =
|
|
1022
|
+
const currentPermissions = Array.from(currentPermissionsResult || [], (permission)=>permission?.action);
|
|
1023
|
+
const newPermissions = [
|
|
1024
|
+
...new Set(incomingPermissions || [])
|
|
1025
|
+
];
|
|
1014
1026
|
const actionsToDelete = difference(currentPermissions, newPermissions);
|
|
1015
1027
|
const actionsToAdd = difference(newPermissions, currentPermissions);
|
|
1016
1028
|
// TODO: improve efficiency here
|