@strapi/admin 4.14.2 → 4.14.3
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/admin/src/content-manager/hooks/useRelation/useRelation.js +1 -0
- package/build/{Admin-authenticatedApp.08f32723.chunk.js → Admin-authenticatedApp.a16cdc37.chunk.js} +1 -1
- package/build/{content-manager.0d2b4a60.chunk.js → content-manager.e1e49cc9.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/{runtime~main.cec66cd9.js → runtime~main.377a22d0.js} +1 -1
- package/dist/server/admin/server/src/bootstrap.d.ts +2 -0
- package/dist/server/admin/server/src/controllers/admin.d.ts +42 -0
- package/dist/server/admin/server/src/controllers/api-token.d.ts +10 -0
- package/dist/server/admin/server/src/controllers/authenticated-user.d.ts +6 -0
- package/dist/server/admin/server/src/controllers/authentication.d.ts +12 -0
- package/dist/server/admin/server/src/controllers/permission.d.ts +13 -0
- package/dist/server/admin/server/src/controllers/role.d.ts +43 -0
- package/dist/server/admin/server/src/controllers/transfer/token.d.ts +9 -0
- package/dist/server/admin/server/src/controllers/user.d.ts +13 -0
- package/dist/server/admin/server/src/destroy.d.ts +2 -0
- package/dist/server/admin/server/src/domain/condition/index.d.ts +56 -0
- package/dist/server/admin/server/src/domain/condition/index.js +53 -0
- package/dist/server/admin/server/src/domain/condition/index.js.map +1 -0
- package/dist/server/admin/server/src/domain/condition/provider.d.ts +30 -0
- package/dist/server/admin/server/src/domain/condition/provider.js +37 -0
- package/dist/server/admin/server/src/domain/condition/provider.js.map +1 -0
- package/dist/server/admin/server/src/index.d.ts +10 -0
- package/dist/server/admin/server/src/middlewares/data-transfer.d.ts +2 -0
- package/dist/server/admin/server/src/services/action.d.ts +9 -0
- package/dist/server/admin/server/src/services/auth.d.ts +42 -0
- package/dist/server/admin/server/src/services/condition.d.ts +2 -0
- package/dist/server/admin/server/src/services/content-type.d.ts +51 -0
- package/dist/server/admin/server/src/services/index.d.ts +61 -0
- package/dist/server/admin/server/src/services/metrics.d.ts +7 -0
- package/dist/server/admin/server/src/services/permission/engine.d.ts +15 -0
- package/dist/server/admin/server/src/services/permission/queries.d.ts +44 -0
- package/dist/server/admin/server/src/services/permission.d.ts +67 -0
- package/dist/server/admin/server/src/services/role.d.ts +116 -0
- package/dist/server/admin/server/src/services/transfer/token.d.ts +103 -0
- package/dist/server/admin/server/src/services/transfer/utils.d.ts +19 -0
- package/dist/server/admin/server/src/services/user.d.ts +96 -0
- package/dist/server/admin/server/src/strategies/admin.d.ts +25 -0
- package/dist/server/admin/server/src/strategies/api-token.d.ts +60 -0
- package/dist/server/admin/server/src/strategies/data-transfer.d.ts +50 -0
- package/dist/server/admin/server/src/validation/common-validators.d.ts +59 -0
- package/dist/server/admin/server/src/validation/permission.d.ts +9 -0
- package/dist/server/bootstrap.d.ts +2 -0
- package/dist/server/bootstrap.js +84 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/config/admin-actions.d.ts +33 -0
- package/dist/server/config/admin-actions.js +219 -0
- package/dist/server/config/admin-actions.js.map +1 -0
- package/dist/server/config/admin-conditions.d.ts +46 -0
- package/dist/server/config/admin-conditions.js +29 -0
- package/dist/server/config/admin-conditions.js.map +1 -0
- package/dist/server/config/email-templates/forgot-password.d.ts +6 -0
- package/dist/server/config/email-templates/forgot-password.js +19 -0
- package/dist/server/config/email-templates/forgot-password.js.map +1 -0
- package/dist/server/config/index.d.ts +17 -0
- package/dist/server/config/index.js +14 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/settings.d.ts +7 -0
- package/dist/server/config/settings.js +11 -0
- package/dist/server/config/settings.js.map +1 -0
- package/dist/server/content-types/Permission.d.ts +62 -0
- package/dist/server/content-types/Permission.js +64 -0
- package/dist/server/content-types/Permission.js.map +1 -0
- package/dist/server/content-types/Role.d.ts +57 -0
- package/dist/server/content-types/Role.js +59 -0
- package/dist/server/content-types/Role.js.map +1 -0
- package/dist/server/content-types/User.d.ts +106 -0
- package/dist/server/content-types/User.js +109 -0
- package/dist/server/content-types/User.js.map +1 -0
- package/dist/server/content-types/api-token-permission.d.ts +35 -0
- package/dist/server/content-types/api-token-permission.js +37 -0
- package/dist/server/content-types/api-token-permission.js.map +1 -0
- package/dist/server/content-types/api-token.d.ts +73 -0
- package/dist/server/content-types/api-token.js +79 -0
- package/dist/server/content-types/api-token.js.map +1 -0
- package/dist/server/content-types/index.d.ts +437 -0
- package/dist/server/content-types/index.js +22 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/transfer-token-permission.d.ts +35 -0
- package/dist/server/content-types/transfer-token-permission.js +37 -0
- package/dist/server/content-types/transfer-token-permission.js.map +1 -0
- package/dist/server/content-types/transfer-token.d.ts +65 -0
- package/dist/server/content-types/transfer-token.js +67 -0
- package/dist/server/content-types/transfer-token.js.map +1 -0
- package/dist/server/controllers/admin.d.ts +42 -0
- package/dist/server/controllers/admin.js +131 -0
- package/dist/server/controllers/admin.js.map +1 -0
- package/dist/server/controllers/api-token.d.ts +10 -0
- package/dist/server/controllers/api-token.js +106 -0
- package/dist/server/controllers/api-token.js.map +1 -0
- package/dist/server/controllers/authenticated-user.d.ts +6 -0
- package/dist/server/controllers/authenticated-user.js +41 -0
- package/dist/server/controllers/authenticated-user.js.map +1 -0
- package/dist/server/controllers/authentication.d.ts +12 -0
- package/dist/server/controllers/authentication.js +130 -0
- package/dist/server/controllers/authentication.js.map +1 -0
- package/dist/server/controllers/content-api.d.ts +5 -0
- package/dist/server/controllers/content-api.js +13 -0
- package/dist/server/controllers/content-api.js.map +1 -0
- package/dist/server/controllers/formatters/conditions.d.ts +3 -0
- package/dist/server/controllers/formatters/conditions.js +9 -0
- package/dist/server/controllers/formatters/conditions.js.map +1 -0
- package/dist/server/controllers/formatters/format-actions-by-sections.d.ts +7 -0
- package/dist/server/controllers/formatters/format-actions-by-sections.js +36 -0
- package/dist/server/controllers/formatters/format-actions-by-sections.js.map +1 -0
- package/dist/server/controllers/formatters/index.d.ts +2 -0
- package/dist/server/controllers/formatters/index.js +11 -0
- package/dist/server/controllers/formatters/index.js.map +1 -0
- package/dist/server/controllers/index.d.ts +68 -0
- package/dist/server/controllers/index.js +51 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/permission.d.ts +13 -0
- package/dist/server/controllers/permission.js +38 -0
- package/dist/server/controllers/permission.js.map +1 -0
- package/dist/server/controllers/role.d.ts +43 -0
- package/dist/server/controllers/role.js +148 -0
- package/dist/server/controllers/role.js.map +1 -0
- package/dist/server/controllers/transfer/index.d.ts +4 -0
- package/dist/server/controllers/transfer/index.js +14 -0
- package/dist/server/controllers/transfer/index.js.map +1 -0
- package/dist/server/controllers/transfer/runner.d.ts +6 -0
- package/dist/server/controllers/transfer/runner.js +25 -0
- package/dist/server/controllers/transfer/runner.js.map +1 -0
- package/dist/server/controllers/transfer/token.d.ts +9 -0
- package/dist/server/controllers/transfer/token.js +100 -0
- package/dist/server/controllers/transfer/token.js.map +1 -0
- package/dist/server/controllers/user.d.ts +13 -0
- package/dist/server/controllers/user.js +105 -0
- package/dist/server/controllers/user.js.map +1 -0
- package/dist/server/controllers/webhooks.d.ts +10 -0
- package/dist/server/controllers/webhooks.js +100 -0
- package/dist/server/controllers/webhooks.js.map +1 -0
- package/dist/server/destroy.d.ts +2 -0
- package/dist/server/destroy.js +9 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/domain/action/index.d.ts +33 -0
- package/dist/server/domain/action/index.js +98 -0
- package/dist/server/domain/action/index.js.map +1 -0
- package/dist/server/domain/action/provider.d.ts +38 -0
- package/dist/server/domain/action/provider.js +66 -0
- package/dist/server/domain/action/provider.js.map +1 -0
- package/dist/server/domain/condition/index.d.ts +53 -0
- package/dist/server/domain/condition/index.js +56 -0
- package/dist/server/domain/condition/index.js.map +1 -0
- package/dist/server/domain/condition/provider.d.ts +30 -0
- package/dist/server/domain/condition/provider.js +37 -0
- package/dist/server/domain/condition/provider.js.map +1 -0
- package/dist/server/domain/permission/index.d.ts +77 -0
- package/dist/server/domain/permission/index.js +119 -0
- package/dist/server/domain/permission/index.js.map +1 -0
- package/dist/server/domain/user.d.ts +32 -0
- package/dist/server/domain/user.js +28 -0
- package/dist/server/domain/user.js.map +1 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +27 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middlewares/data-transfer.d.ts +2 -0
- package/dist/server/middlewares/data-transfer.js +21 -0
- package/dist/server/middlewares/data-transfer.js.map +1 -0
- package/dist/server/middlewares/index.d.ts +9 -0
- package/dist/server/middlewares/index.js +17 -0
- package/dist/server/middlewares/index.js.map +1 -0
- package/dist/server/middlewares/rateLimit.d.ts +5 -0
- package/dist/server/middlewares/rateLimit.js +42 -0
- package/dist/server/middlewares/rateLimit.js.map +1 -0
- package/dist/server/policies/hasPermissions.d.ts +6 -0
- package/dist/server/policies/hasPermissions.js +38 -0
- package/dist/server/policies/hasPermissions.js.map +1 -0
- package/dist/server/policies/index.d.ts +14 -0
- package/dist/server/policies/index.js +10 -0
- package/dist/server/policies/index.js.map +1 -0
- package/dist/server/policies/isAuthenticatedAdmin.d.ts +2 -0
- package/dist/server/policies/isAuthenticatedAdmin.js +6 -0
- package/dist/server/policies/isAuthenticatedAdmin.js.map +1 -0
- package/dist/server/policies/isTelemetryEnabled.d.ts +10 -0
- package/dist/server/policies/isTelemetryEnabled.js +18 -0
- package/dist/server/policies/isTelemetryEnabled.js.map +1 -0
- package/dist/server/register.d.ts +2 -0
- package/dist/server/register.js +18 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/routes/admin.d.ts +23 -0
- package/dist/server/routes/admin.js +72 -0
- package/dist/server/routes/admin.js.map +1 -0
- package/dist/server/routes/api-tokens.d.ts +14 -0
- package/dist/server/routes/api-tokens.js +71 -0
- package/dist/server/routes/api-tokens.js.map +1 -0
- package/dist/server/routes/authentication.d.ts +29 -0
- package/dist/server/routes/authentication.js +58 -0
- package/dist/server/routes/authentication.js.map +1 -0
- package/dist/server/routes/content-api.d.ts +9 -0
- package/dist/server/routes/content-api.js +21 -0
- package/dist/server/routes/content-api.js.map +1 -0
- package/dist/server/routes/index.d.ts +66 -0
- package/dist/server/routes/index.js +32 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/permissions.d.ts +9 -0
- package/dist/server/routes/permissions.js +21 -0
- package/dist/server/routes/permissions.js.map +1 -0
- package/dist/server/routes/roles.d.ts +14 -0
- package/dist/server/routes/roles.js +108 -0
- package/dist/server/routes/roles.js.map +1 -0
- package/dist/server/routes/serve-admin-panel.d.ts +5 -0
- package/dist/server/routes/serve-admin-panel.js +65 -0
- package/dist/server/routes/serve-admin-panel.js.map +1 -0
- package/dist/server/routes/transfer.d.ts +55 -0
- package/dist/server/routes/transfer.js +105 -0
- package/dist/server/routes/transfer.js.map +1 -0
- package/dist/server/routes/users.d.ts +14 -0
- package/dist/server/routes/users.js +89 -0
- package/dist/server/routes/users.js.map +1 -0
- package/dist/server/routes/webhooks.d.ts +14 -0
- package/dist/server/routes/webhooks.js +82 -0
- package/dist/server/routes/webhooks.js.map +1 -0
- package/dist/server/services/action.d.ts +9 -0
- package/dist/server/services/action.js +29 -0
- package/dist/server/services/action.js.map +1 -0
- package/dist/server/services/api-token.d.ts +102 -0
- package/dist/server/services/api-token.js +378 -0
- package/dist/server/services/api-token.js.map +1 -0
- package/dist/server/services/auth.d.ts +42 -0
- package/dist/server/services/auth.js +98 -0
- package/dist/server/services/auth.js.map +1 -0
- package/dist/server/services/condition.d.ts +2 -0
- package/dist/server/services/condition.js +11 -0
- package/dist/server/services/condition.js.map +1 -0
- package/dist/server/services/constants.d.ts +33 -0
- package/dist/server/services/constants.js +37 -0
- package/dist/server/services/constants.js.map +1 -0
- package/dist/server/services/content-type.d.ts +51 -0
- package/dist/server/services/content-type.js +158 -0
- package/dist/server/services/content-type.js.map +1 -0
- package/dist/server/services/index.d.ts +61 -0
- package/dist/server/services/index.js +57 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/metrics.d.ts +7 -0
- package/dist/server/services/metrics.js +37 -0
- package/dist/server/services/metrics.js.map +1 -0
- package/dist/server/services/passport/local-strategy.d.ts +3 -0
- package/dist/server/services/passport/local-strategy.js +28 -0
- package/dist/server/services/passport/local-strategy.js.map +1 -0
- package/dist/server/services/passport.d.ts +7 -0
- package/dist/server/services/passport.js +40 -0
- package/dist/server/services/passport.js.map +1 -0
- package/dist/server/services/permission/engine.d.ts +15 -0
- package/dist/server/services/permission/engine.js +67 -0
- package/dist/server/services/permission/engine.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/index.d.ts +16 -0
- package/dist/server/services/permission/permissions-manager/index.js +48 -0
- package/dist/server/services/permission/permissions-manager/index.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/query-builders.d.ts +3 -0
- package/dist/server/services/permission/permissions-manager/query-builders.js +66 -0
- package/dist/server/services/permission/permissions-manager/query-builders.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/sanitize.d.ts +6 -0
- package/dist/server/services/permission/permissions-manager/sanitize.js +184 -0
- package/dist/server/services/permission/permissions-manager/sanitize.js.map +1 -0
- package/dist/server/services/permission/permissions-manager/validate.d.ts +5 -0
- package/dist/server/services/permission/permissions-manager/validate.js +134 -0
- package/dist/server/services/permission/permissions-manager/validate.js.map +1 -0
- package/dist/server/services/permission/queries.d.ts +44 -0
- package/dist/server/services/permission/queries.js +159 -0
- package/dist/server/services/permission/queries.js.map +1 -0
- package/dist/server/services/permission/sections-builder/builder.d.ts +39 -0
- package/dist/server/services/permission/sections-builder/builder.js +75 -0
- package/dist/server/services/permission/sections-builder/builder.js.map +1 -0
- package/dist/server/services/permission/sections-builder/handlers.d.ts +44 -0
- package/dist/server/services/permission/sections-builder/handlers.js +124 -0
- package/dist/server/services/permission/sections-builder/handlers.js.map +1 -0
- package/dist/server/services/permission/sections-builder/index.d.ts +8 -0
- package/dist/server/services/permission/sections-builder/index.js +39 -0
- package/dist/server/services/permission/sections-builder/index.js.map +1 -0
- package/dist/server/services/permission/sections-builder/section.d.ts +38 -0
- package/dist/server/services/permission/sections-builder/section.js +56 -0
- package/dist/server/services/permission/sections-builder/section.js.map +1 -0
- package/dist/server/services/permission/sections-builder/utils.d.ts +12 -0
- package/dist/server/services/permission/sections-builder/utils.js +23 -0
- package/dist/server/services/permission/sections-builder/utils.js.map +1 -0
- package/dist/server/services/permission.d.ts +67 -0
- package/dist/server/services/permission.js +33 -0
- package/dist/server/services/permission.js.map +1 -0
- package/dist/server/services/project-settings.d.ts +5 -0
- package/dist/server/services/project-settings.js +139 -0
- package/dist/server/services/project-settings.js.map +1 -0
- package/dist/server/services/role.d.ts +116 -0
- package/dist/server/services/role.js +382 -0
- package/dist/server/services/role.js.map +1 -0
- package/dist/server/services/token.d.ts +35 -0
- package/dist/server/services/token.js +58 -0
- package/dist/server/services/token.js.map +1 -0
- package/dist/server/services/transfer/index.d.ts +4 -0
- package/dist/server/services/transfer/index.js +33 -0
- package/dist/server/services/transfer/index.js.map +1 -0
- package/dist/server/services/transfer/permission.d.ts +6 -0
- package/dist/server/services/transfer/permission.js +20 -0
- package/dist/server/services/transfer/permission.js.map +1 -0
- package/dist/server/services/transfer/token.d.ts +84 -0
- package/dist/server/services/transfer/token.js +273 -0
- package/dist/server/services/transfer/token.js.map +1 -0
- package/dist/server/services/transfer/utils.d.ts +13 -0
- package/dist/server/services/transfer/utils.js +29 -0
- package/dist/server/services/transfer/utils.js.map +1 -0
- package/dist/server/services/user.d.ts +96 -0
- package/dist/server/services/user.js +311 -0
- package/dist/server/services/user.js.map +1 -0
- package/dist/server/strategies/admin.d.ts +25 -0
- package/dist/server/strategies/admin.js +44 -0
- package/dist/server/strategies/admin.js.map +1 -0
- package/dist/server/strategies/api-token.d.ts +60 -0
- package/dist/server/strategies/api-token.js +121 -0
- package/dist/server/strategies/api-token.js.map +1 -0
- package/dist/server/strategies/data-transfer.d.ts +66 -0
- package/dist/server/strategies/data-transfer.js +94 -0
- package/dist/server/strategies/data-transfer.js.map +1 -0
- package/dist/server/strategies/index.d.ts +17 -0
- package/dist/server/strategies/index.js +27 -0
- package/dist/server/strategies/index.js.map +1 -0
- package/dist/server/types/src/types/utils/object.d.ts +58 -0
- package/dist/server/types/src/types/utils/object.js +3 -0
- package/dist/server/types/src/types/utils/object.js.map +1 -0
- package/dist/server/utils/index.d.ts +1 -0
- package/dist/server/utils/index.js +9 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/types.d.ts +14 -0
- package/dist/server/utils/types.js +3 -0
- package/dist/server/utils/types.js.map +1 -0
- package/dist/server/validation/action-provider.d.ts +5 -0
- package/dist/server/validation/action-provider.js +58 -0
- package/dist/server/validation/action-provider.js.map +1 -0
- package/dist/server/validation/api-tokens.d.ts +7 -0
- package/dist/server/validation/api-tokens.js +36 -0
- package/dist/server/validation/api-tokens.js.map +1 -0
- package/dist/server/validation/authentication/forgot-password.d.ts +2 -0
- package/dist/server/validation/authentication/forgot-password.js +16 -0
- package/dist/server/validation/authentication/forgot-password.js.map +1 -0
- package/dist/server/validation/authentication/index.d.ts +5 -0
- package/dist/server/validation/authentication/index.js +17 -0
- package/dist/server/validation/authentication/index.js.map +1 -0
- package/dist/server/validation/authentication/register.d.ts +9 -0
- package/dist/server/validation/authentication/register.js +49 -0
- package/dist/server/validation/authentication/register.js.map +1 -0
- package/dist/server/validation/authentication/renew-token.d.ts +2 -0
- package/dist/server/validation/authentication/renew-token.js +6 -0
- package/dist/server/validation/authentication/renew-token.js.map +1 -0
- package/dist/server/validation/authentication/reset-password.d.ts +2 -0
- package/dist/server/validation/authentication/reset-password.js +17 -0
- package/dist/server/validation/authentication/reset-password.js.map +1 -0
- package/dist/server/validation/common-functions/check-fields-are-correctly-nested.d.ts +2 -0
- package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js +26 -0
- package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -0
- package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.d.ts +2 -0
- package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js +18 -0
- package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -0
- package/dist/server/validation/common-functions/index.d.ts +3 -0
- package/dist/server/validation/common-functions/index.js +11 -0
- package/dist/server/validation/common-functions/index.js.map +1 -0
- package/dist/server/validation/common-validators.d.ts +59 -0
- package/dist/server/validation/common-validators.js +162 -0
- package/dist/server/validation/common-validators.js.map +1 -0
- package/dist/server/validation/permission.d.ts +9 -0
- package/dist/server/validation/permission.js +46 -0
- package/dist/server/validation/permission.js.map +1 -0
- package/dist/server/validation/policies/hasPermissions.d.ts +5 -0
- package/dist/server/validation/policies/hasPermissions.js +29 -0
- package/dist/server/validation/policies/hasPermissions.js.map +1 -0
- package/dist/server/validation/project-settings.d.ts +9 -0
- package/dist/server/validation/project-settings.js +44 -0
- package/dist/server/validation/project-settings.js.map +1 -0
- package/dist/server/validation/role.d.ts +11 -0
- package/dist/server/validation/role.js +62 -0
- package/dist/server/validation/role.js.map +1 -0
- package/dist/server/validation/transfer/index.d.ts +1 -0
- package/dist/server/validation/transfer/index.js +9 -0
- package/dist/server/validation/transfer/index.js.map +1 -0
- package/dist/server/validation/transfer/token.d.ts +7 -0
- package/dist/server/validation/transfer/token.js +46 -0
- package/dist/server/validation/transfer/token.js.map +1 -0
- package/dist/server/validation/user.d.ts +117 -0
- package/dist/server/validation/user.js +69 -0
- package/dist/server/validation/user.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.updateProjectSettings = exports.getProjectSettings = exports.parseFilesData = exports.deleteOldFiles = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const PROJECT_SETTINGS_FILE_INPUTS = ['menuLogo', 'authLogo'];
|
|
10
|
+
const parseFilesData = async (files) => {
|
|
11
|
+
const formatedFilesData = {};
|
|
12
|
+
await Promise.all(PROJECT_SETTINGS_FILE_INPUTS.map(async (inputName) => {
|
|
13
|
+
const file = files[inputName];
|
|
14
|
+
// Skip empty file inputs
|
|
15
|
+
if (!file) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const getStream = () => fs_1.default.createReadStream(file.path);
|
|
19
|
+
// Add formated data for the upload provider
|
|
20
|
+
formatedFilesData[inputName] = await strapi
|
|
21
|
+
.plugin('upload')
|
|
22
|
+
.service('upload')
|
|
23
|
+
.formatFileInfo({
|
|
24
|
+
filename: file.name,
|
|
25
|
+
type: file.type,
|
|
26
|
+
size: file.size,
|
|
27
|
+
});
|
|
28
|
+
// Add image dimensions
|
|
29
|
+
Object.assign(formatedFilesData[inputName], await strapi.plugin('upload').service('image-manipulation').getDimensions({ getStream }));
|
|
30
|
+
// Add file path, and stream
|
|
31
|
+
Object.assign(formatedFilesData[inputName], {
|
|
32
|
+
stream: getStream(),
|
|
33
|
+
tmpPath: file.path,
|
|
34
|
+
// @ts-expect-error
|
|
35
|
+
provider: strapi.config.get('plugin.upload').provider,
|
|
36
|
+
});
|
|
37
|
+
}));
|
|
38
|
+
return formatedFilesData;
|
|
39
|
+
};
|
|
40
|
+
exports.parseFilesData = parseFilesData;
|
|
41
|
+
const getProjectSettings = async () => {
|
|
42
|
+
const store = strapi.store({ type: 'core', name: 'admin' });
|
|
43
|
+
// Returns an object with file inputs names as key and null as value
|
|
44
|
+
const defaultProjectSettings = PROJECT_SETTINGS_FILE_INPUTS.reduce((prev, cur) => {
|
|
45
|
+
prev[cur] = null;
|
|
46
|
+
return prev;
|
|
47
|
+
}, {});
|
|
48
|
+
const projectSettings = {
|
|
49
|
+
...defaultProjectSettings,
|
|
50
|
+
// @ts-expect-error
|
|
51
|
+
...(await store.get({ key: 'project-settings' })),
|
|
52
|
+
};
|
|
53
|
+
// Filter file input fields
|
|
54
|
+
PROJECT_SETTINGS_FILE_INPUTS.forEach((inputName) => {
|
|
55
|
+
if (!projectSettings[inputName]) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
projectSettings[inputName] = (0, lodash_1.pick)(projectSettings[inputName], [
|
|
59
|
+
'name',
|
|
60
|
+
'url',
|
|
61
|
+
'width',
|
|
62
|
+
'height',
|
|
63
|
+
'ext',
|
|
64
|
+
'size',
|
|
65
|
+
]);
|
|
66
|
+
});
|
|
67
|
+
return projectSettings;
|
|
68
|
+
};
|
|
69
|
+
exports.getProjectSettings = getProjectSettings;
|
|
70
|
+
const uploadFiles = async (files = {}) => {
|
|
71
|
+
// Call the provider upload function for each file
|
|
72
|
+
return Promise.all(Object.values(files)
|
|
73
|
+
.filter((file) => file.stream instanceof fs_1.default.ReadStream)
|
|
74
|
+
.map((file) => strapi.plugin('upload').provider.uploadStream(file)));
|
|
75
|
+
};
|
|
76
|
+
const deleteOldFiles = async ({ previousSettings, newSettings }) => {
|
|
77
|
+
return Promise.all(PROJECT_SETTINGS_FILE_INPUTS.map(async (inputName) => {
|
|
78
|
+
// Skip if the store doesn't contain project settings
|
|
79
|
+
if (!previousSettings) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Skip if there was no previous file
|
|
83
|
+
if (!previousSettings[inputName]) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Skip if the file was not changed
|
|
87
|
+
if (newSettings[inputName] &&
|
|
88
|
+
previousSettings[inputName].hash === newSettings[inputName].hash) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Skip if the file was not uploaded with the current provider
|
|
92
|
+
// @ts-expect-error
|
|
93
|
+
if (strapi.config.get('plugin.upload').provider !== previousSettings[inputName].provider) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// There was a previous file and an new file was uploaded
|
|
97
|
+
// Remove the previous file
|
|
98
|
+
strapi.plugin('upload').provider.delete(previousSettings[inputName]);
|
|
99
|
+
}));
|
|
100
|
+
};
|
|
101
|
+
exports.deleteOldFiles = deleteOldFiles;
|
|
102
|
+
const updateProjectSettings = async (newSettings) => {
|
|
103
|
+
const store = strapi.store({ type: 'core', name: 'admin' });
|
|
104
|
+
const previousSettings = (await store.get({ key: 'project-settings' }));
|
|
105
|
+
const files = (0, lodash_1.pick)(newSettings, PROJECT_SETTINGS_FILE_INPUTS);
|
|
106
|
+
await uploadFiles(files);
|
|
107
|
+
PROJECT_SETTINGS_FILE_INPUTS.forEach((inputName) => {
|
|
108
|
+
// If the user input exists but is not a formdata "file" remove it
|
|
109
|
+
if (newSettings[inputName] !== undefined && !(typeof newSettings[inputName] === 'object')) {
|
|
110
|
+
newSettings[inputName] = null;
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// If the user input is undefined reuse previous setting (do not update field)
|
|
114
|
+
if (!newSettings[inputName] && previousSettings) {
|
|
115
|
+
newSettings[inputName] = previousSettings[inputName];
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// Update the file
|
|
119
|
+
newSettings[inputName] = (0, lodash_1.pick)(newSettings[inputName], [
|
|
120
|
+
'name',
|
|
121
|
+
'hash',
|
|
122
|
+
'url',
|
|
123
|
+
'width',
|
|
124
|
+
'height',
|
|
125
|
+
'ext',
|
|
126
|
+
'size',
|
|
127
|
+
'provider',
|
|
128
|
+
]);
|
|
129
|
+
});
|
|
130
|
+
// No await to proceed asynchronously
|
|
131
|
+
deleteOldFiles({ previousSettings, newSettings });
|
|
132
|
+
await store.set({
|
|
133
|
+
key: 'project-settings',
|
|
134
|
+
value: { ...previousSettings, ...newSettings },
|
|
135
|
+
});
|
|
136
|
+
return getProjectSettings();
|
|
137
|
+
};
|
|
138
|
+
exports.updateProjectSettings = updateProjectSettings;
|
|
139
|
+
//# sourceMappingURL=project-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-settings.js","sourceRoot":"","sources":["../../../server/src/services/project-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
declare const hooks: {
|
|
2
|
+
willResetSuperAdminPermissions: {
|
|
3
|
+
call(param: unknown): Promise<unknown>;
|
|
4
|
+
getHandlers(): import("@strapi/utils/dist/hooks").Handler[];
|
|
5
|
+
register(handler: import("@strapi/utils/dist/hooks").Handler): import("@strapi/utils/dist/hooks").Hook<import("@strapi/utils/dist/hooks").Handler>;
|
|
6
|
+
delete(handler: import("@strapi/utils/dist/hooks").Handler): import("@strapi/utils/dist/hooks").Hook<import("@strapi/utils/dist/hooks").Handler>;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
declare const sanitizeRole: import("lodash/fp").LodashOmit2x1;
|
|
10
|
+
/**
|
|
11
|
+
* Create and save a role in database
|
|
12
|
+
* @param attributes A partial role object
|
|
13
|
+
* @returns {Promise<role>}
|
|
14
|
+
*/
|
|
15
|
+
declare const create: (attributes: any) => Promise<any>;
|
|
16
|
+
/**
|
|
17
|
+
* Find a role in database
|
|
18
|
+
* @param params query params to find the role
|
|
19
|
+
* @param populate
|
|
20
|
+
* @returns {Promise<role>}
|
|
21
|
+
*/
|
|
22
|
+
declare const findOne: (params?: any, populate?: any) => Promise<any>;
|
|
23
|
+
/**
|
|
24
|
+
* Find a role in database with usersCounts
|
|
25
|
+
* @param params query params to find the role
|
|
26
|
+
* @param populate
|
|
27
|
+
* @returns {Promise<role>}
|
|
28
|
+
*/
|
|
29
|
+
declare const findOneWithUsersCount: (params?: {}, populate?: any) => Promise<any>;
|
|
30
|
+
/**
|
|
31
|
+
* Find roles in database
|
|
32
|
+
* @param params query params to find the roles
|
|
33
|
+
* @param populate
|
|
34
|
+
* @returns {Promise<array>}
|
|
35
|
+
*/
|
|
36
|
+
declare const find: (params: {} | undefined, populate: any) => Promise<any[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Find all roles in database
|
|
39
|
+
* @returns {Promise<array>}
|
|
40
|
+
*/
|
|
41
|
+
declare const findAllWithUsersCount: (params: any) => Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* Update a role in database
|
|
44
|
+
* @param params query params to find the role to update
|
|
45
|
+
* @param attributes A partial role object
|
|
46
|
+
* @returns {Promise<role>}
|
|
47
|
+
*/
|
|
48
|
+
declare const update: (params: any, attributes: any) => Promise<any>;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a role exists in database
|
|
51
|
+
* @param params query params to find the role
|
|
52
|
+
* @returns {Promise<boolean>}
|
|
53
|
+
*/
|
|
54
|
+
declare const exists: (params?: {}) => Promise<boolean>;
|
|
55
|
+
/**
|
|
56
|
+
* Count the number of roles based on search params
|
|
57
|
+
* @param params params used for the query
|
|
58
|
+
* @returns {Promise<number>}
|
|
59
|
+
*/
|
|
60
|
+
declare const count: (params?: {}) => Promise<number>;
|
|
61
|
+
/**
|
|
62
|
+
* Check if the given roles id can be deleted safely, throw otherwise
|
|
63
|
+
* @param ids
|
|
64
|
+
* @returns {Promise<void>}
|
|
65
|
+
*/
|
|
66
|
+
declare const checkRolesIdForDeletion: (ids?: any[]) => Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Delete roles in database if they have no user assigned
|
|
69
|
+
* @param ids query params to find the roles
|
|
70
|
+
* @returns {Promise<array>}
|
|
71
|
+
*/
|
|
72
|
+
declare const deleteByIds: (ids?: any[]) => Promise<any[]>;
|
|
73
|
+
/** Count the number of users for some roles
|
|
74
|
+
* @returns {Promise<number>}
|
|
75
|
+
* @param roleId
|
|
76
|
+
*/
|
|
77
|
+
declare const getUsersCount: (roleId: string) => Promise<number>;
|
|
78
|
+
/** Returns admin role
|
|
79
|
+
* @returns {Promise<role>}
|
|
80
|
+
*/
|
|
81
|
+
declare const getSuperAdmin: () => Promise<any>;
|
|
82
|
+
/** Returns admin role with userCount
|
|
83
|
+
* @returns {Promise<role>}
|
|
84
|
+
*/
|
|
85
|
+
declare const getSuperAdminWithUsersCount: () => Promise<any>;
|
|
86
|
+
/** Create superAdmin, Author and Editor role is no role already exist
|
|
87
|
+
* @returns {Promise<>}
|
|
88
|
+
*/
|
|
89
|
+
declare const createRolesIfNoneExist: () => Promise<void>;
|
|
90
|
+
/** Display a warning if the role superAdmin doesn't exist
|
|
91
|
+
* or if the role is not assigned to at least one user
|
|
92
|
+
* @returns {Promise<>}
|
|
93
|
+
*/
|
|
94
|
+
declare const displayWarningIfNoSuperAdmin: () => Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Assign permissions to a role
|
|
97
|
+
* @param {string|int} roleId - role ID
|
|
98
|
+
* @param {Array<Permission{action,subject,fields,conditions}>} permissions - permissions to assign to the role
|
|
99
|
+
*/
|
|
100
|
+
declare const assignPermissions: (roleId: string, permissions?: never[]) => Promise<any>;
|
|
101
|
+
declare const addPermissions: (roleId: string, permissions: any) => Promise<import("../domain/permission").Permission>;
|
|
102
|
+
/**
|
|
103
|
+
* Reset super admin permissions (giving it all permissions)
|
|
104
|
+
* @returns {Promise<>}
|
|
105
|
+
*/
|
|
106
|
+
declare const resetSuperAdminPermissions: () => Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Check if a user object includes the super admin role
|
|
109
|
+
* @param {object} user
|
|
110
|
+
* @return {boolean}
|
|
111
|
+
*/
|
|
112
|
+
declare const hasSuperAdminRole: (user: any) => any;
|
|
113
|
+
declare const constants: {
|
|
114
|
+
superAdminCode: string;
|
|
115
|
+
};
|
|
116
|
+
export { hooks, sanitizeRole, create, findOne, findOneWithUsersCount, find, findAllWithUsersCount, update, exists, count, deleteByIds, getUsersCount, getSuperAdmin, getSuperAdminWithUsersCount, createRolesIfNoneExist, displayWarningIfNoSuperAdmin, addPermissions, hasSuperAdminRole, assignPermissions, resetSuperAdminPermissions, checkRolesIdForDeletion, constants, };
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.constants = exports.checkRolesIdForDeletion = exports.resetSuperAdminPermissions = exports.assignPermissions = exports.hasSuperAdminRole = exports.addPermissions = exports.displayWarningIfNoSuperAdmin = exports.createRolesIfNoneExist = exports.getSuperAdminWithUsersCount = exports.getSuperAdmin = exports.getUsersCount = exports.deleteByIds = exports.count = exports.exists = exports.update = exports.findAllWithUsersCount = exports.find = exports.findOneWithUsersCount = exports.findOne = exports.create = exports.sanitizeRole = exports.hooks = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/default-param-last */
|
|
8
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
9
|
+
const fp_1 = require("lodash/fp");
|
|
10
|
+
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
|
11
|
+
const utils_1 = require("@strapi/utils");
|
|
12
|
+
const permission_1 = __importDefault(require("../domain/permission"));
|
|
13
|
+
const permission_2 = require("../validation/permission");
|
|
14
|
+
const utils_2 = require("../utils");
|
|
15
|
+
const constants_1 = require("./constants");
|
|
16
|
+
const { createAsyncSeriesWaterfallHook } = utils_1.hooks;
|
|
17
|
+
const { ApplicationError } = utils_1.errors;
|
|
18
|
+
const hooks = {
|
|
19
|
+
willResetSuperAdminPermissions: createAsyncSeriesWaterfallHook(),
|
|
20
|
+
};
|
|
21
|
+
exports.hooks = hooks;
|
|
22
|
+
const ACTIONS = {
|
|
23
|
+
publish: 'plugin::content-manager.explorer.publish',
|
|
24
|
+
};
|
|
25
|
+
const sanitizeRole = (0, fp_1.omit)(['users', 'permissions']);
|
|
26
|
+
exports.sanitizeRole = sanitizeRole;
|
|
27
|
+
const COMPARABLE_FIELDS = ['conditions', 'properties', 'subject', 'action', 'actionParameters'];
|
|
28
|
+
const pickComparableFields = (0, fp_1.pick)(COMPARABLE_FIELDS);
|
|
29
|
+
const jsonClean = (data) => JSON.parse(JSON.stringify(data));
|
|
30
|
+
/**
|
|
31
|
+
* Compare two permissions
|
|
32
|
+
* @param {Permission} p1
|
|
33
|
+
* @param {Permission} p2
|
|
34
|
+
* @returns {boolean}
|
|
35
|
+
*/
|
|
36
|
+
const arePermissionsEqual = (p1, p2) => {
|
|
37
|
+
if (p1.action === p2.action) {
|
|
38
|
+
return (0, fast_deep_equal_1.default)(jsonClean(pickComparableFields(p1)), jsonClean(pickComparableFields(p2)));
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Create and save a role in database
|
|
44
|
+
* @param attributes A partial role object
|
|
45
|
+
* @returns {Promise<role>}
|
|
46
|
+
*/
|
|
47
|
+
const create = async (attributes) => {
|
|
48
|
+
const alreadyExists = await exists({ name: attributes.name });
|
|
49
|
+
if (alreadyExists) {
|
|
50
|
+
throw new ApplicationError(`The name must be unique and a role with name \`${attributes.name}\` already exists.`);
|
|
51
|
+
}
|
|
52
|
+
// @ts-expect-error
|
|
53
|
+
const autoGeneratedCode = `${lodash_1.default.kebabCase(attributes.name)}-${(0, utils_1.generateTimestampCode)()}`;
|
|
54
|
+
const rolesWithCode = {
|
|
55
|
+
...attributes,
|
|
56
|
+
code: attributes.code || autoGeneratedCode,
|
|
57
|
+
};
|
|
58
|
+
const result = await strapi.query('admin::role').create({ data: rolesWithCode });
|
|
59
|
+
strapi.eventHub.emit('role.create', { role: sanitizeRole(result) });
|
|
60
|
+
return result;
|
|
61
|
+
};
|
|
62
|
+
exports.create = create;
|
|
63
|
+
/**
|
|
64
|
+
* Find a role in database
|
|
65
|
+
* @param params query params to find the role
|
|
66
|
+
* @param populate
|
|
67
|
+
* @returns {Promise<role>}
|
|
68
|
+
*/
|
|
69
|
+
const findOne = (params = {}, populate) => {
|
|
70
|
+
return strapi.query('admin::role').findOne({ where: params, populate });
|
|
71
|
+
};
|
|
72
|
+
exports.findOne = findOne;
|
|
73
|
+
/**
|
|
74
|
+
* Find a role in database with usersCounts
|
|
75
|
+
* @param params query params to find the role
|
|
76
|
+
* @param populate
|
|
77
|
+
* @returns {Promise<role>}
|
|
78
|
+
*/
|
|
79
|
+
const findOneWithUsersCount = async (params = {}, populate) => {
|
|
80
|
+
const role = await strapi.query('admin::role').findOne({ where: params, populate });
|
|
81
|
+
if (role) {
|
|
82
|
+
role.usersCount = await getUsersCount(role.id);
|
|
83
|
+
}
|
|
84
|
+
return role;
|
|
85
|
+
};
|
|
86
|
+
exports.findOneWithUsersCount = findOneWithUsersCount;
|
|
87
|
+
/**
|
|
88
|
+
* Find roles in database
|
|
89
|
+
* @param params query params to find the roles
|
|
90
|
+
* @param populate
|
|
91
|
+
* @returns {Promise<array>}
|
|
92
|
+
*/
|
|
93
|
+
const find = (params = {}, populate) => {
|
|
94
|
+
return strapi.query('admin::role').findMany({ where: params, populate });
|
|
95
|
+
};
|
|
96
|
+
exports.find = find;
|
|
97
|
+
/**
|
|
98
|
+
* Find all roles in database
|
|
99
|
+
* @returns {Promise<array>}
|
|
100
|
+
*/
|
|
101
|
+
const findAllWithUsersCount = async (params) => {
|
|
102
|
+
const roles = (await strapi.entityService.findMany('admin::role', params));
|
|
103
|
+
for (const role of roles) {
|
|
104
|
+
role.usersCount = await getUsersCount(role.id);
|
|
105
|
+
}
|
|
106
|
+
return roles;
|
|
107
|
+
};
|
|
108
|
+
exports.findAllWithUsersCount = findAllWithUsersCount;
|
|
109
|
+
/**
|
|
110
|
+
* Update a role in database
|
|
111
|
+
* @param params query params to find the role to update
|
|
112
|
+
* @param attributes A partial role object
|
|
113
|
+
* @returns {Promise<role>}
|
|
114
|
+
*/
|
|
115
|
+
const update = async (params, attributes) => {
|
|
116
|
+
const sanitizedAttributes = lodash_1.default.omit(attributes, ['code']);
|
|
117
|
+
if (lodash_1.default.has(params, 'id') && lodash_1.default.has(sanitizedAttributes, 'name')) {
|
|
118
|
+
const alreadyExists = await exists({
|
|
119
|
+
name: sanitizedAttributes.name,
|
|
120
|
+
id: { $ne: params.id },
|
|
121
|
+
});
|
|
122
|
+
if (alreadyExists) {
|
|
123
|
+
throw new ApplicationError(`The name must be unique and a role with name \`${sanitizedAttributes.name}\` already exists.`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const result = await strapi
|
|
127
|
+
.query('admin::role')
|
|
128
|
+
.update({ where: params, data: sanitizedAttributes });
|
|
129
|
+
strapi.eventHub.emit('role.update', { role: sanitizeRole(result) });
|
|
130
|
+
return result;
|
|
131
|
+
};
|
|
132
|
+
exports.update = update;
|
|
133
|
+
/**
|
|
134
|
+
* Check if a role exists in database
|
|
135
|
+
* @param params query params to find the role
|
|
136
|
+
* @returns {Promise<boolean>}
|
|
137
|
+
*/
|
|
138
|
+
const exists = async (params = {}) => {
|
|
139
|
+
const count = await strapi.query('admin::role').count({ where: params });
|
|
140
|
+
return count > 0;
|
|
141
|
+
};
|
|
142
|
+
exports.exists = exists;
|
|
143
|
+
/**
|
|
144
|
+
* Count the number of roles based on search params
|
|
145
|
+
* @param params params used for the query
|
|
146
|
+
* @returns {Promise<number>}
|
|
147
|
+
*/
|
|
148
|
+
const count = async (params = {}) => {
|
|
149
|
+
return strapi.query('admin::role').count(params);
|
|
150
|
+
};
|
|
151
|
+
exports.count = count;
|
|
152
|
+
/**
|
|
153
|
+
* Check if the given roles id can be deleted safely, throw otherwise
|
|
154
|
+
* @param ids
|
|
155
|
+
* @returns {Promise<void>}
|
|
156
|
+
*/
|
|
157
|
+
const checkRolesIdForDeletion = async (ids = []) => {
|
|
158
|
+
const superAdminRole = await getSuperAdmin();
|
|
159
|
+
if (superAdminRole && (0, utils_1.stringIncludes)(ids, superAdminRole.id)) {
|
|
160
|
+
throw new ApplicationError('You cannot delete the super admin role');
|
|
161
|
+
}
|
|
162
|
+
for (const roleId of ids) {
|
|
163
|
+
const usersCount = await getUsersCount(roleId);
|
|
164
|
+
if (usersCount !== 0) {
|
|
165
|
+
throw new ApplicationError('Some roles are still assigned to some users');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
exports.checkRolesIdForDeletion = checkRolesIdForDeletion;
|
|
170
|
+
/**
|
|
171
|
+
* Delete roles in database if they have no user assigned
|
|
172
|
+
* @param ids query params to find the roles
|
|
173
|
+
* @returns {Promise<array>}
|
|
174
|
+
*/
|
|
175
|
+
const deleteByIds = async (ids = []) => {
|
|
176
|
+
await checkRolesIdForDeletion(ids);
|
|
177
|
+
await (0, utils_2.getService)('permission').deleteByRolesIds(ids);
|
|
178
|
+
const deletedRoles = [];
|
|
179
|
+
for (const id of ids) {
|
|
180
|
+
const deletedRole = await strapi.query('admin::role').delete({ where: { id } });
|
|
181
|
+
if (deletedRole) {
|
|
182
|
+
strapi.eventHub.emit('role.delete', { role: deletedRole });
|
|
183
|
+
deletedRoles.push(deletedRole);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return deletedRoles;
|
|
187
|
+
};
|
|
188
|
+
exports.deleteByIds = deleteByIds;
|
|
189
|
+
/** Count the number of users for some roles
|
|
190
|
+
* @returns {Promise<number>}
|
|
191
|
+
* @param roleId
|
|
192
|
+
*/
|
|
193
|
+
const getUsersCount = async (roleId) => {
|
|
194
|
+
return strapi.query('admin::user').count({ where: { roles: { id: roleId } } });
|
|
195
|
+
};
|
|
196
|
+
exports.getUsersCount = getUsersCount;
|
|
197
|
+
/** Returns admin role
|
|
198
|
+
* @returns {Promise<role>}
|
|
199
|
+
*/
|
|
200
|
+
const getSuperAdmin = () => findOne({ code: constants_1.SUPER_ADMIN_CODE });
|
|
201
|
+
exports.getSuperAdmin = getSuperAdmin;
|
|
202
|
+
/** Returns admin role with userCount
|
|
203
|
+
* @returns {Promise<role>}
|
|
204
|
+
*/
|
|
205
|
+
const getSuperAdminWithUsersCount = () => findOneWithUsersCount({ code: constants_1.SUPER_ADMIN_CODE });
|
|
206
|
+
exports.getSuperAdminWithUsersCount = getSuperAdminWithUsersCount;
|
|
207
|
+
/** Create superAdmin, Author and Editor role is no role already exist
|
|
208
|
+
* @returns {Promise<>}
|
|
209
|
+
*/
|
|
210
|
+
const createRolesIfNoneExist = async () => {
|
|
211
|
+
const someRolesExist = await exists();
|
|
212
|
+
if (someRolesExist) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const { actionProvider } = (0, utils_2.getService)('permission');
|
|
216
|
+
const allActions = actionProvider.values();
|
|
217
|
+
const contentTypesActions = allActions.filter((a) => a.section === 'contentTypes');
|
|
218
|
+
// create 3 roles
|
|
219
|
+
const superAdminRole = await create({
|
|
220
|
+
name: 'Super Admin',
|
|
221
|
+
code: 'strapi-super-admin',
|
|
222
|
+
description: 'Super Admins can access and manage all features and settings.',
|
|
223
|
+
});
|
|
224
|
+
await (0, utils_2.getService)('user').assignARoleToAll(superAdminRole.id);
|
|
225
|
+
const editorRole = await create({
|
|
226
|
+
name: 'Editor',
|
|
227
|
+
code: 'strapi-editor',
|
|
228
|
+
description: 'Editors can manage and publish contents including those of other users.',
|
|
229
|
+
});
|
|
230
|
+
const authorRole = await create({
|
|
231
|
+
name: 'Author',
|
|
232
|
+
code: 'strapi-author',
|
|
233
|
+
description: 'Authors can manage the content they have created.',
|
|
234
|
+
});
|
|
235
|
+
// create content-type permissions for each role
|
|
236
|
+
const editorPermissions = (0, utils_2.getService)('content-type').getPermissionsWithNestedFields(contentTypesActions, {
|
|
237
|
+
restrictedSubjects: ['plugin::users-permissions.user'],
|
|
238
|
+
});
|
|
239
|
+
const authorPermissions = editorPermissions
|
|
240
|
+
.filter(({ action }) => action !== ACTIONS.publish)
|
|
241
|
+
.map((permission) => permission_1.default.create({ ...permission, conditions: ['admin::is-creator'] }));
|
|
242
|
+
editorPermissions.push(...getDefaultPluginPermissions());
|
|
243
|
+
authorPermissions.push(...getDefaultPluginPermissions({ isAuthor: true }));
|
|
244
|
+
// assign permissions to roles
|
|
245
|
+
await addPermissions(editorRole.id, editorPermissions);
|
|
246
|
+
await addPermissions(authorRole.id, authorPermissions);
|
|
247
|
+
};
|
|
248
|
+
exports.createRolesIfNoneExist = createRolesIfNoneExist;
|
|
249
|
+
const getDefaultPluginPermissions = ({ isAuthor = false } = {}) => {
|
|
250
|
+
const conditions = isAuthor ? ['admin::is-creator'] : [];
|
|
251
|
+
// add plugin permissions for each role
|
|
252
|
+
return [
|
|
253
|
+
{ action: 'plugin::upload.read', conditions },
|
|
254
|
+
{ action: 'plugin::upload.configure-view' },
|
|
255
|
+
{ action: 'plugin::upload.assets.create' },
|
|
256
|
+
{ action: 'plugin::upload.assets.update', conditions },
|
|
257
|
+
{ action: 'plugin::upload.assets.download' },
|
|
258
|
+
{ action: 'plugin::upload.assets.copy-link' },
|
|
259
|
+
].map(permission_1.default.create);
|
|
260
|
+
};
|
|
261
|
+
/** Display a warning if the role superAdmin doesn't exist
|
|
262
|
+
* or if the role is not assigned to at least one user
|
|
263
|
+
* @returns {Promise<>}
|
|
264
|
+
*/
|
|
265
|
+
const displayWarningIfNoSuperAdmin = async () => {
|
|
266
|
+
const superAdminRole = await getSuperAdminWithUsersCount();
|
|
267
|
+
const someUsersExists = await (0, utils_2.getService)('user').exists();
|
|
268
|
+
if (!superAdminRole) {
|
|
269
|
+
strapi.log.warn("Your application doesn't have a super admin role.");
|
|
270
|
+
}
|
|
271
|
+
else if (someUsersExists && superAdminRole.usersCount === 0) {
|
|
272
|
+
strapi.log.warn("Your application doesn't have a super admin user.");
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
exports.displayWarningIfNoSuperAdmin = displayWarningIfNoSuperAdmin;
|
|
276
|
+
/**
|
|
277
|
+
* Assign permissions to a role
|
|
278
|
+
* @param {string|int} roleId - role ID
|
|
279
|
+
* @param {Array<Permission{action,subject,fields,conditions}>} permissions - permissions to assign to the role
|
|
280
|
+
*/
|
|
281
|
+
const assignPermissions = async (roleId, permissions = []) => {
|
|
282
|
+
await (0, permission_2.validatePermissionsExist)(permissions);
|
|
283
|
+
// Internal actions are not handled by the role service, so any permission
|
|
284
|
+
// with an internal action is filtered out
|
|
285
|
+
const internalActions = (0, utils_2.getService)('permission')
|
|
286
|
+
.actionProvider.values()
|
|
287
|
+
.filter((action) => action.section === 'internal')
|
|
288
|
+
.map((action) => action.actionId);
|
|
289
|
+
const superAdmin = (await (0, utils_2.getService)('role').getSuperAdmin());
|
|
290
|
+
const isSuperAdmin = superAdmin && superAdmin.id === roleId;
|
|
291
|
+
const assignRole = (0, fp_1.set)('role', roleId);
|
|
292
|
+
const permissionsWithRole = permissions
|
|
293
|
+
// Add the role attribute to every permission
|
|
294
|
+
.map(assignRole)
|
|
295
|
+
// Transform each permission into a Permission instance
|
|
296
|
+
// @ts-expect-error
|
|
297
|
+
.map(permission_1.default.create);
|
|
298
|
+
const existingPermissions = (await (0, utils_2.getService)('permission').findMany({
|
|
299
|
+
where: { role: { id: roleId } },
|
|
300
|
+
populate: ['role'],
|
|
301
|
+
}));
|
|
302
|
+
const permissionsToAdd = (0, fp_1.differenceWith)(arePermissionsEqual, permissionsWithRole, existingPermissions).filter((permission) => !internalActions.includes(permission.action));
|
|
303
|
+
const permissionsToDelete = (0, fp_1.differenceWith)(arePermissionsEqual, existingPermissions, permissionsWithRole
|
|
304
|
+
// @ts-expect-error
|
|
305
|
+
).filter((permission) => !internalActions.includes(permission.action));
|
|
306
|
+
const permissionsToReturn = (0, fp_1.differenceBy)('id', permissionsToDelete, existingPermissions);
|
|
307
|
+
if (permissionsToDelete.length > 0) {
|
|
308
|
+
await (0, utils_2.getService)('permission').deleteByIds(permissionsToDelete.map((0, fp_1.prop)('id')));
|
|
309
|
+
}
|
|
310
|
+
if (permissionsToAdd.length > 0) {
|
|
311
|
+
const newPermissions = (await addPermissions(roleId, permissionsToAdd));
|
|
312
|
+
permissionsToReturn.push(...newPermissions);
|
|
313
|
+
}
|
|
314
|
+
if (!isSuperAdmin && (permissionsToAdd.length || permissionsToDelete.length)) {
|
|
315
|
+
await (0, utils_2.getService)('metrics').sendDidUpdateRolePermissions();
|
|
316
|
+
}
|
|
317
|
+
return permissionsToReturn;
|
|
318
|
+
};
|
|
319
|
+
exports.assignPermissions = assignPermissions;
|
|
320
|
+
const addPermissions = async (roleId, permissions) => {
|
|
321
|
+
const { conditionProvider, createMany } = (0, utils_2.getService)('permission');
|
|
322
|
+
const { sanitizeConditions } = permission_1.default;
|
|
323
|
+
const permissionsWithRole = permissions
|
|
324
|
+
.map((0, fp_1.set)('role', roleId))
|
|
325
|
+
// @ts-expect-error
|
|
326
|
+
.map(sanitizeConditions(conditionProvider))
|
|
327
|
+
.map(permission_1.default.create);
|
|
328
|
+
return createMany(permissionsWithRole);
|
|
329
|
+
};
|
|
330
|
+
exports.addPermissions = addPermissions;
|
|
331
|
+
const isContentTypeAction = (action) => action.section === constants_1.CONTENT_TYPE_SECTION;
|
|
332
|
+
/**
|
|
333
|
+
* Reset super admin permissions (giving it all permissions)
|
|
334
|
+
* @returns {Promise<>}
|
|
335
|
+
*/
|
|
336
|
+
const resetSuperAdminPermissions = async () => {
|
|
337
|
+
// @ts-ignore
|
|
338
|
+
const superAdminRole = await (0, utils_2.getService)('role').getSuperAdmin();
|
|
339
|
+
if (!superAdminRole) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const permissionService = (0, utils_2.getService)('permission');
|
|
343
|
+
const contentTypeService = (0, utils_2.getService)('content-type');
|
|
344
|
+
const allActions = permissionService.actionProvider.values();
|
|
345
|
+
const contentTypesActions = allActions.filter((action) => isContentTypeAction(action));
|
|
346
|
+
const otherActions = allActions.filter((action) => !isContentTypeAction(action));
|
|
347
|
+
// First, get the content-types permissions
|
|
348
|
+
const permissions = contentTypeService.getPermissionsWithNestedFields(contentTypesActions);
|
|
349
|
+
// Then add every other permission
|
|
350
|
+
const otherPermissions = otherActions.reduce((acc, action) => {
|
|
351
|
+
const { actionId, subjects } = action;
|
|
352
|
+
if ((0, fp_1.isArray)(subjects)) {
|
|
353
|
+
acc.push(
|
|
354
|
+
// @ts-expect-error
|
|
355
|
+
...subjects.map((subject) => permission_1.default.create({ action: actionId, subject })));
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
// @ts-expect-error
|
|
359
|
+
acc.push(permission_1.default.create({ action: actionId }));
|
|
360
|
+
}
|
|
361
|
+
return acc;
|
|
362
|
+
}, []);
|
|
363
|
+
permissions.push(...otherPermissions);
|
|
364
|
+
const transformedPermissions = (await hooks.willResetSuperAdminPermissions.call(permissions));
|
|
365
|
+
await assignPermissions(superAdminRole.id, transformedPermissions);
|
|
366
|
+
};
|
|
367
|
+
exports.resetSuperAdminPermissions = resetSuperAdminPermissions;
|
|
368
|
+
/**
|
|
369
|
+
* Check if a user object includes the super admin role
|
|
370
|
+
* @param {object} user
|
|
371
|
+
* @return {boolean}
|
|
372
|
+
*/
|
|
373
|
+
const hasSuperAdminRole = (user) => {
|
|
374
|
+
const roles = lodash_1.default.get(user, 'roles', []);
|
|
375
|
+
return roles.map((0, fp_1.prop)('code')).includes(constants_1.SUPER_ADMIN_CODE);
|
|
376
|
+
};
|
|
377
|
+
exports.hasSuperAdminRole = hasSuperAdminRole;
|
|
378
|
+
const constants = {
|
|
379
|
+
superAdminCode: constants_1.SUPER_ADMIN_CODE,
|
|
380
|
+
};
|
|
381
|
+
exports.constants = constants;
|
|
382
|
+
//# sourceMappingURL=role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.js","sourceRoot":"","sources":["../../../server/src/services/role.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA0D;AAC1D,oDAAuB;AACvB,kCAAyF;AACzF,sEAAwC;AACxC,yCAAmG;AACnG,sEAAoD;AACpD,yDAAoE;AACpE,oCAAsC;AACtC,2CAAqE;AAErE,MAAM,EAAE,8BAA8B,EAAE,GAAG,aAAU,CAAC;AACtD,MAAM,EAAE,gBAAgB,EAAE,GAAG,cAAM,CAAC;AAEpC,MAAM,KAAK,GAAG;IACZ,8BAA8B,EAAE,8BAA8B,EAAE;CACjE,CAAC;AAybA,sBAAK;AAvbP,MAAM,OAAO,GAAG;IACd,OAAO,EAAE,0CAA0C;CACpD,CAAC;AAEF,MAAM,YAAY,GAAG,IAAA,SAAI,EAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAoblD,oCAAY;AAlbd,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAChG,MAAM,oBAAoB,GAAG,IAAA,SAAI,EAAC,iBAAiB,CAAC,CAAC;AAErD,MAAM,SAAS,GAAG,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CAAC,EAAO,EAAE,EAAO,EAAE,EAAE;IAC/C,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAE;QAC3B,OAAO,IAAA,yBAAS,EAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC5F;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,GAAG,KAAK,EAAE,UAAe,EAAE,EAAE;IACvC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAE9D,IAAI,aAAa,EAAE;QACjB,MAAM,IAAI,gBAAgB,CACxB,kDAAkD,UAAU,CAAC,IAAI,oBAAoB,CACtF,CAAC;KACH;IAED,mBAAmB;IACnB,MAAM,iBAAiB,GAAG,GAAG,gBAAC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAA,6BAAqB,GAAE,EAAE,CAAC;IAEvF,MAAM,aAAa,GAAG;QACpB,GAAG,UAAU;QACb,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,iBAAiB;KAC3C,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IACjF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAsYA,wBAAM;AApYR;;;;;GAKG;AACH,MAAM,OAAO,GAAG,CAAC,SAAS,EAAS,EAAE,QAAc,EAAE,EAAE;IACrD,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC;AA6XA,0BAAO;AA3XT;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,QAAc,EAAE,EAAE;IAClE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEpF,IAAI,IAAI,EAAE;QACR,IAAI,CAAC,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChD;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA8WA,sDAAqB;AA5WvB;;;;;GAKG;AACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,QAAa,EAAE,EAAE;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AAqWA,oBAAI;AAnWN;;;GAGG;AACH,MAAM,qBAAqB,GAAG,KAAK,EAAE,MAAW,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAQ,CAAC;IAElF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,CAAC,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChD;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAwVA,sDAAqB;AAtVvB;;;;;GAKG;AACH,MAAM,MAAM,GAAG,KAAK,EAAE,MAAW,EAAE,UAAe,EAAE,EAAE;IACpD,MAAM,mBAAmB,GAAG,gBAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzD,IAAI,gBAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,gBAAC,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,EAAE;QAC7D,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;YACjC,IAAI,EAAE,mBAAmB,CAAC,IAAI;YAC9B,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;SACvB,CAAC,CAAC;QACH,IAAI,aAAa,EAAE;YACjB,MAAM,IAAI,gBAAgB,CACxB,kDAAkD,mBAAmB,CAAC,IAAI,oBAAoB,CAC/F,CAAC;SACH;KACF;IAED,MAAM,MAAM,GAAG,MAAM,MAAM;SACxB,KAAK,CAAC,aAAa,CAAC;SACpB,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA4TA,wBAAM;AA1TR;;;;GAIG;AACH,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;IACnC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC,CAAC;AAmTA,wBAAM;AAjTR;;;;GAIG;AACH,MAAM,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;IAClC,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC,CAAC;AA2SA,sBAAK;AAzSP;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,KAAK,EAAE,MAAM,EAAW,EAAE,EAAE;IAC1D,MAAM,cAAc,GAAG,MAAM,aAAa,EAAE,CAAC;IAE7C,IAAI,cAAc,IAAI,IAAA,sBAAc,EAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE;QAC5D,MAAM,IAAI,gBAAgB,CAAC,wCAAwC,CAAC,CAAC;KACtE;IAED,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE;QACxB,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,MAAM,IAAI,gBAAgB,CAAC,6CAA6C,CAAC,CAAC;SAC3E;KACF;AACH,CAAC,CAAC;AAkSA,0DAAuB;AAhSzB;;;;GAIG;AACH,MAAM,WAAW,GAAG,KAAK,EAAE,MAAM,EAAW,EAAE,EAAE;IAC9C,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAEnC,MAAM,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;QACpB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEhF,IAAI,WAAW,EAAE;YACf,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YAC3D,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAChC;KACF;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAiQA,kCAAW;AA/Pb;;;GAGG;AACH,MAAM,aAAa,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IAC7C,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC,CAAC;AA0PA,sCAAa;AAxPf;;GAEG;AACH,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,4BAAgB,EAAE,CAAC,CAAC;AAsP9D,sCAAa;AApPf;;GAEG;AACH,MAAM,2BAA2B,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,4BAAgB,EAAE,CAAC,CAAC;AAkP1F,kEAA2B;AAhP7B;;GAEG;AACH,MAAM,sBAAsB,GAAG,KAAK,IAAI,EAAE;IACxC,MAAM,cAAc,GAAG,MAAM,MAAM,EAAE,CAAC;IACtC,IAAI,cAAc,EAAE;QAClB,OAAO;KACR;IAED,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC;IAEnF,iBAAiB;IACjB,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC;QAClC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,+DAA+D;KAC7E,CAAC,CAAC;IAEH,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC;QAC9B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,yEAAyE;KACvF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC;QAC9B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,mDAAmD;KACjE,CAAC,CAAC;IAEH,gDAAgD;IAChD,MAAM,iBAAiB,GAAG,IAAA,kBAAU,EAAC,cAAc,CAAC,CAAC,8BAA8B,CACjF,mBAAmB,EACnB;QACE,kBAAkB,EAAE,CAAC,gCAAgC,CAAC;KACvD,CACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,iBAAiB;SACxC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAO,EAAE,EAAE,CAAC,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC;SACvD,GAAG,CAAC,CAAC,UAAe,EAAE,EAAE,CACvB,oBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAC9E,CAAC;IAEJ,iBAAiB,CAAC,IAAI,CAAC,GAAG,2BAA2B,EAAE,CAAC,CAAC;IACzD,iBAAiB,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3E,8BAA8B;IAC9B,MAAM,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;IACvD,MAAM,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACzD,CAAC,CAAC;AA0LA,wDAAsB;AAxLxB,MAAM,2BAA2B,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;IAChE,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,uCAAuC;IACvC,OAAO;QACL,EAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE;QAC7C,EAAE,MAAM,EAAE,+BAA+B,EAAE;QAC3C,EAAE,MAAM,EAAE,8BAA8B,EAAE;QAC1C,EAAE,MAAM,EAAE,8BAA8B,EAAE,UAAU,EAAE;QACtD,EAAE,MAAM,EAAE,gCAAgC,EAAE;QAC5C,EAAE,MAAM,EAAE,iCAAiC,EAAE;KAC9C,CAAC,GAAG,CAAC,oBAAgB,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,4BAA4B,GAAG,KAAK,IAAI,EAAE;IAC9C,MAAM,cAAc,GAAG,MAAM,2BAA2B,EAAE,CAAC;IAC3D,MAAM,eAAe,GAAG,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAE1D,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;KACtE;SAAM,IAAI,eAAe,IAAI,cAAc,CAAC,UAAU,KAAK,CAAC,EAAE;QAC7D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;KACtE;AACH,CAAC,CAAC;AA8JA,oEAA4B;AA5J9B;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,KAAK,EAAE,MAAc,EAAE,WAAW,GAAG,EAAE,EAAE,EAAE;IACnE,MAAM,IAAA,qCAAwB,EAAC,WAAW,CAAC,CAAC;IAE5C,0EAA0E;IAC1E,0CAA0C;IAC1C,MAAM,eAAe,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC;SAC7C,cAAc,CAAC,MAAM,EAAE;SACvB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC;SACjD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,CAAC,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAQ,CAAC;IACrE,MAAM,YAAY,GAAG,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,MAAM,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAA,QAAG,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,MAAM,mBAAmB,GAAG,WAAW;QACrC,6CAA6C;SAC5C,GAAG,CAAC,UAAU,CAAC;QAChB,uDAAuD;QACvD,mBAAmB;SAClB,GAAG,CAAC,oBAAgB,CAAC,MAAM,CAAC,CAAC;IAEhC,MAAM,mBAAmB,GAAG,CAAC,MAAM,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC,QAAQ,CAAC;QACnE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;QAC/B,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB,CAAC,CAAQ,CAAC;IAEX,MAAM,gBAAgB,GAAG,IAAA,mBAAc,EACrC,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,CACpB,CAAC,MAAM,CAAC,CAAC,UAAe,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5E,MAAM,mBAAmB,GAAG,IAAA,mBAAc,EACxC,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB;IACnB,mBAAmB;KACpB,CAAC,MAAM,CAAC,CAAC,UAAe,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5E,MAAM,mBAAmB,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,mBAAmB,EAAE,mBAAmB,CAAQ,CAAC;IAEhG,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;QAClC,MAAM,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjF;IAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/B,MAAM,cAAc,GAAG,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAQ,CAAC;QAC/E,mBAAmB,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;KAC7C;IAED,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE;QAC5E,MAAM,IAAA,kBAAU,EAAC,SAAS,CAAC,CAAC,4BAA4B,EAAE,CAAC;KAC5D;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAmGA,8CAAiB;AAjGnB,MAAM,cAAc,GAAG,KAAK,EAAE,MAAc,EAAE,WAAgB,EAAE,EAAE;IAChE,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,oBAAgB,CAAC;IAEhD,MAAM,mBAAmB,GAAG,WAAW;SACpC,GAAG,CAAC,IAAA,QAAG,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzB,mBAAmB;SAClB,GAAG,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;SAC1C,GAAG,CAAC,oBAAgB,CAAC,MAAM,CAAC,CAAC;IAEhC,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAAC;AACzC,CAAC,CAAC;AAoFA,wCAAc;AAlFhB,MAAM,mBAAmB,GAAG,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,gCAAoB,CAAC;AAErF;;;GAGG;AACH,MAAM,0BAA0B,GAAG,KAAK,IAAI,EAAE;IAC5C,aAAa;IACb,MAAM,cAAc,GAAG,MAAM,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IAChE,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO;KACR;IAED,MAAM,iBAAiB,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,IAAA,kBAAU,EAAC,cAAc,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IAE7D,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACvF,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjF,2CAA2C;IAC3C,MAAM,WAAW,GAAG,kBAAkB,CAAC,8BAA8B,CAAC,mBAAmB,CAAC,CAAC;IAE3F,kCAAkC;IAClC,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QAC3D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAEtC,IAAI,IAAA,YAAO,EAAC,QAAQ,CAAC,EAAE;YACrB,GAAG,CAAC,IAAI;YACN,mBAAmB;YACnB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CACrF,CAAC;SACH;aAAM;YACL,mBAAmB;YACnB,GAAG,CAAC,IAAI,CAAC,oBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;SACzD;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAS,CAAC,CAAC;IAEd,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAEtC,MAAM,sBAAsB,GAAG,CAAC,MAAM,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAC7E,WAAW,CACZ,CAAQ,CAAC;IAEV,MAAM,iBAAiB,CAAC,cAAc,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;AACrE,CAAC,CAAC;AAqCA,gEAA0B;AAnC5B;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAS,EAAE,EAAE;IACtC,MAAM,KAAK,GAAG,gBAAC,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAEvC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAAgB,CAAC,CAAC;AAC5D,CAAC,CAAC;AAwBA,8CAAiB;AAtBnB,MAAM,SAAS,GAAG;IAChB,cAAc,EAAE,4BAAgB;CACjC,CAAC;AAwBA,8BAAS"}
|