@strapi/admin 4.14.1 → 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.c0c1c027.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.6c489074.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,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove private user fields
|
|
3
|
+
* @param {Object} user - user to sanitize
|
|
4
|
+
*/
|
|
5
|
+
declare const sanitizeUser: (user: any) => {
|
|
6
|
+
roles: any;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Create and save a user in database
|
|
10
|
+
* @param attributes A partial user object
|
|
11
|
+
* @returns {Promise<user>}
|
|
12
|
+
*/
|
|
13
|
+
declare const create: (attributes: any) => Promise<any>;
|
|
14
|
+
/**
|
|
15
|
+
* Update a user in database
|
|
16
|
+
* @param id query params to find the user to update
|
|
17
|
+
* @param attributes A partial user object
|
|
18
|
+
* @returns {Promise<user>}
|
|
19
|
+
*/
|
|
20
|
+
declare const updateById: (id: any, attributes: any) => Promise<any>;
|
|
21
|
+
/**
|
|
22
|
+
* Reset a user password by email. (Used in admin:reset CLI)
|
|
23
|
+
* @param {string} email - user email
|
|
24
|
+
* @param {string} password - new password
|
|
25
|
+
*/
|
|
26
|
+
declare const resetPasswordByEmail: (email: string, password: string) => Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a user with specific attributes exists in the database
|
|
29
|
+
* @param attributes A partial user object
|
|
30
|
+
* @returns {Promise<boolean>}
|
|
31
|
+
*/
|
|
32
|
+
declare const exists: (attributes?: {}) => Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Returns a user registration info
|
|
35
|
+
* @param {string} registrationToken - a user registration token
|
|
36
|
+
* @returns {Promise<registrationInfo>} - Returns user email, firstname and lastname
|
|
37
|
+
*/
|
|
38
|
+
declare const findRegistrationInfo: (registrationToken: string) => Promise<Pick<any, "email" | "firstname" | "lastname"> | undefined>;
|
|
39
|
+
/**
|
|
40
|
+
* Registers a user based on a registrationToken and some informations to update
|
|
41
|
+
* @param {Object} params
|
|
42
|
+
* @param {Object} params.registrationToken registration token
|
|
43
|
+
* @param {Object} params.userInfo user info
|
|
44
|
+
*/
|
|
45
|
+
declare const register: ({ registrationToken, userInfo }: any) => Promise<any>;
|
|
46
|
+
/**
|
|
47
|
+
* Find one user
|
|
48
|
+
*/
|
|
49
|
+
declare const findOne: (id: any, populate?: string[]) => Promise<import("@strapi/types/dist/types/core/attributes").GetValues<"admin::user", string> | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Find one user by its email
|
|
52
|
+
* @param {string} id email
|
|
53
|
+
* @param {string || string[] || object} populate
|
|
54
|
+
* @returns
|
|
55
|
+
*/
|
|
56
|
+
declare const findOneByEmail: (email: string, populate?: never[]) => Promise<any>;
|
|
57
|
+
/** Find many users (paginated)
|
|
58
|
+
* @param query
|
|
59
|
+
* @returns {Promise<user>}
|
|
60
|
+
*/
|
|
61
|
+
declare const findPage: (query?: {}) => Promise<import("@strapi/types/dist/modules/entity-service").PaginatedResult<"admin::user", {
|
|
62
|
+
populate: string[];
|
|
63
|
+
}>>;
|
|
64
|
+
/** Delete a user
|
|
65
|
+
* @param id id of the user to delete
|
|
66
|
+
* @returns {Promise<user>}
|
|
67
|
+
*/
|
|
68
|
+
declare const deleteById: (id: any) => Promise<any>;
|
|
69
|
+
/** Delete a user
|
|
70
|
+
* @param ids ids of the users to delete
|
|
71
|
+
* @returns {Promise<user>}
|
|
72
|
+
*/
|
|
73
|
+
declare const deleteByIds: (ids: any[]) => Promise<any[]>;
|
|
74
|
+
/** Count the users that don't have any associated roles
|
|
75
|
+
* @returns {Promise<number>}
|
|
76
|
+
*/
|
|
77
|
+
declare const countUsersWithoutRole: () => Promise<number>;
|
|
78
|
+
/**
|
|
79
|
+
* Count the number of users based on search params
|
|
80
|
+
* @param params params used for the query
|
|
81
|
+
* @returns {Promise<number>}
|
|
82
|
+
*/
|
|
83
|
+
declare const count: (where?: {}) => Promise<number>;
|
|
84
|
+
/** Assign some roles to several users
|
|
85
|
+
* @returns {undefined}
|
|
86
|
+
*/
|
|
87
|
+
declare const assignARoleToAll: (roleId: any) => Promise<void>;
|
|
88
|
+
/** Display a warning if some users don't have at least one role
|
|
89
|
+
* @returns {Promise<>}
|
|
90
|
+
*/
|
|
91
|
+
declare const displayWarningIfUsersDontHaveRole: () => Promise<void>;
|
|
92
|
+
/** Returns an array of interface languages currently used by users
|
|
93
|
+
* @returns {Promise<Array<string>>}
|
|
94
|
+
*/
|
|
95
|
+
declare const getLanguagesInUse: () => Promise<any[]>;
|
|
96
|
+
export { create, updateById, exists, findRegistrationInfo, register, sanitizeUser, findOne, findOneByEmail, findPage, deleteById, deleteByIds, countUsersWithoutRole, count, assignARoleToAll, displayWarningIfUsersDontHaveRole, resetPasswordByEmail, getLanguagesInUse, };
|
|
@@ -0,0 +1,311 @@
|
|
|
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.getLanguagesInUse = exports.resetPasswordByEmail = exports.displayWarningIfUsersDontHaveRole = exports.assignARoleToAll = exports.count = exports.countUsersWithoutRole = exports.deleteByIds = exports.deleteById = exports.findPage = exports.findOneByEmail = exports.findOne = exports.sanitizeUser = exports.register = exports.findRegistrationInfo = exports.exists = exports.updateById = exports.create = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const fp_1 = require("lodash/fp");
|
|
9
|
+
const utils_1 = require("@strapi/utils");
|
|
10
|
+
const user_1 = require("../domain/user");
|
|
11
|
+
const common_validators_1 = require("../validation/common-validators");
|
|
12
|
+
const utils_2 = require("../utils");
|
|
13
|
+
const constants_1 = require("./constants");
|
|
14
|
+
const { ValidationError } = utils_1.errors;
|
|
15
|
+
const sanitizeUserRoles = (role) => lodash_1.default.pick(role, ['id', 'name', 'description', 'code']);
|
|
16
|
+
/**
|
|
17
|
+
* Remove private user fields
|
|
18
|
+
* @param {Object} user - user to sanitize
|
|
19
|
+
*/
|
|
20
|
+
const sanitizeUser = (user) => {
|
|
21
|
+
return {
|
|
22
|
+
...lodash_1.default.omit(user, ['password', 'resetPasswordToken', 'registrationToken', 'roles']),
|
|
23
|
+
roles: user.roles && user.roles.map(sanitizeUserRoles),
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
exports.sanitizeUser = sanitizeUser;
|
|
27
|
+
/**
|
|
28
|
+
* Create and save a user in database
|
|
29
|
+
* @param attributes A partial user object
|
|
30
|
+
* @returns {Promise<user>}
|
|
31
|
+
*/
|
|
32
|
+
const create = async (attributes) => {
|
|
33
|
+
const userInfo = {
|
|
34
|
+
registrationToken: (0, utils_2.getService)('token').createToken(),
|
|
35
|
+
...attributes,
|
|
36
|
+
};
|
|
37
|
+
if (lodash_1.default.has(attributes, 'password')) {
|
|
38
|
+
userInfo.password = await (0, utils_2.getService)('auth').hashPassword(attributes.password);
|
|
39
|
+
}
|
|
40
|
+
const user = (0, user_1.createUser)(userInfo);
|
|
41
|
+
const createdUser = await strapi.query('admin::user').create({ data: user, populate: ['roles'] });
|
|
42
|
+
(0, utils_2.getService)('metrics').sendDidInviteUser();
|
|
43
|
+
strapi.eventHub.emit('user.create', { user: sanitizeUser(createdUser) });
|
|
44
|
+
return createdUser;
|
|
45
|
+
};
|
|
46
|
+
exports.create = create;
|
|
47
|
+
/**
|
|
48
|
+
* Update a user in database
|
|
49
|
+
* @param id query params to find the user to update
|
|
50
|
+
* @param attributes A partial user object
|
|
51
|
+
* @returns {Promise<user>}
|
|
52
|
+
*/
|
|
53
|
+
const updateById = async (id, attributes) => {
|
|
54
|
+
// Check at least one super admin remains
|
|
55
|
+
if (lodash_1.default.has(attributes, 'roles')) {
|
|
56
|
+
const lastAdminUser = await isLastSuperAdminUser(id);
|
|
57
|
+
const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
|
|
58
|
+
const willRemoveSuperAdminRole = !(0, utils_1.stringIncludes)(attributes.roles, superAdminRole.id);
|
|
59
|
+
if (lastAdminUser && willRemoveSuperAdminRole) {
|
|
60
|
+
throw new ValidationError('You must have at least one user with super admin role.');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// cannot disable last super admin
|
|
64
|
+
if (attributes.isActive === false) {
|
|
65
|
+
const lastAdminUser = await isLastSuperAdminUser(id);
|
|
66
|
+
if (lastAdminUser) {
|
|
67
|
+
throw new ValidationError('You must have at least one user with super admin role.');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// hash password if a new one is sent
|
|
71
|
+
if (lodash_1.default.has(attributes, 'password')) {
|
|
72
|
+
const hashedPassword = await (0, utils_2.getService)('auth').hashPassword(attributes.password);
|
|
73
|
+
const updatedUser = await strapi.query('admin::user').update({
|
|
74
|
+
where: { id },
|
|
75
|
+
data: {
|
|
76
|
+
...attributes,
|
|
77
|
+
password: hashedPassword,
|
|
78
|
+
},
|
|
79
|
+
populate: ['roles'],
|
|
80
|
+
});
|
|
81
|
+
strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });
|
|
82
|
+
return updatedUser;
|
|
83
|
+
}
|
|
84
|
+
const updatedUser = await strapi.query('admin::user').update({
|
|
85
|
+
where: { id },
|
|
86
|
+
data: attributes,
|
|
87
|
+
populate: ['roles'],
|
|
88
|
+
});
|
|
89
|
+
if (updatedUser) {
|
|
90
|
+
strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });
|
|
91
|
+
}
|
|
92
|
+
return updatedUser;
|
|
93
|
+
};
|
|
94
|
+
exports.updateById = updateById;
|
|
95
|
+
/**
|
|
96
|
+
* Reset a user password by email. (Used in admin:reset CLI)
|
|
97
|
+
* @param {string} email - user email
|
|
98
|
+
* @param {string} password - new password
|
|
99
|
+
*/
|
|
100
|
+
const resetPasswordByEmail = async (email, password) => {
|
|
101
|
+
const user = await strapi.query('admin::user').findOne({ where: { email }, populate: ['roles'] });
|
|
102
|
+
if (!user) {
|
|
103
|
+
throw new Error(`User not found for email: ${email}`);
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
await common_validators_1.password.validate(password);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
throw new ValidationError('Invalid password. Expected a minimum of 8 characters with at least one number and one uppercase letter');
|
|
110
|
+
}
|
|
111
|
+
await updateById(user.id, { password });
|
|
112
|
+
};
|
|
113
|
+
exports.resetPasswordByEmail = resetPasswordByEmail;
|
|
114
|
+
/**
|
|
115
|
+
* Check if a user is the last super admin
|
|
116
|
+
* @param {int|string} userId user's id to look for
|
|
117
|
+
*/
|
|
118
|
+
const isLastSuperAdminUser = async (userId) => {
|
|
119
|
+
const user = await findOne(userId);
|
|
120
|
+
const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
|
|
121
|
+
// @ts-expect-error
|
|
122
|
+
return superAdminRole.usersCount === 1 && (0, user_1.hasSuperAdminRole)(user);
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Check if a user with specific attributes exists in the database
|
|
126
|
+
* @param attributes A partial user object
|
|
127
|
+
* @returns {Promise<boolean>}
|
|
128
|
+
*/
|
|
129
|
+
const exists = async (attributes = {}) => {
|
|
130
|
+
return (await strapi.query('admin::user').count({ where: attributes })) > 0;
|
|
131
|
+
};
|
|
132
|
+
exports.exists = exists;
|
|
133
|
+
/**
|
|
134
|
+
* Returns a user registration info
|
|
135
|
+
* @param {string} registrationToken - a user registration token
|
|
136
|
+
* @returns {Promise<registrationInfo>} - Returns user email, firstname and lastname
|
|
137
|
+
*/
|
|
138
|
+
const findRegistrationInfo = async (registrationToken) => {
|
|
139
|
+
const user = await strapi.query('admin::user').findOne({ where: { registrationToken } });
|
|
140
|
+
if (!user) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
return lodash_1.default.pick(user, ['email', 'firstname', 'lastname']);
|
|
144
|
+
};
|
|
145
|
+
exports.findRegistrationInfo = findRegistrationInfo;
|
|
146
|
+
/**
|
|
147
|
+
* Registers a user based on a registrationToken and some informations to update
|
|
148
|
+
* @param {Object} params
|
|
149
|
+
* @param {Object} params.registrationToken registration token
|
|
150
|
+
* @param {Object} params.userInfo user info
|
|
151
|
+
*/
|
|
152
|
+
const register = async ({ registrationToken, userInfo }) => {
|
|
153
|
+
const matchingUser = await strapi.query('admin::user').findOne({ where: { registrationToken } });
|
|
154
|
+
if (!matchingUser) {
|
|
155
|
+
throw new ValidationError('Invalid registration info');
|
|
156
|
+
}
|
|
157
|
+
return (0, utils_2.getService)('user').updateById(matchingUser.id, {
|
|
158
|
+
password: userInfo.password,
|
|
159
|
+
firstname: userInfo.firstname,
|
|
160
|
+
lastname: userInfo.lastname,
|
|
161
|
+
registrationToken: null,
|
|
162
|
+
isActive: true,
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
exports.register = register;
|
|
166
|
+
/**
|
|
167
|
+
* Find one user
|
|
168
|
+
*/
|
|
169
|
+
const findOne = async (id, populate = ['roles']) => {
|
|
170
|
+
return strapi.entityService.findOne('admin::user', id, { populate });
|
|
171
|
+
};
|
|
172
|
+
exports.findOne = findOne;
|
|
173
|
+
/**
|
|
174
|
+
* Find one user by its email
|
|
175
|
+
* @param {string} id email
|
|
176
|
+
* @param {string || string[] || object} populate
|
|
177
|
+
* @returns
|
|
178
|
+
*/
|
|
179
|
+
const findOneByEmail = async (email, populate = []) => {
|
|
180
|
+
return strapi.query('admin::user').findOne({
|
|
181
|
+
where: { email },
|
|
182
|
+
populate,
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
exports.findOneByEmail = findOneByEmail;
|
|
186
|
+
/** Find many users (paginated)
|
|
187
|
+
* @param query
|
|
188
|
+
* @returns {Promise<user>}
|
|
189
|
+
*/
|
|
190
|
+
const findPage = async (query = {}) => {
|
|
191
|
+
const enrichedQuery = (0, fp_1.defaults)({ populate: ['roles'] }, query);
|
|
192
|
+
return strapi.entityService.findPage('admin::user', enrichedQuery);
|
|
193
|
+
};
|
|
194
|
+
exports.findPage = findPage;
|
|
195
|
+
/** Delete a user
|
|
196
|
+
* @param id id of the user to delete
|
|
197
|
+
* @returns {Promise<user>}
|
|
198
|
+
*/
|
|
199
|
+
const deleteById = async (id) => {
|
|
200
|
+
// Check at least one super admin remains
|
|
201
|
+
const userToDelete = await strapi.query('admin::user').findOne({
|
|
202
|
+
where: { id },
|
|
203
|
+
populate: ['roles'],
|
|
204
|
+
});
|
|
205
|
+
if (!userToDelete) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
if (userToDelete) {
|
|
209
|
+
if (userToDelete.roles.some((r) => r.code === constants_1.SUPER_ADMIN_CODE)) {
|
|
210
|
+
const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
|
|
211
|
+
if (superAdminRole.usersCount === 1) {
|
|
212
|
+
throw new ValidationError('You must have at least one user with super admin role.');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const deletedUser = await strapi
|
|
217
|
+
.query('admin::user')
|
|
218
|
+
.delete({ where: { id }, populate: ['roles'] });
|
|
219
|
+
strapi.eventHub.emit('user.delete', { user: sanitizeUser(deletedUser) });
|
|
220
|
+
return deletedUser;
|
|
221
|
+
};
|
|
222
|
+
exports.deleteById = deleteById;
|
|
223
|
+
/** Delete a user
|
|
224
|
+
* @param ids ids of the users to delete
|
|
225
|
+
* @returns {Promise<user>}
|
|
226
|
+
*/
|
|
227
|
+
const deleteByIds = async (ids) => {
|
|
228
|
+
// Check at least one super admin remains
|
|
229
|
+
const superAdminRole = await (0, utils_2.getService)('role').getSuperAdminWithUsersCount();
|
|
230
|
+
const nbOfSuperAdminToDelete = await strapi.query('admin::user').count({
|
|
231
|
+
where: {
|
|
232
|
+
id: ids,
|
|
233
|
+
roles: { id: superAdminRole.id },
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {
|
|
237
|
+
throw new ValidationError('You must have at least one user with super admin role.');
|
|
238
|
+
}
|
|
239
|
+
const deletedUsers = [];
|
|
240
|
+
for (const id of ids) {
|
|
241
|
+
const deletedUser = await strapi.query('admin::user').delete({
|
|
242
|
+
where: { id },
|
|
243
|
+
populate: ['roles'],
|
|
244
|
+
});
|
|
245
|
+
deletedUsers.push(deletedUser);
|
|
246
|
+
}
|
|
247
|
+
strapi.eventHub.emit('user.delete', {
|
|
248
|
+
users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser)),
|
|
249
|
+
});
|
|
250
|
+
return deletedUsers;
|
|
251
|
+
};
|
|
252
|
+
exports.deleteByIds = deleteByIds;
|
|
253
|
+
/** Count the users that don't have any associated roles
|
|
254
|
+
* @returns {Promise<number>}
|
|
255
|
+
*/
|
|
256
|
+
const countUsersWithoutRole = async () => {
|
|
257
|
+
return strapi.query('admin::user').count({
|
|
258
|
+
where: {
|
|
259
|
+
roles: {
|
|
260
|
+
id: { $null: true },
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
};
|
|
265
|
+
exports.countUsersWithoutRole = countUsersWithoutRole;
|
|
266
|
+
/**
|
|
267
|
+
* Count the number of users based on search params
|
|
268
|
+
* @param params params used for the query
|
|
269
|
+
* @returns {Promise<number>}
|
|
270
|
+
*/
|
|
271
|
+
const count = async (where = {}) => {
|
|
272
|
+
return strapi.query('admin::user').count({ where });
|
|
273
|
+
};
|
|
274
|
+
exports.count = count;
|
|
275
|
+
/** Assign some roles to several users
|
|
276
|
+
* @returns {undefined}
|
|
277
|
+
*/
|
|
278
|
+
const assignARoleToAll = async (roleId) => {
|
|
279
|
+
const users = await strapi.query('admin::user').findMany({
|
|
280
|
+
select: ['id'],
|
|
281
|
+
where: {
|
|
282
|
+
roles: { id: { $null: true } },
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
await Promise.all(users.map((user) => {
|
|
286
|
+
return strapi.query('admin::user').update({
|
|
287
|
+
where: { id: user.id },
|
|
288
|
+
data: { roles: [roleId] },
|
|
289
|
+
});
|
|
290
|
+
}));
|
|
291
|
+
};
|
|
292
|
+
exports.assignARoleToAll = assignARoleToAll;
|
|
293
|
+
/** Display a warning if some users don't have at least one role
|
|
294
|
+
* @returns {Promise<>}
|
|
295
|
+
*/
|
|
296
|
+
const displayWarningIfUsersDontHaveRole = async () => {
|
|
297
|
+
const count = await countUsersWithoutRole();
|
|
298
|
+
if (count > 0) {
|
|
299
|
+
strapi.log.warn(`Some users (${count}) don't have any role.`);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
exports.displayWarningIfUsersDontHaveRole = displayWarningIfUsersDontHaveRole;
|
|
303
|
+
/** Returns an array of interface languages currently used by users
|
|
304
|
+
* @returns {Promise<Array<string>>}
|
|
305
|
+
*/
|
|
306
|
+
const getLanguagesInUse = async () => {
|
|
307
|
+
const users = await strapi.query('admin::user').findMany({ select: ['preferedLanguage'] });
|
|
308
|
+
return users.map((user) => user.preferedLanguage || 'en');
|
|
309
|
+
};
|
|
310
|
+
exports.getLanguagesInUse = getLanguagesInUse;
|
|
311
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../server/src/services/user.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** @type {import('.').AuthenticateFunction} */
|
|
2
|
+
export declare const authenticate: (ctx: any) => Promise<{
|
|
3
|
+
authenticated: boolean;
|
|
4
|
+
credentials?: undefined;
|
|
5
|
+
ability?: undefined;
|
|
6
|
+
} | {
|
|
7
|
+
authenticated: boolean;
|
|
8
|
+
credentials: any;
|
|
9
|
+
ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const name = "admin";
|
|
12
|
+
/** @type {import('.').AuthStrategy} */
|
|
13
|
+
declare const _default: {
|
|
14
|
+
name: string;
|
|
15
|
+
authenticate: (ctx: any) => Promise<{
|
|
16
|
+
authenticated: boolean;
|
|
17
|
+
credentials?: undefined;
|
|
18
|
+
ability?: undefined;
|
|
19
|
+
} | {
|
|
20
|
+
authenticated: boolean;
|
|
21
|
+
credentials: any;
|
|
22
|
+
ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
|
|
23
|
+
}>;
|
|
24
|
+
};
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.name = exports.authenticate = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
|
+
/** @type {import('.').AuthenticateFunction} */
|
|
6
|
+
const authenticate = async (ctx) => {
|
|
7
|
+
const { authorization } = ctx.request.header;
|
|
8
|
+
if (!authorization) {
|
|
9
|
+
return { authenticated: false };
|
|
10
|
+
}
|
|
11
|
+
const parts = authorization.split(/\s+/);
|
|
12
|
+
if (parts[0].toLowerCase() !== 'bearer' || parts.length !== 2) {
|
|
13
|
+
return { authenticated: false };
|
|
14
|
+
}
|
|
15
|
+
const token = parts[1];
|
|
16
|
+
const { payload, isValid } = (0, utils_1.getService)('token').decodeJwtToken(token);
|
|
17
|
+
if (!isValid) {
|
|
18
|
+
return { authenticated: false };
|
|
19
|
+
}
|
|
20
|
+
const user = await strapi
|
|
21
|
+
.query('admin::user')
|
|
22
|
+
.findOne({ where: { id: payload.id }, populate: ['roles'] });
|
|
23
|
+
if (!user || !(user.isActive === true)) {
|
|
24
|
+
return { authenticated: false };
|
|
25
|
+
}
|
|
26
|
+
const userAbility = await (0, utils_1.getService)('permission').engine.generateUserAbility(user);
|
|
27
|
+
// TODO: use the ability from ctx.state.auth instead of
|
|
28
|
+
// ctx.state.userAbility, and remove the assign below
|
|
29
|
+
ctx.state.userAbility = userAbility;
|
|
30
|
+
ctx.state.user = user;
|
|
31
|
+
return {
|
|
32
|
+
authenticated: true,
|
|
33
|
+
credentials: user,
|
|
34
|
+
ability: userAbility,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.authenticate = authenticate;
|
|
38
|
+
exports.name = 'admin';
|
|
39
|
+
/** @type {import('.').AuthStrategy} */
|
|
40
|
+
exports.default = {
|
|
41
|
+
name: exports.name,
|
|
42
|
+
authenticate: exports.authenticate,
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../server/src/strategies/admin.ts"],"names":[],"mappings":";;;AAAA,oCAAsC;AAEtC,+CAA+C;AACxC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAQ,EAAE,EAAE;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAE7C,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAEvE,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM;SACtB,KAAK,CAAC,aAAa,CAAC;SACpB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE/D,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;QACtC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACjC;IAED,MAAM,WAAW,GAAG,MAAM,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEpF,uDAAuD;IACvD,qDAAqD;IACrD,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IACpC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAEtB,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,WAAW;KACrB,CAAC;AACJ,CAAC,CAAC;AAxCW,QAAA,YAAY,gBAwCvB;AAEW,QAAA,IAAI,GAAG,OAAO,CAAC;AAE5B,uCAAuC;AACvC,kBAAe;IACb,IAAI,EAAJ,YAAI;IACJ,YAAY,EAAZ,oBAAY;CACb,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authenticate the validity of the token
|
|
3
|
+
*
|
|
4
|
+
* @type {import('.').AuthenticateFunction}
|
|
5
|
+
*/
|
|
6
|
+
export declare const authenticate: (ctx: any) => Promise<{
|
|
7
|
+
authenticated: boolean;
|
|
8
|
+
error?: undefined;
|
|
9
|
+
ability?: undefined;
|
|
10
|
+
credentials?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
authenticated: boolean;
|
|
13
|
+
error: import("@strapi/utils/dist/errors").UnauthorizedError;
|
|
14
|
+
ability?: undefined;
|
|
15
|
+
credentials?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
authenticated: boolean;
|
|
18
|
+
ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
|
|
19
|
+
credentials: any;
|
|
20
|
+
error?: undefined;
|
|
21
|
+
} | {
|
|
22
|
+
authenticated: boolean;
|
|
23
|
+
credentials: any;
|
|
24
|
+
error?: undefined;
|
|
25
|
+
ability?: undefined;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Verify the token has the required abilities for the requested scope
|
|
29
|
+
*
|
|
30
|
+
* @type {import('.').VerifyFunction}
|
|
31
|
+
*/
|
|
32
|
+
export declare const verify: (auth: any, config: any) => void;
|
|
33
|
+
export declare const name = "api-token";
|
|
34
|
+
/** @type {import('.').AuthStrategy} */
|
|
35
|
+
declare const _default: {
|
|
36
|
+
name: string;
|
|
37
|
+
authenticate: (ctx: any) => Promise<{
|
|
38
|
+
authenticated: boolean;
|
|
39
|
+
error?: undefined;
|
|
40
|
+
ability?: undefined;
|
|
41
|
+
credentials?: undefined;
|
|
42
|
+
} | {
|
|
43
|
+
authenticated: boolean;
|
|
44
|
+
error: import("@strapi/utils/dist/errors").UnauthorizedError;
|
|
45
|
+
ability?: undefined;
|
|
46
|
+
credentials?: undefined;
|
|
47
|
+
} | {
|
|
48
|
+
authenticated: boolean;
|
|
49
|
+
ability: import("@casl/ability").Ability<import("@casl/ability").AbilityTuple, any>;
|
|
50
|
+
credentials: any;
|
|
51
|
+
error?: undefined;
|
|
52
|
+
} | {
|
|
53
|
+
authenticated: boolean;
|
|
54
|
+
credentials: any;
|
|
55
|
+
error?: undefined;
|
|
56
|
+
ability?: undefined;
|
|
57
|
+
}>;
|
|
58
|
+
verify: (auth: any, config: any) => void;
|
|
59
|
+
};
|
|
60
|
+
export default _default;
|
|
@@ -0,0 +1,121 @@
|
|
|
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.name = exports.verify = exports.authenticate = void 0;
|
|
7
|
+
const fp_1 = require("lodash/fp");
|
|
8
|
+
const date_fns_1 = require("date-fns");
|
|
9
|
+
const utils_1 = require("@strapi/utils");
|
|
10
|
+
const constants_1 = __importDefault(require("../services/constants"));
|
|
11
|
+
const utils_2 = require("../utils");
|
|
12
|
+
const { UnauthorizedError, ForbiddenError } = utils_1.errors;
|
|
13
|
+
const isReadScope = (scope) => scope.endsWith('find') || scope.endsWith('findOne');
|
|
14
|
+
const extractToken = (ctx) => {
|
|
15
|
+
if (ctx.request && ctx.request.header && ctx.request.header.authorization) {
|
|
16
|
+
const parts = ctx.request.header.authorization.split(/\s+/);
|
|
17
|
+
if (parts[0].toLowerCase() !== 'bearer' || parts.length !== 2) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return parts[1];
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Authenticate the validity of the token
|
|
26
|
+
*
|
|
27
|
+
* @type {import('.').AuthenticateFunction}
|
|
28
|
+
*/
|
|
29
|
+
const authenticate = async (ctx) => {
|
|
30
|
+
const apiTokenService = (0, utils_2.getService)('api-token');
|
|
31
|
+
const token = extractToken(ctx);
|
|
32
|
+
if (!token) {
|
|
33
|
+
return { authenticated: false };
|
|
34
|
+
}
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
const apiToken = await apiTokenService.getBy({
|
|
37
|
+
accessKey: apiTokenService.hash(token),
|
|
38
|
+
});
|
|
39
|
+
// token not found
|
|
40
|
+
if (!apiToken) {
|
|
41
|
+
return { authenticated: false };
|
|
42
|
+
}
|
|
43
|
+
const currentDate = new Date();
|
|
44
|
+
if (!(0, fp_1.isNil)(apiToken.expiresAt)) {
|
|
45
|
+
const expirationDate = new Date(apiToken.expiresAt);
|
|
46
|
+
// token has expired
|
|
47
|
+
if (expirationDate < currentDate) {
|
|
48
|
+
return { authenticated: false, error: new UnauthorizedError('Token expired') };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// update lastUsedAt if the token has not been used in the last hour
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
const hoursSinceLastUsed = (0, date_fns_1.differenceInHours)(currentDate, (0, date_fns_1.parseISO)(apiToken.lastUsedAt));
|
|
54
|
+
if (hoursSinceLastUsed >= 1) {
|
|
55
|
+
await strapi.query('admin::api-token').update({
|
|
56
|
+
where: { id: apiToken.id },
|
|
57
|
+
data: { lastUsedAt: currentDate },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (apiToken.type === constants_1.default.API_TOKEN_TYPE.CUSTOM) {
|
|
61
|
+
const ability = await strapi.contentAPI.permissions.engine.generateAbility(apiToken.permissions.map((action) => ({ action })));
|
|
62
|
+
return { authenticated: true, ability, credentials: apiToken };
|
|
63
|
+
}
|
|
64
|
+
return { authenticated: true, credentials: apiToken };
|
|
65
|
+
};
|
|
66
|
+
exports.authenticate = authenticate;
|
|
67
|
+
/**
|
|
68
|
+
* Verify the token has the required abilities for the requested scope
|
|
69
|
+
*
|
|
70
|
+
* @type {import('.').VerifyFunction}
|
|
71
|
+
*/
|
|
72
|
+
const verify = (auth, config) => {
|
|
73
|
+
const { credentials: apiToken, ability } = auth;
|
|
74
|
+
if (!apiToken) {
|
|
75
|
+
throw new UnauthorizedError('Token not found');
|
|
76
|
+
}
|
|
77
|
+
const currentDate = new Date();
|
|
78
|
+
if (!(0, fp_1.isNil)(apiToken.expiresAt)) {
|
|
79
|
+
const expirationDate = new Date(apiToken.expiresAt);
|
|
80
|
+
// token has expired
|
|
81
|
+
if (expirationDate < currentDate) {
|
|
82
|
+
throw new UnauthorizedError('Token expired');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Full access
|
|
86
|
+
if (apiToken.type === constants_1.default.API_TOKEN_TYPE.FULL_ACCESS) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Read only
|
|
90
|
+
if (apiToken.type === constants_1.default.API_TOKEN_TYPE.READ_ONLY) {
|
|
91
|
+
/**
|
|
92
|
+
* If you don't have `full-access` you can only access `find` and `findOne`
|
|
93
|
+
* scopes. If the route has no scope, then you can't get access to it.
|
|
94
|
+
*/
|
|
95
|
+
const scopes = (0, fp_1.castArray)(config.scope);
|
|
96
|
+
if (config.scope && scopes.every(isReadScope)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Custom
|
|
101
|
+
else if (apiToken.type === constants_1.default.API_TOKEN_TYPE.CUSTOM) {
|
|
102
|
+
if (!ability) {
|
|
103
|
+
throw new ForbiddenError();
|
|
104
|
+
}
|
|
105
|
+
const scopes = (0, fp_1.castArray)(config.scope);
|
|
106
|
+
const isAllowed = scopes.every((scope) => ability.can(scope));
|
|
107
|
+
if (isAllowed) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
throw new ForbiddenError();
|
|
112
|
+
};
|
|
113
|
+
exports.verify = verify;
|
|
114
|
+
exports.name = 'api-token';
|
|
115
|
+
/** @type {import('.').AuthStrategy} */
|
|
116
|
+
exports.default = {
|
|
117
|
+
name: 'api-token',
|
|
118
|
+
authenticate: exports.authenticate,
|
|
119
|
+
verify: exports.verify,
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=api-token.js.map
|