@toa.io/extensions.exposition 1.0.0-alpha.5 → 1.0.0-alpha.51
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 +22 -9
- 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 -22
- 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 +4 -5
- package/components/identity.federation/operations/lib/jwt.js +12 -7
- 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 +50 -4
- package/components/identity.federation/source/lib/jwt.ts +20 -12
- 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 +2 -2
- package/components/identity.roles/manifest.toa.yaml +18 -6
- 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 +0 -7
- 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 +68 -0
- package/documentation/io.md +56 -0
- package/documentation/octets.md +34 -23
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +17 -11
- package/documentation/require.md +15 -0
- package/documentation/tree.md +35 -4
- package/documentation/vary.md +14 -14
- package/features/access.feature +89 -47
- package/features/annotation.feature +2 -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 +4 -0
- package/features/cache.feature +112 -5
- package/features/cors.feature +5 -0
- package/features/debug.feature +34 -0
- package/features/directives.feature +5 -0
- package/features/dynamic.feature +18 -7
- package/features/errors.feature +18 -4
- package/features/etag.feature +7 -0
- package/features/flow.feature +45 -0
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +142 -19
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +68 -15
- package/features/identity.roles.feature +251 -7
- package/features/identity.tokens.feature +57 -4
- package/features/introspection.feature +76 -0
- package/features/io.feature +205 -0
- package/features/octets.entries.feature +10 -1
- package/features/octets.feature +60 -64
- package/features/octets.meta.feature +7 -3
- package/features/octets.workflows.feature +240 -19
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +50 -3
- package/features/require.feature +67 -0
- package/features/response.feature +12 -3
- package/features/routes.feature +110 -12
- 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 +12 -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 +16 -3
- package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +27 -1
- package/features/vary.feature +104 -3
- package/package.json +12 -11
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- package/schemas/io/input.cos.yaml +3 -0
- package/schemas/io/message.cos.yaml +5 -0
- package/schemas/io/output.cos.yaml +5 -0
- package/schemas/node.cos.yaml +1 -0
- package/source/Annotation.ts +3 -3
- package/source/Composition.ts +2 -2
- package/source/Directive.ts +4 -5
- package/source/Endpoint.ts +18 -12
- package/source/Factory.ts +10 -11
- package/source/Gateway.ts +55 -20
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +51 -43
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/messages.test.ts +39 -2
- package/source/HTTP/messages.ts +7 -3
- package/source/Mapping.ts +6 -1
- package/source/Query.test.ts +1 -1
- package/source/Query.ts +35 -24
- package/source/RTD/Endpoint.ts +3 -0
- package/source/RTD/Method.ts +4 -0
- package/source/RTD/Node.ts +10 -2
- 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 +2 -1
- package/source/Remotes.ts +4 -4
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +32 -22
- package/source/directives/auth/Authorization.ts +40 -17
- 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/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 +6 -3
- package/source/directives/io/Directive.ts +11 -0
- package/source/directives/io/IO.ts +43 -0
- package/source/directives/io/Input.ts +50 -0
- package/source/directives/io/Message.ts +1 -0
- package/source/directives/io/Output.ts +69 -0
- package/source/directives/io/index.ts +3 -0
- package/source/directives/io/schemas.ts +12 -0
- 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 +4 -2
- 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/Header.ts +8 -6
- 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 +8 -9
- package/source/root.ts +5 -0
- 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 +5 -4
- package/transpiled/Endpoint.js +8 -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 +39 -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 +38 -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/messages.d.ts +1 -0
- package/transpiled/HTTP/messages.js +9 -3
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Mapping.js +4 -1
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +1 -0
- package/transpiled/Query.js +21 -20
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Endpoint.d.ts +1 -0
- package/transpiled/RTD/Method.d.ts +1 -0
- package/transpiled/RTD/Method.js +3 -0
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +2 -0
- package/transpiled/RTD/Node.js +9 -2
- 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 +1 -0
- package/transpiled/RTD/syntax/types.js +1 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +2 -2
- 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 +28 -12
- 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/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 +6 -3
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +8 -0
- package/transpiled/directives/io/Directive.js +3 -0
- package/transpiled/directives/io/Directive.js.map +1 -0
- package/transpiled/directives/io/IO.d.ts +9 -0
- package/transpiled/directives/io/IO.js +33 -0
- package/transpiled/directives/io/IO.js.map +1 -0
- package/transpiled/directives/io/Input.d.ts +11 -0
- package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -26
- package/transpiled/directives/io/Input.js.map +1 -0
- package/transpiled/directives/io/Message.d.ts +1 -0
- package/transpiled/directives/io/Message.js +3 -0
- package/transpiled/directives/io/Message.js.map +1 -0
- package/transpiled/directives/io/Output.d.ts +13 -0
- package/transpiled/directives/io/Output.js +76 -0
- package/transpiled/directives/io/Output.js.map +1 -0
- package/transpiled/directives/io/index.d.ts +2 -0
- package/transpiled/directives/io/index.js +6 -0
- package/transpiled/directives/io/index.js.map +1 -0
- package/transpiled/directives/io/schemas.d.ts +7 -0
- package/transpiled/directives/io/schemas.js +14 -0
- package/transpiled/directives/io/schemas.js.map +1 -0
- 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 +3 -2
- package/transpiled/directives/octets/Store.js +3 -1
- 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/Header.js +8 -6
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -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 +8 -9
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/root.js +5 -0
- package/transpiled/root.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/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.map +0 -1
- /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
package/documentation/octets.md
CHANGED
|
@@ -20,7 +20,7 @@ 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:
|
|
@@ -83,7 +83,8 @@ is [multipart](protocol.md#multipart-types).
|
|
|
83
83
|
The first part represents the created Entry, which is sent immediately after the BLOB is stored,
|
|
84
84
|
while subsequent parts are results from the workflow endpoints, sent as soon as they are available.
|
|
85
85
|
|
|
86
|
-
In case a workflow endpoint returns an `Error`, the error part is sent,
|
|
86
|
+
In case a workflow endpoint returns an `Error`, the error part is sent,
|
|
87
|
+
and the response is closed.
|
|
87
88
|
Error's properties are added to the error part, among with the `step` identifier.
|
|
88
89
|
|
|
89
90
|
```
|
|
@@ -91,16 +92,29 @@ Error's properties are added to the error part, among with the `step` identifier
|
|
|
91
92
|
content-type: multipart/yaml; boundary=cut
|
|
92
93
|
|
|
93
94
|
--cut
|
|
95
|
+
|
|
94
96
|
id: eecd837c
|
|
95
97
|
type: image/jpeg
|
|
96
98
|
created: 1698004822358
|
|
99
|
+
|
|
97
100
|
--cut
|
|
98
|
-
|
|
101
|
+
|
|
102
|
+
step: optimize
|
|
103
|
+
status: completed
|
|
104
|
+
|
|
99
105
|
--cut
|
|
106
|
+
|
|
107
|
+
step: resize
|
|
100
108
|
error:
|
|
101
|
-
step: resize
|
|
102
109
|
code: TOO_SMALL
|
|
103
110
|
message: Image is too small
|
|
111
|
+
status: completed
|
|
112
|
+
|
|
113
|
+
--cut
|
|
114
|
+
|
|
115
|
+
step: analyze
|
|
116
|
+
status: exception
|
|
117
|
+
|
|
104
118
|
--cut--
|
|
105
119
|
```
|
|
106
120
|
|
|
@@ -193,22 +207,6 @@ the entry is deleted.
|
|
|
193
207
|
|
|
194
208
|
The error returned by the workflow prevents the deletion of the entry.
|
|
195
209
|
|
|
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
210
|
## `octets:workflow`
|
|
213
211
|
|
|
214
212
|
Execute a [workflow](#workflows) on the entry under the request path.
|
|
@@ -227,14 +225,16 @@ A workflow is a list of endpoints to be called.
|
|
|
227
225
|
The following input will be passed to each endpoint:
|
|
228
226
|
|
|
229
227
|
```yaml
|
|
228
|
+
authority: string
|
|
230
229
|
storage: string
|
|
231
230
|
path: string
|
|
232
231
|
entry: Entry
|
|
233
232
|
parameters: Record<string, string> # route parameters
|
|
234
233
|
```
|
|
235
234
|
|
|
236
|
-
|
|
237
|
-
|
|
235
|
+
- [Storages](/extensions/storages/readme.md)
|
|
236
|
+
- [Authorities](authorities.md)
|
|
237
|
+
- Example [workflow step processor](../features/steps/components/octets.tester)
|
|
238
238
|
|
|
239
239
|
A _workflow unit_ is an object with keys referencing the workflow step identifier, and an endpoint
|
|
240
240
|
as value.
|
|
@@ -258,4 +258,15 @@ octets:store:
|
|
|
258
258
|
analyze: images.analyze # executed in parallel with `resize`
|
|
259
259
|
```
|
|
260
260
|
|
|
261
|
-
If one of the workflow units returns an error,
|
|
261
|
+
If one of the workflow units returns or throws an error,
|
|
262
|
+
the execution of the workflow is interrupted.
|
|
263
|
+
|
|
264
|
+
### Workflow tasks
|
|
265
|
+
|
|
266
|
+
A workflow unit which value starts with `task:` prefix will be executed as a Task.
|
|
267
|
+
|
|
268
|
+
```yaml
|
|
269
|
+
octets:store:
|
|
270
|
+
workflow:
|
|
271
|
+
optimize: task:images.optimize
|
|
272
|
+
```
|
|
@@ -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
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
id?: string
|
|
7
7
|
criteria?: string
|
|
8
8
|
sort?: string
|
|
9
|
-
omit?:
|
|
10
|
-
limit?:
|
|
9
|
+
omit?: integer
|
|
10
|
+
limit?: integer
|
|
11
11
|
selectors?: string[]
|
|
12
|
-
projection?: [
|
|
12
|
+
projection?: string[]
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
```yaml
|
|
@@ -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
|
|
@@ -251,9 +255,9 @@ PUT /dummies/5e82ed5e/ HTTP/1.1
|
|
|
251
255
|
if-match: "1"
|
|
252
256
|
|
|
253
257
|
foo: baz
|
|
258
|
+
```
|
|
254
259
|
|
|
255
|
-
|
|
256
|
-
|
|
260
|
+
```http
|
|
257
261
|
200 OK
|
|
258
262
|
```
|
|
259
263
|
|
|
@@ -262,8 +266,10 @@ PUT /dummies/5e82ed5e/ HTTP/1.1
|
|
|
262
266
|
if-match: "never"
|
|
263
267
|
|
|
264
268
|
foo: baz
|
|
269
|
+
```
|
|
265
270
|
|
|
266
|
-
|
|
267
|
-
|
|
271
|
+
```http
|
|
268
272
|
412 Precondition Failed
|
|
269
273
|
```
|
|
274
|
+
|
|
275
|
+
The value within the quotes is mapped to the `version` property of operation call query.
|
|
@@ -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.
|
|
@@ -102,7 +115,7 @@ HTTP methods can only be mapped to operations of the corresponding types.
|
|
|
102
115
|
| `GET` | **Observation**<br/>**Computation** |
|
|
103
116
|
| `PATCH` | **Assignment**<br/>**Effect** |
|
|
104
117
|
|
|
105
|
-
As method mapping is unambiguous for Observation,
|
|
118
|
+
As method mapping is unambiguous for Observation, Assignment, and Computation, a concise syntax is
|
|
106
119
|
available:
|
|
107
120
|
|
|
108
121
|
```yaml
|
|
@@ -110,7 +123,23 @@ available:
|
|
|
110
123
|
/items/:id: [observe, assign]
|
|
111
124
|
```
|
|
112
125
|
|
|
113
|
-
###
|
|
126
|
+
### Projections
|
|
127
|
+
|
|
128
|
+
A Method can have a `projection` key that specifies the fields of the operation result to be
|
|
129
|
+
included in the response.
|
|
130
|
+
|
|
131
|
+
```yaml
|
|
132
|
+
/teapots:
|
|
133
|
+
GET:
|
|
134
|
+
endpoint: select
|
|
135
|
+
projection:
|
|
136
|
+
- name
|
|
137
|
+
- state
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
> `id` is always included in the projection.
|
|
141
|
+
|
|
142
|
+
## Intermediate Nodes
|
|
114
143
|
|
|
115
144
|
An RTD Node that has a Route with a key `/` is an _intermediate_ Node.
|
|
116
145
|
Intermediate Nodes must not have Methods as they are unreachable.
|
|
@@ -124,8 +153,10 @@ Intermediate Nodes must not have Methods as they are unreachable.
|
|
|
124
153
|
|
|
125
154
|
## Directives
|
|
126
155
|
|
|
127
|
-
RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
|
|
128
|
-
|
|
156
|
+
RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
|
|
157
|
+
pattern and can be used
|
|
158
|
+
to add or modify the behavior of request processing. Directive declarations are applied to the RTD
|
|
159
|
+
node where they are
|
|
129
160
|
declared and to all nested nodes.
|
|
130
161
|
|
|
131
162
|
```yaml
|
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
|
"""
|
|
@@ -30,6 +32,7 @@ Feature: Access authorization
|
|
|
30
32
|
Given the annotation:
|
|
31
33
|
"""yaml
|
|
32
34
|
/:
|
|
35
|
+
io:output: true
|
|
33
36
|
auth:anonymous: true
|
|
34
37
|
GET:
|
|
35
38
|
dev:stub:
|
|
@@ -38,6 +41,7 @@ Feature: Access authorization
|
|
|
38
41
|
When the following request is received:
|
|
39
42
|
"""
|
|
40
43
|
GET / HTTP/1.1
|
|
44
|
+
host: nex.toa.io
|
|
41
45
|
accept: application/yaml
|
|
42
46
|
"""
|
|
43
47
|
Then the following reply is sent:
|
|
@@ -60,6 +64,7 @@ Feature: Access authorization
|
|
|
60
64
|
When the following request is received:
|
|
61
65
|
"""
|
|
62
66
|
GET / HTTP/1.1
|
|
67
|
+
host: nex.toa.io
|
|
63
68
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
64
69
|
"""
|
|
65
70
|
Then the following reply is sent:
|
|
@@ -71,6 +76,7 @@ Feature: Access authorization
|
|
|
71
76
|
Given the annotation:
|
|
72
77
|
"""yaml
|
|
73
78
|
/:
|
|
79
|
+
io:output: true
|
|
74
80
|
/:id:
|
|
75
81
|
auth:id: id
|
|
76
82
|
GET:
|
|
@@ -80,6 +86,7 @@ Feature: Access authorization
|
|
|
80
86
|
When the following request is received:
|
|
81
87
|
"""
|
|
82
88
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
89
|
+
host: nex.toa.io
|
|
83
90
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
84
91
|
accept: application/yaml
|
|
85
92
|
"""
|
|
@@ -93,6 +100,7 @@ Feature: Access authorization
|
|
|
93
100
|
When the following request is received:
|
|
94
101
|
"""
|
|
95
102
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
103
|
+
host: nex.toa.io
|
|
96
104
|
authorization: Basic dXNlcjoxMjM0NQ==
|
|
97
105
|
accept: application/yaml
|
|
98
106
|
"""
|
|
@@ -109,6 +117,7 @@ Feature: Access authorization
|
|
|
109
117
|
And the annotation:
|
|
110
118
|
"""yaml
|
|
111
119
|
/:
|
|
120
|
+
io:output: true
|
|
112
121
|
auth:role: developer
|
|
113
122
|
GET:
|
|
114
123
|
dev:stub:
|
|
@@ -118,6 +127,7 @@ Feature: Access authorization
|
|
|
118
127
|
# identity with `developer` and `user` roles
|
|
119
128
|
"""
|
|
120
129
|
GET / HTTP/1.1
|
|
130
|
+
host: nex.toa.io
|
|
121
131
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
122
132
|
accept: application/yaml
|
|
123
133
|
"""
|
|
@@ -132,6 +142,7 @@ Feature: Access authorization
|
|
|
132
142
|
# identity with no roles
|
|
133
143
|
"""
|
|
134
144
|
GET / HTTP/1.1
|
|
145
|
+
host: nex.toa.io
|
|
135
146
|
authorization: Basic dXNlcjoxMjM0NQ==
|
|
136
147
|
"""
|
|
137
148
|
Then the following reply is sent:
|
|
@@ -146,6 +157,7 @@ Feature: Access authorization
|
|
|
146
157
|
And the annotation:
|
|
147
158
|
"""yaml
|
|
148
159
|
/:
|
|
160
|
+
io:output: true
|
|
149
161
|
/:
|
|
150
162
|
auth:role: developer:rust:junior # role scope matches
|
|
151
163
|
/nested:
|
|
@@ -159,6 +171,7 @@ Feature: Access authorization
|
|
|
159
171
|
When the following request is received:
|
|
160
172
|
"""
|
|
161
173
|
GET /nested/ HTTP/1.1
|
|
174
|
+
host: nex.toa.io
|
|
162
175
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
163
176
|
accept: text/plain
|
|
164
177
|
"""
|
|
@@ -172,6 +185,7 @@ Feature: Access authorization
|
|
|
172
185
|
When the following request is received:
|
|
173
186
|
"""
|
|
174
187
|
GET /javascript/ HTTP/1.1
|
|
188
|
+
host: nex.toa.io
|
|
175
189
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
176
190
|
"""
|
|
177
191
|
Then the following reply is sent:
|
|
@@ -190,6 +204,7 @@ Feature: Access authorization
|
|
|
190
204
|
- developer
|
|
191
205
|
- admin
|
|
192
206
|
GET:
|
|
207
|
+
io:output: true
|
|
193
208
|
dev:stub:
|
|
194
209
|
access: granted!
|
|
195
210
|
"""
|
|
@@ -197,6 +212,7 @@ Feature: Access authorization
|
|
|
197
212
|
# identity with `developer` and `user` roles
|
|
198
213
|
"""
|
|
199
214
|
GET / HTTP/1.1
|
|
215
|
+
host: nex.toa.io
|
|
200
216
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
201
217
|
accept: application/yaml
|
|
202
218
|
"""
|
|
@@ -215,6 +231,7 @@ Feature: Access authorization
|
|
|
215
231
|
And the annotation:
|
|
216
232
|
"""yaml
|
|
217
233
|
/:
|
|
234
|
+
io:output: true
|
|
218
235
|
/rust/:id:
|
|
219
236
|
auth:rule:
|
|
220
237
|
id: id
|
|
@@ -233,6 +250,7 @@ Feature: Access authorization
|
|
|
233
250
|
When the following request is received:
|
|
234
251
|
"""
|
|
235
252
|
GET /rust/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
253
|
+
host: nex.toa.io
|
|
236
254
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
237
255
|
accept: application/yaml
|
|
238
256
|
"""
|
|
@@ -246,6 +264,7 @@ Feature: Access authorization
|
|
|
246
264
|
When the following request is received:
|
|
247
265
|
"""
|
|
248
266
|
GET /javascript/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
267
|
+
host: nex.toa.io
|
|
249
268
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
250
269
|
"""
|
|
251
270
|
Then the following reply is sent:
|
|
@@ -257,6 +276,7 @@ Feature: Access authorization
|
|
|
257
276
|
Given the annotation:
|
|
258
277
|
"""yaml
|
|
259
278
|
/:
|
|
279
|
+
io:output: true
|
|
260
280
|
/:id:
|
|
261
281
|
auth:id: id
|
|
262
282
|
GET:
|
|
@@ -265,8 +285,37 @@ Feature: Access authorization
|
|
|
265
285
|
"""
|
|
266
286
|
When the following request is received:
|
|
267
287
|
"""
|
|
268
|
-
GET /
|
|
269
|
-
|
|
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 }}
|
|
270
319
|
accept: application/yaml
|
|
271
320
|
"""
|
|
272
321
|
Then the following reply is sent:
|
|
@@ -282,8 +331,9 @@ Feature: Access authorization
|
|
|
282
331
|
"""
|
|
283
332
|
When the following request is received:
|
|
284
333
|
"""
|
|
285
|
-
GET /
|
|
286
|
-
|
|
334
|
+
GET /${{ user.id }}/ HTTP/1.1
|
|
335
|
+
host: nex.toa.io
|
|
336
|
+
authorization: Token ${{ developer.token }}
|
|
287
337
|
accept: application/yaml
|
|
288
338
|
"""
|
|
289
339
|
Then the following reply is sent:
|
|
@@ -295,6 +345,7 @@ Feature: Access authorization
|
|
|
295
345
|
Given the annotation:
|
|
296
346
|
"""yaml
|
|
297
347
|
/:
|
|
348
|
+
io:output: true
|
|
298
349
|
auth:role: developer
|
|
299
350
|
GET:
|
|
300
351
|
dev:stub:
|
|
@@ -306,6 +357,7 @@ Feature: Access authorization
|
|
|
306
357
|
When the following request is received:
|
|
307
358
|
"""
|
|
308
359
|
GET / HTTP/1.1
|
|
360
|
+
host: nex.toa.io
|
|
309
361
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
310
362
|
accept: application/yaml
|
|
311
363
|
"""
|
|
@@ -320,6 +372,7 @@ Feature: Access authorization
|
|
|
320
372
|
When the following request is received:
|
|
321
373
|
"""
|
|
322
374
|
GET / HTTP/1.1
|
|
375
|
+
host: nex.toa.io
|
|
323
376
|
authorization: Token ${{ token }}
|
|
324
377
|
accept: application/yaml
|
|
325
378
|
"""
|
|
@@ -335,6 +388,7 @@ Feature: Access authorization
|
|
|
335
388
|
Given the annotation:
|
|
336
389
|
"""yaml
|
|
337
390
|
/:
|
|
391
|
+
io:output: true
|
|
338
392
|
/:id:
|
|
339
393
|
auth:scheme: basic
|
|
340
394
|
auth:id: id
|
|
@@ -345,6 +399,7 @@ Feature: Access authorization
|
|
|
345
399
|
When the following request is received:
|
|
346
400
|
"""
|
|
347
401
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
402
|
+
host: nex.toa.io
|
|
348
403
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
349
404
|
accept: application/yaml
|
|
350
405
|
"""
|
|
@@ -358,6 +413,7 @@ Feature: Access authorization
|
|
|
358
413
|
When the following request is received:
|
|
359
414
|
"""
|
|
360
415
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
416
|
+
host: nex.toa.io
|
|
361
417
|
authorization: Token v3.local.9oEtVJkfRw4cOJ8M4DxuVuAN29dGT26XMYyPAoXtwrkdkiJVSVj46sMNAOdlxwKGszJZV_ReOL26dxDVlsQ7QAIuRhRPlvsHYNOhcD-LApoAXV0S3IK16EMoEv7tE9z70FCLC3WoIW9RIQ8PR3uZhAdhSgBilsVOpWrk4XtnfCIlVwhYMKu79a66oZZhV2Q7Kl3nfYsf84-6rAL_1H0MsqCDUHVXuIg
|
|
362
418
|
accept: text/plain
|
|
363
419
|
"""
|
|
@@ -374,11 +430,13 @@ Feature: Access authorization
|
|
|
374
430
|
|
|
375
431
|
Given the annotation:
|
|
376
432
|
"""yaml
|
|
377
|
-
|
|
433
|
+
/:
|
|
434
|
+
anonymous: true
|
|
378
435
|
"""
|
|
379
436
|
When the following request is received:
|
|
380
437
|
"""
|
|
381
438
|
POST /identity/roles/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
439
|
+
host: nex.toa.io
|
|
382
440
|
content-type: application/yaml
|
|
383
441
|
|
|
384
442
|
role: developer
|
|
@@ -388,62 +446,46 @@ Feature: Access authorization
|
|
|
388
446
|
401 Unauthorized
|
|
389
447
|
"""
|
|
390
448
|
|
|
391
|
-
Scenario:
|
|
449
|
+
Scenario: Authorization delegation
|
|
392
450
|
Given the `identity.roles` database contains:
|
|
393
|
-
| _id | identity | role
|
|
394
|
-
| 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 |
|
|
395
|
-
And the
|
|
396
|
-
"""yaml
|
|
397
|
-
/:
|
|
398
|
-
/:id:
|
|
399
|
-
auth:id: id
|
|
400
|
-
GET:
|
|
401
|
-
dev:stub:
|
|
402
|
-
access: granted!
|
|
403
|
-
"""
|
|
404
|
-
And the `identity.tokens` configuration:
|
|
451
|
+
| _id | identity | role |
|
|
452
|
+
| 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | developer |
|
|
453
|
+
And the `echo` is running with the following manifest:
|
|
405
454
|
"""yaml
|
|
406
|
-
|
|
455
|
+
exposition:
|
|
456
|
+
/:
|
|
457
|
+
io:output: true
|
|
458
|
+
auth:delegate: identity
|
|
459
|
+
GET: identity
|
|
407
460
|
"""
|
|
408
461
|
When the following request is received:
|
|
409
462
|
"""
|
|
410
|
-
GET /
|
|
411
|
-
|
|
463
|
+
GET /echo/ HTTP/1.1
|
|
464
|
+
host: nex.toa.io
|
|
465
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
466
|
+
accept: application/yaml
|
|
412
467
|
"""
|
|
413
468
|
Then the following reply is sent:
|
|
414
469
|
"""
|
|
415
470
|
200 OK
|
|
416
471
|
authorization: Token ${{ token }}
|
|
417
|
-
"""
|
|
418
|
-
When the following request is received:
|
|
419
|
-
"""
|
|
420
|
-
PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
421
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
422
|
-
content-type: application/yaml
|
|
423
472
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
204 No Content
|
|
473
|
+
identity:
|
|
474
|
+
id: efe3a65ebbee47ed95a73edd911ea328
|
|
475
|
+
roles:
|
|
476
|
+
- developer
|
|
429
477
|
"""
|
|
430
|
-
# accessing a resource with a banned Identity
|
|
431
478
|
When the following request is received:
|
|
432
479
|
"""
|
|
433
|
-
GET /
|
|
434
|
-
|
|
480
|
+
GET /echo/ HTTP/1.1
|
|
481
|
+
host: nex.toa.io
|
|
482
|
+
authorization: Token ${{ token }}
|
|
435
483
|
"""
|
|
436
484
|
Then the following reply is sent:
|
|
437
485
|
"""
|
|
438
|
-
|
|
439
|
-
"""
|
|
440
|
-
Then after 1 second
|
|
441
|
-
When the following request is received:
|
|
442
|
-
"""
|
|
443
|
-
GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
444
|
-
authorization: Token ${{ token }}
|
|
486
|
+
200 OK
|
|
445
487
|
"""
|
|
446
|
-
|
|
488
|
+
And the reply does not contain:
|
|
447
489
|
"""
|
|
448
|
-
|
|
490
|
+
authorization: Token
|
|
449
491
|
"""
|