@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
|
@@ -1,16 +1,20 @@
|
|
|
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 |
|
|
11
14
|
And the annotation:
|
|
12
15
|
"""yaml
|
|
13
16
|
/:
|
|
17
|
+
io:output: true
|
|
14
18
|
auth:role: test
|
|
15
19
|
GET:
|
|
16
20
|
dev:stub:
|
|
@@ -20,6 +24,7 @@ Feature: Roles management
|
|
|
20
24
|
# user doesn't have the required role
|
|
21
25
|
"""
|
|
22
26
|
GET / HTTP/1.1
|
|
27
|
+
host: nex.toa.io
|
|
23
28
|
authorization: Basic dXNlcjpwYXNz
|
|
24
29
|
"""
|
|
25
30
|
Then the following reply is sent:
|
|
@@ -30,7 +35,9 @@ Feature: Roles management
|
|
|
30
35
|
# root adds a role to a user
|
|
31
36
|
"""
|
|
32
37
|
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
38
|
+
host: nex.toa.io
|
|
33
39
|
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
40
|
+
accept: application/yaml
|
|
34
41
|
content-type: application/yaml
|
|
35
42
|
|
|
36
43
|
role: test
|
|
@@ -38,14 +45,223 @@ Feature: Roles management
|
|
|
38
45
|
Then the following reply is sent:
|
|
39
46
|
"""
|
|
40
47
|
201 Created
|
|
48
|
+
|
|
49
|
+
grantor: 72cf9b0ab0ac4ab2b8036e4e940ddcae
|
|
41
50
|
"""
|
|
42
51
|
When the following request is received:
|
|
43
52
|
# user now have the role
|
|
44
53
|
"""
|
|
45
54
|
GET / HTTP/1.1
|
|
55
|
+
host: nex.toa.io
|
|
46
56
|
authorization: Basic dXNlcjpwYXNz
|
|
47
57
|
"""
|
|
48
58
|
Then the following reply is sent:
|
|
49
59
|
"""
|
|
50
60
|
200 OK
|
|
51
61
|
"""
|
|
62
|
+
|
|
63
|
+
Scenario Outline: Delegating roles
|
|
64
|
+
# moderator:secret
|
|
65
|
+
# assistant:pass
|
|
66
|
+
Given the `identity.basic` database contains:
|
|
67
|
+
| _id | authority | username | password |
|
|
68
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
69
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
70
|
+
And the `identity.roles` database contains:
|
|
71
|
+
| _id | identity | role |
|
|
72
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
|
|
73
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
74
|
+
And the annotation:
|
|
75
|
+
"""yaml
|
|
76
|
+
/:
|
|
77
|
+
io:output: true
|
|
78
|
+
auth:role: app:moderation:photos
|
|
79
|
+
GET:
|
|
80
|
+
dev:stub:
|
|
81
|
+
access: granted!
|
|
82
|
+
"""
|
|
83
|
+
When the following request is received:
|
|
84
|
+
# assistant doesn't have the required role
|
|
85
|
+
"""
|
|
86
|
+
GET / HTTP/1.1
|
|
87
|
+
host: nex.toa.io
|
|
88
|
+
authorization: Basic YXNzaXN0YW50OnBhc3M=
|
|
89
|
+
"""
|
|
90
|
+
Then the following reply is sent:
|
|
91
|
+
"""
|
|
92
|
+
403 Forbidden
|
|
93
|
+
"""
|
|
94
|
+
When the following request is received:
|
|
95
|
+
# moderator delegates a role to an assistant
|
|
96
|
+
"""
|
|
97
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
98
|
+
host: nex.toa.io
|
|
99
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
100
|
+
content-type: application/yaml
|
|
101
|
+
|
|
102
|
+
role: <role>
|
|
103
|
+
"""
|
|
104
|
+
Then the following reply is sent:
|
|
105
|
+
"""
|
|
106
|
+
201 Created
|
|
107
|
+
"""
|
|
108
|
+
When the following request is received:
|
|
109
|
+
# assistant has access
|
|
110
|
+
"""
|
|
111
|
+
GET / HTTP/1.1
|
|
112
|
+
host: nex.toa.io
|
|
113
|
+
authorization: Basic YXNzaXN0YW50OnBhc3M=
|
|
114
|
+
"""
|
|
115
|
+
Then the following reply is sent:
|
|
116
|
+
"""
|
|
117
|
+
200 OK
|
|
118
|
+
"""
|
|
119
|
+
Examples:
|
|
120
|
+
| role |
|
|
121
|
+
| app:moderation |
|
|
122
|
+
| app:moderation:photos |
|
|
123
|
+
|
|
124
|
+
Scenario: Delegating role out of own scope
|
|
125
|
+
Given the `identity.basic` database contains:
|
|
126
|
+
| _id | authority | username | password |
|
|
127
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
128
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
129
|
+
And the `identity.roles` database contains:
|
|
130
|
+
| _id | identity | role |
|
|
131
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
|
|
132
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
133
|
+
And the annotation:
|
|
134
|
+
"""yaml
|
|
135
|
+
/:
|
|
136
|
+
io:output: true
|
|
137
|
+
auth:role: app:moderation:photos
|
|
138
|
+
GET:
|
|
139
|
+
dev:stub:
|
|
140
|
+
access: granted!
|
|
141
|
+
"""
|
|
142
|
+
When the following request is received:
|
|
143
|
+
"""
|
|
144
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
145
|
+
host: nex.toa.io
|
|
146
|
+
accept: application/yaml
|
|
147
|
+
content-type: application/yaml
|
|
148
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
149
|
+
|
|
150
|
+
role: app:finance
|
|
151
|
+
"""
|
|
152
|
+
Then the following reply is sent:
|
|
153
|
+
"""
|
|
154
|
+
422 Unprocessable Entity
|
|
155
|
+
|
|
156
|
+
code: OUT_OF_SCOPE
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
Scenario: Delegating role without `system:identity:roles:delegation` role
|
|
160
|
+
Given the `identity.basic` database contains:
|
|
161
|
+
| _id | authority | username | password |
|
|
162
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
163
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
164
|
+
And the `identity.roles` database contains:
|
|
165
|
+
| _id | identity | role |
|
|
166
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
167
|
+
And the annotation:
|
|
168
|
+
"""yaml
|
|
169
|
+
/:
|
|
170
|
+
io:output: true
|
|
171
|
+
auth:role: app:moderation:photos
|
|
172
|
+
GET:
|
|
173
|
+
dev:stub:
|
|
174
|
+
access: granted!
|
|
175
|
+
"""
|
|
176
|
+
When the following request is received:
|
|
177
|
+
"""
|
|
178
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
179
|
+
host: nex.toa.io
|
|
180
|
+
content-type: application/yaml
|
|
181
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
182
|
+
|
|
183
|
+
role: app:moderation
|
|
184
|
+
"""
|
|
185
|
+
Then the following reply is sent:
|
|
186
|
+
"""
|
|
187
|
+
403 Forbidden
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
Scenario Outline: Invalid role name
|
|
191
|
+
Given the `identity.basic` database contains:
|
|
192
|
+
| _id | authority | username | password |
|
|
193
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
194
|
+
And the `identity.roles` database contains:
|
|
195
|
+
| _id | identity | role |
|
|
196
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
197
|
+
When the following request is received:
|
|
198
|
+
# root adds a role to a user
|
|
199
|
+
"""
|
|
200
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
201
|
+
host: nex.toa.io
|
|
202
|
+
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
203
|
+
content-type: application/yaml
|
|
204
|
+
|
|
205
|
+
role: <role>
|
|
206
|
+
"""
|
|
207
|
+
Then the following reply is sent:
|
|
208
|
+
"""
|
|
209
|
+
400 Bad Request
|
|
210
|
+
"""
|
|
211
|
+
Examples:
|
|
212
|
+
| role |
|
|
213
|
+
| app! |
|
|
214
|
+
| app: |
|
|
215
|
+
| app:no spaces |
|
|
216
|
+
|
|
217
|
+
Scenario: Dynamic roles
|
|
218
|
+
Given the `identity.basic` database contains:
|
|
219
|
+
| _id | authority | username | password |
|
|
220
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
221
|
+
And the `identity.roles` database contains:
|
|
222
|
+
| _id | identity | role |
|
|
223
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:29e54ae1:moderation |
|
|
224
|
+
And the annotation:
|
|
225
|
+
"""yaml
|
|
226
|
+
/:
|
|
227
|
+
/broken:
|
|
228
|
+
auth:role: app:{org}:moderation
|
|
229
|
+
GET:
|
|
230
|
+
dev:stub: never
|
|
231
|
+
/:org:
|
|
232
|
+
io:output: true
|
|
233
|
+
auth:role: app:{org}:moderation
|
|
234
|
+
GET:
|
|
235
|
+
dev:stub:
|
|
236
|
+
access: granted!
|
|
237
|
+
"""
|
|
238
|
+
When the following request is received:
|
|
239
|
+
"""
|
|
240
|
+
GET /29e54ae1/ HTTP/1.1
|
|
241
|
+
host: nex.toa.io
|
|
242
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
243
|
+
"""
|
|
244
|
+
Then the following reply is sent:
|
|
245
|
+
"""
|
|
246
|
+
200 OK
|
|
247
|
+
"""
|
|
248
|
+
When the following request is received:
|
|
249
|
+
"""
|
|
250
|
+
GET /88584c9b/ HTTP/1.1
|
|
251
|
+
host: nex.toa.io
|
|
252
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
253
|
+
"""
|
|
254
|
+
Then the following reply is sent:
|
|
255
|
+
"""
|
|
256
|
+
403 Forbidden
|
|
257
|
+
"""
|
|
258
|
+
When the following request is received:
|
|
259
|
+
"""
|
|
260
|
+
GET /broken/ HTTP/1.1
|
|
261
|
+
host: nex.toa.io
|
|
262
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
263
|
+
"""
|
|
264
|
+
Then the following reply is sent:
|
|
265
|
+
"""
|
|
266
|
+
500 Internal Server Error
|
|
267
|
+
"""
|
|
@@ -1,12 +1,14 @@
|
|
|
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
|
/:
|
|
11
|
+
io:output: true
|
|
10
12
|
/hello/:id:
|
|
11
13
|
auth:id: id
|
|
12
14
|
GET:
|
|
@@ -15,6 +17,7 @@ Feature: Tokens lifecycle
|
|
|
15
17
|
When the following request is received:
|
|
16
18
|
"""
|
|
17
19
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
20
|
+
host: nex.toa.io
|
|
18
21
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
19
22
|
accept: text/plain
|
|
20
23
|
"""
|
|
@@ -35,6 +38,7 @@ Feature: Tokens lifecycle
|
|
|
35
38
|
And the annotation:
|
|
36
39
|
"""yaml
|
|
37
40
|
/:
|
|
41
|
+
io:output: true
|
|
38
42
|
/hello/:id:
|
|
39
43
|
auth:id: id
|
|
40
44
|
GET:
|
|
@@ -43,6 +47,7 @@ Feature: Tokens lifecycle
|
|
|
43
47
|
When the following request is received:
|
|
44
48
|
"""
|
|
45
49
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
50
|
+
host: nex.toa.io
|
|
46
51
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
47
52
|
accept: text/plain
|
|
48
53
|
"""
|
|
@@ -57,6 +62,7 @@ Feature: Tokens lifecycle
|
|
|
57
62
|
When the following request is received:
|
|
58
63
|
"""
|
|
59
64
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
65
|
+
host: nex.toa.io
|
|
60
66
|
authorization: Token ${{ token }}
|
|
61
67
|
accept: text/plain
|
|
62
68
|
"""
|
|
@@ -64,6 +70,7 @@ Feature: Tokens lifecycle
|
|
|
64
70
|
"""
|
|
65
71
|
200 OK
|
|
66
72
|
authorization: Token
|
|
73
|
+
cache-control: no-store
|
|
67
74
|
|
|
68
75
|
Hello
|
|
69
76
|
"""
|
|
@@ -72,6 +79,7 @@ Feature: Tokens lifecycle
|
|
|
72
79
|
Given the annotation:
|
|
73
80
|
"""yaml
|
|
74
81
|
/:
|
|
82
|
+
io:output: true
|
|
75
83
|
/:id:
|
|
76
84
|
id: id
|
|
77
85
|
GET:
|
|
@@ -83,11 +91,12 @@ Feature: Tokens lifecycle
|
|
|
83
91
|
refresh: 0.1
|
|
84
92
|
"""
|
|
85
93
|
And the `identity.basic` database contains:
|
|
86
|
-
| _id | _version | username | password |
|
|
87
|
-
| efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
94
|
+
| _id | _version | authority | username | password |
|
|
95
|
+
| efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
88
96
|
When the following request is received:
|
|
89
97
|
"""
|
|
90
98
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
99
|
+
host: nex.toa.io
|
|
91
100
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
92
101
|
"""
|
|
93
102
|
Then the following reply is sent:
|
|
@@ -98,6 +107,7 @@ Feature: Tokens lifecycle
|
|
|
98
107
|
When the following request is received:
|
|
99
108
|
"""
|
|
100
109
|
PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
110
|
+
host: nex.toa.io
|
|
101
111
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
102
112
|
content-type: application/yaml
|
|
103
113
|
|
|
@@ -111,9 +121,109 @@ Feature: Tokens lifecycle
|
|
|
111
121
|
When the following request is received:
|
|
112
122
|
"""
|
|
113
123
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
124
|
+
host: nex.toa.io
|
|
114
125
|
authorization: Token ${{ token }}
|
|
115
126
|
"""
|
|
116
127
|
Then the following reply is sent:
|
|
117
128
|
"""
|
|
118
129
|
401 Unauthorized
|
|
119
130
|
"""
|
|
131
|
+
|
|
132
|
+
Scenario: Issuing own token
|
|
133
|
+
Given the `identity.basic` database contains:
|
|
134
|
+
| _id | authority | username | password |
|
|
135
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
136
|
+
When the following request is received:
|
|
137
|
+
"""
|
|
138
|
+
GET /identity/ HTTP/1.1
|
|
139
|
+
host: nex.toa.io
|
|
140
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
141
|
+
"""
|
|
142
|
+
Then the following reply is sent:
|
|
143
|
+
"""
|
|
144
|
+
200 OK
|
|
145
|
+
authorization: Token ${{ token }}
|
|
146
|
+
"""
|
|
147
|
+
When the following request is received:
|
|
148
|
+
"""
|
|
149
|
+
POST /identity/tokens/ HTTP/1.1
|
|
150
|
+
host: nex.toa.io
|
|
151
|
+
authorization: Token ${{ token }}
|
|
152
|
+
content-type: application/yaml
|
|
153
|
+
|
|
154
|
+
lifetime: 0
|
|
155
|
+
"""
|
|
156
|
+
Then the following reply is sent:
|
|
157
|
+
"""
|
|
158
|
+
201 Created
|
|
159
|
+
"""
|
|
160
|
+
# Token scheme must be used
|
|
161
|
+
When the following request is received:
|
|
162
|
+
"""
|
|
163
|
+
POST /identity/tokens/ HTTP/1.1
|
|
164
|
+
host: nex.toa.io
|
|
165
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
166
|
+
content-type: application/yaml
|
|
167
|
+
|
|
168
|
+
lifetime: 60
|
|
169
|
+
"""
|
|
170
|
+
Then the following reply is sent:
|
|
171
|
+
"""
|
|
172
|
+
403 Forbidden
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
Scenario: Responses with tokens comes with `no-store`
|
|
176
|
+
Given the `identity.tokens` configuration:
|
|
177
|
+
"""yaml
|
|
178
|
+
refresh: 1
|
|
179
|
+
"""
|
|
180
|
+
And the annotation:
|
|
181
|
+
"""yaml
|
|
182
|
+
/:
|
|
183
|
+
io:output: true
|
|
184
|
+
/hello/:id:
|
|
185
|
+
auth:id: id
|
|
186
|
+
GET:
|
|
187
|
+
dev:stub: Hello
|
|
188
|
+
/cacheable/:id:
|
|
189
|
+
auth:id: id
|
|
190
|
+
cache:control: max-age=10000
|
|
191
|
+
GET:
|
|
192
|
+
dev:stub: Keep it
|
|
193
|
+
"""
|
|
194
|
+
When the following request is received:
|
|
195
|
+
"""
|
|
196
|
+
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
197
|
+
host: nex.toa.io
|
|
198
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
199
|
+
"""
|
|
200
|
+
Then the following reply is sent:
|
|
201
|
+
"""
|
|
202
|
+
200 OK
|
|
203
|
+
authorization: Token ${{ token }}
|
|
204
|
+
cache-control: no-store
|
|
205
|
+
"""
|
|
206
|
+
Then after 1 second
|
|
207
|
+
When the following request is received:
|
|
208
|
+
"""
|
|
209
|
+
GET /cacheable/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
210
|
+
host: nex.toa.io
|
|
211
|
+
authorization: Token ${{ token }}
|
|
212
|
+
"""
|
|
213
|
+
Then the following reply is sent:
|
|
214
|
+
"""
|
|
215
|
+
200 OK
|
|
216
|
+
authorization: Token ${{ fresh_token }}
|
|
217
|
+
cache-control: no-store
|
|
218
|
+
"""
|
|
219
|
+
When the following request is received:
|
|
220
|
+
"""
|
|
221
|
+
GET /cacheable/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
222
|
+
host: nex.toa.io
|
|
223
|
+
authorization: Token ${{ fresh_token }}
|
|
224
|
+
"""
|
|
225
|
+
Then the following reply is sent:
|
|
226
|
+
"""
|
|
227
|
+
200 OK
|
|
228
|
+
cache-control: private, max-age=10000
|
|
229
|
+
"""
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
@security
|
|
2
|
+
Feature: IO restrictions
|
|
3
|
+
|
|
4
|
+
Background:
|
|
5
|
+
Given the `pots` database contains:
|
|
6
|
+
| _id | title | volume | temperature |
|
|
7
|
+
| 4c4759e6f9c74da989d64511df42d6f4 | First pot | 100 | 80 |
|
|
8
|
+
| 99988d785d7d445cad45dbf8531f560b | Second pot | 200 | 30 |
|
|
9
|
+
|
|
10
|
+
Scenario: Output is omitted by default
|
|
11
|
+
Given the `pots` is running with the following manifest:
|
|
12
|
+
"""yaml
|
|
13
|
+
exposition:
|
|
14
|
+
/:
|
|
15
|
+
GET: enumerate
|
|
16
|
+
/:id:
|
|
17
|
+
GET: observe
|
|
18
|
+
"""
|
|
19
|
+
When the following request is received:
|
|
20
|
+
"""
|
|
21
|
+
GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
|
|
22
|
+
host: nex.toa.io
|
|
23
|
+
"""
|
|
24
|
+
Then the following reply is sent:
|
|
25
|
+
"""
|
|
26
|
+
200 OK
|
|
27
|
+
content-length: 0
|
|
28
|
+
"""
|
|
29
|
+
When the following request is received:
|
|
30
|
+
"""
|
|
31
|
+
GET /pots/ HTTP/1.1
|
|
32
|
+
host: nex.toa.io
|
|
33
|
+
accept: application/yaml
|
|
34
|
+
"""
|
|
35
|
+
Then the following reply is sent:
|
|
36
|
+
"""
|
|
37
|
+
200 OK
|
|
38
|
+
content-length: 0
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
Scenario: Output is omitted by intention
|
|
42
|
+
Given the `pots` is running with the following manifest:
|
|
43
|
+
"""yaml
|
|
44
|
+
exposition:
|
|
45
|
+
/:id:
|
|
46
|
+
io:output: false
|
|
47
|
+
GET: observe
|
|
48
|
+
"""
|
|
49
|
+
When the following request is received:
|
|
50
|
+
"""
|
|
51
|
+
GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
|
|
52
|
+
host: nex.toa.io
|
|
53
|
+
accept: application/yaml
|
|
54
|
+
"""
|
|
55
|
+
Then the following reply is sent:
|
|
56
|
+
"""
|
|
57
|
+
200 OK
|
|
58
|
+
content-length: 0
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
Scenario: Output permissions
|
|
62
|
+
Given the `pots` is running with the following manifest:
|
|
63
|
+
"""yaml
|
|
64
|
+
exposition:
|
|
65
|
+
/:
|
|
66
|
+
io:output: [id, volume]
|
|
67
|
+
GET: enumerate
|
|
68
|
+
/:id:
|
|
69
|
+
GET: observe
|
|
70
|
+
"""
|
|
71
|
+
When the following request is received:
|
|
72
|
+
"""
|
|
73
|
+
GET /pots/4c4759e6f9c74da989d64511df42d6f4/ HTTP/1.1
|
|
74
|
+
host: nex.toa.io
|
|
75
|
+
accept: application/yaml
|
|
76
|
+
"""
|
|
77
|
+
Then the following reply is sent:
|
|
78
|
+
"""
|
|
79
|
+
200 OK
|
|
80
|
+
|
|
81
|
+
id: 4c4759e6f9c74da989d64511df42d6f4
|
|
82
|
+
volume: 100
|
|
83
|
+
"""
|
|
84
|
+
And the reply does not contain:
|
|
85
|
+
"""
|
|
86
|
+
title:
|
|
87
|
+
temperature:
|
|
88
|
+
"""
|
|
89
|
+
When the following request is received:
|
|
90
|
+
"""
|
|
91
|
+
GET /pots/ HTTP/1.1
|
|
92
|
+
host: nex.toa.io
|
|
93
|
+
accept: application/yaml
|
|
94
|
+
"""
|
|
95
|
+
Then the following reply is sent:
|
|
96
|
+
"""
|
|
97
|
+
200 OK
|
|
98
|
+
content-type: application/yaml
|
|
99
|
+
|
|
100
|
+
- id: 4c4759e6f9c74da989d64511df42d6f4
|
|
101
|
+
volume: 100
|
|
102
|
+
- id: 99988d785d7d445cad45dbf8531f560b
|
|
103
|
+
volume: 200
|
|
104
|
+
"""
|
|
105
|
+
And the reply does not contain:
|
|
106
|
+
"""
|
|
107
|
+
title:
|
|
108
|
+
temperature:
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
Scenario: Input is unrestricted by default
|
|
112
|
+
Given the `pots` is running with the following manifest:
|
|
113
|
+
"""yaml
|
|
114
|
+
exposition:
|
|
115
|
+
/:
|
|
116
|
+
io:output: true
|
|
117
|
+
POST: create
|
|
118
|
+
"""
|
|
119
|
+
When the following request is received:
|
|
120
|
+
"""
|
|
121
|
+
POST /pots/ HTTP/1.1
|
|
122
|
+
host: nex.toa.io
|
|
123
|
+
accept: application/yaml
|
|
124
|
+
content-type: application/yaml
|
|
125
|
+
|
|
126
|
+
title: Hello
|
|
127
|
+
volume: 1.5
|
|
128
|
+
temperature: 80
|
|
129
|
+
"""
|
|
130
|
+
Then the following reply is sent:
|
|
131
|
+
"""
|
|
132
|
+
201 Created
|
|
133
|
+
|
|
134
|
+
title: Hello
|
|
135
|
+
volume: 1.5
|
|
136
|
+
temperature: 80
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
Scenario: Input permissions
|
|
140
|
+
Given the `pots` is running with the following manifest:
|
|
141
|
+
"""yaml
|
|
142
|
+
exposition:
|
|
143
|
+
/:
|
|
144
|
+
io:input: [title, volume]
|
|
145
|
+
io:output: [id]
|
|
146
|
+
POST: create
|
|
147
|
+
"""
|
|
148
|
+
When the following request is received:
|
|
149
|
+
"""
|
|
150
|
+
POST /pots/ HTTP/1.1
|
|
151
|
+
host: nex.toa.io
|
|
152
|
+
accept: text/plain
|
|
153
|
+
content-type: application/yaml
|
|
154
|
+
|
|
155
|
+
title: Hello
|
|
156
|
+
volume: 1.5
|
|
157
|
+
temperature: 80
|
|
158
|
+
"""
|
|
159
|
+
Then the following reply is sent:
|
|
160
|
+
"""
|
|
161
|
+
400 Bad Request
|
|
162
|
+
|
|
163
|
+
Unexpected input: temperature
|
|
164
|
+
"""
|
|
165
|
+
When the following request is received:
|
|
166
|
+
"""
|
|
167
|
+
POST /pots/ HTTP/1.1
|
|
168
|
+
host: nex.toa.io
|
|
169
|
+
content-type: application/yaml
|
|
170
|
+
|
|
171
|
+
title: Hello
|
|
172
|
+
volume: 1.5
|
|
173
|
+
"""
|
|
174
|
+
Then the following reply is sent:
|
|
175
|
+
"""
|
|
176
|
+
201 Created
|
|
177
|
+
"""
|
|
178
|
+
|
|
179
|
+
Scenario: IO shortcuts
|
|
180
|
+
Given the `pots` is running with the following manifest:
|
|
181
|
+
"""yaml
|
|
182
|
+
exposition:
|
|
183
|
+
/:
|
|
184
|
+
input: [title, volume]
|
|
185
|
+
output: [id, title, volume]
|
|
186
|
+
POST: create
|
|
187
|
+
"""
|
|
188
|
+
When the following request is received:
|
|
189
|
+
"""
|
|
190
|
+
POST /pots/ HTTP/1.1
|
|
191
|
+
host: nex.toa.io
|
|
192
|
+
accept: application/yaml
|
|
193
|
+
content-type: application/yaml
|
|
194
|
+
|
|
195
|
+
title: Hello
|
|
196
|
+
volume: 1.5
|
|
197
|
+
"""
|
|
198
|
+
Then the following reply is sent:
|
|
199
|
+
"""
|
|
200
|
+
201 Created
|
|
201
|
+
|
|
202
|
+
id:
|
|
203
|
+
title: Hello
|
|
204
|
+
volume: 1.5
|
|
205
|
+
"""
|