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/app.js
CHANGED
|
@@ -44,9 +44,9 @@ const folders_1 = __importDefault(require("./controllers/folders"));
|
|
|
44
44
|
const graphql_1 = __importDefault(require("./controllers/graphql"));
|
|
45
45
|
const items_1 = __importDefault(require("./controllers/items"));
|
|
46
46
|
const not_found_1 = __importDefault(require("./controllers/not-found"));
|
|
47
|
-
const panels_1 = __importDefault(require("./controllers/panels"));
|
|
48
47
|
const notifications_1 = __importDefault(require("./controllers/notifications"));
|
|
49
48
|
const operations_1 = __importDefault(require("./controllers/operations"));
|
|
49
|
+
const panels_1 = __importDefault(require("./controllers/panels"));
|
|
50
50
|
const permissions_1 = __importDefault(require("./controllers/permissions"));
|
|
51
51
|
const presets_1 = __importDefault(require("./controllers/presets"));
|
|
52
52
|
const relations_1 = __importDefault(require("./controllers/relations"));
|
|
@@ -55,10 +55,10 @@ const roles_1 = __importDefault(require("./controllers/roles"));
|
|
|
55
55
|
const schema_1 = __importDefault(require("./controllers/schema"));
|
|
56
56
|
const server_1 = __importDefault(require("./controllers/server"));
|
|
57
57
|
const settings_1 = __importDefault(require("./controllers/settings"));
|
|
58
|
+
const shares_1 = __importDefault(require("./controllers/shares"));
|
|
58
59
|
const users_1 = __importDefault(require("./controllers/users"));
|
|
59
60
|
const utils_1 = __importDefault(require("./controllers/utils"));
|
|
60
61
|
const webhooks_1 = __importDefault(require("./controllers/webhooks"));
|
|
61
|
-
const shares_1 = __importDefault(require("./controllers/shares"));
|
|
62
62
|
const database_1 = require("./database");
|
|
63
63
|
const emitter_1 = __importDefault(require("./emitter"));
|
|
64
64
|
const env_1 = __importDefault(require("./env"));
|
|
@@ -67,28 +67,29 @@ const extensions_2 = require("./extensions");
|
|
|
67
67
|
const flows_2 = require("./flows");
|
|
68
68
|
const logger_1 = __importStar(require("./logger"));
|
|
69
69
|
const authenticate_1 = __importDefault(require("./middleware/authenticate"));
|
|
70
|
-
const get_permissions_1 = __importDefault(require("./middleware/get-permissions"));
|
|
71
70
|
const cache_1 = __importDefault(require("./middleware/cache"));
|
|
72
71
|
const check_ip_1 = require("./middleware/check-ip");
|
|
73
72
|
const cors_1 = __importDefault(require("./middleware/cors"));
|
|
74
73
|
const error_handler_1 = __importDefault(require("./middleware/error-handler"));
|
|
75
74
|
const extract_token_1 = __importDefault(require("./middleware/extract-token"));
|
|
76
|
-
const
|
|
75
|
+
const get_permissions_1 = __importDefault(require("./middleware/get-permissions"));
|
|
76
|
+
const rate_limiter_global_1 = __importDefault(require("./middleware/rate-limiter-global"));
|
|
77
|
+
const rate_limiter_ip_1 = __importDefault(require("./middleware/rate-limiter-ip"));
|
|
77
78
|
const sanitize_query_1 = __importDefault(require("./middleware/sanitize-query"));
|
|
78
79
|
const schema_2 = __importDefault(require("./middleware/schema"));
|
|
80
|
+
const lodash_1 = require("lodash");
|
|
81
|
+
const auth_2 = require("./auth");
|
|
82
|
+
const cache_2 = require("./cache");
|
|
83
|
+
const get_config_from_env_1 = require("./utils/get-config-from-env");
|
|
79
84
|
const track_1 = require("./utils/track");
|
|
85
|
+
const url_1 = require("./utils/url");
|
|
80
86
|
const validate_env_1 = require("./utils/validate-env");
|
|
81
87
|
const validate_storage_1 = require("./utils/validate-storage");
|
|
82
88
|
const webhooks_2 = require("./webhooks");
|
|
83
|
-
const cache_2 = require("./cache");
|
|
84
|
-
const auth_2 = require("./auth");
|
|
85
|
-
const url_1 = require("./utils/url");
|
|
86
|
-
const get_config_from_env_1 = require("./utils/get-config-from-env");
|
|
87
|
-
const lodash_1 = require("lodash");
|
|
88
89
|
async function createApp() {
|
|
89
90
|
const helmet = await import('helmet');
|
|
90
91
|
(0, validate_env_1.validateEnv)(['KEY', 'SECRET']);
|
|
91
|
-
if (!new url_1.Url(env_1.default
|
|
92
|
+
if (!new url_1.Url(env_1.default['PUBLIC_URL']).isAbsolute()) {
|
|
92
93
|
logger_1.default.warn('PUBLIC_URL should be a full URL');
|
|
93
94
|
}
|
|
94
95
|
await (0, validate_storage_1.validateStorage)();
|
|
@@ -109,7 +110,7 @@ async function createApp() {
|
|
|
109
110
|
await flowManager.initialize();
|
|
110
111
|
const app = (0, express_1.default)();
|
|
111
112
|
app.disable('x-powered-by');
|
|
112
|
-
app.set('trust proxy', env_1.default
|
|
113
|
+
app.set('trust proxy', env_1.default['IP_TRUST_PROXY']);
|
|
113
114
|
app.set('query parser', (str) => qs_1.default.parse(str, { depth: 10 }));
|
|
114
115
|
app.use(helmet.contentSecurityPolicy((0, lodash_1.merge)({
|
|
115
116
|
useDefaults: true,
|
|
@@ -129,7 +130,7 @@ async function createApp() {
|
|
|
129
130
|
connectSrc: ["'self'", 'https://*'],
|
|
130
131
|
},
|
|
131
132
|
}, (0, get_config_from_env_1.getConfigFromEnv)('CONTENT_SECURITY_POLICY_'))));
|
|
132
|
-
if (env_1.default
|
|
133
|
+
if (env_1.default['HSTS_ENABLED']) {
|
|
133
134
|
app.use(helmet.hsts((0, get_config_from_env_1.getConfigFromEnv)('HSTS_', ['HSTS_ENABLED'])));
|
|
134
135
|
}
|
|
135
136
|
await emitter_1.default.emitInit('app.before', { app });
|
|
@@ -139,12 +140,12 @@ async function createApp() {
|
|
|
139
140
|
res.setHeader('X-Powered-By', 'Directus');
|
|
140
141
|
next();
|
|
141
142
|
});
|
|
142
|
-
if (env_1.default
|
|
143
|
+
if (env_1.default['CORS_ENABLED'] === true) {
|
|
143
144
|
app.use(cors_1.default);
|
|
144
145
|
}
|
|
145
146
|
app.use((req, res, next) => {
|
|
146
147
|
express_1.default.json({
|
|
147
|
-
limit: env_1.default
|
|
148
|
+
limit: env_1.default['MAX_PAYLOAD_SIZE'],
|
|
148
149
|
})(req, res, (err) => {
|
|
149
150
|
if (err) {
|
|
150
151
|
return next(new exceptions_1.InvalidPayloadException(err.message));
|
|
@@ -155,8 +156,8 @@ async function createApp() {
|
|
|
155
156
|
app.use((0, cookie_parser_1.default)());
|
|
156
157
|
app.use(extract_token_1.default);
|
|
157
158
|
app.get('/', (_req, res, next) => {
|
|
158
|
-
if (env_1.default
|
|
159
|
-
res.redirect(env_1.default
|
|
159
|
+
if (env_1.default['ROOT_REDIRECT']) {
|
|
160
|
+
res.redirect(env_1.default['ROOT_REDIRECT']);
|
|
160
161
|
}
|
|
161
162
|
else {
|
|
162
163
|
next();
|
|
@@ -165,11 +166,11 @@ async function createApp() {
|
|
|
165
166
|
app.get('/robots.txt', (_, res) => {
|
|
166
167
|
res.set('Content-Type', 'text/plain');
|
|
167
168
|
res.status(200);
|
|
168
|
-
res.send(env_1.default
|
|
169
|
+
res.send(env_1.default['ROBOTS_TXT']);
|
|
169
170
|
});
|
|
170
|
-
if (env_1.default
|
|
171
|
+
if (env_1.default['SERVE_APP']) {
|
|
171
172
|
const adminPath = require.resolve('@directus/app');
|
|
172
|
-
const adminUrl = new url_1.Url(env_1.default
|
|
173
|
+
const adminUrl = new url_1.Url(env_1.default['PUBLIC_URL']).addPath('admin');
|
|
173
174
|
const embeds = extensionManager.getEmbeds();
|
|
174
175
|
// Set the App's base path according to the APIs public URL
|
|
175
176
|
const html = await fs_extra_1.default.readFile(adminPath, 'utf8');
|
|
@@ -191,8 +192,11 @@ async function createApp() {
|
|
|
191
192
|
app.use('/admin/*', sendHtml);
|
|
192
193
|
}
|
|
193
194
|
// use the rate limiter - all routes for now
|
|
194
|
-
if (env_1.default
|
|
195
|
-
app.use(
|
|
195
|
+
if (env_1.default['RATE_LIMITER_GLOBAL_ENABLED'] === true) {
|
|
196
|
+
app.use(rate_limiter_global_1.default);
|
|
197
|
+
}
|
|
198
|
+
if (env_1.default['RATE_LIMITER_ENABLED'] === true) {
|
|
199
|
+
app.use(rate_limiter_ip_1.default);
|
|
196
200
|
}
|
|
197
201
|
app.get('/server/ping', (req, res) => res.send('pong'));
|
|
198
202
|
app.use(authenticate_1.default);
|
package/dist/auth/auth.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SchemaOverview } from '@directus/shared/types';
|
|
2
|
-
import { Knex } from 'knex';
|
|
3
|
-
import { AuthDriverOptions, User } from '../types';
|
|
1
|
+
import type { SchemaOverview } from '@directus/shared/types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
import type { AuthDriverOptions, User } from '../types';
|
|
4
4
|
export declare abstract class AuthDriver {
|
|
5
5
|
knex: Knex;
|
|
6
6
|
schema: SchemaOverview;
|
package/dist/auth/auth.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
2
|
import { Client } from 'ldapjs';
|
|
3
3
|
import { UsersService } from '../../services';
|
|
4
|
-
import { AuthDriverOptions, User } from '../../types';
|
|
4
|
+
import type { AuthDriverOptions, User } from '../../types';
|
|
5
5
|
import { AuthDriver } from '../auth';
|
|
6
6
|
export declare class LDAPAuthDriver extends AuthDriver {
|
|
7
7
|
bindClient: Client;
|
|
@@ -45,18 +45,20 @@ const auth_1 = require("../auth");
|
|
|
45
45
|
// 0x800000: PASSWORD_EXPIRED
|
|
46
46
|
const INVALID_ACCOUNT_FLAGS = 0x800012;
|
|
47
47
|
class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
48
|
+
bindClient;
|
|
49
|
+
usersService;
|
|
50
|
+
config;
|
|
48
51
|
constructor(options, config) {
|
|
49
|
-
var _a;
|
|
50
52
|
super(options, config);
|
|
51
53
|
const { bindDn, bindPassword, userDn, provider, clientUrl } = config;
|
|
52
54
|
if (bindDn === undefined ||
|
|
53
55
|
bindPassword === undefined ||
|
|
54
56
|
!userDn ||
|
|
55
57
|
!provider ||
|
|
56
|
-
(!clientUrl && !
|
|
58
|
+
(!clientUrl && !config['client']?.socketPath)) {
|
|
57
59
|
throw new exceptions_1.InvalidConfigException('Invalid provider config', { provider });
|
|
58
60
|
}
|
|
59
|
-
const clientConfig = typeof config
|
|
61
|
+
const clientConfig = typeof config['client'] === 'object' ? config['client'] : {};
|
|
60
62
|
this.bindClient = ldapjs_1.default.createClient({ url: clientUrl, reconnect: true, ...clientConfig });
|
|
61
63
|
this.bindClient.on('error', (err) => {
|
|
62
64
|
logger_1.default.warn(err);
|
|
@@ -95,7 +97,7 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
95
97
|
});
|
|
96
98
|
res.on('end', (result) => {
|
|
97
99
|
// Handle edge case where authenticated bind user cannot read their own DN
|
|
98
|
-
if (
|
|
100
|
+
if (result?.status === 0) {
|
|
99
101
|
reject(new exceptions_1.UnexpectedResponseException('Failed to find bind user record'));
|
|
100
102
|
}
|
|
101
103
|
});
|
|
@@ -104,9 +106,9 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
104
106
|
}
|
|
105
107
|
async fetchUserInfo(baseDn, filter, scope) {
|
|
106
108
|
let { firstNameAttribute, lastNameAttribute, mailAttribute } = this.config;
|
|
107
|
-
firstNameAttribute
|
|
108
|
-
lastNameAttribute
|
|
109
|
-
mailAttribute
|
|
109
|
+
firstNameAttribute ??= 'givenName';
|
|
110
|
+
lastNameAttribute ??= 'sn';
|
|
111
|
+
mailAttribute ??= 'mail';
|
|
110
112
|
return new Promise((resolve, reject) => {
|
|
111
113
|
// Search for the user in LDAP by filter
|
|
112
114
|
this.bindClient.search(baseDn, {
|
|
@@ -119,15 +121,22 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
119
121
|
return;
|
|
120
122
|
}
|
|
121
123
|
res.on('searchEntry', ({ object }) => {
|
|
122
|
-
var _a;
|
|
123
124
|
const user = {
|
|
124
|
-
dn: object
|
|
125
|
-
|
|
126
|
-
firstName: getEntryValue(object[firstNameAttribute]),
|
|
127
|
-
lastName: getEntryValue(object[lastNameAttribute]),
|
|
128
|
-
email: getEntryValue(object[mailAttribute]),
|
|
129
|
-
userAccountControl: Number((_a = getEntryValue(object.userAccountControl)) !== null && _a !== void 0 ? _a : 0),
|
|
125
|
+
dn: object['dn'],
|
|
126
|
+
userAccountControl: Number(getEntryValue(object['userAccountControl']) ?? 0),
|
|
130
127
|
};
|
|
128
|
+
const firstName = getEntryValue(object[firstNameAttribute]);
|
|
129
|
+
if (firstName)
|
|
130
|
+
user.firstName = firstName;
|
|
131
|
+
const lastName = getEntryValue(object[lastNameAttribute]);
|
|
132
|
+
if (lastName)
|
|
133
|
+
user.lastName = lastName;
|
|
134
|
+
const email = getEntryValue(object[mailAttribute]);
|
|
135
|
+
if (email)
|
|
136
|
+
user.email = email;
|
|
137
|
+
const uid = getEntryValue(object['uid']);
|
|
138
|
+
if (uid)
|
|
139
|
+
user.uid = uid;
|
|
131
140
|
resolve(user);
|
|
132
141
|
});
|
|
133
142
|
res.on('error', (err) => {
|
|
@@ -153,11 +162,11 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
153
162
|
return;
|
|
154
163
|
}
|
|
155
164
|
res.on('searchEntry', ({ object }) => {
|
|
156
|
-
if (typeof object
|
|
157
|
-
userGroups = [...userGroups, ...object
|
|
165
|
+
if (typeof object['cn'] === 'object') {
|
|
166
|
+
userGroups = [...userGroups, ...object['cn']];
|
|
158
167
|
}
|
|
159
|
-
else if (object
|
|
160
|
-
userGroups.push(object
|
|
168
|
+
else if (object['cn']) {
|
|
169
|
+
userGroups.push(object['cn']);
|
|
161
170
|
}
|
|
162
171
|
});
|
|
163
172
|
res.on('error', (err) => {
|
|
@@ -175,28 +184,27 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
175
184
|
.from('directus_users')
|
|
176
185
|
.orWhereRaw('LOWER(??) = ?', ['external_identifier', userDn.toLowerCase()])
|
|
177
186
|
.first();
|
|
178
|
-
return user
|
|
187
|
+
return user?.id;
|
|
179
188
|
}
|
|
180
189
|
async getUserID(payload) {
|
|
181
|
-
|
|
182
|
-
if (!payload.identifier) {
|
|
190
|
+
if (!payload['identifier']) {
|
|
183
191
|
throw new exceptions_1.InvalidCredentialsException();
|
|
184
192
|
}
|
|
185
193
|
await this.validateBindClient();
|
|
186
194
|
const { userDn, userScope, userAttribute, groupDn, groupScope, groupAttribute, defaultRoleId } = this.config;
|
|
187
195
|
const userInfo = await this.fetchUserInfo(userDn, new ldapjs_1.EqualityFilter({
|
|
188
|
-
attribute: userAttribute
|
|
189
|
-
value: payload
|
|
190
|
-
}), userScope
|
|
191
|
-
if (!
|
|
196
|
+
attribute: userAttribute ?? 'cn',
|
|
197
|
+
value: payload['identifier'],
|
|
198
|
+
}), userScope ?? 'one');
|
|
199
|
+
if (!userInfo?.dn) {
|
|
192
200
|
throw new exceptions_1.InvalidCredentialsException();
|
|
193
201
|
}
|
|
194
202
|
let userRole;
|
|
195
203
|
if (groupDn) {
|
|
196
204
|
const userGroups = await this.fetchUserGroups(groupDn, new ldapjs_1.EqualityFilter({
|
|
197
|
-
attribute: groupAttribute
|
|
198
|
-
value:
|
|
199
|
-
}), groupScope
|
|
205
|
+
attribute: groupAttribute ?? 'member',
|
|
206
|
+
value: groupAttribute?.toLowerCase() === 'memberuid' && userInfo.uid ? userInfo.uid : userInfo.dn,
|
|
207
|
+
}), groupScope ?? 'one');
|
|
200
208
|
if (userGroups.length) {
|
|
201
209
|
userRole = await this.knex
|
|
202
210
|
.select('id')
|
|
@@ -212,7 +220,7 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
212
220
|
if (userId) {
|
|
213
221
|
// Only sync roles if the AD groups are configured
|
|
214
222
|
if (groupDn) {
|
|
215
|
-
await this.usersService.updateOne(userId, { role:
|
|
223
|
+
await this.usersService.updateOne(userId, { role: userRole?.id ?? defaultRoleId ?? null });
|
|
216
224
|
}
|
|
217
225
|
return userId;
|
|
218
226
|
}
|
|
@@ -221,12 +229,12 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
221
229
|
}
|
|
222
230
|
try {
|
|
223
231
|
await this.usersService.createOne({
|
|
224
|
-
provider: this.config
|
|
232
|
+
provider: this.config['provider'],
|
|
225
233
|
first_name: userInfo.firstName,
|
|
226
234
|
last_name: userInfo.lastName,
|
|
227
235
|
email: userInfo.email,
|
|
228
236
|
external_identifier: userInfo.dn,
|
|
229
|
-
role:
|
|
237
|
+
role: userRole?.id ?? defaultRoleId,
|
|
230
238
|
});
|
|
231
239
|
}
|
|
232
240
|
catch (e) {
|
|
@@ -243,9 +251,9 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
243
251
|
throw new exceptions_1.InvalidCredentialsException();
|
|
244
252
|
}
|
|
245
253
|
return new Promise((resolve, reject) => {
|
|
246
|
-
const clientConfig = typeof this.config
|
|
254
|
+
const clientConfig = typeof this.config['client'] === 'object' ? this.config['client'] : {};
|
|
247
255
|
const client = ldapjs_1.default.createClient({
|
|
248
|
-
url: this.config
|
|
256
|
+
url: this.config['clientUrl'],
|
|
249
257
|
...clientConfig,
|
|
250
258
|
reconnect: false,
|
|
251
259
|
});
|
|
@@ -264,12 +272,12 @@ class LDAPAuthDriver extends auth_1.AuthDriver {
|
|
|
264
272
|
});
|
|
265
273
|
}
|
|
266
274
|
async login(user, payload) {
|
|
267
|
-
await this.verify(user, payload
|
|
275
|
+
await this.verify(user, payload['password']);
|
|
268
276
|
}
|
|
269
277
|
async refresh(user) {
|
|
270
278
|
await this.validateBindClient();
|
|
271
279
|
const userInfo = await this.fetchUserInfo(user.external_identifier);
|
|
272
|
-
if (
|
|
280
|
+
if (userInfo?.userAccountControl && userInfo.userAccountControl & INVALID_ACCOUNT_FLAGS) {
|
|
273
281
|
throw new exceptions_1.InvalidCredentialsException();
|
|
274
282
|
}
|
|
275
283
|
}
|
|
@@ -298,13 +306,16 @@ function createLDAPAuthRouter(provider) {
|
|
|
298
306
|
otp: joi_1.default.string(),
|
|
299
307
|
}).unknown();
|
|
300
308
|
router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
301
|
-
var _a, _b;
|
|
302
309
|
const accountability = {
|
|
303
310
|
ip: (0, get_ip_from_req_1.getIPFromReq)(req),
|
|
304
|
-
userAgent: req.get('user-agent'),
|
|
305
|
-
origin: req.get('origin'),
|
|
306
311
|
role: null,
|
|
307
312
|
};
|
|
313
|
+
const userAgent = req.get('user-agent');
|
|
314
|
+
if (userAgent)
|
|
315
|
+
accountability.userAgent = userAgent;
|
|
316
|
+
const origin = req.get('origin');
|
|
317
|
+
if (origin)
|
|
318
|
+
accountability.origin = origin;
|
|
308
319
|
const authenticationService = new services_1.AuthenticationService({
|
|
309
320
|
accountability: accountability,
|
|
310
321
|
schema: req.schema,
|
|
@@ -314,23 +325,23 @@ function createLDAPAuthRouter(provider) {
|
|
|
314
325
|
throw new exceptions_1.InvalidPayloadException(error.message);
|
|
315
326
|
}
|
|
316
327
|
const mode = req.body.mode || 'json';
|
|
317
|
-
const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body,
|
|
328
|
+
const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body, req.body?.otp);
|
|
318
329
|
const payload = {
|
|
319
330
|
data: { access_token: accessToken, expires },
|
|
320
331
|
};
|
|
321
332
|
if (mode === 'json') {
|
|
322
|
-
payload
|
|
333
|
+
payload['data']['refresh_token'] = refreshToken;
|
|
323
334
|
}
|
|
324
335
|
if (mode === 'cookie') {
|
|
325
|
-
res.cookie(env_1.default
|
|
336
|
+
res.cookie(env_1.default['REFRESH_TOKEN_COOKIE_NAME'], refreshToken, {
|
|
326
337
|
httpOnly: true,
|
|
327
|
-
domain: env_1.default
|
|
328
|
-
maxAge: (0, get_milliseconds_1.getMilliseconds)(env_1.default
|
|
329
|
-
secure:
|
|
330
|
-
sameSite: env_1.default
|
|
338
|
+
domain: env_1.default['REFRESH_TOKEN_COOKIE_DOMAIN'],
|
|
339
|
+
maxAge: (0, get_milliseconds_1.getMilliseconds)(env_1.default['REFRESH_TOKEN_TTL']),
|
|
340
|
+
secure: env_1.default['REFRESH_TOKEN_COOKIE_SECURE'] ?? false,
|
|
341
|
+
sameSite: env_1.default['REFRESH_TOKEN_COOKIE_SAME_SITE'] || 'strict',
|
|
331
342
|
});
|
|
332
343
|
}
|
|
333
|
-
res.locals
|
|
344
|
+
res.locals['payload'] = payload;
|
|
334
345
|
return next();
|
|
335
346
|
}), respond_1.respond);
|
|
336
347
|
return router;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
+
import type { User } from '../../types';
|
|
2
3
|
import { AuthDriver } from '../auth';
|
|
3
|
-
import { User } from '../../types';
|
|
4
4
|
export declare class LocalAuthDriver extends AuthDriver {
|
|
5
5
|
getUserID(payload: Record<string, any>): Promise<string>;
|
|
6
6
|
verify(user: User, password?: string): Promise<void>;
|
|
@@ -4,28 +4,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createLocalAuthRouter = exports.LocalAuthDriver = void 0;
|
|
7
|
-
const express_1 = require("express");
|
|
8
7
|
const argon2_1 = __importDefault(require("argon2"));
|
|
8
|
+
const express_1 = require("express");
|
|
9
9
|
const joi_1 = __importDefault(require("joi"));
|
|
10
|
-
const
|
|
10
|
+
const perf_hooks_1 = require("perf_hooks");
|
|
11
|
+
const constants_1 = require("../../constants");
|
|
12
|
+
const env_1 = __importDefault(require("../../env"));
|
|
11
13
|
const exceptions_1 = require("../../exceptions");
|
|
14
|
+
const respond_1 = require("../../middleware/respond");
|
|
12
15
|
const services_1 = require("../../services");
|
|
13
16
|
const async_handler_1 = __importDefault(require("../../utils/async-handler"));
|
|
14
|
-
const env_1 = __importDefault(require("../../env"));
|
|
15
|
-
const respond_1 = require("../../middleware/respond");
|
|
16
|
-
const constants_1 = require("../../constants");
|
|
17
17
|
const get_ip_from_req_1 = require("../../utils/get-ip-from-req");
|
|
18
|
-
const perf_hooks_1 = require("perf_hooks");
|
|
19
18
|
const stall_1 = require("../../utils/stall");
|
|
19
|
+
const auth_1 = require("../auth");
|
|
20
20
|
class LocalAuthDriver extends auth_1.AuthDriver {
|
|
21
21
|
async getUserID(payload) {
|
|
22
|
-
if (!payload
|
|
22
|
+
if (!payload['email']) {
|
|
23
23
|
throw new exceptions_1.InvalidCredentialsException();
|
|
24
24
|
}
|
|
25
25
|
const user = await this.knex
|
|
26
26
|
.select('id')
|
|
27
27
|
.from('directus_users')
|
|
28
|
-
.whereRaw('LOWER(??) = ?', ['email', payload
|
|
28
|
+
.whereRaw('LOWER(??) = ?', ['email', payload['email'].toLowerCase()])
|
|
29
29
|
.first();
|
|
30
30
|
if (!user) {
|
|
31
31
|
throw new exceptions_1.InvalidCredentialsException();
|
|
@@ -38,7 +38,7 @@ class LocalAuthDriver extends auth_1.AuthDriver {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
async login(user, payload) {
|
|
41
|
-
await this.verify(user, payload
|
|
41
|
+
await this.verify(user, payload['password']);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
exports.LocalAuthDriver = LocalAuthDriver;
|
|
@@ -51,15 +51,18 @@ function createLocalAuthRouter(provider) {
|
|
|
51
51
|
otp: joi_1.default.string(),
|
|
52
52
|
}).unknown();
|
|
53
53
|
router.post('/', (0, async_handler_1.default)(async (req, res, next) => {
|
|
54
|
-
|
|
55
|
-
const STALL_TIME = env_1.default.LOGIN_STALL_TIME;
|
|
54
|
+
const STALL_TIME = env_1.default['LOGIN_STALL_TIME'];
|
|
56
55
|
const timeStart = perf_hooks_1.performance.now();
|
|
57
56
|
const accountability = {
|
|
58
57
|
ip: (0, get_ip_from_req_1.getIPFromReq)(req),
|
|
59
|
-
userAgent: req.get('user-agent'),
|
|
60
|
-
origin: req.get('origin'),
|
|
61
58
|
role: null,
|
|
62
59
|
};
|
|
60
|
+
const userAgent = req.get('user-agent');
|
|
61
|
+
if (userAgent)
|
|
62
|
+
accountability.userAgent = userAgent;
|
|
63
|
+
const origin = req.get('origin');
|
|
64
|
+
if (origin)
|
|
65
|
+
accountability.origin = origin;
|
|
63
66
|
const authenticationService = new services_1.AuthenticationService({
|
|
64
67
|
accountability: accountability,
|
|
65
68
|
schema: req.schema,
|
|
@@ -70,17 +73,17 @@ function createLocalAuthRouter(provider) {
|
|
|
70
73
|
throw new exceptions_1.InvalidPayloadException(error.message);
|
|
71
74
|
}
|
|
72
75
|
const mode = req.body.mode || 'json';
|
|
73
|
-
const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body,
|
|
76
|
+
const { accessToken, refreshToken, expires } = await authenticationService.login(provider, req.body, req.body?.otp);
|
|
74
77
|
const payload = {
|
|
75
78
|
data: { access_token: accessToken, expires },
|
|
76
79
|
};
|
|
77
80
|
if (mode === 'json') {
|
|
78
|
-
payload
|
|
81
|
+
payload['data']['refresh_token'] = refreshToken;
|
|
79
82
|
}
|
|
80
83
|
if (mode === 'cookie') {
|
|
81
|
-
res.cookie(env_1.default
|
|
84
|
+
res.cookie(env_1.default['REFRESH_TOKEN_COOKIE_NAME'], refreshToken, constants_1.COOKIE_OPTIONS);
|
|
82
85
|
}
|
|
83
|
-
res.locals
|
|
86
|
+
res.locals['payload'] = payload;
|
|
84
87
|
return next();
|
|
85
88
|
}), respond_1.respond);
|
|
86
89
|
return router;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
2
|
import { Client } from 'openid-client';
|
|
3
3
|
import { UsersService } from '../../services';
|
|
4
|
-
import { AuthDriverOptions, User } from '../../types';
|
|
4
|
+
import type { AuthDriverOptions, User } from '../../types';
|
|
5
5
|
import { LocalAuthDriver } from './local';
|
|
6
6
|
export declare class OAuth2AuthDriver extends LocalAuthDriver {
|
|
7
7
|
client: Client;
|