directus 9.23.1 → 9.23.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.js +25 -21
- package/dist/auth/auth.d.ts +3 -3
- package/dist/auth/auth.js +2 -0
- package/dist/auth/drivers/ldap.d.ts +1 -1
- package/dist/auth/drivers/ldap.js +57 -46
- package/dist/auth/drivers/local.d.ts +1 -1
- package/dist/auth/drivers/local.js +20 -17
- package/dist/auth/drivers/oauth2.d.ts +1 -1
- package/dist/auth/drivers/oauth2.js +44 -35
- package/dist/auth/drivers/openid.d.ts +1 -1
- package/dist/auth/drivers/openid.js +50 -41
- package/dist/auth/drivers/saml.d.ts +1 -1
- package/dist/auth/drivers/saml.js +20 -17
- package/dist/auth.d.ts +1 -1
- package/dist/auth.js +8 -7
- package/dist/cache.d.ts +9 -1
- package/dist/cache.js +66 -18
- package/dist/cli/commands/bootstrap/index.js +7 -6
- package/dist/cli/commands/init/index.js +3 -3
- package/dist/cli/commands/schema/apply.js +14 -15
- package/dist/cli/commands/schema/snapshot.js +2 -2
- package/dist/cli/utils/create-db-connection.d.ts +1 -1
- package/dist/cli/utils/create-db-connection.js +3 -2
- package/dist/cli/utils/create-env/index.d.ts +2 -2
- package/dist/cli/utils/create-env/index.js +1 -1
- package/dist/cli/utils/drivers.d.ts +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.js +7 -7
- package/dist/controllers/activity.js +10 -11
- package/dist/controllers/assets.js +31 -25
- package/dist/controllers/auth.js +40 -26
- package/dist/controllers/collections.js +10 -10
- package/dist/controllers/dashboards.js +14 -11
- package/dist/controllers/extensions.js +3 -3
- package/dist/controllers/fields.js +20 -20
- package/dist/controllers/files.js +26 -20
- package/dist/controllers/flows.js +16 -13
- package/dist/controllers/folders.js +14 -11
- package/dist/controllers/graphql.js +6 -8
- package/dist/controllers/items.js +22 -19
- package/dist/controllers/not-found.d.ts +1 -1
- package/dist/controllers/not-found.js +1 -2
- package/dist/controllers/notifications.js +14 -11
- package/dist/controllers/operations.js +14 -11
- package/dist/controllers/panels.js +14 -11
- package/dist/controllers/permissions.js +14 -11
- package/dist/controllers/presets.js +14 -11
- package/dist/controllers/relations.js +10 -10
- package/dist/controllers/revisions.js +3 -3
- package/dist/controllers/roles.js +14 -11
- package/dist/controllers/schema.js +5 -5
- package/dist/controllers/server.js +7 -7
- package/dist/controllers/settings.js +2 -2
- package/dist/controllers/shares.js +21 -18
- package/dist/controllers/users.js +32 -36
- package/dist/controllers/utils.js +10 -15
- package/dist/controllers/webhooks.js +14 -11
- package/dist/database/helpers/fn/dialects/mssql.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/mssql.js +10 -11
- package/dist/database/helpers/fn/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/mysql.js +2 -3
- package/dist/database/helpers/fn/dialects/oracle.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/oracle.js +10 -11
- package/dist/database/helpers/fn/dialects/postgres.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/postgres.js +10 -11
- package/dist/database/helpers/fn/dialects/sqlite.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/sqlite.js +10 -11
- package/dist/database/helpers/fn/types.d.ts +5 -6
- package/dist/database/helpers/fn/types.js +4 -5
- package/dist/database/helpers/geometry/dialects/mssql.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/geometry/dialects/oracle.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/postgres.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/postgres.js +1 -2
- package/dist/database/helpers/geometry/dialects/redshift.d.ts +2 -2
- package/dist/database/helpers/geometry/dialects/sqlite.d.ts +1 -1
- package/dist/database/helpers/geometry/types.d.ts +2 -2
- package/dist/database/helpers/geometry/types.js +1 -2
- package/dist/database/helpers/index.d.ts +5 -5
- package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mysql.js +1 -2
- package/dist/database/helpers/schema/dialects/oracle.d.ts +2 -2
- package/dist/database/helpers/schema/dialects/oracle.js +4 -6
- package/dist/database/helpers/schema/types.d.ts +4 -4
- package/dist/database/helpers/types.d.ts +1 -1
- package/dist/database/helpers/types.js +1 -0
- package/dist/database/index.d.ts +1 -1
- package/dist/database/index.js +13 -13
- package/dist/database/migrations/20201028A-remove-collection-foreign-keys.d.ts +1 -1
- package/dist/database/migrations/20201029A-remove-system-relations.d.ts +1 -1
- package/dist/database/migrations/20201029B-remove-system-collections.d.ts +1 -1
- package/dist/database/migrations/20201029C-remove-system-fields.d.ts +1 -1
- package/dist/database/migrations/20201105A-add-cascade-system-relations.d.ts +1 -1
- package/dist/database/migrations/20201105B-change-webhook-url-type.d.ts +1 -1
- package/dist/database/migrations/20210225A-add-relations-sort-field.d.ts +1 -1
- package/dist/database/migrations/20210225A-add-relations-sort-field.js +1 -2
- package/dist/database/migrations/20210304A-remove-locked-fields.d.ts +1 -1
- package/dist/database/migrations/20210312A-webhooks-collections-text.d.ts +1 -1
- package/dist/database/migrations/20210331A-add-refresh-interval.d.ts +1 -1
- package/dist/database/migrations/20210415A-make-filesize-nullable.d.ts +1 -1
- package/dist/database/migrations/20210416A-add-collections-accountability.d.ts +1 -1
- package/dist/database/migrations/20210422A-remove-files-interface.d.ts +1 -1
- package/dist/database/migrations/20210506A-rename-interfaces.d.ts +1 -1
- package/dist/database/migrations/20210510A-restructure-relations.d.ts +1 -1
- package/dist/database/migrations/20210518A-add-foreign-key-constraints.d.ts +1 -1
- package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
- package/dist/database/migrations/20210519A-add-system-fk-triggers.d.ts +1 -1
- package/dist/database/migrations/20210519A-add-system-fk-triggers.js +2 -2
- package/dist/database/migrations/20210521A-add-collections-icon-color.d.ts +1 -1
- package/dist/database/migrations/20210525A-add-insights.d.ts +1 -1
- package/dist/database/migrations/20210608A-add-deep-clone-config.d.ts +1 -1
- package/dist/database/migrations/20210626A-change-filesize-bigint.d.ts +1 -1
- package/dist/database/migrations/20210716A-add-conditions-to-fields.d.ts +1 -1
- package/dist/database/migrations/20210721A-add-default-folder.d.ts +1 -1
- package/dist/database/migrations/20210802A-replace-groups.d.ts +1 -1
- package/dist/database/migrations/20210803A-add-required-to-fields.d.ts +1 -1
- package/dist/database/migrations/20210805A-update-groups.d.ts +1 -1
- package/dist/database/migrations/20210805B-change-image-metadata-structure.d.ts +1 -1
- package/dist/database/migrations/20210805B-change-image-metadata-structure.js +15 -15
- package/dist/database/migrations/20210811A-add-geometry-config.d.ts +1 -1
- package/dist/database/migrations/20210831A-remove-limit-column.d.ts +1 -1
- package/dist/database/migrations/20210903A-add-auth-provider.d.ts +1 -1
- package/dist/database/migrations/20210907A-webhooks-collections-not-null.d.ts +1 -1
- package/dist/database/migrations/20210910A-move-module-setup.d.ts +1 -1
- package/dist/database/migrations/20210920A-webhooks-url-not-null.d.ts +1 -1
- package/dist/database/migrations/20210924A-add-collection-organization.d.ts +1 -1
- package/dist/database/migrations/20210927A-replace-fields-group.d.ts +1 -1
- package/dist/database/migrations/20210927B-replace-m2m-interface.d.ts +1 -1
- package/dist/database/migrations/20210929A-rename-login-action.d.ts +1 -1
- package/dist/database/migrations/20211007A-update-presets.d.ts +1 -1
- package/dist/database/migrations/20211007A-update-presets.js +7 -9
- package/dist/database/migrations/20211009A-add-auth-data.d.ts +1 -1
- package/dist/database/migrations/20211016A-add-webhook-headers.d.ts +1 -1
- package/dist/database/migrations/20211103A-set-unique-to-user-token.d.ts +1 -1
- package/dist/database/migrations/20211103B-update-special-geometry.d.ts +1 -1
- package/dist/database/migrations/20211104A-remove-collections-listing.d.ts +1 -1
- package/dist/database/migrations/20211118A-add-notifications.d.ts +1 -1
- package/dist/database/migrations/20211211A-add-shares.d.ts +1 -1
- package/dist/database/migrations/20211230A-add-project-descriptor.d.ts +1 -1
- package/dist/database/migrations/20220303A-remove-default-project-color.d.ts +1 -1
- package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +1 -1
- package/dist/database/migrations/20220314A-add-translation-strings.d.ts +1 -1
- package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +1 -1
- package/dist/database/migrations/20220323A-add-field-validation.d.ts +1 -1
- package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +1 -1
- package/dist/database/migrations/20220325B-add-default-language.d.ts +1 -1
- package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +1 -1
- package/dist/database/migrations/20220429A-add-flows.d.ts +1 -1
- package/dist/database/migrations/20220429B-add-color-to-insights-icon.d.ts +1 -1
- package/dist/database/migrations/20220429C-drop-non-null-from-ip-of-activity.d.ts +1 -1
- package/dist/database/migrations/20220429D-drop-non-null-from-sender-of-notifications.d.ts +1 -1
- package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +1 -1
- package/dist/database/migrations/20220801A-update-notifications-timestamp-column.d.ts +1 -1
- package/dist/database/migrations/20220802A-add-custom-aspect-ratios.d.ts +1 -1
- package/dist/database/migrations/20220826A-add-origin-to-accountability.d.ts +1 -1
- package/dist/database/migrations/run.d.ts +1 -1
- package/dist/database/migrations/run.js +1 -1
- package/dist/database/run-ast.d.ts +3 -3
- package/dist/database/run-ast.js +21 -30
- package/dist/database/seeds/run.d.ts +1 -1
- package/dist/database/seeds/run.js +1 -2
- package/dist/database/system-data/app-access-permissions/index.d.ts +1 -1
- package/dist/database/system-data/collections/index.d.ts +1 -1
- package/dist/database/system-data/collections/index.js +2 -2
- package/dist/database/system-data/fields/collections.yaml +2 -0
- package/dist/database/system-data/fields/index.d.ts +1 -1
- package/dist/database/system-data/fields/index.js +3 -4
- package/dist/database/system-data/fields/settings.yaml +4 -0
- package/dist/database/system-data/relations/index.d.ts +1 -1
- package/dist/emitter.d.ts +1 -1
- package/dist/emitter.js +3 -0
- package/dist/env.js +11 -3
- package/dist/exceptions/database/dialects/mssql.d.ts +1 -1
- package/dist/exceptions/database/dialects/mssql.js +5 -6
- package/dist/exceptions/database/dialects/mysql.d.ts +1 -1
- package/dist/exceptions/database/dialects/mysql.js +19 -25
- package/dist/exceptions/database/dialects/oracle.d.ts +1 -1
- package/dist/exceptions/database/dialects/postgres.d.ts +1 -1
- package/dist/exceptions/database/dialects/sqlite.d.ts +1 -1
- package/dist/exceptions/database/translate.d.ts +1 -1
- package/dist/exceptions/database/value-out-of-range.js +1 -1
- package/dist/exceptions/range-not-satisfiable.js +2 -3
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +43 -33
- package/dist/flows.js +65 -46
- package/dist/logger.d.ts +2 -1
- package/dist/logger.js +35 -19
- package/dist/logger.test.d.ts +1 -0
- package/dist/mailer.js +16 -16
- package/dist/messenger.js +9 -7
- package/dist/middleware/authenticate.d.ts +1 -1
- package/dist/middleware/authenticate.js +13 -6
- package/dist/middleware/cache.d.ts +1 -1
- package/dist/middleware/cache.js +16 -16
- package/dist/middleware/check-ip.d.ts +1 -1
- package/dist/middleware/check-ip.js +1 -1
- package/dist/middleware/collection-exists.d.ts +1 -1
- package/dist/middleware/collection-exists.js +5 -5
- package/dist/middleware/cors.d.ts +1 -1
- package/dist/middleware/cors.js +7 -7
- package/dist/middleware/error-handler.d.ts +1 -1
- package/dist/middleware/error-handler.js +11 -12
- package/dist/middleware/extract-token.d.ts +1 -1
- package/dist/middleware/extract-token.js +2 -2
- package/dist/middleware/get-permissions.d.ts +1 -1
- package/dist/middleware/graphql.d.ts +1 -1
- package/dist/middleware/graphql.js +15 -9
- package/dist/middleware/rate-limiter-global.d.ts +5 -0
- package/dist/middleware/rate-limiter-global.js +48 -0
- package/dist/middleware/{rate-limiter.d.ts → rate-limiter-ip.d.ts} +2 -2
- package/dist/middleware/{rate-limiter.js → rate-limiter-ip.js} +5 -5
- package/dist/middleware/respond.d.ts +1 -1
- package/dist/middleware/respond.js +18 -19
- package/dist/middleware/sanitize-query.d.ts +1 -1
- package/dist/middleware/sanitize-query.js +1 -1
- package/dist/middleware/schema.d.ts +1 -1
- package/dist/middleware/use-collection.d.ts +1 -1
- package/dist/operations/condition/index.d.ts +1 -1
- package/dist/operations/exec/index.js +15 -4
- package/dist/operations/item-create/index.js +1 -2
- package/dist/operations/item-delete/index.d.ts +1 -1
- package/dist/operations/item-read/index.d.ts +1 -1
- package/dist/operations/item-update/index.d.ts +1 -1
- package/dist/operations/item-update/index.js +1 -2
- package/dist/operations/notification/index.js +1 -2
- package/dist/operations/request/index.js +19 -19
- package/dist/operations/trigger/index.js +2 -3
- package/dist/rate-limiter.d.ts +1 -1
- package/dist/rate-limiter.js +9 -9
- package/dist/request/validate-ip.js +2 -2
- package/dist/server.js +12 -13
- package/dist/services/activity.d.ts +1 -1
- package/dist/services/activity.js +17 -16
- package/dist/services/assets.d.ts +3 -3
- package/dist/services/assets.js +35 -37
- package/dist/services/authentication.d.ts +2 -2
- package/dist/services/authentication.js +22 -19
- package/dist/services/authorization.d.ts +3 -3
- package/dist/services/authorization.js +27 -31
- package/dist/services/collections.d.ts +5 -5
- package/dist/services/collections.js +54 -50
- package/dist/services/dashboards.d.ts +1 -1
- package/dist/services/fields.d.ts +5 -5
- package/dist/services/fields.js +50 -50
- package/dist/services/files.d.ts +1 -2
- package/dist/services/files.js +33 -27
- package/dist/services/flows.d.ts +2 -2
- package/dist/services/folders.d.ts +1 -1
- package/dist/services/graphql/index.d.ts +4 -4
- package/dist/services/graphql/index.js +259 -252
- package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -2
- package/dist/services/graphql/utils/process-error.d.ts +2 -2
- package/dist/services/graphql/utils/process-error.js +11 -4
- package/dist/services/import-export.d.ts +3 -3
- package/dist/services/import-export.js +30 -27
- package/dist/services/items.d.ts +3 -3
- package/dist/services/items.js +42 -36
- package/dist/services/mail/index.d.ts +4 -4
- package/dist/services/mail/index.js +14 -10
- package/dist/services/meta.d.ts +3 -3
- package/dist/services/meta.js +11 -9
- package/dist/services/notifications.d.ts +3 -3
- package/dist/services/notifications.js +10 -9
- package/dist/services/operations.d.ts +2 -2
- package/dist/services/panels.d.ts +1 -1
- package/dist/services/payload.d.ts +3 -3
- package/dist/services/payload.js +124 -122
- package/dist/services/permissions.d.ts +3 -3
- package/dist/services/permissions.js +11 -11
- package/dist/services/presets.d.ts +1 -1
- package/dist/services/relations.d.ts +6 -6
- package/dist/services/relations.js +45 -43
- package/dist/services/revisions.d.ts +1 -1
- package/dist/services/revisions.js +3 -3
- package/dist/services/roles.d.ts +2 -2
- package/dist/services/roles.js +7 -7
- package/dist/services/schema.d.ts +3 -3
- package/dist/services/schema.js +9 -11
- package/dist/services/server.d.ts +3 -3
- package/dist/services/server.js +88 -32
- package/dist/services/settings.d.ts +1 -1
- package/dist/services/shares.d.ts +1 -1
- package/dist/services/shares.js +14 -15
- package/dist/services/specifications.d.ts +4 -4
- package/dist/services/specifications.js +137 -119
- package/dist/services/tfa.d.ts +2 -2
- package/dist/services/tfa.js +7 -5
- package/dist/services/users.d.ts +2 -6
- package/dist/services/users.js +37 -40
- package/dist/services/utils.d.ts +3 -3
- package/dist/services/utils.js +10 -8
- package/dist/services/webhooks.d.ts +2 -2
- package/dist/services/webhooks.js +2 -1
- package/dist/storage/register-locations.js +1 -1
- package/dist/types/assets.d.ts +1 -1
- package/dist/types/ast.d.ts +1 -1
- package/dist/types/auth.d.ts +2 -2
- package/dist/types/collection.d.ts +2 -2
- package/dist/types/events.d.ts +2 -2
- package/dist/types/graphql.d.ts +2 -2
- package/dist/types/items.d.ts +3 -3
- package/dist/types/services.d.ts +5 -5
- package/dist/types/snapshot.d.ts +4 -4
- package/dist/utils/apply-diff.d.ts +3 -3
- package/dist/utils/apply-diff.js +25 -28
- package/dist/utils/apply-query.d.ts +3 -3
- package/dist/utils/apply-query.js +10 -12
- package/dist/utils/apply-snapshot.d.ts +3 -3
- package/dist/utils/apply-snapshot.js +5 -6
- package/dist/utils/construct-flow-tree.d.ts +1 -1
- package/dist/utils/construct-flow-tree.js +2 -2
- package/dist/utils/dynamic-import.js +1 -1
- package/dist/utils/filter-items.d.ts +1 -1
- package/dist/utils/generate-hash.js +1 -1
- package/dist/utils/get-accountability-for-role.d.ts +2 -2
- package/dist/utils/get-accountability-for-role.js +1 -1
- package/dist/utils/get-ast-from-query.d.ts +3 -3
- package/dist/utils/get-ast-from-query.js +22 -28
- package/dist/utils/get-auth-providers.js +1 -1
- package/dist/utils/get-cache-headers.d.ts +1 -1
- package/dist/utils/get-cache-headers.js +6 -7
- package/dist/utils/get-cache-key.d.ts +1 -1
- package/dist/utils/get-cache-key.js +2 -3
- package/dist/utils/get-collection-from-alias.d.ts +1 -1
- package/dist/utils/get-collection-from-alias.js +1 -0
- package/dist/utils/get-column-path.d.ts +2 -2
- package/dist/utils/get-column-path.js +3 -4
- package/dist/utils/get-column.d.ts +4 -4
- package/dist/utils/get-column.js +4 -5
- package/dist/utils/get-default-value.d.ts +2 -2
- package/dist/utils/get-default-value.js +2 -3
- package/dist/utils/get-graphql-query-and-variables.d.ts +1 -1
- package/dist/utils/get-graphql-query-and-variables.js +1 -2
- package/dist/utils/get-graphql-type.d.ts +2 -2
- package/dist/utils/get-graphql-type.js +1 -1
- package/dist/utils/get-ip-from-req.d.ts +1 -1
- package/dist/utils/get-ip-from-req.js +2 -2
- package/dist/utils/get-local-type.d.ts +1 -1
- package/dist/utils/get-local-type.js +3 -3
- package/dist/utils/get-milliseconds.js +1 -2
- package/dist/utils/get-permissions.d.ts +1 -1
- package/dist/utils/get-permissions.js +12 -12
- package/dist/utils/get-relation-info.d.ts +1 -1
- package/dist/utils/get-relation-info.js +3 -5
- package/dist/utils/get-relation-type.d.ts +1 -1
- package/dist/utils/get-relation-type.js +3 -4
- package/dist/utils/get-schema.d.ts +2 -2
- package/dist/utils/get-schema.js +20 -22
- package/dist/utils/get-snapshot-diff.js +2 -3
- package/dist/utils/get-snapshot.d.ts +3 -3
- package/dist/utils/get-snapshot.js +6 -8
- package/dist/utils/is-directus-jwt.js +1 -1
- package/dist/utils/is-url-allowed.js +5 -2
- package/dist/utils/job-queue.js +2 -0
- package/dist/utils/jwt.d.ts +1 -1
- package/dist/utils/merge-permissions-for-share.d.ts +1 -1
- package/dist/utils/merge-permissions-for-share.js +3 -4
- package/dist/utils/merge-permissions.d.ts +3 -3
- package/dist/utils/reduce-schema.d.ts +1 -1
- package/dist/utils/reduce-schema.js +12 -12
- package/dist/utils/sanitize-query.d.ts +1 -1
- package/dist/utils/sanitize-query.js +27 -27
- package/dist/utils/sanitize-schema.d.ts +2 -2
- package/dist/utils/should-skip-cache.d.ts +7 -0
- package/dist/utils/should-skip-cache.js +21 -0
- package/dist/utils/should-skip-cache.test.d.ts +1 -0
- package/dist/utils/track.js +16 -16
- package/dist/utils/transformations.d.ts +1 -1
- package/dist/utils/transformations.js +2 -4
- package/dist/utils/url.js +7 -2
- package/dist/utils/user-name.d.ts +1 -1
- package/dist/utils/validate-diff.js +7 -8
- package/dist/utils/validate-keys.d.ts +2 -2
- package/dist/utils/validate-keys.js +1 -1
- package/dist/utils/validate-query.d.ts +1 -1
- package/dist/utils/validate-query.js +3 -3
- package/dist/utils/validate-storage.js +8 -8
- package/dist/webhooks.js +3 -3
- package/package.json +36 -37
- package/dist/utils/with-timeout.d.ts +0 -1
- package/dist/utils/with-timeout.js +0 -16
package/dist/controllers/auth.js
CHANGED
|
@@ -4,17 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const express_1 = require("express");
|
|
7
|
+
const drivers_1 = require("../auth/drivers");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
7
9
|
const env_1 = __importDefault(require("../env"));
|
|
8
10
|
const exceptions_1 = require("../exceptions");
|
|
11
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
9
12
|
const respond_1 = require("../middleware/respond");
|
|
10
13
|
const services_1 = require("../services");
|
|
11
14
|
const async_handler_1 = __importDefault(require("../utils/async-handler"));
|
|
12
15
|
const get_auth_providers_1 = require("../utils/get-auth-providers");
|
|
13
|
-
const logger_1 = __importDefault(require("../logger"));
|
|
14
|
-
const drivers_1 = require("../auth/drivers");
|
|
15
|
-
const constants_1 = require("../constants");
|
|
16
16
|
const get_ip_from_req_1 = require("../utils/get-ip-from-req");
|
|
17
|
-
const constants_2 = require("../constants");
|
|
18
17
|
const router = (0, express_1.Router)();
|
|
19
18
|
const authProviders = (0, get_auth_providers_1.getAuthProviders)();
|
|
20
19
|
for (const authProvider of authProviders) {
|
|
@@ -42,21 +41,25 @@ for (const authProvider of authProviders) {
|
|
|
42
41
|
}
|
|
43
42
|
router.use(`/login/${authProvider.name}`, authRouter);
|
|
44
43
|
}
|
|
45
|
-
if (!env_1.default
|
|
44
|
+
if (!env_1.default['AUTH_DISABLE_DEFAULT']) {
|
|
46
45
|
router.use('/login', (0, drivers_1.createLocalAuthRouter)(constants_1.DEFAULT_AUTH_PROVIDER));
|
|
47
46
|
}
|
|
48
47
|
router.post('/refresh', (0, async_handler_1.default)(async (req, res, next) => {
|
|
49
48
|
const accountability = {
|
|
50
49
|
ip: (0, get_ip_from_req_1.getIPFromReq)(req),
|
|
51
|
-
userAgent: req.get('user-agent'),
|
|
52
|
-
origin: req.get('origin'),
|
|
53
50
|
role: null,
|
|
54
51
|
};
|
|
52
|
+
const userAgent = req.get('user-agent');
|
|
53
|
+
if (userAgent)
|
|
54
|
+
accountability.userAgent = userAgent;
|
|
55
|
+
const origin = req.get('origin');
|
|
56
|
+
if (origin)
|
|
57
|
+
accountability.origin = origin;
|
|
55
58
|
const authenticationService = new services_1.AuthenticationService({
|
|
56
59
|
accountability: accountability,
|
|
57
60
|
schema: req.schema,
|
|
58
61
|
});
|
|
59
|
-
const currentRefreshToken = req.body.refresh_token || req.cookies[env_1.default
|
|
62
|
+
const currentRefreshToken = req.body.refresh_token || req.cookies[env_1.default['REFRESH_TOKEN_COOKIE_NAME']];
|
|
60
63
|
if (!currentRefreshToken) {
|
|
61
64
|
throw new exceptions_1.InvalidPayloadException(`"refresh_token" is required in either the JSON payload or Cookie`);
|
|
62
65
|
}
|
|
@@ -66,37 +69,40 @@ router.post('/refresh', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
66
69
|
data: { access_token: accessToken, expires },
|
|
67
70
|
};
|
|
68
71
|
if (mode === 'json') {
|
|
69
|
-
payload
|
|
72
|
+
payload['data']['refresh_token'] = refreshToken;
|
|
70
73
|
}
|
|
71
74
|
if (mode === 'cookie') {
|
|
72
|
-
res.cookie(env_1.default
|
|
75
|
+
res.cookie(env_1.default['REFRESH_TOKEN_COOKIE_NAME'], refreshToken, constants_1.COOKIE_OPTIONS);
|
|
73
76
|
}
|
|
74
|
-
res.locals
|
|
77
|
+
res.locals['payload'] = payload;
|
|
75
78
|
return next();
|
|
76
79
|
}), respond_1.respond);
|
|
77
80
|
router.post('/logout', (0, async_handler_1.default)(async (req, res, next) => {
|
|
78
|
-
var _a;
|
|
79
81
|
const accountability = {
|
|
80
82
|
ip: (0, get_ip_from_req_1.getIPFromReq)(req),
|
|
81
|
-
userAgent: req.get('user-agent'),
|
|
82
|
-
origin: req.get('origin'),
|
|
83
83
|
role: null,
|
|
84
84
|
};
|
|
85
|
+
const userAgent = req.get('user-agent');
|
|
86
|
+
if (userAgent)
|
|
87
|
+
accountability.userAgent = userAgent;
|
|
88
|
+
const origin = req.get('origin');
|
|
89
|
+
if (origin)
|
|
90
|
+
accountability.origin = origin;
|
|
85
91
|
const authenticationService = new services_1.AuthenticationService({
|
|
86
92
|
accountability: accountability,
|
|
87
93
|
schema: req.schema,
|
|
88
94
|
});
|
|
89
|
-
const currentRefreshToken = req.body.refresh_token || req.cookies[env_1.default
|
|
95
|
+
const currentRefreshToken = req.body.refresh_token || req.cookies[env_1.default['REFRESH_TOKEN_COOKIE_NAME']];
|
|
90
96
|
if (!currentRefreshToken) {
|
|
91
97
|
throw new exceptions_1.InvalidPayloadException(`"refresh_token" is required in either the JSON payload or Cookie`);
|
|
92
98
|
}
|
|
93
99
|
await authenticationService.logout(currentRefreshToken);
|
|
94
|
-
if (req.cookies[env_1.default
|
|
95
|
-
res.clearCookie(env_1.default
|
|
100
|
+
if (req.cookies[env_1.default['REFRESH_TOKEN_COOKIE_NAME']]) {
|
|
101
|
+
res.clearCookie(env_1.default['REFRESH_TOKEN_COOKIE_NAME'], {
|
|
96
102
|
httpOnly: true,
|
|
97
|
-
domain: env_1.default
|
|
98
|
-
secure:
|
|
99
|
-
sameSite: env_1.default
|
|
103
|
+
domain: env_1.default['REFRESH_TOKEN_COOKIE_DOMAIN'],
|
|
104
|
+
secure: env_1.default['REFRESH_TOKEN_COOKIE_SECURE'] ?? false,
|
|
105
|
+
sameSite: env_1.default['REFRESH_TOKEN_COOKIE_SAME_SITE'] || 'strict',
|
|
100
106
|
});
|
|
101
107
|
}
|
|
102
108
|
return next();
|
|
@@ -107,10 +113,14 @@ router.post('/password/request', (0, async_handler_1.default)(async (req, res, n
|
|
|
107
113
|
}
|
|
108
114
|
const accountability = {
|
|
109
115
|
ip: (0, get_ip_from_req_1.getIPFromReq)(req),
|
|
110
|
-
userAgent: req.get('user-agent'),
|
|
111
|
-
origin: req.get('origin'),
|
|
112
116
|
role: null,
|
|
113
117
|
};
|
|
118
|
+
const userAgent = req.get('user-agent');
|
|
119
|
+
if (userAgent)
|
|
120
|
+
accountability.userAgent = userAgent;
|
|
121
|
+
const origin = req.get('origin');
|
|
122
|
+
if (origin)
|
|
123
|
+
accountability.origin = origin;
|
|
114
124
|
const service = new services_1.UsersService({ accountability, schema: req.schema });
|
|
115
125
|
try {
|
|
116
126
|
await service.requestPasswordReset(req.body.email, req.body.reset_url || null);
|
|
@@ -135,18 +145,22 @@ router.post('/password/reset', (0, async_handler_1.default)(async (req, res, nex
|
|
|
135
145
|
}
|
|
136
146
|
const accountability = {
|
|
137
147
|
ip: (0, get_ip_from_req_1.getIPFromReq)(req),
|
|
138
|
-
userAgent: req.get('user-agent'),
|
|
139
|
-
origin: req.get('origin'),
|
|
140
148
|
role: null,
|
|
141
149
|
};
|
|
150
|
+
const userAgent = req.get('user-agent');
|
|
151
|
+
if (userAgent)
|
|
152
|
+
accountability.userAgent = userAgent;
|
|
153
|
+
const origin = req.get('origin');
|
|
154
|
+
if (origin)
|
|
155
|
+
accountability.origin = origin;
|
|
142
156
|
const service = new services_1.UsersService({ accountability, schema: req.schema });
|
|
143
157
|
await service.resetPassword(req.body.token, req.body.password);
|
|
144
158
|
return next();
|
|
145
159
|
}), respond_1.respond);
|
|
146
160
|
router.get('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
147
|
-
res.locals
|
|
161
|
+
res.locals['payload'] = {
|
|
148
162
|
data: (0, get_auth_providers_1.getAuthProviders)(),
|
|
149
|
-
disableDefault: env_1.default
|
|
163
|
+
disableDefault: env_1.default['AUTH_DISABLE_DEFAULT'],
|
|
150
164
|
};
|
|
151
165
|
return next();
|
|
152
166
|
}), respond_1.respond);
|
|
@@ -18,12 +18,12 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
18
18
|
if (Array.isArray(req.body)) {
|
|
19
19
|
const collectionKey = await collectionsService.createMany(req.body);
|
|
20
20
|
const records = await collectionsService.readMany(collectionKey);
|
|
21
|
-
res.locals
|
|
21
|
+
res.locals['payload'] = { data: records || null };
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
24
|
const collectionKey = await collectionsService.createOne(req.body);
|
|
25
25
|
const record = await collectionsService.readOne(collectionKey);
|
|
26
|
-
res.locals
|
|
26
|
+
res.locals['payload'] = { data: record || null };
|
|
27
27
|
}
|
|
28
28
|
return next();
|
|
29
29
|
}), respond_1.respond);
|
|
@@ -44,7 +44,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
44
44
|
result = await collectionsService.readByQuery();
|
|
45
45
|
}
|
|
46
46
|
const meta = await metaService.getMetaForQuery('directus_collections', {});
|
|
47
|
-
res.locals
|
|
47
|
+
res.locals['payload'] = { data: result, meta };
|
|
48
48
|
return next();
|
|
49
49
|
});
|
|
50
50
|
router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
|
|
@@ -54,8 +54,8 @@ router.get('/:collection', (0, async_handler_1.default)(async (req, res, next) =
|
|
|
54
54
|
accountability: req.accountability,
|
|
55
55
|
schema: req.schema,
|
|
56
56
|
});
|
|
57
|
-
const collection = await collectionsService.readOne(req.params
|
|
58
|
-
res.locals
|
|
57
|
+
const collection = await collectionsService.readOne(req.params['collection']);
|
|
58
|
+
res.locals['payload'] = { data: collection || null };
|
|
59
59
|
return next();
|
|
60
60
|
}), respond_1.respond);
|
|
61
61
|
router.patch('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -66,7 +66,7 @@ router.patch('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
66
66
|
const collectionKeys = await collectionsService.updateBatch(req.body);
|
|
67
67
|
try {
|
|
68
68
|
const collections = await collectionsService.readMany(collectionKeys);
|
|
69
|
-
res.locals
|
|
69
|
+
res.locals['payload'] = { data: collections || null };
|
|
70
70
|
}
|
|
71
71
|
catch (error) {
|
|
72
72
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -81,10 +81,10 @@ router.patch('/:collection', (0, async_handler_1.default)(async (req, res, next)
|
|
|
81
81
|
accountability: req.accountability,
|
|
82
82
|
schema: req.schema,
|
|
83
83
|
});
|
|
84
|
-
await collectionsService.updateOne(req.params
|
|
84
|
+
await collectionsService.updateOne(req.params['collection'], req.body);
|
|
85
85
|
try {
|
|
86
|
-
const collection = await collectionsService.readOne(req.params
|
|
87
|
-
res.locals
|
|
86
|
+
const collection = await collectionsService.readOne(req.params['collection']);
|
|
87
|
+
res.locals['payload'] = { data: collection || null };
|
|
88
88
|
}
|
|
89
89
|
catch (error) {
|
|
90
90
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -99,7 +99,7 @@ router.delete('/:collection', (0, async_handler_1.default)(async (req, res, next
|
|
|
99
99
|
accountability: req.accountability,
|
|
100
100
|
schema: req.schema,
|
|
101
101
|
});
|
|
102
|
-
await collectionsService.deleteOne(req.params
|
|
102
|
+
await collectionsService.deleteOne(req.params['collection']);
|
|
103
103
|
return next();
|
|
104
104
|
}), respond_1.respond);
|
|
105
105
|
exports.default = router;
|
|
@@ -10,6 +10,7 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
|
|
|
10
10
|
const validate_batch_1 = require("../middleware/validate-batch");
|
|
11
11
|
const services_1 = require("../services");
|
|
12
12
|
const async_handler_1 = __importDefault(require("../utils/async-handler"));
|
|
13
|
+
const sanitize_query_1 = require("../utils/sanitize-query");
|
|
13
14
|
const router = express_1.default.Router();
|
|
14
15
|
router.use((0, use_collection_1.default)('directus_dashboards'));
|
|
15
16
|
router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -29,11 +30,11 @@ router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
29
30
|
try {
|
|
30
31
|
if (Array.isArray(req.body)) {
|
|
31
32
|
const items = await service.readMany(savedKeys, req.sanitizedQuery);
|
|
32
|
-
res.locals
|
|
33
|
+
res.locals['payload'] = { data: items };
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
36
|
const item = await service.readOne(savedKeys[0], req.sanitizedQuery);
|
|
36
|
-
res.locals
|
|
37
|
+
res.locals['payload'] = { data: item };
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
catch (error) {
|
|
@@ -55,7 +56,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
55
56
|
});
|
|
56
57
|
const records = await service.readByQuery(req.sanitizedQuery);
|
|
57
58
|
const meta = await metaService.getMetaForQuery(req.collection, req.sanitizedQuery);
|
|
58
|
-
res.locals
|
|
59
|
+
res.locals['payload'] = { data: records || null, meta };
|
|
59
60
|
return next();
|
|
60
61
|
});
|
|
61
62
|
router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
|
|
@@ -65,8 +66,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
65
66
|
accountability: req.accountability,
|
|
66
67
|
schema: req.schema,
|
|
67
68
|
});
|
|
68
|
-
const record = await service.readOne(req.params
|
|
69
|
-
res.locals
|
|
69
|
+
const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
|
|
70
|
+
res.locals['payload'] = { data: record || null };
|
|
70
71
|
return next();
|
|
71
72
|
}), respond_1.respond);
|
|
72
73
|
router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -82,11 +83,12 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
|
|
|
82
83
|
keys = await service.updateMany(req.body.keys, req.body.data);
|
|
83
84
|
}
|
|
84
85
|
else {
|
|
85
|
-
|
|
86
|
+
const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
|
|
87
|
+
keys = await service.updateByQuery(sanitizedQuery, req.body.data);
|
|
86
88
|
}
|
|
87
89
|
try {
|
|
88
90
|
const result = await service.readMany(keys, req.sanitizedQuery);
|
|
89
|
-
res.locals
|
|
91
|
+
res.locals['payload'] = { data: result };
|
|
90
92
|
}
|
|
91
93
|
catch (error) {
|
|
92
94
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -101,10 +103,10 @@ router.patch('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
101
103
|
accountability: req.accountability,
|
|
102
104
|
schema: req.schema,
|
|
103
105
|
});
|
|
104
|
-
const primaryKey = await service.updateOne(req.params
|
|
106
|
+
const primaryKey = await service.updateOne(req.params['pk'], req.body);
|
|
105
107
|
try {
|
|
106
108
|
const item = await service.readOne(primaryKey, req.sanitizedQuery);
|
|
107
|
-
res.locals
|
|
109
|
+
res.locals['payload'] = { data: item || null };
|
|
108
110
|
}
|
|
109
111
|
catch (error) {
|
|
110
112
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -126,7 +128,8 @@ router.delete('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
126
128
|
await service.deleteMany(req.body.keys);
|
|
127
129
|
}
|
|
128
130
|
else {
|
|
129
|
-
|
|
131
|
+
const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
|
|
132
|
+
await service.deleteByQuery(sanitizedQuery);
|
|
130
133
|
}
|
|
131
134
|
return next();
|
|
132
135
|
}), respond_1.respond);
|
|
@@ -135,7 +138,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
135
138
|
accountability: req.accountability,
|
|
136
139
|
schema: req.schema,
|
|
137
140
|
});
|
|
138
|
-
await service.deleteOne(req.params
|
|
141
|
+
await service.deleteOne(req.params['pk']);
|
|
139
142
|
return next();
|
|
140
143
|
}), respond_1.respond);
|
|
141
144
|
exports.default = router;
|
|
@@ -15,13 +15,13 @@ const get_cache_headers_1 = require("../utils/get-cache-headers");
|
|
|
15
15
|
const get_milliseconds_1 = require("../utils/get-milliseconds");
|
|
16
16
|
const router = (0, express_1.Router)();
|
|
17
17
|
router.get('/:type', (0, async_handler_1.default)(async (req, res, next) => {
|
|
18
|
-
const type = (0, utils_1.depluralize)(req.params
|
|
18
|
+
const type = (0, utils_1.depluralize)(req.params['type']);
|
|
19
19
|
if (!(0, utils_1.isIn)(type, constants_1.EXTENSION_TYPES)) {
|
|
20
20
|
throw new exceptions_1.RouteNotFoundException(req.path);
|
|
21
21
|
}
|
|
22
22
|
const extensionManager = (0, extensions_1.getExtensionManager)();
|
|
23
23
|
const extensions = extensionManager.getExtensionsList(type);
|
|
24
|
-
res.locals
|
|
24
|
+
res.locals['payload'] = {
|
|
25
25
|
data: extensions,
|
|
26
26
|
};
|
|
27
27
|
return next();
|
|
@@ -33,7 +33,7 @@ router.get('/sources/index.js', (0, async_handler_1.default)(async (req, res) =>
|
|
|
33
33
|
throw new exceptions_1.RouteNotFoundException(req.path);
|
|
34
34
|
}
|
|
35
35
|
res.setHeader('Content-Type', 'application/javascript; charset=UTF-8');
|
|
36
|
-
res.setHeader('Cache-Control', (0, get_cache_headers_1.getCacheControlHeader)(req, (0, get_milliseconds_1.getMilliseconds)(env_1.default
|
|
36
|
+
res.setHeader('Cache-Control', (0, get_cache_headers_1.getCacheControlHeader)(req, (0, get_milliseconds_1.getMilliseconds)(env_1.default['EXTENSIONS_CACHE_TTL']), false, false));
|
|
37
37
|
res.setHeader('Vary', 'Origin, Cache-Control');
|
|
38
38
|
res.end(extensionSource);
|
|
39
39
|
}));
|
|
@@ -3,15 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const constants_1 = require("@directus/shared/constants");
|
|
6
7
|
const express_1 = require("express");
|
|
7
8
|
const joi_1 = __importDefault(require("joi"));
|
|
8
|
-
const
|
|
9
|
+
const constants_2 = require("../constants");
|
|
9
10
|
const exceptions_1 = require("../exceptions");
|
|
10
11
|
const collection_exists_1 = __importDefault(require("../middleware/collection-exists"));
|
|
11
12
|
const respond_1 = require("../middleware/respond");
|
|
12
13
|
const use_collection_1 = __importDefault(require("../middleware/use-collection"));
|
|
13
14
|
const fields_1 = require("../services/fields");
|
|
14
|
-
const constants_2 = require("@directus/shared/constants");
|
|
15
15
|
const async_handler_1 = __importDefault(require("../utils/async-handler"));
|
|
16
16
|
const router = (0, express_1.Router)();
|
|
17
17
|
router.use((0, use_collection_1.default)('directus_fields'));
|
|
@@ -21,7 +21,7 @@ router.get('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
21
21
|
schema: req.schema,
|
|
22
22
|
});
|
|
23
23
|
const fields = await service.readAll();
|
|
24
|
-
res.locals
|
|
24
|
+
res.locals['payload'] = { data: fields || null };
|
|
25
25
|
return next();
|
|
26
26
|
}), respond_1.respond);
|
|
27
27
|
router.get('/:collection', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -29,8 +29,8 @@ router.get('/:collection', collection_exists_1.default, (0, async_handler_1.defa
|
|
|
29
29
|
accountability: req.accountability,
|
|
30
30
|
schema: req.schema,
|
|
31
31
|
});
|
|
32
|
-
const fields = await service.readAll(req.params
|
|
33
|
-
res.locals
|
|
32
|
+
const fields = await service.readAll(req.params['collection']);
|
|
33
|
+
res.locals['payload'] = { data: fields || null };
|
|
34
34
|
return next();
|
|
35
35
|
}), respond_1.respond);
|
|
36
36
|
router.get('/:collection/:field', collection_exists_1.default, (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -38,15 +38,15 @@ router.get('/:collection/:field', collection_exists_1.default, (0, async_handler
|
|
|
38
38
|
accountability: req.accountability,
|
|
39
39
|
schema: req.schema,
|
|
40
40
|
});
|
|
41
|
-
const field = await service.readOne(req.params
|
|
42
|
-
res.locals
|
|
41
|
+
const field = await service.readOne(req.params['collection'], req.params['field']);
|
|
42
|
+
res.locals['payload'] = { data: field || null };
|
|
43
43
|
return next();
|
|
44
44
|
}), respond_1.respond);
|
|
45
45
|
const newFieldSchema = joi_1.default.object({
|
|
46
46
|
collection: joi_1.default.string().optional(),
|
|
47
47
|
field: joi_1.default.string().required(),
|
|
48
48
|
type: joi_1.default.string()
|
|
49
|
-
.valid(...
|
|
49
|
+
.valid(...constants_1.TYPES, ...constants_2.ALIAS_TYPES)
|
|
50
50
|
.allow(null)
|
|
51
51
|
.optional(),
|
|
52
52
|
schema: joi_1.default.object({
|
|
@@ -68,10 +68,10 @@ router.post('/:collection', collection_exists_1.default, (0, async_handler_1.def
|
|
|
68
68
|
throw new exceptions_1.InvalidPayloadException(error.message);
|
|
69
69
|
}
|
|
70
70
|
const field = req.body;
|
|
71
|
-
await service.createField(req.params
|
|
71
|
+
await service.createField(req.params['collection'], field);
|
|
72
72
|
try {
|
|
73
|
-
const createdField = await service.readOne(req.params
|
|
74
|
-
res.locals
|
|
73
|
+
const createdField = await service.readOne(req.params['collection'], field.field);
|
|
74
|
+
res.locals['payload'] = { data: createdField || null };
|
|
75
75
|
}
|
|
76
76
|
catch (error) {
|
|
77
77
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -90,14 +90,14 @@ router.patch('/:collection', collection_exists_1.default, (0, async_handler_1.de
|
|
|
90
90
|
throw new exceptions_1.InvalidPayloadException('Submitted body has to be an array.');
|
|
91
91
|
}
|
|
92
92
|
for (const field of req.body) {
|
|
93
|
-
await service.updateField(req.params
|
|
93
|
+
await service.updateField(req.params['collection'], field);
|
|
94
94
|
}
|
|
95
95
|
try {
|
|
96
96
|
const results = [];
|
|
97
97
|
for (const field of req.body) {
|
|
98
|
-
const updatedField = await service.readOne(req.params
|
|
98
|
+
const updatedField = await service.readOne(req.params['collection'], field.field);
|
|
99
99
|
results.push(updatedField);
|
|
100
|
-
res.locals
|
|
100
|
+
res.locals['payload'] = { data: results || null };
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
catch (error) {
|
|
@@ -110,7 +110,7 @@ router.patch('/:collection', collection_exists_1.default, (0, async_handler_1.de
|
|
|
110
110
|
}), respond_1.respond);
|
|
111
111
|
const updateSchema = joi_1.default.object({
|
|
112
112
|
type: joi_1.default.string()
|
|
113
|
-
.valid(...
|
|
113
|
+
.valid(...constants_1.TYPES, ...constants_2.ALIAS_TYPES)
|
|
114
114
|
.allow(null),
|
|
115
115
|
schema: joi_1.default.object({
|
|
116
116
|
default_value: joi_1.default.any(),
|
|
@@ -135,11 +135,11 @@ router.patch('/:collection/:field', collection_exists_1.default, (0, async_handl
|
|
|
135
135
|
}
|
|
136
136
|
const fieldData = req.body;
|
|
137
137
|
if (!fieldData.field)
|
|
138
|
-
fieldData.field = req.params
|
|
139
|
-
await service.updateField(req.params
|
|
138
|
+
fieldData.field = req.params['field'];
|
|
139
|
+
await service.updateField(req.params['collection'], fieldData);
|
|
140
140
|
try {
|
|
141
|
-
const updatedField = await service.readOne(req.params
|
|
142
|
-
res.locals
|
|
141
|
+
const updatedField = await service.readOne(req.params['collection'], req.params['field']);
|
|
142
|
+
res.locals['payload'] = { data: updatedField || null };
|
|
143
143
|
}
|
|
144
144
|
catch (error) {
|
|
145
145
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -154,7 +154,7 @@ router.delete('/:collection/:field', collection_exists_1.default, (0, async_hand
|
|
|
154
154
|
accountability: req.accountability,
|
|
155
155
|
schema: req.schema,
|
|
156
156
|
});
|
|
157
|
-
await service.deleteField(req.params
|
|
157
|
+
await service.deleteField(req.params['collection'], req.params['field']);
|
|
158
158
|
return next();
|
|
159
159
|
}), respond_1.respond);
|
|
160
160
|
exports.default = router;
|
|
@@ -18,6 +18,7 @@ const services_1 = require("../services");
|
|
|
18
18
|
const async_handler_1 = __importDefault(require("../utils/async-handler"));
|
|
19
19
|
// @ts-ignore
|
|
20
20
|
const format_title_1 = __importDefault(require("@directus/format-title"));
|
|
21
|
+
const sanitize_query_1 = require("../utils/sanitize-query");
|
|
21
22
|
const router = express_1.default.Router();
|
|
22
23
|
router.use((0, use_collection_1.default)('directus_files'));
|
|
23
24
|
const multipartHandler = (req, res, next) => {
|
|
@@ -36,13 +37,13 @@ const multipartHandler = (req, res, next) => {
|
|
|
36
37
|
const busboy = (0, busboy_1.default)({ headers, defParamCharset: 'utf8' });
|
|
37
38
|
const savedFiles = [];
|
|
38
39
|
const service = new services_1.FilesService({ accountability: req.accountability, schema: req.schema });
|
|
39
|
-
const existingPrimaryKey = req.params
|
|
40
|
+
const existingPrimaryKey = req.params['pk'] || undefined;
|
|
40
41
|
/**
|
|
41
42
|
* The order of the fields in multipart/form-data is important. We require that all fields
|
|
42
43
|
* are provided _before_ the files. This allows us to set the storage location, and create
|
|
43
44
|
* the row in directus_files async during the upload of the actual file.
|
|
44
45
|
*/
|
|
45
|
-
let disk = (0, utils_1.toArray)(env_1.default
|
|
46
|
+
let disk = (0, utils_1.toArray)(env_1.default['STORAGE_LOCATIONS'])[0];
|
|
46
47
|
let payload = {};
|
|
47
48
|
let fileCount = 0;
|
|
48
49
|
busboy.on('field', (fieldname, val) => {
|
|
@@ -63,12 +64,14 @@ const multipartHandler = (req, res, next) => {
|
|
|
63
64
|
return busboy.emit('error', new exceptions_1.InvalidPayloadException(`File is missing filename`));
|
|
64
65
|
}
|
|
65
66
|
fileCount++;
|
|
66
|
-
if (!
|
|
67
|
-
payload.title
|
|
67
|
+
if (!existingPrimaryKey) {
|
|
68
|
+
if (!payload.title) {
|
|
69
|
+
payload.title = (0, format_title_1.default)(path_1.default.parse(filename).name);
|
|
70
|
+
}
|
|
71
|
+
payload.filename_download = filename;
|
|
68
72
|
}
|
|
69
73
|
const payloadWithRequiredFields = {
|
|
70
74
|
...payload,
|
|
71
|
-
filename_download: filename,
|
|
72
75
|
type: mimeType,
|
|
73
76
|
storage: payload.storage || disk,
|
|
74
77
|
};
|
|
@@ -82,6 +85,7 @@ const multipartHandler = (req, res, next) => {
|
|
|
82
85
|
catch (error) {
|
|
83
86
|
busboy.emit('error', error);
|
|
84
87
|
}
|
|
88
|
+
return undefined;
|
|
85
89
|
});
|
|
86
90
|
busboy.on('error', (error) => {
|
|
87
91
|
next(error);
|
|
@@ -95,7 +99,7 @@ const multipartHandler = (req, res, next) => {
|
|
|
95
99
|
if (fileCount === 0) {
|
|
96
100
|
return next(new exceptions_1.InvalidPayloadException(`No files were included in the body`));
|
|
97
101
|
}
|
|
98
|
-
res.locals
|
|
102
|
+
res.locals['savedFiles'] = savedFiles;
|
|
99
103
|
return next();
|
|
100
104
|
}
|
|
101
105
|
}
|
|
@@ -108,7 +112,7 @@ router.post('/', (0, async_handler_1.default)(exports.multipartHandler), (0, asy
|
|
|
108
112
|
});
|
|
109
113
|
let keys = [];
|
|
110
114
|
if (req.is('multipart/form-data')) {
|
|
111
|
-
keys = res.locals
|
|
115
|
+
keys = res.locals['savedFiles'];
|
|
112
116
|
}
|
|
113
117
|
else {
|
|
114
118
|
keys = await service.createOne(req.body);
|
|
@@ -116,14 +120,14 @@ router.post('/', (0, async_handler_1.default)(exports.multipartHandler), (0, asy
|
|
|
116
120
|
try {
|
|
117
121
|
if (Array.isArray(keys) && keys.length > 1) {
|
|
118
122
|
const records = await service.readMany(keys, req.sanitizedQuery);
|
|
119
|
-
res.locals
|
|
123
|
+
res.locals['payload'] = {
|
|
120
124
|
data: records,
|
|
121
125
|
};
|
|
122
126
|
}
|
|
123
127
|
else {
|
|
124
128
|
const key = Array.isArray(keys) ? keys[0] : keys;
|
|
125
129
|
const record = await service.readOne(key, req.sanitizedQuery);
|
|
126
|
-
res.locals
|
|
130
|
+
res.locals['payload'] = {
|
|
127
131
|
data: record,
|
|
128
132
|
};
|
|
129
133
|
}
|
|
@@ -152,7 +156,7 @@ router.post('/import', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
152
156
|
const primaryKey = await service.importOne(req.body.url, req.body.data);
|
|
153
157
|
try {
|
|
154
158
|
const record = await service.readOne(primaryKey, req.sanitizedQuery);
|
|
155
|
-
res.locals
|
|
159
|
+
res.locals['payload'] = { data: record || null };
|
|
156
160
|
}
|
|
157
161
|
catch (error) {
|
|
158
162
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -182,7 +186,7 @@ const readHandler = (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
182
186
|
result = await service.readByQuery(req.sanitizedQuery);
|
|
183
187
|
}
|
|
184
188
|
const meta = await metaService.getMetaForQuery('directus_files', req.sanitizedQuery);
|
|
185
|
-
res.locals
|
|
189
|
+
res.locals['payload'] = { data: result, meta };
|
|
186
190
|
return next();
|
|
187
191
|
});
|
|
188
192
|
router.get('/', (0, validate_batch_1.validateBatch)('read'), readHandler, respond_1.respond);
|
|
@@ -192,8 +196,8 @@ router.get('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
192
196
|
accountability: req.accountability,
|
|
193
197
|
schema: req.schema,
|
|
194
198
|
});
|
|
195
|
-
const record = await service.readOne(req.params
|
|
196
|
-
res.locals
|
|
199
|
+
const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
|
|
200
|
+
res.locals['payload'] = { data: record || null };
|
|
197
201
|
return next();
|
|
198
202
|
}), respond_1.respond);
|
|
199
203
|
router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handler_1.default)(async (req, res, next) => {
|
|
@@ -209,11 +213,12 @@ router.patch('/', (0, validate_batch_1.validateBatch)('update'), (0, async_handl
|
|
|
209
213
|
keys = await service.updateMany(req.body.keys, req.body.data);
|
|
210
214
|
}
|
|
211
215
|
else {
|
|
212
|
-
|
|
216
|
+
const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
|
|
217
|
+
keys = await service.updateByQuery(sanitizedQuery, req.body.data);
|
|
213
218
|
}
|
|
214
219
|
try {
|
|
215
220
|
const result = await service.readMany(keys, req.sanitizedQuery);
|
|
216
|
-
res.locals
|
|
221
|
+
res.locals['payload'] = { data: result || null };
|
|
217
222
|
}
|
|
218
223
|
catch (error) {
|
|
219
224
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -228,10 +233,10 @@ router.patch('/:pk', (0, async_handler_1.default)(exports.multipartHandler), (0,
|
|
|
228
233
|
accountability: req.accountability,
|
|
229
234
|
schema: req.schema,
|
|
230
235
|
});
|
|
231
|
-
await service.updateOne(req.params
|
|
236
|
+
await service.updateOne(req.params['pk'], req.body);
|
|
232
237
|
try {
|
|
233
|
-
const record = await service.readOne(req.params
|
|
234
|
-
res.locals
|
|
238
|
+
const record = await service.readOne(req.params['pk'], req.sanitizedQuery);
|
|
239
|
+
res.locals['payload'] = { data: record || null };
|
|
235
240
|
}
|
|
236
241
|
catch (error) {
|
|
237
242
|
if (error instanceof exceptions_1.ForbiddenException) {
|
|
@@ -253,7 +258,8 @@ router.delete('/', (0, validate_batch_1.validateBatch)('delete'), (0, async_hand
|
|
|
253
258
|
await service.deleteMany(req.body.keys);
|
|
254
259
|
}
|
|
255
260
|
else {
|
|
256
|
-
|
|
261
|
+
const sanitizedQuery = (0, sanitize_query_1.sanitizeQuery)(req.body.query, req.accountability);
|
|
262
|
+
await service.deleteByQuery(sanitizedQuery);
|
|
257
263
|
}
|
|
258
264
|
return next();
|
|
259
265
|
}), respond_1.respond);
|
|
@@ -262,7 +268,7 @@ router.delete('/:pk', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
262
268
|
accountability: req.accountability,
|
|
263
269
|
schema: req.schema,
|
|
264
270
|
});
|
|
265
|
-
await service.deleteOne(req.params
|
|
271
|
+
await service.deleteOne(req.params['pk']);
|
|
266
272
|
return next();
|
|
267
273
|
}), respond_1.respond);
|
|
268
274
|
exports.default = router;
|