@toa.io/extensions.exposition 1.0.0-alpha.8 → 1.0.0-alpha.82
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 +20 -11
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +5 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +5 -3
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +8 -4
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +8 -6
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +32 -16
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +4 -11
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/incept.d.ts +11 -0
- package/components/identity.federation/operations/{create.js → incept.js} +6 -7
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/assertions-as-values.js +4 -2
- package/components/identity.federation/operations/lib/assertions-as-values.js.map +1 -1
- package/components/identity.federation/operations/lib/jwt.d.ts +5 -5
- package/components/identity.federation/operations/lib/jwt.js +25 -12
- package/components/identity.federation/operations/lib/jwt.js.map +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/configuration.d.ts +14 -0
- package/components/identity.federation/operations/types/configuration.js +3 -0
- package/components/identity.federation/operations/types/configuration.js.map +1 -0
- package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +15 -7
- package/components/identity.federation/operations/types/context.js +3 -0
- package/components/identity.federation/operations/types/context.js.map +1 -0
- package/components/identity.federation/operations/types/entity.d.ts +6 -0
- package/components/identity.federation/operations/types/entity.js +3 -0
- package/components/identity.federation/operations/types/entity.js.map +1 -0
- package/components/identity.federation/operations/types/index.d.ts +3 -0
- package/components/identity.federation/operations/types/index.js +20 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +6 -19
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/assertions-as-values.ts +5 -2
- package/components/identity.federation/source/lib/jwt.test.ts +123 -4
- package/components/identity.federation/source/lib/jwt.ts +36 -16
- package/components/identity.federation/source/types/configuration.ts +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -0
- package/components/identity.federation/tsconfig.json +5 -4
- package/components/identity.roles/manifest.toa.yaml +17 -8
- 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 +6 -7
- package/components/octets.storage/operations/get.js +2 -2
- package/components/octets.storage/operations/store.js +113 -3
- package/documentation/access.md +75 -38
- package/documentation/authorities.md +49 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +47 -22
- package/documentation/flow.md +31 -0
- package/documentation/identity.md +17 -22
- package/documentation/introspection.md +82 -0
- package/documentation/octets.md +81 -23
- package/documentation/protocol.md +13 -3
- package/documentation/query.md +29 -4
- package/documentation/require.md +15 -0
- package/documentation/tree.md +13 -0
- package/documentation/vary.md +14 -14
- package/features/access.feature +78 -46
- package/features/annotation.feature +1 -0
- package/features/auth.claim.feature +170 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +100 -0
- package/features/authorities.tokens.feature +117 -0
- package/features/body.feature +2 -0
- package/features/cache.feature +109 -5
- package/features/cors.feature +6 -1
- package/features/debug.feature +34 -0
- package/features/directives.feature +3 -0
- package/features/dynamic.feature +48 -0
- package/features/errors.feature +32 -7
- package/features/etag.feature +31 -0
- package/features/flow.feature +45 -0
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +113 -23
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +66 -11
- package/features/identity.roles.feature +250 -7
- package/features/identity.tokens.feature +54 -4
- package/features/introspection.feature +153 -0
- package/features/io.feature +38 -1
- package/features/methods.feature +47 -0
- package/features/octets.download.feature +189 -0
- package/features/octets.entries.feature +8 -1
- package/features/octets.feature +82 -54
- package/features/octets.meta.feature +3 -0
- package/features/octets.workflows.feature +239 -19
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +77 -2
- package/features/realtime.feature +34 -0
- package/features/require.feature +67 -0
- package/features/response.feature +38 -3
- package/features/routes.feature +93 -2
- package/features/steps/Database.ts +16 -9
- package/features/steps/Gateway.ts +23 -6
- package/features/steps/IdP.ts +30 -25
- package/features/steps/Parameters.ts +4 -1
- package/features/steps/Realtime.ts +151 -0
- package/features/steps/components/echo/manifest.toa.yaml +14 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/echo/operations/parameters.js +7 -0
- package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
- package/features/steps/components/echo.beacon/operations/hello.js +5 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +22 -1
- package/features/steps/components/octets.tester/operations/authority.js +7 -0
- package/features/steps/components/octets.tester/operations/baz.js +1 -2
- package/features/steps/components/octets.tester/operations/diversify.js +3 -1
- package/features/steps/components/octets.tester/operations/foo.js +2 -2
- package/features/steps/components/octets.tester/operations/redirect.js +12 -0
- package/features/steps/components/octets.tester/operations/yex.js +16 -0
- package/features/steps/components/octets.tester/operations/yield.js +13 -0
- package/features/steps/components/pots/manifest.toa.yaml +14 -3
- package/features/steps/components/users/manifest.toa.yaml +0 -1
- package/features/steps/components/users.properties/manifest.toa.yaml +1 -1
- package/features/streams.feature +5 -0
- package/features/timing.feature +4 -1
- package/features/vary.feature +71 -0
- package/package.json +23 -14
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- package/schemas/method.cos.yaml +1 -1
- package/schemas/node.cos.yaml +2 -0
- package/schemas/octets/store.cos.yaml +25 -3
- package/schemas/query.cos.yaml +4 -10
- package/source/Annotation.ts +3 -3
- package/source/Branch.ts +1 -0
- package/source/Composition.ts +0 -6
- package/source/Context.ts +1 -0
- package/source/Directive.ts +4 -5
- package/source/Endpoint.ts +55 -15
- package/source/Factory.ts +22 -13
- package/source/Gateway.ts +67 -19
- package/source/HTTP/Context.ts +25 -2
- package/source/HTTP/Server.ts +54 -44
- package/source/HTTP/exceptions.ts +13 -1
- package/source/HTTP/formats/index.ts +3 -3
- package/source/HTTP/messages.test.ts +45 -2
- package/source/HTTP/messages.ts +23 -5
- package/source/Introspection.ts +11 -0
- package/source/Mapping.ts +63 -21
- package/source/Query.test.ts +3 -3
- package/source/Query.ts +123 -33
- package/source/RTD/Context.ts +1 -1
- package/source/RTD/Endpoint.ts +3 -0
- package/source/RTD/Method.ts +16 -0
- package/source/RTD/Node.ts +29 -13
- package/source/RTD/Route.ts +5 -4
- package/source/RTD/Tree.ts +2 -2
- package/source/RTD/factory.ts +5 -2
- package/source/RTD/syntax/parse.ts +37 -24
- package/source/RTD/syntax/types.ts +6 -4
- package/source/Remotes.ts +7 -6
- package/source/Tenant.ts +6 -20
- package/source/deployment.ts +33 -23
- package/source/directives/auth/Authorization.ts +37 -14
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Federation.ts +84 -0
- package/source/directives/auth/Incept.ts +4 -3
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +22 -14
- package/source/directives/auth/split.ts +1 -1
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +13 -6
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/cors/CORS.ts +1 -1
- package/source/directives/dev/Development.ts +1 -1
- package/source/directives/flow/Fetch.ts +88 -0
- package/source/directives/flow/Flow.ts +34 -0
- package/source/directives/flow/index.ts +3 -0
- package/source/directives/flow/types.ts +6 -0
- package/source/directives/index.ts +3 -1
- package/source/directives/io/Input.ts +4 -4
- package/source/directives/io/Output.ts +4 -3
- package/source/directives/octets/Context.ts +3 -2
- package/source/directives/octets/Fetch.ts +11 -10
- package/source/directives/octets/List.ts +5 -5
- package/source/directives/octets/Octets.ts +1 -3
- package/source/directives/octets/Store.ts +30 -10
- package/source/directives/octets/bytes.test.ts +30 -0
- package/source/directives/octets/bytes.ts +18 -0
- package/source/directives/octets/schemas.ts +4 -6
- package/source/directives/octets/workflows/Execution.ts +60 -8
- package/source/directives/octets/workflows/Workflow.ts +2 -1
- package/source/directives/require/Directive.ts +5 -0
- package/source/directives/require/Headers.ts +20 -0
- package/source/directives/require/Require.ts +28 -0
- package/source/directives/require/index.ts +3 -0
- package/source/directives/vary/Directive.ts +2 -1
- package/source/directives/vary/Embed.ts +14 -8
- package/source/directives/vary/Vary.ts +6 -4
- package/source/directives/vary/embeddings/Authority.ts +8 -0
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +6 -4
- package/source/exceptions.ts +17 -11
- package/source/manifest.ts +10 -11
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Branch.d.ts +1 -0
- package/transpiled/Composition.d.ts +0 -1
- package/transpiled/Composition.js +0 -4
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Context.d.ts +1 -0
- package/transpiled/Directive.js +4 -4
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +6 -4
- package/transpiled/Endpoint.js +35 -7
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +3 -2
- package/transpiled/Factory.js +18 -10
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +3 -0
- package/transpiled/Gateway.js +51 -12
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +8 -1
- package/transpiled/HTTP/Context.js +16 -2
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +13 -2
- package/transpiled/HTTP/Server.js +41 -36
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +7 -1
- package/transpiled/HTTP/exceptions.js +13 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/formats/index.js +3 -3
- package/transpiled/HTTP/formats/index.js.map +1 -1
- package/transpiled/HTTP/messages.d.ts +1 -0
- package/transpiled/HTTP/messages.js +24 -5
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Introspection.d.ts +9 -0
- package/transpiled/Introspection.js +3 -0
- package/transpiled/Introspection.js.map +1 -0
- package/transpiled/Mapping.d.ts +10 -2
- package/transpiled/Mapping.js +48 -19
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +10 -1
- package/transpiled/Query.js +87 -30
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +1 -1
- package/transpiled/RTD/Endpoint.d.ts +1 -0
- package/transpiled/RTD/Method.d.ts +4 -0
- package/transpiled/RTD/Method.js +11 -0
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -1
- package/transpiled/RTD/Node.js +23 -12
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.d.ts +1 -1
- package/transpiled/RTD/Route.js +0 -1
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +1 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.js +5 -2
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/syntax/parse.js +34 -22
- package/transpiled/RTD/syntax/parse.js.map +1 -1
- package/transpiled/RTD/syntax/types.d.ts +5 -3
- package/transpiled/RTD/syntax/types.js +1 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +4 -4
- package/transpiled/Remotes.js +6 -5
- package/transpiled/Remotes.js.map +1 -1
- package/transpiled/Tenant.d.ts +5 -5
- package/transpiled/Tenant.js +2 -13
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +28 -20
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Authorization.js +26 -10
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +10 -0
- package/transpiled/directives/auth/Delegate.js +34 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Federation.d.ts +16 -0
- package/transpiled/directives/auth/Federation.js +57 -0
- package/transpiled/directives/auth/Federation.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +4 -3
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +20 -14
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/split.js +1 -1
- package/transpiled/directives/auth/split.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +3 -3
- package/transpiled/directives/cache/Cache.js +10 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -1
- package/transpiled/directives/cache/Control.js +29 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cors/CORS.js +1 -1
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.js +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/flow/Fetch.d.ts +13 -0
- package/transpiled/directives/flow/Fetch.js +59 -0
- package/transpiled/directives/flow/Fetch.js.map +1 -0
- package/transpiled/directives/flow/Flow.d.ts +10 -0
- package/transpiled/directives/flow/Flow.js +27 -0
- package/transpiled/directives/flow/Flow.js.map +1 -0
- package/transpiled/directives/flow/index.d.ts +2 -0
- package/transpiled/directives/flow/index.js +6 -0
- package/transpiled/directives/flow/index.js.map +1 -0
- package/transpiled/directives/flow/types.d.ts +5 -0
- package/transpiled/directives/flow/types.js.map +1 -0
- package/transpiled/directives/index.js +3 -1
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Input.js +2 -2
- package/transpiled/directives/io/Input.js.map +1 -1
- package/transpiled/directives/io/Output.js +2 -2
- package/transpiled/directives/io/Output.js.map +1 -1
- package/transpiled/directives/octets/Context.js +4 -24
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Fetch.d.ts +3 -3
- package/transpiled/directives/octets/Fetch.js +8 -8
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +3 -3
- package/transpiled/directives/octets/List.js +3 -3
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.js +1 -3
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +6 -1
- package/transpiled/directives/octets/Store.js +17 -7
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/bytes.d.ts +1 -0
- package/transpiled/directives/octets/bytes.js +21 -0
- package/transpiled/directives/octets/bytes.js.map +1 -0
- package/transpiled/directives/octets/schemas.d.ts +4 -6
- package/transpiled/directives/octets/schemas.js +1 -3
- package/transpiled/directives/octets/schemas.js.map +1 -1
- package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
- package/transpiled/directives/octets/workflows/Execution.js +44 -9
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.js +2 -1
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
- package/transpiled/directives/require/Directive.d.ts +4 -0
- package/transpiled/directives/require/Directive.js +3 -0
- package/transpiled/directives/require/Directive.js.map +1 -0
- package/transpiled/directives/require/Headers.d.ts +7 -0
- package/transpiled/directives/require/Headers.js +19 -0
- package/transpiled/directives/require/Headers.js.map +1 -0
- package/transpiled/directives/require/Require.d.ts +9 -0
- package/transpiled/directives/require/Require.js +27 -0
- package/transpiled/directives/require/Require.js.map +1 -0
- package/transpiled/directives/require/index.d.ts +2 -0
- package/transpiled/directives/require/index.js +6 -0
- package/transpiled/directives/require/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +2 -1
- package/transpiled/directives/vary/Embed.d.ts +2 -1
- package/transpiled/directives/vary/Embed.js +8 -6
- package/transpiled/directives/vary/Embed.js.map +1 -1
- package/transpiled/directives/vary/Vary.d.ts +2 -2
- package/transpiled/directives/vary/Vary.js +3 -3
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Authority.js +10 -0
- package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
- package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
- package/transpiled/directives/vary/embeddings/index.js +8 -4
- package/transpiled/directives/vary/embeddings/index.js.map +1 -1
- package/transpiled/exceptions.d.ts +3 -2
- package/transpiled/exceptions.js +10 -5
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/manifest.js +10 -11
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.json +9 -7
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/octets.storage/operations/permute.js +0 -7
- package/schemas/octets/context.cos.yaml +0 -1
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -44
- package/transpiled/directives/octets/Permute.d.ts +0 -11
- package/transpiled/directives/octets/Permute.js +0 -58
- package/transpiled/directives/octets/Permute.js.map +0 -1
- /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Roles management
|
|
2
3
|
|
|
3
|
-
Scenario:
|
|
4
|
+
Scenario: Granting a role to an Identity
|
|
5
|
+
# root:secret
|
|
6
|
+
# user:pass
|
|
4
7
|
Given the `identity.basic` database contains:
|
|
5
|
-
| _id | username | password |
|
|
6
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
7
|
-
| 4344518184ad44228baffce7a44fd0b1 | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
8
|
+
| _id | authority | username | password |
|
|
9
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
10
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
8
11
|
And the `identity.roles` database contains:
|
|
9
12
|
| _id | identity | role |
|
|
10
13
|
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
@@ -12,7 +15,7 @@ Feature: Roles management
|
|
|
12
15
|
"""yaml
|
|
13
16
|
/:
|
|
14
17
|
io:output: true
|
|
15
|
-
auth:role:
|
|
18
|
+
auth:role: foo:bar
|
|
16
19
|
GET:
|
|
17
20
|
dev:stub:
|
|
18
21
|
access: granted!
|
|
@@ -21,6 +24,7 @@ Feature: Roles management
|
|
|
21
24
|
# user doesn't have the required role
|
|
22
25
|
"""
|
|
23
26
|
GET / HTTP/1.1
|
|
27
|
+
host: nex.toa.io
|
|
24
28
|
authorization: Basic dXNlcjpwYXNz
|
|
25
29
|
"""
|
|
26
30
|
Then the following reply is sent:
|
|
@@ -31,22 +35,261 @@ Feature: Roles management
|
|
|
31
35
|
# root adds a role to a user
|
|
32
36
|
"""
|
|
33
37
|
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
38
|
+
host: nex.toa.io
|
|
34
39
|
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
40
|
+
accept: application/yaml
|
|
35
41
|
content-type: application/yaml
|
|
36
42
|
|
|
37
|
-
role:
|
|
43
|
+
role: foo:bar
|
|
38
44
|
"""
|
|
39
45
|
Then the following reply is sent:
|
|
40
46
|
"""
|
|
41
47
|
201 Created
|
|
48
|
+
|
|
49
|
+
grantor: 72cf9b0ab0ac4ab2b8036e4e940ddcae
|
|
50
|
+
"""
|
|
51
|
+
When the following request is received:
|
|
52
|
+
# root adds a role to a user
|
|
53
|
+
"""
|
|
54
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
55
|
+
host: nex.toa.io
|
|
56
|
+
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
57
|
+
accept: application/yaml
|
|
58
|
+
content-type: application/yaml
|
|
59
|
+
|
|
60
|
+
role: foo:baz
|
|
42
61
|
"""
|
|
62
|
+
Then the following reply is sent:
|
|
63
|
+
"""
|
|
64
|
+
201 Created
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
# user now have the role
|
|
43
68
|
When the following request is received:
|
|
44
|
-
# user now have the role
|
|
45
69
|
"""
|
|
46
70
|
GET / HTTP/1.1
|
|
71
|
+
host: nex.toa.io
|
|
47
72
|
authorization: Basic dXNlcjpwYXNz
|
|
48
73
|
"""
|
|
49
74
|
Then the following reply is sent:
|
|
50
75
|
"""
|
|
51
76
|
200 OK
|
|
77
|
+
authorization: Token ${{ token }}
|
|
78
|
+
"""
|
|
79
|
+
# repeat with token
|
|
80
|
+
When the following request is received:
|
|
81
|
+
"""
|
|
82
|
+
GET / HTTP/1.1
|
|
83
|
+
host: nex.toa.io
|
|
84
|
+
authorization: Token ${{ token }}
|
|
85
|
+
"""
|
|
86
|
+
Then the following reply is sent:
|
|
87
|
+
"""
|
|
88
|
+
200 OK
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
Scenario Outline: Delegating roles
|
|
92
|
+
# moderator:secret
|
|
93
|
+
# assistant:pass
|
|
94
|
+
Given the `identity.basic` database contains:
|
|
95
|
+
| _id | authority | username | password |
|
|
96
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
97
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
98
|
+
And the `identity.roles` database contains:
|
|
99
|
+
| _id | identity | role |
|
|
100
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
|
|
101
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
102
|
+
And the annotation:
|
|
103
|
+
"""yaml
|
|
104
|
+
/:
|
|
105
|
+
io:output: true
|
|
106
|
+
auth:role: app:moderation:photos
|
|
107
|
+
GET:
|
|
108
|
+
dev:stub:
|
|
109
|
+
access: granted!
|
|
110
|
+
"""
|
|
111
|
+
When the following request is received:
|
|
112
|
+
# assistant doesn't have the required role
|
|
113
|
+
"""
|
|
114
|
+
GET / HTTP/1.1
|
|
115
|
+
host: nex.toa.io
|
|
116
|
+
authorization: Basic YXNzaXN0YW50OnBhc3M=
|
|
117
|
+
"""
|
|
118
|
+
Then the following reply is sent:
|
|
119
|
+
"""
|
|
120
|
+
403 Forbidden
|
|
121
|
+
"""
|
|
122
|
+
When the following request is received:
|
|
123
|
+
# moderator delegates a role to an assistant
|
|
124
|
+
"""
|
|
125
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
126
|
+
host: nex.toa.io
|
|
127
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
128
|
+
content-type: application/yaml
|
|
129
|
+
|
|
130
|
+
role: <role>
|
|
131
|
+
"""
|
|
132
|
+
Then the following reply is sent:
|
|
133
|
+
"""
|
|
134
|
+
201 Created
|
|
135
|
+
"""
|
|
136
|
+
When the following request is received:
|
|
137
|
+
# assistant has access
|
|
138
|
+
"""
|
|
139
|
+
GET / HTTP/1.1
|
|
140
|
+
host: nex.toa.io
|
|
141
|
+
authorization: Basic YXNzaXN0YW50OnBhc3M=
|
|
142
|
+
"""
|
|
143
|
+
Then the following reply is sent:
|
|
144
|
+
"""
|
|
145
|
+
200 OK
|
|
146
|
+
"""
|
|
147
|
+
Examples:
|
|
148
|
+
| role |
|
|
149
|
+
| app:moderation |
|
|
150
|
+
| app:moderation:photos |
|
|
151
|
+
|
|
152
|
+
Scenario: Delegating role out of own scope
|
|
153
|
+
Given the `identity.basic` database contains:
|
|
154
|
+
| _id | authority | username | password |
|
|
155
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
156
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
157
|
+
And the `identity.roles` database contains:
|
|
158
|
+
| _id | identity | role |
|
|
159
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
|
|
160
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
161
|
+
And the annotation:
|
|
162
|
+
"""yaml
|
|
163
|
+
/:
|
|
164
|
+
io:output: true
|
|
165
|
+
auth:role: app:moderation:photos
|
|
166
|
+
GET:
|
|
167
|
+
dev:stub:
|
|
168
|
+
access: granted!
|
|
169
|
+
"""
|
|
170
|
+
When the following request is received:
|
|
171
|
+
"""
|
|
172
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
173
|
+
host: nex.toa.io
|
|
174
|
+
accept: application/yaml
|
|
175
|
+
content-type: application/yaml
|
|
176
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
177
|
+
|
|
178
|
+
role: app:finance
|
|
179
|
+
"""
|
|
180
|
+
Then the following reply is sent:
|
|
181
|
+
"""
|
|
182
|
+
422 Unprocessable Entity
|
|
183
|
+
|
|
184
|
+
code: OUT_OF_SCOPE
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
Scenario: Delegating role without `system:identity:roles:delegation` role
|
|
188
|
+
Given the `identity.basic` database contains:
|
|
189
|
+
| _id | authority | username | password |
|
|
190
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
191
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
192
|
+
And the `identity.roles` database contains:
|
|
193
|
+
| _id | identity | role |
|
|
194
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
195
|
+
And the annotation:
|
|
196
|
+
"""yaml
|
|
197
|
+
/:
|
|
198
|
+
io:output: true
|
|
199
|
+
auth:role: app:moderation:photos
|
|
200
|
+
GET:
|
|
201
|
+
dev:stub:
|
|
202
|
+
access: granted!
|
|
203
|
+
"""
|
|
204
|
+
When the following request is received:
|
|
205
|
+
"""
|
|
206
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
207
|
+
host: nex.toa.io
|
|
208
|
+
content-type: application/yaml
|
|
209
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
210
|
+
|
|
211
|
+
role: app:moderation
|
|
212
|
+
"""
|
|
213
|
+
Then the following reply is sent:
|
|
214
|
+
"""
|
|
215
|
+
403 Forbidden
|
|
216
|
+
"""
|
|
217
|
+
|
|
218
|
+
Scenario Outline: Invalid role name
|
|
219
|
+
Given the `identity.basic` database contains:
|
|
220
|
+
| _id | authority | username | password |
|
|
221
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
222
|
+
And the `identity.roles` database contains:
|
|
223
|
+
| _id | identity | role |
|
|
224
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
225
|
+
When the following request is received:
|
|
226
|
+
# root adds a role to a user
|
|
227
|
+
"""
|
|
228
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
229
|
+
host: nex.toa.io
|
|
230
|
+
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
231
|
+
content-type: application/yaml
|
|
232
|
+
|
|
233
|
+
role: <role>
|
|
234
|
+
"""
|
|
235
|
+
Then the following reply is sent:
|
|
236
|
+
"""
|
|
237
|
+
400 Bad Request
|
|
238
|
+
"""
|
|
239
|
+
Examples:
|
|
240
|
+
| role |
|
|
241
|
+
| app! |
|
|
242
|
+
| app: |
|
|
243
|
+
| app:no spaces |
|
|
244
|
+
|
|
245
|
+
Scenario: Dynamic roles
|
|
246
|
+
Given the `identity.basic` database contains:
|
|
247
|
+
| _id | authority | username | password |
|
|
248
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
249
|
+
And the `identity.roles` database contains:
|
|
250
|
+
| _id | identity | role |
|
|
251
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:29e54ae1:moderation |
|
|
252
|
+
And the annotation:
|
|
253
|
+
"""yaml
|
|
254
|
+
/:
|
|
255
|
+
/broken:
|
|
256
|
+
auth:role: app:{org}:moderation
|
|
257
|
+
GET:
|
|
258
|
+
dev:stub: never
|
|
259
|
+
/:org:
|
|
260
|
+
io:output: true
|
|
261
|
+
auth:role: app:{org}:moderation
|
|
262
|
+
GET:
|
|
263
|
+
dev:stub:
|
|
264
|
+
access: granted!
|
|
265
|
+
"""
|
|
266
|
+
When the following request is received:
|
|
267
|
+
"""
|
|
268
|
+
GET /29e54ae1/ HTTP/1.1
|
|
269
|
+
host: nex.toa.io
|
|
270
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
271
|
+
"""
|
|
272
|
+
Then the following reply is sent:
|
|
273
|
+
"""
|
|
274
|
+
200 OK
|
|
275
|
+
"""
|
|
276
|
+
When the following request is received:
|
|
277
|
+
"""
|
|
278
|
+
GET /88584c9b/ HTTP/1.1
|
|
279
|
+
host: nex.toa.io
|
|
280
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
281
|
+
"""
|
|
282
|
+
Then the following reply is sent:
|
|
283
|
+
"""
|
|
284
|
+
403 Forbidden
|
|
285
|
+
"""
|
|
286
|
+
When the following request is received:
|
|
287
|
+
"""
|
|
288
|
+
GET /broken/ HTTP/1.1
|
|
289
|
+
host: nex.toa.io
|
|
290
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
291
|
+
"""
|
|
292
|
+
Then the following reply is sent:
|
|
293
|
+
"""
|
|
294
|
+
500 Internal Server Error
|
|
52
295
|
"""
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Tokens lifecycle
|
|
2
3
|
|
|
3
4
|
Scenario: Switching to Token authentication scheme
|
|
4
5
|
Given the `identity.basic` database contains:
|
|
5
|
-
| _id | username | password |
|
|
6
|
-
| efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
6
|
+
| _id | authority | username | password |
|
|
7
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
7
8
|
Given the annotation:
|
|
8
9
|
"""yaml
|
|
9
10
|
/:
|
|
@@ -16,6 +17,7 @@ Feature: Tokens lifecycle
|
|
|
16
17
|
When the following request is received:
|
|
17
18
|
"""
|
|
18
19
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
20
|
+
host: nex.toa.io
|
|
19
21
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
20
22
|
accept: text/plain
|
|
21
23
|
"""
|
|
@@ -45,6 +47,7 @@ Feature: Tokens lifecycle
|
|
|
45
47
|
When the following request is received:
|
|
46
48
|
"""
|
|
47
49
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
50
|
+
host: nex.toa.io
|
|
48
51
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
49
52
|
accept: text/plain
|
|
50
53
|
"""
|
|
@@ -59,6 +62,7 @@ Feature: Tokens lifecycle
|
|
|
59
62
|
When the following request is received:
|
|
60
63
|
"""
|
|
61
64
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
65
|
+
host: nex.toa.io
|
|
62
66
|
authorization: Token ${{ token }}
|
|
63
67
|
accept: text/plain
|
|
64
68
|
"""
|
|
@@ -86,11 +90,12 @@ Feature: Tokens lifecycle
|
|
|
86
90
|
refresh: 0.1
|
|
87
91
|
"""
|
|
88
92
|
And the `identity.basic` database contains:
|
|
89
|
-
| _id | _version | username | password |
|
|
90
|
-
| efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
93
|
+
| _id | _version | authority | username | password |
|
|
94
|
+
| efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
91
95
|
When the following request is received:
|
|
92
96
|
"""
|
|
93
97
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
98
|
+
host: nex.toa.io
|
|
94
99
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
95
100
|
"""
|
|
96
101
|
Then the following reply is sent:
|
|
@@ -101,6 +106,7 @@ Feature: Tokens lifecycle
|
|
|
101
106
|
When the following request is received:
|
|
102
107
|
"""
|
|
103
108
|
PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
109
|
+
host: nex.toa.io
|
|
104
110
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
105
111
|
content-type: application/yaml
|
|
106
112
|
|
|
@@ -114,9 +120,53 @@ Feature: Tokens lifecycle
|
|
|
114
120
|
When the following request is received:
|
|
115
121
|
"""
|
|
116
122
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
123
|
+
host: nex.toa.io
|
|
117
124
|
authorization: Token ${{ token }}
|
|
118
125
|
"""
|
|
119
126
|
Then the following reply is sent:
|
|
120
127
|
"""
|
|
121
128
|
401 Unauthorized
|
|
122
129
|
"""
|
|
130
|
+
|
|
131
|
+
Scenario: Issuing own token
|
|
132
|
+
Given the `identity.basic` database contains:
|
|
133
|
+
| _id | authority | username | password |
|
|
134
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
135
|
+
When the following request is received:
|
|
136
|
+
"""
|
|
137
|
+
GET /identity/ HTTP/1.1
|
|
138
|
+
host: nex.toa.io
|
|
139
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
140
|
+
"""
|
|
141
|
+
Then the following reply is sent:
|
|
142
|
+
"""
|
|
143
|
+
200 OK
|
|
144
|
+
authorization: Token ${{ token }}
|
|
145
|
+
"""
|
|
146
|
+
When the following request is received:
|
|
147
|
+
"""
|
|
148
|
+
POST /identity/tokens/ HTTP/1.1
|
|
149
|
+
host: nex.toa.io
|
|
150
|
+
authorization: Token ${{ token }}
|
|
151
|
+
content-type: application/yaml
|
|
152
|
+
|
|
153
|
+
lifetime: 0
|
|
154
|
+
"""
|
|
155
|
+
Then the following reply is sent:
|
|
156
|
+
"""
|
|
157
|
+
201 Created
|
|
158
|
+
"""
|
|
159
|
+
# Token scheme must be used
|
|
160
|
+
When the following request is received:
|
|
161
|
+
"""
|
|
162
|
+
POST /identity/tokens/ HTTP/1.1
|
|
163
|
+
host: nex.toa.io
|
|
164
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
165
|
+
content-type: application/yaml
|
|
166
|
+
|
|
167
|
+
lifetime: 60
|
|
168
|
+
"""
|
|
169
|
+
Then the following reply is sent:
|
|
170
|
+
"""
|
|
171
|
+
403 Forbidden
|
|
172
|
+
"""
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
Feature: Introspection
|
|
2
|
+
|
|
3
|
+
Scenario: Resource introspection
|
|
4
|
+
Given the `pots` is running with the following manifest:
|
|
5
|
+
"""yaml
|
|
6
|
+
exposition:
|
|
7
|
+
/:
|
|
8
|
+
io:output: true
|
|
9
|
+
GET: enumerate
|
|
10
|
+
POST: create
|
|
11
|
+
"""
|
|
12
|
+
When the following request is received:
|
|
13
|
+
"""
|
|
14
|
+
OPTIONS /pots/ HTTP/1.1
|
|
15
|
+
host: nex.toa.io
|
|
16
|
+
accept: application/yaml
|
|
17
|
+
"""
|
|
18
|
+
Then the following reply is sent:
|
|
19
|
+
"""
|
|
20
|
+
200 OK
|
|
21
|
+
Allow: GET, POST
|
|
22
|
+
|
|
23
|
+
GET:
|
|
24
|
+
type: array
|
|
25
|
+
items:
|
|
26
|
+
type: object
|
|
27
|
+
properties:
|
|
28
|
+
id:
|
|
29
|
+
type: string
|
|
30
|
+
pattern: ^[a-fA-F0-9]{32}$
|
|
31
|
+
title:
|
|
32
|
+
type: string
|
|
33
|
+
maxLength: 64
|
|
34
|
+
volume:
|
|
35
|
+
type: number
|
|
36
|
+
exclusiveMinimum: 0
|
|
37
|
+
maximum: 1000
|
|
38
|
+
temperature:
|
|
39
|
+
type: number
|
|
40
|
+
exclusiveMinimum: 0
|
|
41
|
+
maximum: 300
|
|
42
|
+
additionalProperties: false
|
|
43
|
+
required:
|
|
44
|
+
- id
|
|
45
|
+
- title
|
|
46
|
+
- volume
|
|
47
|
+
POST:
|
|
48
|
+
input:
|
|
49
|
+
type: object
|
|
50
|
+
properties:
|
|
51
|
+
title:
|
|
52
|
+
type: string
|
|
53
|
+
maxLength: 64
|
|
54
|
+
temperature:
|
|
55
|
+
type: number
|
|
56
|
+
exclusiveMinimum: 0
|
|
57
|
+
maximum: 300
|
|
58
|
+
volume:
|
|
59
|
+
type: number
|
|
60
|
+
exclusiveMinimum: 0
|
|
61
|
+
maximum: 1000
|
|
62
|
+
additionalProperties: false
|
|
63
|
+
required:
|
|
64
|
+
- title
|
|
65
|
+
- volume
|
|
66
|
+
output:
|
|
67
|
+
type: object
|
|
68
|
+
properties:
|
|
69
|
+
id:
|
|
70
|
+
type: string
|
|
71
|
+
pattern: ^[a-fA-F0-9]{32}$
|
|
72
|
+
additionalProperties: false
|
|
73
|
+
errors:
|
|
74
|
+
- NO_WAY
|
|
75
|
+
- WONT_CREATE
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
Scenario: Introspection with route parameters
|
|
79
|
+
Given the `echo` is running with the following manifest:
|
|
80
|
+
"""yaml
|
|
81
|
+
exposition:
|
|
82
|
+
/:a:
|
|
83
|
+
io:output: true
|
|
84
|
+
PATCH: parameters
|
|
85
|
+
"""
|
|
86
|
+
When the following request is received:
|
|
87
|
+
"""
|
|
88
|
+
OPTIONS /echo/:a/ HTTP/1.1
|
|
89
|
+
host: nex.toa.io
|
|
90
|
+
accept: application/yaml
|
|
91
|
+
"""
|
|
92
|
+
Then the following reply is sent:
|
|
93
|
+
"""
|
|
94
|
+
200 OK
|
|
95
|
+
Allow: PATCH
|
|
96
|
+
|
|
97
|
+
PATCH:
|
|
98
|
+
route:
|
|
99
|
+
a:
|
|
100
|
+
type: string
|
|
101
|
+
input:
|
|
102
|
+
type: object
|
|
103
|
+
properties:
|
|
104
|
+
b:
|
|
105
|
+
type: string
|
|
106
|
+
output:
|
|
107
|
+
type: object
|
|
108
|
+
properties:
|
|
109
|
+
a:
|
|
110
|
+
type: string
|
|
111
|
+
b:
|
|
112
|
+
type: string
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
Scenario: Introspection with query parameters
|
|
116
|
+
Given the `echo` is running with the following manifest:
|
|
117
|
+
"""yaml
|
|
118
|
+
exposition:
|
|
119
|
+
/:
|
|
120
|
+
io:output: true
|
|
121
|
+
PATCH:
|
|
122
|
+
query:
|
|
123
|
+
parameters: [a]
|
|
124
|
+
endpoint: parameters
|
|
125
|
+
"""
|
|
126
|
+
When the following request is received:
|
|
127
|
+
"""
|
|
128
|
+
OPTIONS /echo/ HTTP/1.1
|
|
129
|
+
host: nex.toa.io
|
|
130
|
+
accept: application/yaml
|
|
131
|
+
"""
|
|
132
|
+
Then the following reply is sent:
|
|
133
|
+
"""
|
|
134
|
+
200 OK
|
|
135
|
+
Allow: PATCH
|
|
136
|
+
|
|
137
|
+
PATCH:
|
|
138
|
+
query:
|
|
139
|
+
a:
|
|
140
|
+
type: string
|
|
141
|
+
input:
|
|
142
|
+
type: object
|
|
143
|
+
properties:
|
|
144
|
+
b:
|
|
145
|
+
type: string
|
|
146
|
+
output:
|
|
147
|
+
type: object
|
|
148
|
+
properties:
|
|
149
|
+
a:
|
|
150
|
+
type: string
|
|
151
|
+
b:
|
|
152
|
+
type: string
|
|
153
|
+
"""
|
package/features/io.feature
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: IO restrictions
|
|
2
3
|
|
|
3
4
|
Background:
|
|
@@ -18,6 +19,7 @@ Feature: IO restrictions
|
|
|
18
19
|
When the following request is received:
|
|
19
20
|
"""
|
|
20
21
|
GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
|
|
22
|
+
host: nex.toa.io
|
|
21
23
|
"""
|
|
22
24
|
Then the following reply is sent:
|
|
23
25
|
"""
|
|
@@ -27,6 +29,7 @@ Feature: IO restrictions
|
|
|
27
29
|
When the following request is received:
|
|
28
30
|
"""
|
|
29
31
|
GET /pots/ HTTP/1.1
|
|
32
|
+
host: nex.toa.io
|
|
30
33
|
accept: application/yaml
|
|
31
34
|
"""
|
|
32
35
|
Then the following reply is sent:
|
|
@@ -46,7 +49,7 @@ Feature: IO restrictions
|
|
|
46
49
|
When the following request is received:
|
|
47
50
|
"""
|
|
48
51
|
GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
|
|
49
|
-
|
|
52
|
+
host: nex.toa.io
|
|
50
53
|
"""
|
|
51
54
|
Then the following reply is sent:
|
|
52
55
|
"""
|
|
@@ -67,6 +70,7 @@ Feature: IO restrictions
|
|
|
67
70
|
When the following request is received:
|
|
68
71
|
"""
|
|
69
72
|
GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
|
|
73
|
+
host: nex.toa.io
|
|
70
74
|
accept: application/yaml
|
|
71
75
|
"""
|
|
72
76
|
Then the following reply is sent:
|
|
@@ -84,6 +88,7 @@ Feature: IO restrictions
|
|
|
84
88
|
When the following request is received:
|
|
85
89
|
"""
|
|
86
90
|
GET /pots/ HTTP/1.1
|
|
91
|
+
host: nex.toa.io
|
|
87
92
|
accept: application/yaml
|
|
88
93
|
"""
|
|
89
94
|
Then the following reply is sent:
|
|
@@ -113,6 +118,7 @@ Feature: IO restrictions
|
|
|
113
118
|
When the following request is received:
|
|
114
119
|
"""
|
|
115
120
|
POST /pots/ HTTP/1.1
|
|
121
|
+
host: nex.toa.io
|
|
116
122
|
accept: application/yaml
|
|
117
123
|
content-type: application/yaml
|
|
118
124
|
|
|
@@ -135,11 +141,13 @@ Feature: IO restrictions
|
|
|
135
141
|
exposition:
|
|
136
142
|
/:
|
|
137
143
|
io:input: [title, volume]
|
|
144
|
+
io:output: [id]
|
|
138
145
|
POST: create
|
|
139
146
|
"""
|
|
140
147
|
When the following request is received:
|
|
141
148
|
"""
|
|
142
149
|
POST /pots/ HTTP/1.1
|
|
150
|
+
host: nex.toa.io
|
|
143
151
|
accept: text/plain
|
|
144
152
|
content-type: application/yaml
|
|
145
153
|
|
|
@@ -156,6 +164,31 @@ Feature: IO restrictions
|
|
|
156
164
|
When the following request is received:
|
|
157
165
|
"""
|
|
158
166
|
POST /pots/ HTTP/1.1
|
|
167
|
+
host: nex.toa.io
|
|
168
|
+
content-type: application/yaml
|
|
169
|
+
|
|
170
|
+
title: Hello
|
|
171
|
+
volume: 1.5
|
|
172
|
+
"""
|
|
173
|
+
Then the following reply is sent:
|
|
174
|
+
"""
|
|
175
|
+
201 Created
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
Scenario: IO shortcuts
|
|
179
|
+
Given the `pots` is running with the following manifest:
|
|
180
|
+
"""yaml
|
|
181
|
+
exposition:
|
|
182
|
+
/:
|
|
183
|
+
input: [title, volume]
|
|
184
|
+
output: [id, title, volume]
|
|
185
|
+
POST: create
|
|
186
|
+
"""
|
|
187
|
+
When the following request is received:
|
|
188
|
+
"""
|
|
189
|
+
POST /pots/ HTTP/1.1
|
|
190
|
+
host: nex.toa.io
|
|
191
|
+
accept: application/yaml
|
|
159
192
|
content-type: application/yaml
|
|
160
193
|
|
|
161
194
|
title: Hello
|
|
@@ -164,4 +197,8 @@ Feature: IO restrictions
|
|
|
164
197
|
Then the following reply is sent:
|
|
165
198
|
"""
|
|
166
199
|
201 Created
|
|
200
|
+
|
|
201
|
+
id:
|
|
202
|
+
title: Hello
|
|
203
|
+
volume: 1.5
|
|
167
204
|
"""
|