@toa.io/extensions.exposition 1.0.0-alpha.3 → 1.0.0-alpha.31
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 -6
- 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 -8
- 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 +20 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +3 -3
- 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 +2 -0
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +32 -0
- package/components/identity.basic/source/transit.ts +7 -5
- package/components/identity.basic/source/types.ts +2 -0
- package/components/identity.federation/manifest.toa.yaml +28 -17
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +6 -5
- 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 +3 -3
- 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 +15 -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} +8 -3
- 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.js → types/entity.js} +1 -1
- 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 +10 -9
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/jwt.test.ts +2 -2
- package/components/identity.federation/source/lib/jwt.ts +7 -8
- package/components/identity.federation/source/types/configuration.ts +16 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +9 -4
- 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 -5
- 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 -4
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +10 -4
- 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 +12 -5
- 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 -6
- package/components/octets.storage/operations/store.js +1 -1
- package/documentation/access.md +27 -16
- package/documentation/authorities.md +53 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +52 -27
- package/documentation/identity.md +17 -22
- package/documentation/io.md +56 -0
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +57 -8
- package/documentation/require.md +15 -0
- package/documentation/tree.md +22 -4
- package/documentation/vary.md +14 -14
- package/entity.json +0 -0
- package/features/access.feature +83 -56
- package/features/annotation.feature +2 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +99 -0
- package/features/authorities.tokens.feature +118 -0
- package/features/body.feature +5 -1
- package/features/cache.feature +78 -5
- package/features/cors.feature +6 -2
- package/features/debug.feature +34 -0
- package/features/directives.feature +5 -0
- package/features/dynamic.feature +18 -7
- package/features/errors.feature +19 -5
- package/features/etag.feature +103 -0
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +137 -14
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +61 -8
- package/features/identity.roles.feature +220 -4
- package/features/identity.tokens.feature +114 -4
- package/features/io.feature +205 -0
- package/features/octets.entries.feature +11 -1
- package/features/octets.feature +60 -64
- package/features/octets.meta.feature +7 -3
- package/features/octets.workflows.feature +14 -0
- 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 +25 -12
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +24 -4
- package/features/steps/IdP.ts +28 -23
- package/features/steps/components/echo/manifest.toa.yaml +5 -0
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/greeter/manifest.toa.yaml +1 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +1 -0
- package/features/steps/components/pots/manifest.toa.yaml +12 -3
- package/features/steps/components/sequences/manifest.toa.yaml +1 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +69 -0
- package/features/vary.feature +105 -3
- package/package.json +12 -14
- package/readme.md +19 -13
- package/schemas/annotation.cos.yaml +2 -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/querystring.cos.yaml +1 -0
- package/source/Annotation.ts +3 -2
- package/source/Context.ts +6 -4
- package/source/Directive.test.ts +7 -7
- package/source/Directive.ts +19 -46
- package/source/Endpoint.ts +55 -6
- package/source/Factory.ts +17 -9
- package/source/Gateway.ts +38 -53
- package/source/HTTP/Context.ts +89 -0
- package/source/HTTP/Server.ts +99 -121
- package/source/HTTP/Timing.ts +40 -0
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/index.ts +1 -0
- package/source/HTTP/messages.test.ts +27 -8
- package/source/HTTP/messages.ts +32 -48
- package/source/Mapping.ts +12 -8
- package/source/Query.test.ts +1 -1
- package/source/Query.ts +35 -24
- package/source/RTD/Context.ts +7 -10
- package/source/RTD/Directives.ts +28 -4
- package/source/RTD/Endpoint.ts +6 -4
- package/source/RTD/Match.ts +2 -7
- package/source/RTD/Method.ts +7 -13
- package/source/RTD/Node.ts +13 -14
- package/source/RTD/Tree.ts +17 -16
- package/source/RTD/factory.ts +3 -6
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +33 -17
- package/source/directives/auth/Anonymous.ts +3 -2
- package/source/directives/auth/Authorization.ts +34 -21
- package/source/directives/auth/Delegate.ts +35 -0
- package/source/directives/auth/Incept.ts +13 -7
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +27 -17
- package/source/directives/auth/Scheme.ts +2 -2
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +5 -5
- package/source/directives/cache/Control.ts +48 -22
- package/source/directives/cache/types.ts +1 -1
- package/source/directives/cors/CORS.ts +18 -10
- package/source/directives/dev/Development.ts +4 -4
- package/source/directives/index.ts +6 -4
- 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 +5 -4
- package/source/directives/octets/Delete.ts +23 -11
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +33 -17
- package/source/directives/octets/List.ts +18 -8
- package/source/directives/octets/Octets.ts +9 -9
- package/source/directives/octets/Store.ts +29 -19
- package/source/directives/octets/Workflow.ts +12 -5
- package/source/directives/octets/types.ts +0 -7
- package/source/directives/octets/workflows/Workflow.ts +2 -2
- 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 +8 -6
- 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 +9 -7
- package/source/directives/vary/embeddings/Language.ts +2 -2
- 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/io.ts +2 -2
- package/source/root.ts +5 -0
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -2
- package/transpiled/Context.d.ts +6 -4
- package/transpiled/Directive.d.ts +8 -21
- package/transpiled/Directive.js +11 -14
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +7 -5
- package/transpiled/Endpoint.js +60 -2
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +11 -4
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +4 -8
- package/transpiled/Gateway.js +25 -35
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +31 -0
- package/transpiled/HTTP/Context.js +60 -0
- package/transpiled/HTTP/Context.js.map +1 -0
- package/transpiled/HTTP/Server.d.ts +21 -9
- package/transpiled/HTTP/Server.js +98 -100
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/Timing.d.ts +10 -0
- package/transpiled/HTTP/Timing.js +29 -0
- package/transpiled/HTTP/Timing.js.map +1 -0
- 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/index.d.ts +1 -0
- package/transpiled/HTTP/index.js +1 -0
- package/transpiled/HTTP/index.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +7 -21
- package/transpiled/HTTP/messages.js +24 -26
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Mapping.js +11 -8
- 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/Context.d.ts +7 -6
- package/transpiled/RTD/Directives.d.ts +19 -4
- package/transpiled/RTD/Endpoint.d.ts +6 -4
- package/transpiled/RTD/Match.d.ts +2 -4
- package/transpiled/RTD/Method.d.ts +7 -7
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -6
- package/transpiled/RTD/Node.js +2 -1
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +6 -6
- package/transpiled/RTD/Tree.js +4 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.d.ts +2 -4
- package/transpiled/RTD/factory.js +1 -1
- package/transpiled/RTD/factory.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 -15
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Anonymous.js +3 -4
- package/transpiled/directives/auth/Anonymous.js.map +1 -1
- package/transpiled/directives/auth/Authorization.d.ts +2 -3
- package/transpiled/directives/auth/Authorization.js +18 -11
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +8 -0
- package/transpiled/directives/auth/Delegate.js +29 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Incept.d.ts +1 -1
- package/transpiled/directives/auth/Incept.js +13 -7
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +25 -17
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/Scheme.js +2 -2
- package/transpiled/directives/auth/Scheme.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +3 -3
- package/transpiled/directives/cache/Cache.js +3 -3
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +5 -4
- package/transpiled/directives/cache/Control.js +32 -15
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cache/types.d.ts +1 -1
- package/transpiled/directives/cors/CORS.d.ts +2 -3
- package/transpiled/directives/cors/CORS.js +17 -10
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.d.ts +3 -3
- package/transpiled/directives/dev/Development.js +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/index.d.ts +2 -2
- package/transpiled/directives/index.js +5 -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 -21
- 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 +4 -4
- package/transpiled/directives/octets/Context.js +4 -2
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +4 -3
- package/transpiled/directives/octets/Delete.js +22 -10
- 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 +4 -3
- package/transpiled/directives/octets/Fetch.js +31 -15
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +4 -3
- package/transpiled/directives/octets/List.js +16 -7
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +4 -4
- package/transpiled/directives/octets/Octets.js +5 -5
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +4 -3
- package/transpiled/directives/octets/Store.js +20 -13
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +4 -3
- package/transpiled/directives/octets/Workflow.js +11 -4
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +0 -5
- package/transpiled/directives/octets/workflows/Workflow.d.ts +1 -1
- package/transpiled/directives/octets/workflows/Workflow.js +2 -2
- 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 +3 -3
- package/transpiled/directives/vary/Vary.js +4 -4
- 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 +9 -7
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Language.js +2 -2
- package/transpiled/directives/vary/embeddings/Language.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/io.d.ts +2 -2
- 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.fixtures.ts +0 -40
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -37
- package/transpiled/HTTP/Server.fixtures.d.ts +0 -10
- package/transpiled/HTTP/Server.fixtures.js +0 -31
- package/transpiled/HTTP/Server.fixtures.js.map +0 -1
- package/transpiled/directives/octets/Permute.d.ts +0 -10
- package/transpiled/directives/octets/Permute.js.map +0 -1
|
@@ -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
|
|
@@ -45,7 +45,7 @@ Undefined `query` denies any query arguments in requests.
|
|
|
45
45
|
|
|
46
46
|
## Criteria
|
|
47
47
|
|
|
48
|
-
Search
|
|
48
|
+
Search criteria in [RSQL](https://github.com/jirutka/rsql-parser) format.
|
|
49
49
|
|
|
50
50
|
The `criteria` property is considered as *open* when it ends with a `;`, allowing the combination of
|
|
51
51
|
request query criteria using `and` logic.
|
|
@@ -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
|
|
@@ -224,3 +228,48 @@ A list of Entity properties to be included in the Observation result.
|
|
|
224
228
|
```yaml
|
|
225
229
|
projection: [id, title, timestamp]
|
|
226
230
|
```
|
|
231
|
+
|
|
232
|
+
## Optimistic concurrency control
|
|
233
|
+
|
|
234
|
+
If an operation returns an object with `_version` property,
|
|
235
|
+
then its value is passed as the value of
|
|
236
|
+
the [`etag` header](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3) in the response
|
|
237
|
+
(and removed from the object).
|
|
238
|
+
|
|
239
|
+
Client can use the `if-match` request header to perform an operation only if the corresponding
|
|
240
|
+
object has not been modified since the last retrieval.
|
|
241
|
+
|
|
242
|
+
```http
|
|
243
|
+
GET /dummies/5e82ed5e/ HTTP/1.1
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
HTTP/1.1 200 OK
|
|
248
|
+
etag: "1"
|
|
249
|
+
|
|
250
|
+
foo: bar
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
```http request
|
|
254
|
+
PUT /dummies/5e82ed5e/ HTTP/1.1
|
|
255
|
+
if-match: "1"
|
|
256
|
+
|
|
257
|
+
foo: baz
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
```http
|
|
261
|
+
200 OK
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
```http request
|
|
265
|
+
PUT /dummies/5e82ed5e/ HTTP/1.1
|
|
266
|
+
if-match: "never"
|
|
267
|
+
|
|
268
|
+
foo: baz
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```http
|
|
272
|
+
412 Precondition Failed
|
|
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
|
@@ -102,7 +102,7 @@ HTTP methods can only be mapped to operations of the corresponding types.
|
|
|
102
102
|
| `GET` | **Observation**<br/>**Computation** |
|
|
103
103
|
| `PATCH` | **Assignment**<br/>**Effect** |
|
|
104
104
|
|
|
105
|
-
As method mapping is unambiguous for Observation,
|
|
105
|
+
As method mapping is unambiguous for Observation, Assignment, and Computation, a concise syntax is
|
|
106
106
|
available:
|
|
107
107
|
|
|
108
108
|
```yaml
|
|
@@ -110,7 +110,23 @@ available:
|
|
|
110
110
|
/items/:id: [observe, assign]
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
###
|
|
113
|
+
### Projections
|
|
114
|
+
|
|
115
|
+
A Method can have a `projection` key that specifies the fields of the operation result to be
|
|
116
|
+
included in the response.
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
/teapots:
|
|
120
|
+
GET:
|
|
121
|
+
endpoint: select
|
|
122
|
+
projection:
|
|
123
|
+
- name
|
|
124
|
+
- state
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
> `id` is always included in the projection.
|
|
128
|
+
|
|
129
|
+
## Intermediate Nodes
|
|
114
130
|
|
|
115
131
|
An RTD Node that has a Route with a key `/` is an _intermediate_ Node.
|
|
116
132
|
Intermediate Nodes must not have Methods as they are unreachable.
|
|
@@ -124,8 +140,10 @@ Intermediate Nodes must not have Methods as they are unreachable.
|
|
|
124
140
|
|
|
125
141
|
## Directives
|
|
126
142
|
|
|
127
|
-
RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
|
|
128
|
-
|
|
143
|
+
RTD Directives are declared using RTD node or Method keys following the `{family}:{directive}`
|
|
144
|
+
pattern and can be used
|
|
145
|
+
to add or modify the behavior of request processing. Directive declarations are applied to the RTD
|
|
146
|
+
node where they are
|
|
129
147
|
declared and to all nested nodes.
|
|
130
148
|
|
|
131
149
|
```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/entity.json
ADDED
|
File without changes
|
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,31 @@ 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
|
-
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
471
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
204 No Content
|
|
429
|
-
"""
|
|
430
|
-
# accessing a resource with a banned Identity
|
|
431
|
-
When the following request is received:
|
|
432
|
-
"""
|
|
433
|
-
GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
434
|
-
authorization: Basic dXNlcjoxMjM0NQ==
|
|
435
|
-
"""
|
|
436
|
-
Then the following reply is sent:
|
|
437
|
-
"""
|
|
438
|
-
401 Unauthorized
|
|
439
|
-
"""
|
|
440
|
-
Then after 1 second
|
|
441
|
-
When the following request is received:
|
|
442
|
-
"""
|
|
443
|
-
GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
444
|
-
authorization: Token ${{ token }}
|
|
445
|
-
"""
|
|
446
|
-
Then the following reply is sent:
|
|
447
|
-
"""
|
|
448
|
-
401 Unauthorized
|
|
472
|
+
identity:
|
|
473
|
+
id: efe3a65ebbee47ed95a73edd911ea328
|
|
474
|
+
roles:
|
|
475
|
+
- developer
|
|
449
476
|
"""
|
|
@@ -4,6 +4,7 @@ Feature: Annotation
|
|
|
4
4
|
Given the annotation:
|
|
5
5
|
"""yaml
|
|
6
6
|
/:
|
|
7
|
+
io:output: true
|
|
7
8
|
anonymous: true
|
|
8
9
|
/foo:
|
|
9
10
|
GET:
|
|
@@ -17,6 +18,7 @@ Feature: Annotation
|
|
|
17
18
|
When the following request is received:
|
|
18
19
|
"""
|
|
19
20
|
GET /foo/ HTTP/1.1
|
|
21
|
+
host: nex.toa.io
|
|
20
22
|
accept: application/yaml
|
|
21
23
|
"""
|
|
22
24
|
Then the following reply is sent:
|