@toa.io/extensions.exposition 1.0.0-alpha.6 → 1.0.0-alpha.60
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/components/context.toa.yaml +2 -2
- package/components/identity.bans/manifest.toa.yaml +15 -7
- package/components/identity.bans/operations/transit.d.ts +14 -0
- package/components/identity.bans/operations/transit.js +11 -0
- package/components/identity.bans/operations/transit.js.map +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/source/transit.ts +21 -0
- package/components/identity.bans/tsconfig.json +9 -0
- package/components/identity.basic/manifest.toa.yaml +21 -10
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +5 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +5 -3
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +8 -4
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +8 -6
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +32 -16
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +4 -11
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/incept.d.ts +11 -0
- package/components/identity.federation/operations/{create.js → incept.js} +6 -7
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/jwt.d.ts +5 -5
- package/components/identity.federation/operations/lib/jwt.js +25 -12
- package/components/identity.federation/operations/lib/jwt.js.map +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/configuration.d.ts +14 -0
- package/components/identity.federation/operations/types/configuration.js +3 -0
- package/components/identity.federation/operations/types/configuration.js.map +1 -0
- package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +15 -7
- package/components/identity.federation/operations/types/context.js +3 -0
- package/components/identity.federation/operations/types/context.js.map +1 -0
- package/components/identity.federation/operations/types/entity.d.ts +6 -0
- package/components/identity.federation/operations/types/entity.js +3 -0
- package/components/identity.federation/operations/types/entity.js.map +1 -0
- package/components/identity.federation/operations/types/index.d.ts +3 -0
- package/components/identity.federation/operations/types/index.js +20 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +6 -19
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/jwt.test.ts +123 -4
- package/components/identity.federation/source/lib/jwt.ts +36 -16
- package/components/identity.federation/source/types/configuration.ts +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -0
- package/components/identity.federation/tsconfig.json +5 -4
- package/components/identity.roles/manifest.toa.yaml +18 -7
- package/components/identity.roles/operations/grant.d.ts +10 -0
- package/components/identity.roles/operations/grant.js +21 -0
- package/components/identity.roles/operations/grant.js.map +1 -0
- package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
- package/components/identity.roles/operations/lib/Entity.js +3 -0
- package/components/identity.roles/operations/lib/Entity.js.map +1 -0
- package/components/identity.roles/operations/list.d.ts +1 -4
- package/components/identity.roles/operations/list.js.map +1 -1
- package/components/identity.roles/operations/principal.d.ts +4 -6
- package/components/identity.roles/operations/principal.js +6 -1
- package/components/identity.roles/operations/principal.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +32 -0
- package/components/identity.roles/source/lib/Entity.ts +5 -0
- package/components/identity.roles/source/list.ts +2 -4
- package/components/identity.roles/source/principal.ts +10 -8
- package/components/identity.tokens/manifest.toa.yaml +19 -5
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +12 -5
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.js +1 -0
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.js +5 -1
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/operations/types.d.ts +8 -2
- package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
- package/components/identity.tokens/source/authenticate.test.ts +11 -4
- package/components/identity.tokens/source/authenticate.ts +14 -6
- package/components/identity.tokens/source/decrypt.test.ts +5 -3
- package/components/identity.tokens/source/decrypt.ts +9 -8
- package/components/identity.tokens/source/encrypt.test.ts +26 -2
- package/components/identity.tokens/source/encrypt.ts +5 -1
- package/components/identity.tokens/source/types.ts +9 -2
- package/components/octets.storage/manifest.toa.yaml +5 -7
- package/components/octets.storage/operations/store.js +105 -3
- package/documentation/access.md +75 -38
- package/documentation/authorities.md +49 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +47 -22
- package/documentation/flow.md +31 -0
- package/documentation/identity.md +17 -22
- package/documentation/introspection.md +82 -0
- package/documentation/octets.md +64 -23
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +29 -4
- package/documentation/require.md +15 -0
- package/documentation/tree.md +13 -0
- package/documentation/vary.md +14 -14
- package/features/access.feature +78 -46
- package/features/annotation.feature +1 -0
- package/features/auth.claim.feature +170 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +100 -0
- package/features/authorities.tokens.feature +117 -0
- package/features/body.feature +3 -0
- package/features/cache.feature +109 -5
- package/features/cors.feature +5 -0
- package/features/debug.feature +34 -0
- package/features/directives.feature +3 -0
- package/features/dynamic.feature +4 -0
- package/features/errors.feature +20 -7
- package/features/etag.feature +31 -0
- package/features/flow.feature +45 -0
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +125 -23
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +66 -11
- package/features/identity.roles.feature +250 -7
- package/features/identity.tokens.feature +54 -4
- package/features/introspection.feature +153 -0
- package/features/io.feature +38 -1
- package/features/octets.download.feature +117 -0
- package/features/octets.entries.feature +8 -1
- package/features/octets.feature +58 -64
- package/features/octets.meta.feature +3 -0
- package/features/octets.workflows.feature +239 -19
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +65 -2
- package/features/require.feature +67 -0
- package/features/response.feature +38 -3
- package/features/routes.feature +93 -2
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +23 -6
- package/features/steps/IdP.ts +30 -25
- package/features/steps/components/echo/manifest.toa.yaml +14 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/echo/operations/parameters.js +7 -0
- package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
- package/features/steps/components/echo.beacon/operations/hello.js +5 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +22 -1
- package/features/steps/components/octets.tester/operations/authority.js +7 -0
- package/features/steps/components/octets.tester/operations/baz.js +1 -2
- package/features/steps/components/octets.tester/operations/diversify.js +3 -1
- package/features/steps/components/octets.tester/operations/foo.js +2 -2
- package/features/steps/components/octets.tester/operations/redirect.js +12 -0
- package/features/steps/components/octets.tester/operations/yex.js +16 -0
- package/features/steps/components/octets.tester/operations/yield.js +13 -0
- package/features/steps/components/pots/manifest.toa.yaml +14 -3
- package/features/steps/components/users/manifest.toa.yaml +0 -1
- package/features/steps/components/users.properties/manifest.toa.yaml +1 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +27 -1
- package/features/vary.feature +71 -0
- package/package.json +22 -14
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- package/schemas/node.cos.yaml +1 -0
- package/schemas/octets/store.cos.yaml +1 -0
- package/schemas/query.cos.yaml +4 -10
- package/source/Annotation.ts +3 -3
- package/source/Composition.ts +2 -2
- package/source/Directive.ts +4 -5
- package/source/Endpoint.ts +48 -12
- package/source/Factory.ts +10 -11
- package/source/Gateway.ts +49 -20
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +50 -43
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/formats/index.ts +3 -3
- package/source/HTTP/messages.test.ts +39 -2
- package/source/HTTP/messages.ts +7 -3
- package/source/Introspection.ts +11 -0
- package/source/Mapping.ts +63 -21
- package/source/Query.test.ts +3 -3
- package/source/Query.ts +117 -33
- package/source/RTD/Endpoint.ts +3 -0
- package/source/RTD/Method.ts +16 -0
- package/source/RTD/Node.ts +29 -13
- package/source/RTD/Route.ts +5 -4
- package/source/RTD/factory.ts +5 -2
- package/source/RTD/syntax/parse.ts +37 -24
- package/source/RTD/syntax/types.ts +6 -4
- package/source/Remotes.ts +2 -9
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +32 -22
- package/source/directives/auth/Authorization.ts +37 -14
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Federation.ts +84 -0
- package/source/directives/auth/Incept.ts +4 -3
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +22 -14
- package/source/directives/auth/split.ts +1 -1
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +13 -6
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/dev/Development.ts +1 -1
- package/source/directives/flow/Fetch.ts +88 -0
- package/source/directives/flow/Flow.ts +34 -0
- package/source/directives/flow/index.ts +3 -0
- package/source/directives/flow/types.ts +6 -0
- package/source/directives/index.ts +3 -1
- package/source/directives/io/Input.ts +2 -2
- package/source/directives/octets/Context.ts +4 -3
- package/source/directives/octets/Delete.ts +4 -2
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +14 -12
- package/source/directives/octets/List.ts +9 -7
- package/source/directives/octets/Octets.ts +4 -5
- package/source/directives/octets/Store.ts +21 -8
- package/source/directives/octets/Workflow.ts +10 -3
- package/source/directives/octets/schemas.ts +4 -4
- package/source/directives/octets/types.ts +0 -7
- package/source/directives/octets/workflows/Execution.ts +59 -8
- package/source/directives/octets/workflows/Workflow.ts +2 -1
- package/source/directives/require/Directive.ts +5 -0
- package/source/directives/require/Headers.ts +20 -0
- package/source/directives/require/Require.ts +28 -0
- package/source/directives/require/index.ts +3 -0
- package/source/directives/vary/Directive.ts +2 -1
- package/source/directives/vary/Embed.ts +14 -8
- package/source/directives/vary/Vary.ts +6 -4
- package/source/directives/vary/embeddings/Authority.ts +8 -0
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +6 -4
- package/source/exceptions.ts +22 -11
- package/source/manifest.ts +10 -11
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Composition.js +2 -2
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Directive.js +4 -4
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +6 -4
- package/transpiled/Endpoint.js +28 -4
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +1 -1
- package/transpiled/Factory.js +9 -8
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +2 -0
- package/transpiled/Gateway.js +36 -12
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +8 -1
- package/transpiled/HTTP/Context.js +15 -2
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +13 -2
- package/transpiled/HTTP/Server.js +37 -35
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +4 -1
- package/transpiled/HTTP/exceptions.js +7 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/formats/index.js +3 -3
- package/transpiled/HTTP/formats/index.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +1 -0
- package/transpiled/HTTP/messages.js +9 -3
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Introspection.d.ts +9 -0
- package/transpiled/Introspection.js +3 -0
- package/transpiled/Introspection.js.map +1 -0
- package/transpiled/Mapping.d.ts +10 -2
- package/transpiled/Mapping.js +48 -19
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +10 -1
- package/transpiled/Query.js +83 -30
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Endpoint.d.ts +1 -0
- package/transpiled/RTD/Method.d.ts +4 -0
- package/transpiled/RTD/Method.js +11 -0
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -1
- package/transpiled/RTD/Node.js +23 -12
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.d.ts +1 -1
- package/transpiled/RTD/Route.js +0 -1
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/factory.js +5 -2
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/syntax/parse.js +34 -22
- package/transpiled/RTD/syntax/parse.js.map +1 -1
- package/transpiled/RTD/syntax/types.d.ts +5 -3
- package/transpiled/RTD/syntax/types.js +1 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +2 -4
- package/transpiled/Remotes.js +0 -5
- package/transpiled/Remotes.js.map +1 -1
- package/transpiled/Tenant.d.ts +0 -1
- package/transpiled/Tenant.js +0 -6
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +28 -20
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Authorization.js +26 -10
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +10 -0
- package/transpiled/directives/auth/Delegate.js +34 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Federation.d.ts +16 -0
- package/transpiled/directives/auth/Federation.js +57 -0
- package/transpiled/directives/auth/Federation.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +4 -3
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +20 -14
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/split.js +1 -1
- package/transpiled/directives/auth/split.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +3 -3
- package/transpiled/directives/cache/Cache.js +10 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -1
- package/transpiled/directives/cache/Control.js +29 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/dev/Development.js +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/flow/Fetch.d.ts +13 -0
- package/transpiled/directives/flow/Fetch.js +59 -0
- package/transpiled/directives/flow/Fetch.js.map +1 -0
- package/transpiled/directives/flow/Flow.d.ts +10 -0
- package/transpiled/directives/flow/Flow.js +27 -0
- package/transpiled/directives/flow/Flow.js.map +1 -0
- package/transpiled/directives/flow/index.d.ts +2 -0
- package/transpiled/directives/flow/index.js +6 -0
- package/transpiled/directives/flow/index.js.map +1 -0
- package/transpiled/directives/flow/types.d.ts +5 -0
- package/transpiled/directives/flow/types.js.map +1 -0
- package/transpiled/directives/index.js +3 -1
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Input.js +2 -2
- package/transpiled/directives/io/Input.js.map +1 -1
- package/transpiled/directives/octets/Context.d.ts +3 -3
- package/transpiled/directives/octets/Context.js +4 -2
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +3 -2
- package/transpiled/directives/octets/Delete.js +3 -1
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.d.ts +8 -0
- package/transpiled/directives/octets/Directive.js +8 -0
- package/transpiled/directives/octets/Directive.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +6 -5
- package/transpiled/directives/octets/Fetch.js +10 -8
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +6 -5
- package/transpiled/directives/octets/List.js +6 -4
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +2 -1
- package/transpiled/directives/octets/Octets.js +2 -4
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +6 -3
- package/transpiled/directives/octets/Store.js +12 -6
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +3 -2
- package/transpiled/directives/octets/Workflow.js +9 -2
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/schemas.d.ts +4 -4
- package/transpiled/directives/octets/schemas.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +0 -5
- package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
- package/transpiled/directives/octets/workflows/Execution.js +43 -9
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.js +2 -1
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
- package/transpiled/directives/require/Directive.d.ts +4 -0
- package/transpiled/directives/require/Directive.js +3 -0
- package/transpiled/directives/require/Directive.js.map +1 -0
- package/transpiled/directives/require/Headers.d.ts +7 -0
- package/transpiled/directives/require/Headers.js +19 -0
- package/transpiled/directives/require/Headers.js.map +1 -0
- package/transpiled/directives/require/Require.d.ts +9 -0
- package/transpiled/directives/require/Require.js +27 -0
- package/transpiled/directives/require/Require.js.map +1 -0
- package/transpiled/directives/require/index.d.ts +2 -0
- package/transpiled/directives/require/index.js +6 -0
- package/transpiled/directives/require/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +2 -1
- package/transpiled/directives/vary/Embed.d.ts +2 -1
- package/transpiled/directives/vary/Embed.js +8 -6
- package/transpiled/directives/vary/Embed.js.map +1 -1
- package/transpiled/directives/vary/Vary.d.ts +2 -2
- package/transpiled/directives/vary/Vary.js +3 -3
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Authority.js +10 -0
- package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
- package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
- package/transpiled/directives/vary/embeddings/index.js +8 -4
- package/transpiled/directives/vary/embeddings/index.js.map +1 -1
- package/transpiled/exceptions.d.ts +3 -2
- package/transpiled/exceptions.js +13 -7
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/manifest.js +10 -11
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.json +9 -7
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/octets.storage/operations/permute.js +0 -7
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -43
- package/transpiled/directives/octets/Permute.d.ts +0 -10
- package/transpiled/directives/octets/Permute.js +0 -56
- package/transpiled/directives/octets/Permute.js.map +0 -1
- /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Resource introspection
|
|
2
|
+
|
|
3
|
+
Any resource can be introspected by sending an `OPTIONS` request to the resource's path.
|
|
4
|
+
The response will contain the resource's input and output schemas for each supported method.
|
|
5
|
+
|
|
6
|
+
Introspection properties:
|
|
7
|
+
|
|
8
|
+
- `route` route parameters
|
|
9
|
+
- `query` query parameters
|
|
10
|
+
- `input` input schema
|
|
11
|
+
- `output` output schema
|
|
12
|
+
- `errors` error codes
|
|
13
|
+
|
|
14
|
+
```http
|
|
15
|
+
OPTIONS /pots/:id/ HTTP/1.1
|
|
16
|
+
accept: application/yaml
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```http
|
|
20
|
+
200 OK
|
|
21
|
+
Allow: GET, POST, OPTIONS
|
|
22
|
+
|
|
23
|
+
GET:
|
|
24
|
+
route:
|
|
25
|
+
id:
|
|
26
|
+
type: string
|
|
27
|
+
pattern: ^[a-fA-F0-9]{32}$
|
|
28
|
+
output:
|
|
29
|
+
type: array
|
|
30
|
+
items:
|
|
31
|
+
type: object
|
|
32
|
+
properties:
|
|
33
|
+
title:
|
|
34
|
+
type: string
|
|
35
|
+
maxLength: 64
|
|
36
|
+
volume:
|
|
37
|
+
type: number
|
|
38
|
+
exclusiveMinimum: 0
|
|
39
|
+
maximum: 1000
|
|
40
|
+
temperature:
|
|
41
|
+
type: number
|
|
42
|
+
exclusiveMinimum: 0
|
|
43
|
+
maximum: 300
|
|
44
|
+
additionalProperties: false
|
|
45
|
+
required:
|
|
46
|
+
- id
|
|
47
|
+
- title
|
|
48
|
+
- volume
|
|
49
|
+
POST:
|
|
50
|
+
route:
|
|
51
|
+
id:
|
|
52
|
+
type: string
|
|
53
|
+
pattern: ^[a-fA-F0-9]{32}$
|
|
54
|
+
input:
|
|
55
|
+
type: object
|
|
56
|
+
properties:
|
|
57
|
+
title:
|
|
58
|
+
type: string
|
|
59
|
+
maxLength: 64
|
|
60
|
+
temperature:
|
|
61
|
+
type: number
|
|
62
|
+
exclusiveMinimum: 0
|
|
63
|
+
maximum: 300
|
|
64
|
+
volume:
|
|
65
|
+
type: number
|
|
66
|
+
exclusiveMinimum: 0
|
|
67
|
+
maximum: 1000
|
|
68
|
+
additionalProperties: false
|
|
69
|
+
required:
|
|
70
|
+
- title
|
|
71
|
+
- volume
|
|
72
|
+
output:
|
|
73
|
+
type: object
|
|
74
|
+
properties:
|
|
75
|
+
id:
|
|
76
|
+
type: string
|
|
77
|
+
pattern: ^[a-fA-F0-9]{32}$
|
|
78
|
+
additionalProperties: false
|
|
79
|
+
errors:
|
|
80
|
+
- NO_WAY
|
|
81
|
+
- WONT_CREATE
|
|
82
|
+
```
|
package/documentation/octets.md
CHANGED
|
@@ -20,14 +20,19 @@ Stores the content of the request body into a storage, under the request path wi
|
|
|
20
20
|
specified `content-type`.
|
|
21
21
|
|
|
22
22
|
If request's `content-type` is not acceptable, or if the request body does not pass
|
|
23
|
-
the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-
|
|
23
|
+
the [validation](/extensions/storages/readme.md#async-putpath-string-stream-readable-options-options-maybeentry),
|
|
24
24
|
the request is rejected with a `415 Unsupported Media Type` response.
|
|
25
25
|
|
|
26
26
|
The value of the directive is `null` or an object with the following properties:
|
|
27
27
|
|
|
28
|
+
- `limit`: a number of bytes (or
|
|
29
|
+
a [string with units](https://www.npmjs.com/package/bytes#bytesparsestringnumber-value-numbernull))
|
|
30
|
+
to limit the size of the uploaded content
|
|
31
|
+
(default is 64MB, which should be enough for everyone ©).
|
|
28
32
|
- `accept`: a media type or an array of media types that are acceptable.
|
|
29
33
|
If the `accept` property is not specified, any media type is acceptable (which is the default).
|
|
30
34
|
- `workflow`: [workflow](#workflows) to be executed once the content is successfully stored.
|
|
35
|
+
- `trust`: a list of [trusted origins](#downloading-external-content).
|
|
31
36
|
|
|
32
37
|
```yaml
|
|
33
38
|
/images:
|
|
@@ -65,6 +70,31 @@ meta:
|
|
|
65
70
|
|
|
66
71
|
If the Entry already exists, the `content-meta` header is ignored.
|
|
67
72
|
|
|
73
|
+
### Downloading external content
|
|
74
|
+
|
|
75
|
+
The `octets:store` directive can be used to download external content:
|
|
76
|
+
|
|
77
|
+
```http
|
|
78
|
+
POST /images/ HTTP/1.1
|
|
79
|
+
content-location: https://example.com/image.jpg
|
|
80
|
+
content-length: 0
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Requests with `content-location` header must have an empty body (`content-length: 0` header).
|
|
84
|
+
|
|
85
|
+
Target origin must be allowed by the `trust` property,
|
|
86
|
+
which can contain a list of trusted origins or regular expressions to match the full URL.
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
/images:
|
|
90
|
+
octets:context: images
|
|
91
|
+
POST:
|
|
92
|
+
octets:store:
|
|
93
|
+
trust:
|
|
94
|
+
- https://example.com
|
|
95
|
+
- ^https://example\.com/[a-z]+\.jpe?g$
|
|
96
|
+
```
|
|
97
|
+
|
|
68
98
|
### Response
|
|
69
99
|
|
|
70
100
|
The response of the `octets:store` directive is the created Entry.
|
|
@@ -83,7 +113,8 @@ is [multipart](protocol.md#multipart-types).
|
|
|
83
113
|
The first part represents the created Entry, which is sent immediately after the BLOB is stored,
|
|
84
114
|
while subsequent parts are results from the workflow endpoints, sent as soon as they are available.
|
|
85
115
|
|
|
86
|
-
In case a workflow endpoint returns an `Error`, the error part is sent,
|
|
116
|
+
In case a workflow endpoint returns an `Error`, the error part is sent,
|
|
117
|
+
and the response is closed.
|
|
87
118
|
Error's properties are added to the error part, among with the `step` identifier.
|
|
88
119
|
|
|
89
120
|
```
|
|
@@ -91,16 +122,29 @@ Error's properties are added to the error part, among with the `step` identifier
|
|
|
91
122
|
content-type: multipart/yaml; boundary=cut
|
|
92
123
|
|
|
93
124
|
--cut
|
|
125
|
+
|
|
94
126
|
id: eecd837c
|
|
95
127
|
type: image/jpeg
|
|
96
128
|
created: 1698004822358
|
|
129
|
+
|
|
97
130
|
--cut
|
|
98
|
-
|
|
131
|
+
|
|
132
|
+
step: optimize
|
|
133
|
+
status: completed
|
|
134
|
+
|
|
99
135
|
--cut
|
|
136
|
+
|
|
137
|
+
step: resize
|
|
100
138
|
error:
|
|
101
|
-
step: resize
|
|
102
139
|
code: TOO_SMALL
|
|
103
140
|
message: Image is too small
|
|
141
|
+
status: completed
|
|
142
|
+
|
|
143
|
+
--cut
|
|
144
|
+
|
|
145
|
+
step: analyze
|
|
146
|
+
status: exception
|
|
147
|
+
|
|
104
148
|
--cut--
|
|
105
149
|
```
|
|
106
150
|
|
|
@@ -193,22 +237,6 @@ the entry is deleted.
|
|
|
193
237
|
|
|
194
238
|
The error returned by the workflow prevents the deletion of the entry.
|
|
195
239
|
|
|
196
|
-
## `octets:permute`
|
|
197
|
-
|
|
198
|
-
Performs
|
|
199
|
-
a [permutation](/extensions/storages/readme.md#async-permutepath-string-ids-string-maybevoid) on the
|
|
200
|
-
entries
|
|
201
|
-
under the request path.
|
|
202
|
-
|
|
203
|
-
```yaml
|
|
204
|
-
/images:
|
|
205
|
-
octets:context: images
|
|
206
|
-
PUT:
|
|
207
|
-
octets:permute: ~
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
The request body must be a list of entry identifiers.
|
|
211
|
-
|
|
212
240
|
## `octets:workflow`
|
|
213
241
|
|
|
214
242
|
Execute a [workflow](#workflows) on the entry under the request path.
|
|
@@ -227,14 +255,16 @@ A workflow is a list of endpoints to be called.
|
|
|
227
255
|
The following input will be passed to each endpoint:
|
|
228
256
|
|
|
229
257
|
```yaml
|
|
258
|
+
authority: string
|
|
230
259
|
storage: string
|
|
231
260
|
path: string
|
|
232
261
|
entry: Entry
|
|
233
262
|
parameters: Record<string, string> # route parameters
|
|
234
263
|
```
|
|
235
264
|
|
|
236
|
-
|
|
237
|
-
|
|
265
|
+
- [Storages](/extensions/storages/readme.md)
|
|
266
|
+
- [Authorities](authorities.md)
|
|
267
|
+
- Example [workflow step processor](../features/steps/components/octets.tester)
|
|
238
268
|
|
|
239
269
|
A _workflow unit_ is an object with keys referencing the workflow step identifier, and an endpoint
|
|
240
270
|
as value.
|
|
@@ -258,4 +288,15 @@ octets:store:
|
|
|
258
288
|
analyze: images.analyze # executed in parallel with `resize`
|
|
259
289
|
```
|
|
260
290
|
|
|
261
|
-
If one of the workflow units returns an error,
|
|
291
|
+
If one of the workflow units returns or throws an error,
|
|
292
|
+
the execution of the workflow is interrupted.
|
|
293
|
+
|
|
294
|
+
### Workflow tasks
|
|
295
|
+
|
|
296
|
+
A workflow unit which value starts with `task:` prefix will be executed as a Task.
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
octets:store:
|
|
300
|
+
workflow:
|
|
301
|
+
optimize: task:images.optimize
|
|
302
|
+
```
|
|
@@ -72,6 +72,9 @@ The following request headers are allowed:
|
|
|
72
72
|
- `accept`
|
|
73
73
|
- `authorization`
|
|
74
74
|
- `content-type`
|
|
75
|
+
- `etag`
|
|
76
|
+
- `if-match`
|
|
77
|
+
- `if-none-match`
|
|
75
78
|
- headers used by the [`vary:embed` directive](vary.md#embeddings)
|
|
76
79
|
|
|
77
80
|
The following response headers are exposed:
|
package/documentation/query.md
CHANGED
|
@@ -77,8 +77,12 @@ query:
|
|
|
77
77
|
|
|
78
78
|
### Path variables
|
|
79
79
|
|
|
80
|
-
Path variables are prepended to the `criteria` request query parameter
|
|
81
|
-
|
|
80
|
+
Path variables are prepended to the `criteria` request query parameter except for
|
|
81
|
+
the [`POST` method](#post-method).
|
|
82
|
+
|
|
83
|
+
If query criteria starts with logical operator (`,` or `;`), then path variables are prepended
|
|
84
|
+
accordingly.
|
|
85
|
+
`AND` logical operator is used by default.
|
|
82
86
|
|
|
83
87
|
Given the following declaration:
|
|
84
88
|
|
|
@@ -92,7 +96,7 @@ exposition:
|
|
|
92
96
|
GET:
|
|
93
97
|
endpoint: observe
|
|
94
98
|
query:
|
|
95
|
-
criteria: state==hot; # open criteria
|
|
99
|
+
criteria: ,state==hot; # open criteria
|
|
96
100
|
```
|
|
97
101
|
|
|
98
102
|
and the following request:
|
|
@@ -104,7 +108,7 @@ GET /dummies/cool/?criteria=rank==5
|
|
|
104
108
|
Operation call will have the following query criteria:
|
|
105
109
|
|
|
106
110
|
```yaml
|
|
107
|
-
criteria: state==hot;
|
|
111
|
+
criteria: (type==cool,state==hot);(rank=5)
|
|
108
112
|
```
|
|
109
113
|
|
|
110
114
|
#### POST method
|
|
@@ -173,6 +177,10 @@ Constant values can be declared using the shortcut:
|
|
|
173
177
|
limit: 10
|
|
174
178
|
```
|
|
175
179
|
|
|
180
|
+
```http
|
|
181
|
+
GET /dummies/?omit=100&limit=10
|
|
182
|
+
```
|
|
183
|
+
|
|
176
184
|
## Sort
|
|
177
185
|
|
|
178
186
|
The `sort` query property defines the result order of Observations within an `objects` scope
|
|
@@ -209,6 +217,8 @@ GET /dummies/?sort=timestamp:asc
|
|
|
209
217
|
|
|
210
218
|
## Selectors
|
|
211
219
|
|
|
220
|
+

|
|
221
|
+
|
|
212
222
|
The `selectors` query property contains a list of Entity properties allowed for a client to use in
|
|
213
223
|
the `criteria` and `sort` query parameters.
|
|
214
224
|
If no value is provided, then no selectors are allowed.
|
|
@@ -225,6 +235,21 @@ A list of Entity properties to be included in the Observation result.
|
|
|
225
235
|
projection: [id, title, timestamp]
|
|
226
236
|
```
|
|
227
237
|
|
|
238
|
+
## Parameters
|
|
239
|
+
|
|
240
|
+
By default, the only query parameters allowed are described above. Arbitrary query parameters
|
|
241
|
+
can be allowed by specifying them in the `parameters` property.
|
|
242
|
+
|
|
243
|
+
```yaml
|
|
244
|
+
parameters: [foo, bar]
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
These parameters are embedded in the operation call input, which must be an object.
|
|
248
|
+
|
|
249
|
+
```http
|
|
250
|
+
GET /dummies/?foo=0&bar=baz
|
|
251
|
+
```
|
|
252
|
+
|
|
228
253
|
## Optimistic concurrency control
|
|
229
254
|
|
|
230
255
|
If an operation returns an object with `_version` property,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Directive family Require
|
|
2
|
+
|
|
3
|
+
The `require` directive family provides the ability to specify HTTP request requirements to be met.
|
|
4
|
+
|
|
5
|
+
## Headers
|
|
6
|
+
|
|
7
|
+
`require:header` requires a specific header to be present in the request, and `require:headers`
|
|
8
|
+
requires a set of headers to be present.
|
|
9
|
+
|
|
10
|
+
```yaml
|
|
11
|
+
exposition:
|
|
12
|
+
/:id:
|
|
13
|
+
require:header: if-match # enforce concurrency control
|
|
14
|
+
PUT: transit
|
|
15
|
+
```
|
package/documentation/tree.md
CHANGED
|
@@ -56,6 +56,19 @@ as it provides a more specific match compared to the generic `/users/:id` route.
|
|
|
56
56
|
|
|
57
57
|
The priority of Routes with the same specificity is determined by the order of declaration.
|
|
58
58
|
|
|
59
|
+
## Route forwarding
|
|
60
|
+
|
|
61
|
+
A Route can be forwarded to another Route by specifying the destination Route as the value of the
|
|
62
|
+
Route.
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
/destination/:var: ...
|
|
66
|
+
/static: /destination/hello
|
|
67
|
+
/variables/:bar: /destination/:bar
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Forwarding Route variables are mapped to the forwarded Route variables if they have the same name.
|
|
71
|
+
|
|
59
72
|
## Methods
|
|
60
73
|
|
|
61
74
|
Methods are mappings of the HTTP methods to the corresponding operations.
|
package/documentation/vary.md
CHANGED
|
@@ -7,16 +7,15 @@ operation call.
|
|
|
7
7
|
|
|
8
8
|
```yaml
|
|
9
9
|
exposition:
|
|
10
|
-
|
|
11
|
-
toa: the.toa.io
|
|
12
|
-
/:
|
|
10
|
+
/:group:
|
|
13
11
|
vary:languages: [en, fr]
|
|
14
12
|
GET:
|
|
15
13
|
vary:embed:
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
app: authority # predefined embeddings
|
|
15
|
+
lang: language
|
|
18
16
|
token: :x-access-token # raw header value
|
|
19
|
-
|
|
17
|
+
group: /:group # route parameter
|
|
18
|
+
endpoint: observe
|
|
20
19
|
```
|
|
21
20
|
|
|
22
21
|
## Embeddings
|
|
@@ -30,13 +29,9 @@ If the value is an array, the first non-empty embedding function's result is use
|
|
|
30
29
|
> If a property is already present in the input, the embedded value will overwrite its current
|
|
31
30
|
> value.
|
|
32
31
|
|
|
33
|
-
###
|
|
32
|
+
### Authority
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
The list of domains is defined by the `vary:realms` directive,
|
|
37
|
-
which is a map of realm names to their domain names.
|
|
38
|
-
|
|
39
|
-
The `realm` embedding substitutes the realm identified based on the `host` request header.
|
|
34
|
+
The `authority` embedding substitutes request [authority identifier](authorities.md).
|
|
40
35
|
|
|
41
36
|
### Language
|
|
42
37
|
|
|
@@ -47,8 +42,8 @@ If neither of the supported languages matches, the first supported language is u
|
|
|
47
42
|
|
|
48
43
|
### Raw header values
|
|
49
44
|
|
|
50
|
-
|
|
51
|
-
values to be embedded into an operation call.
|
|
45
|
+
Values in the embedding map starting with a semicolon (:) are the names of HTTP request headers
|
|
46
|
+
whose values to be embedded into an operation call.
|
|
52
47
|
The names of these headers are then included in the `vary` HTTP response header
|
|
53
48
|
and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
|
|
54
49
|
of the [CORS](protocol.md#cors).
|
|
@@ -56,6 +51,11 @@ of the [CORS](protocol.md#cors).
|
|
|
56
51
|
[Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are embedded
|
|
57
52
|
as a comma-separated list.
|
|
58
53
|
|
|
54
|
+
### Route parameters
|
|
55
|
+
|
|
56
|
+
Values in the embedding map starting with `/:` are the names of route parameters whose values
|
|
57
|
+
to be embedded into an operation call.
|
|
58
|
+
|
|
59
59
|
### Fallbacks
|
|
60
60
|
|
|
61
61
|
If the embedding function is an array, the first non-empty resolved value is used.
|
package/features/access.feature
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Access authorization
|
|
2
3
|
|
|
3
4
|
Background:
|
|
4
5
|
Given the `identity.basic` database contains:
|
|
5
6
|
# developer:secret
|
|
6
7
|
# user:12345
|
|
7
|
-
| _id | username | password |
|
|
8
|
-
| efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
9
|
-
| e8e4f9c2a68d419b861403d71fabc915 | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
|
|
8
|
+
| _id | authority | username | password |
|
|
9
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
10
|
+
| e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
|
|
10
11
|
And the `identity.bans` database is empty
|
|
11
12
|
|
|
12
13
|
Scenario: Deny by default
|
|
@@ -20,6 +21,7 @@ Feature: Access authorization
|
|
|
20
21
|
When the following request is received:
|
|
21
22
|
"""
|
|
22
23
|
GET / HTTP/1.1
|
|
24
|
+
host: nex.toa.io
|
|
23
25
|
"""
|
|
24
26
|
Then the following reply is sent:
|
|
25
27
|
"""
|
|
@@ -39,6 +41,7 @@ Feature: Access authorization
|
|
|
39
41
|
When the following request is received:
|
|
40
42
|
"""
|
|
41
43
|
GET / HTTP/1.1
|
|
44
|
+
host: nex.toa.io
|
|
42
45
|
accept: application/yaml
|
|
43
46
|
"""
|
|
44
47
|
Then the following reply is sent:
|
|
@@ -61,6 +64,7 @@ Feature: Access authorization
|
|
|
61
64
|
When the following request is received:
|
|
62
65
|
"""
|
|
63
66
|
GET / HTTP/1.1
|
|
67
|
+
host: nex.toa.io
|
|
64
68
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
65
69
|
"""
|
|
66
70
|
Then the following reply is sent:
|
|
@@ -82,6 +86,7 @@ Feature: Access authorization
|
|
|
82
86
|
When the following request is received:
|
|
83
87
|
"""
|
|
84
88
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
89
|
+
host: nex.toa.io
|
|
85
90
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
86
91
|
accept: application/yaml
|
|
87
92
|
"""
|
|
@@ -95,6 +100,7 @@ Feature: Access authorization
|
|
|
95
100
|
When the following request is received:
|
|
96
101
|
"""
|
|
97
102
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
103
|
+
host: nex.toa.io
|
|
98
104
|
authorization: Basic dXNlcjoxMjM0NQ==
|
|
99
105
|
accept: application/yaml
|
|
100
106
|
"""
|
|
@@ -121,6 +127,7 @@ Feature: Access authorization
|
|
|
121
127
|
# identity with `developer` and `user` roles
|
|
122
128
|
"""
|
|
123
129
|
GET / HTTP/1.1
|
|
130
|
+
host: nex.toa.io
|
|
124
131
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
125
132
|
accept: application/yaml
|
|
126
133
|
"""
|
|
@@ -135,6 +142,7 @@ Feature: Access authorization
|
|
|
135
142
|
# identity with no roles
|
|
136
143
|
"""
|
|
137
144
|
GET / HTTP/1.1
|
|
145
|
+
host: nex.toa.io
|
|
138
146
|
authorization: Basic dXNlcjoxMjM0NQ==
|
|
139
147
|
"""
|
|
140
148
|
Then the following reply is sent:
|
|
@@ -163,6 +171,7 @@ Feature: Access authorization
|
|
|
163
171
|
When the following request is received:
|
|
164
172
|
"""
|
|
165
173
|
GET /nested/ HTTP/1.1
|
|
174
|
+
host: nex.toa.io
|
|
166
175
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
167
176
|
accept: text/plain
|
|
168
177
|
"""
|
|
@@ -176,6 +185,7 @@ Feature: Access authorization
|
|
|
176
185
|
When the following request is received:
|
|
177
186
|
"""
|
|
178
187
|
GET /javascript/ HTTP/1.1
|
|
188
|
+
host: nex.toa.io
|
|
179
189
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
180
190
|
"""
|
|
181
191
|
Then the following reply is sent:
|
|
@@ -202,6 +212,7 @@ Feature: Access authorization
|
|
|
202
212
|
# identity with `developer` and `user` roles
|
|
203
213
|
"""
|
|
204
214
|
GET / HTTP/1.1
|
|
215
|
+
host: nex.toa.io
|
|
205
216
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
206
217
|
accept: application/yaml
|
|
207
218
|
"""
|
|
@@ -239,6 +250,7 @@ Feature: Access authorization
|
|
|
239
250
|
When the following request is received:
|
|
240
251
|
"""
|
|
241
252
|
GET /rust/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
253
|
+
host: nex.toa.io
|
|
242
254
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
243
255
|
accept: application/yaml
|
|
244
256
|
"""
|
|
@@ -252,6 +264,7 @@ Feature: Access authorization
|
|
|
252
264
|
When the following request is received:
|
|
253
265
|
"""
|
|
254
266
|
GET /javascript/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
267
|
+
host: nex.toa.io
|
|
255
268
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
256
269
|
"""
|
|
257
270
|
Then the following reply is sent:
|
|
@@ -272,8 +285,37 @@ Feature: Access authorization
|
|
|
272
285
|
"""
|
|
273
286
|
When the following request is received:
|
|
274
287
|
"""
|
|
275
|
-
GET /
|
|
276
|
-
|
|
288
|
+
GET /identity/ HTTP/1.1
|
|
289
|
+
host: nex.toa.io
|
|
290
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
291
|
+
accept: application/yaml
|
|
292
|
+
"""
|
|
293
|
+
Then the following reply is sent:
|
|
294
|
+
"""
|
|
295
|
+
200 OK
|
|
296
|
+
authorization: Token ${{ developer.token }}
|
|
297
|
+
|
|
298
|
+
id: ${{ developer.id }}
|
|
299
|
+
"""
|
|
300
|
+
When the following request is received:
|
|
301
|
+
"""
|
|
302
|
+
GET /identity/ HTTP/1.1
|
|
303
|
+
host: nex.toa.io
|
|
304
|
+
authorization: Basic dXNlcjoxMjM0NQ==
|
|
305
|
+
accept: application/yaml
|
|
306
|
+
"""
|
|
307
|
+
Then the following reply is sent:
|
|
308
|
+
"""
|
|
309
|
+
200 OK
|
|
310
|
+
authorization: Token ${{ user.token }}
|
|
311
|
+
|
|
312
|
+
id: ${{ user.id }}
|
|
313
|
+
"""
|
|
314
|
+
When the following request is received:
|
|
315
|
+
"""
|
|
316
|
+
GET /${{ developer.id }}/ HTTP/1.1
|
|
317
|
+
host: nex.toa.io
|
|
318
|
+
authorization: Token ${{ developer.token }}
|
|
277
319
|
accept: application/yaml
|
|
278
320
|
"""
|
|
279
321
|
Then the following reply is sent:
|
|
@@ -289,8 +331,9 @@ Feature: Access authorization
|
|
|
289
331
|
"""
|
|
290
332
|
When the following request is received:
|
|
291
333
|
"""
|
|
292
|
-
GET /
|
|
293
|
-
|
|
334
|
+
GET /${{ user.id }}/ HTTP/1.1
|
|
335
|
+
host: nex.toa.io
|
|
336
|
+
authorization: Token ${{ developer.token }}
|
|
294
337
|
accept: application/yaml
|
|
295
338
|
"""
|
|
296
339
|
Then the following reply is sent:
|
|
@@ -314,6 +357,7 @@ Feature: Access authorization
|
|
|
314
357
|
When the following request is received:
|
|
315
358
|
"""
|
|
316
359
|
GET / HTTP/1.1
|
|
360
|
+
host: nex.toa.io
|
|
317
361
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
318
362
|
accept: application/yaml
|
|
319
363
|
"""
|
|
@@ -328,6 +372,7 @@ Feature: Access authorization
|
|
|
328
372
|
When the following request is received:
|
|
329
373
|
"""
|
|
330
374
|
GET / HTTP/1.1
|
|
375
|
+
host: nex.toa.io
|
|
331
376
|
authorization: Token ${{ token }}
|
|
332
377
|
accept: application/yaml
|
|
333
378
|
"""
|
|
@@ -354,6 +399,7 @@ Feature: Access authorization
|
|
|
354
399
|
When the following request is received:
|
|
355
400
|
"""
|
|
356
401
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
402
|
+
host: nex.toa.io
|
|
357
403
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
358
404
|
accept: application/yaml
|
|
359
405
|
"""
|
|
@@ -367,6 +413,7 @@ Feature: Access authorization
|
|
|
367
413
|
When the following request is received:
|
|
368
414
|
"""
|
|
369
415
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
416
|
+
host: nex.toa.io
|
|
370
417
|
authorization: Token v3.local.9oEtVJkfRw4cOJ8M4DxuVuAN29dGT26XMYyPAoXtwrkdkiJVSVj46sMNAOdlxwKGszJZV_ReOL26dxDVlsQ7QAIuRhRPlvsHYNOhcD-LApoAXV0S3IK16EMoEv7tE9z70FCLC3WoIW9RIQ8PR3uZhAdhSgBilsVOpWrk4XtnfCIlVwhYMKu79a66oZZhV2Q7Kl3nfYsf84-6rAL_1H0MsqCDUHVXuIg
|
|
371
418
|
accept: text/plain
|
|
372
419
|
"""
|
|
@@ -389,6 +436,7 @@ Feature: Access authorization
|
|
|
389
436
|
When the following request is received:
|
|
390
437
|
"""
|
|
391
438
|
POST /identity/roles/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
439
|
+
host: nex.toa.io
|
|
392
440
|
content-type: application/yaml
|
|
393
441
|
|
|
394
442
|
role: developer
|
|
@@ -398,62 +446,46 @@ Feature: Access authorization
|
|
|
398
446
|
401 Unauthorized
|
|
399
447
|
"""
|
|
400
448
|
|
|
401
|
-
Scenario:
|
|
449
|
+
Scenario: Authorization delegation
|
|
402
450
|
Given the `identity.roles` database contains:
|
|
403
|
-
| _id | identity | role
|
|
404
|
-
| 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 |
|
|
405
|
-
And the
|
|
406
|
-
"""yaml
|
|
407
|
-
/:
|
|
408
|
-
/:id:
|
|
409
|
-
auth:id: id
|
|
410
|
-
GET:
|
|
411
|
-
dev:stub:
|
|
412
|
-
access: granted!
|
|
413
|
-
"""
|
|
414
|
-
And the `identity.tokens` configuration:
|
|
451
|
+
| _id | identity | role |
|
|
452
|
+
| 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | developer |
|
|
453
|
+
And the `echo` is running with the following manifest:
|
|
415
454
|
"""yaml
|
|
416
|
-
|
|
455
|
+
exposition:
|
|
456
|
+
/:
|
|
457
|
+
io:output: true
|
|
458
|
+
auth:delegate: identity
|
|
459
|
+
GET: identity
|
|
417
460
|
"""
|
|
418
461
|
When the following request is received:
|
|
419
462
|
"""
|
|
420
|
-
GET /
|
|
421
|
-
|
|
463
|
+
GET /echo/ HTTP/1.1
|
|
464
|
+
host: nex.toa.io
|
|
465
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
466
|
+
accept: application/yaml
|
|
422
467
|
"""
|
|
423
468
|
Then the following reply is sent:
|
|
424
469
|
"""
|
|
425
470
|
200 OK
|
|
426
471
|
authorization: Token ${{ token }}
|
|
427
|
-
"""
|
|
428
|
-
When the following request is received:
|
|
429
|
-
"""
|
|
430
|
-
PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
431
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
432
|
-
content-type: application/yaml
|
|
433
472
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
204 No Content
|
|
473
|
+
identity:
|
|
474
|
+
id: efe3a65ebbee47ed95a73edd911ea328
|
|
475
|
+
roles:
|
|
476
|
+
- developer
|
|
439
477
|
"""
|
|
440
|
-
# accessing a resource with a banned Identity
|
|
441
478
|
When the following request is received:
|
|
442
479
|
"""
|
|
443
|
-
GET /
|
|
444
|
-
|
|
480
|
+
GET /echo/ HTTP/1.1
|
|
481
|
+
host: nex.toa.io
|
|
482
|
+
authorization: Token ${{ token }}
|
|
445
483
|
"""
|
|
446
484
|
Then the following reply is sent:
|
|
447
485
|
"""
|
|
448
|
-
|
|
449
|
-
"""
|
|
450
|
-
Then after 1 second
|
|
451
|
-
When the following request is received:
|
|
452
|
-
"""
|
|
453
|
-
GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
454
|
-
authorization: Token ${{ token }}
|
|
486
|
+
200 OK
|
|
455
487
|
"""
|
|
456
|
-
|
|
488
|
+
And the reply does not contain:
|
|
457
489
|
"""
|
|
458
|
-
|
|
490
|
+
authorization: Token
|
|
459
491
|
"""
|