@toa.io/extensions.exposition 1.0.0-alpha.6 → 1.0.0-alpha.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/context.toa.yaml +2 -2
- package/components/identity.bans/manifest.toa.yaml +15 -7
- package/components/identity.bans/operations/transit.d.ts +14 -0
- package/components/identity.bans/operations/transit.js +11 -0
- package/components/identity.bans/operations/transit.js.map +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/source/transit.ts +21 -0
- package/components/identity.bans/tsconfig.json +9 -0
- package/components/identity.basic/manifest.toa.yaml +21 -10
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +5 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +5 -3
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +8 -4
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +8 -6
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +32 -16
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +4 -11
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/incept.d.ts +11 -0
- package/components/identity.federation/operations/{create.js → incept.js} +6 -7
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/jwt.d.ts +5 -5
- package/components/identity.federation/operations/lib/jwt.js +25 -12
- package/components/identity.federation/operations/lib/jwt.js.map +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/configuration.d.ts +14 -0
- package/components/identity.federation/operations/types/configuration.js +3 -0
- package/components/identity.federation/operations/types/configuration.js.map +1 -0
- package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +15 -7
- package/components/identity.federation/operations/types/context.js +3 -0
- package/components/identity.federation/operations/types/context.js.map +1 -0
- package/components/identity.federation/operations/types/entity.d.ts +6 -0
- package/components/identity.federation/operations/types/entity.js +3 -0
- package/components/identity.federation/operations/types/entity.js.map +1 -0
- package/components/identity.federation/operations/types/index.d.ts +3 -0
- package/components/identity.federation/operations/types/index.js +20 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +6 -19
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/jwt.test.ts +123 -4
- package/components/identity.federation/source/lib/jwt.ts +36 -16
- package/components/identity.federation/source/types/configuration.ts +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +17 -6
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -0
- package/components/identity.federation/tsconfig.json +5 -4
- package/components/identity.roles/manifest.toa.yaml +18 -7
- package/components/identity.roles/operations/grant.d.ts +10 -0
- package/components/identity.roles/operations/grant.js +21 -0
- package/components/identity.roles/operations/grant.js.map +1 -0
- package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
- package/components/identity.roles/operations/lib/Entity.js +3 -0
- package/components/identity.roles/operations/lib/Entity.js.map +1 -0
- package/components/identity.roles/operations/list.d.ts +1 -4
- package/components/identity.roles/operations/list.js.map +1 -1
- package/components/identity.roles/operations/principal.d.ts +4 -6
- package/components/identity.roles/operations/principal.js +6 -1
- package/components/identity.roles/operations/principal.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +32 -0
- package/components/identity.roles/source/lib/Entity.ts +5 -0
- package/components/identity.roles/source/list.ts +2 -4
- package/components/identity.roles/source/principal.ts +10 -8
- package/components/identity.tokens/manifest.toa.yaml +19 -5
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +12 -5
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.js +1 -0
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.js +5 -1
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/operations/types.d.ts +8 -2
- package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
- package/components/identity.tokens/source/authenticate.test.ts +11 -4
- package/components/identity.tokens/source/authenticate.ts +14 -6
- package/components/identity.tokens/source/decrypt.test.ts +5 -3
- package/components/identity.tokens/source/decrypt.ts +9 -8
- package/components/identity.tokens/source/encrypt.test.ts +26 -2
- package/components/identity.tokens/source/encrypt.ts +5 -1
- package/components/identity.tokens/source/types.ts +9 -2
- package/components/octets.storage/manifest.toa.yaml +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 +3 -0
- package/documentation/query.md +29 -4
- package/documentation/require.md +15 -0
- package/documentation/tree.md +13 -0
- package/documentation/vary.md +14 -14
- package/features/access.feature +78 -46
- package/features/annotation.feature +1 -0
- package/features/auth.claim.feature +170 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +100 -0
- package/features/authorities.tokens.feature +117 -0
- package/features/body.feature +3 -0
- package/features/cache.feature +109 -5
- package/features/cors.feature +6 -1
- package/features/debug.feature +34 -0
- package/features/directives.feature +3 -0
- package/features/dynamic.feature +4 -0
- package/features/errors.feature +20 -7
- package/features/etag.feature +31 -0
- package/features/flow.feature +45 -0
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +125 -23
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +66 -11
- package/features/identity.roles.feature +250 -7
- package/features/identity.tokens.feature +54 -4
- package/features/introspection.feature +153 -0
- package/features/io.feature +38 -1
- package/features/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} +65 -2
- package/features/require.feature +67 -0
- package/features/response.feature +38 -3
- package/features/routes.feature +93 -2
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +23 -6
- package/features/steps/IdP.ts +30 -25
- package/features/steps/Parameters.ts +1 -1
- package/features/steps/components/echo/manifest.toa.yaml +14 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/echo/operations/parameters.js +7 -0
- package/features/steps/components/echo.beacon/manifest.toa.yaml +2 -0
- package/features/steps/components/echo.beacon/operations/hello.js +5 -0
- package/features/steps/components/octets.tester/manifest.toa.yaml +22 -1
- package/features/steps/components/octets.tester/operations/authority.js +7 -0
- package/features/steps/components/octets.tester/operations/baz.js +1 -2
- package/features/steps/components/octets.tester/operations/diversify.js +3 -1
- package/features/steps/components/octets.tester/operations/foo.js +2 -2
- package/features/steps/components/octets.tester/operations/redirect.js +12 -0
- package/features/steps/components/octets.tester/operations/yex.js +16 -0
- package/features/steps/components/octets.tester/operations/yield.js +13 -0
- package/features/steps/components/pots/manifest.toa.yaml +14 -3
- package/features/steps/components/users/manifest.toa.yaml +0 -1
- package/features/steps/components/users.properties/manifest.toa.yaml +1 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +27 -1
- package/features/vary.feature +71 -0
- package/package.json +22 -14
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- package/schemas/method.cos.yaml +1 -1
- package/schemas/node.cos.yaml +1 -0
- package/schemas/octets/store.cos.yaml +25 -3
- package/schemas/query.cos.yaml +4 -10
- package/source/Annotation.ts +3 -3
- package/source/Composition.ts +2 -2
- package/source/Directive.ts +4 -5
- package/source/Endpoint.ts +48 -12
- package/source/Factory.ts +10 -11
- package/source/Gateway.ts +49 -20
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +51 -44
- package/source/HTTP/exceptions.ts +13 -1
- package/source/HTTP/formats/index.ts +3 -3
- package/source/HTTP/messages.test.ts +39 -2
- package/source/HTTP/messages.ts +7 -3
- package/source/Introspection.ts +11 -0
- package/source/Mapping.ts +63 -21
- package/source/Query.test.ts +3 -3
- package/source/Query.ts +117 -33
- package/source/RTD/Endpoint.ts +3 -0
- package/source/RTD/Method.ts +16 -0
- package/source/RTD/Node.ts +29 -13
- package/source/RTD/Route.ts +5 -4
- package/source/RTD/factory.ts +5 -2
- package/source/RTD/syntax/parse.ts +37 -24
- package/source/RTD/syntax/types.ts +6 -4
- package/source/Remotes.ts +2 -9
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +32 -22
- package/source/directives/auth/Authorization.ts +37 -14
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Federation.ts +84 -0
- package/source/directives/auth/Incept.ts +4 -3
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +22 -14
- package/source/directives/auth/split.ts +1 -1
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +13 -6
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/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 +1 -1
- package/source/directives/octets/Context.ts +7 -5
- package/source/directives/octets/Delete.ts +4 -2
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +15 -13
- package/source/directives/octets/List.ts +9 -7
- package/source/directives/octets/Octets.ts +4 -5
- package/source/directives/octets/Store.ts +34 -12
- package/source/directives/octets/Workflow.ts +10 -3
- 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/types.ts +0 -7
- package/source/directives/octets/workflows/Execution.ts +59 -8
- package/source/directives/octets/workflows/Workflow.ts +2 -1
- package/source/directives/require/Directive.ts +5 -0
- package/source/directives/require/Headers.ts +20 -0
- package/source/directives/require/Require.ts +28 -0
- package/source/directives/require/index.ts +3 -0
- package/source/directives/vary/Directive.ts +2 -1
- package/source/directives/vary/Embed.ts +14 -8
- package/source/directives/vary/Vary.ts +6 -4
- package/source/directives/vary/embeddings/Authority.ts +8 -0
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +6 -4
- package/source/exceptions.ts +22 -11
- package/source/manifest.ts +10 -11
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Composition.js +2 -2
- package/transpiled/Composition.js.map +1 -1
- package/transpiled/Directive.js +4 -4
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +6 -4
- package/transpiled/Endpoint.js +28 -4
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.d.ts +1 -1
- package/transpiled/Factory.js +9 -8
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +2 -0
- package/transpiled/Gateway.js +36 -12
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +8 -1
- package/transpiled/HTTP/Context.js +15 -2
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +13 -2
- package/transpiled/HTTP/Server.js +38 -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 +9 -3
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Introspection.d.ts +9 -0
- package/transpiled/Introspection.js +3 -0
- package/transpiled/Introspection.js.map +1 -0
- package/transpiled/Mapping.d.ts +10 -2
- package/transpiled/Mapping.js +48 -19
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +10 -1
- package/transpiled/Query.js +83 -30
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Endpoint.d.ts +1 -0
- package/transpiled/RTD/Method.d.ts +4 -0
- package/transpiled/RTD/Method.js +11 -0
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -1
- package/transpiled/RTD/Node.js +23 -12
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Route.d.ts +1 -1
- package/transpiled/RTD/Route.js +0 -1
- package/transpiled/RTD/Route.js.map +1 -1
- package/transpiled/RTD/factory.js +5 -2
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/syntax/parse.js +34 -22
- package/transpiled/RTD/syntax/parse.js.map +1 -1
- package/transpiled/RTD/syntax/types.d.ts +5 -3
- package/transpiled/RTD/syntax/types.js +1 -1
- package/transpiled/RTD/syntax/types.js.map +1 -1
- package/transpiled/Remotes.d.ts +2 -4
- package/transpiled/Remotes.js +0 -5
- package/transpiled/Remotes.js.map +1 -1
- package/transpiled/Tenant.d.ts +0 -1
- package/transpiled/Tenant.js +0 -6
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +28 -20
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Authorization.js +26 -10
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +10 -0
- package/transpiled/directives/auth/Delegate.js +34 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Federation.d.ts +16 -0
- package/transpiled/directives/auth/Federation.js +57 -0
- package/transpiled/directives/auth/Federation.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +4 -3
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +20 -14
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/auth/split.js +1 -1
- package/transpiled/directives/auth/split.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +3 -3
- package/transpiled/directives/cache/Cache.js +10 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -1
- package/transpiled/directives/cache/Control.js +29 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/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.map +1 -1
- package/transpiled/directives/octets/Context.d.ts +3 -3
- package/transpiled/directives/octets/Context.js +8 -26
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +3 -2
- package/transpiled/directives/octets/Delete.js +3 -1
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.d.ts +8 -0
- package/transpiled/directives/octets/Directive.js +8 -0
- package/transpiled/directives/octets/Directive.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +6 -5
- package/transpiled/directives/octets/Fetch.js +11 -9
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +6 -5
- package/transpiled/directives/octets/List.js +6 -4
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +2 -1
- package/transpiled/directives/octets/Octets.js +2 -4
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +9 -3
- package/transpiled/directives/octets/Store.js +20 -8
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +3 -2
- package/transpiled/directives/octets/Workflow.js +9 -2
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/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/types.d.ts +0 -5
- package/transpiled/directives/octets/workflows/Execution.d.ts +5 -1
- package/transpiled/directives/octets/workflows/Execution.js +43 -9
- package/transpiled/directives/octets/workflows/Execution.js.map +1 -1
- package/transpiled/directives/octets/workflows/Workflow.js +2 -1
- package/transpiled/directives/octets/workflows/Workflow.js.map +1 -1
- package/transpiled/directives/require/Directive.d.ts +4 -0
- package/transpiled/directives/require/Directive.js +3 -0
- package/transpiled/directives/require/Directive.js.map +1 -0
- package/transpiled/directives/require/Headers.d.ts +7 -0
- package/transpiled/directives/require/Headers.js +19 -0
- package/transpiled/directives/require/Headers.js.map +1 -0
- package/transpiled/directives/require/Require.d.ts +9 -0
- package/transpiled/directives/require/Require.js +27 -0
- package/transpiled/directives/require/Require.js.map +1 -0
- package/transpiled/directives/require/index.d.ts +2 -0
- package/transpiled/directives/require/index.js +6 -0
- package/transpiled/directives/require/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +2 -1
- package/transpiled/directives/vary/Embed.d.ts +2 -1
- package/transpiled/directives/vary/Embed.js +8 -6
- package/transpiled/directives/vary/Embed.js.map +1 -1
- package/transpiled/directives/vary/Vary.d.ts +2 -2
- package/transpiled/directives/vary/Vary.js +3 -3
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Authority.js +10 -0
- package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
- package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
- package/transpiled/directives/vary/embeddings/index.js +8 -4
- package/transpiled/directives/vary/embeddings/index.js.map +1 -1
- package/transpiled/exceptions.d.ts +3 -2
- package/transpiled/exceptions.js +13 -7
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/manifest.js +10 -11
- package/transpiled/manifest.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.json +9 -7
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/octets.storage/operations/permute.js +0 -7
- package/schemas/octets/context.cos.yaml +0 -1
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -43
- package/transpiled/directives/octets/Permute.d.ts +0 -10
- package/transpiled/directives/octets/Permute.js +0 -56
- package/transpiled/directives/octets/Permute.js.map +0 -1
- /package/{components/identity.federation/operations → transpiled/directives/flow}/types.js +0 -0
|
@@ -1,20 +1,21 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Identity Federation
|
|
2
3
|
|
|
3
4
|
Background:
|
|
4
5
|
Given the `identity.federation` database is empty
|
|
5
|
-
|
|
6
|
+
And local IDP is running
|
|
6
7
|
|
|
7
8
|
Scenario: Getting identity for a new user
|
|
8
9
|
Given the `identity.federation` configuration:
|
|
9
10
|
"""yaml
|
|
10
|
-
explicit_identity_creation: false
|
|
11
11
|
trust:
|
|
12
|
-
-
|
|
12
|
+
- iss: http://localhost:44444
|
|
13
13
|
"""
|
|
14
14
|
And the IDP token for User is issued
|
|
15
15
|
When the following request is received:
|
|
16
16
|
"""
|
|
17
17
|
GET /identity/ HTTP/1.1
|
|
18
|
+
host: nex.toa.io
|
|
18
19
|
authorization: Bearer ${{ User.id_token }}
|
|
19
20
|
accept: application/yaml
|
|
20
21
|
content-type: application/yaml
|
|
@@ -31,33 +32,36 @@ Feature: Identity Federation
|
|
|
31
32
|
When the following request is received:
|
|
32
33
|
"""
|
|
33
34
|
GET /identity/ HTTP/1.1
|
|
35
|
+
host: nex.toa.io
|
|
34
36
|
accept: application/yaml
|
|
35
37
|
authorization: Token ${{ User.token }}
|
|
36
38
|
"""
|
|
37
39
|
Then the following reply is sent:
|
|
38
40
|
"""
|
|
39
41
|
200 OK
|
|
42
|
+
|
|
40
43
|
id: ${{ User.id }}
|
|
41
44
|
"""
|
|
42
45
|
# ensuring identity idempotency
|
|
43
46
|
When the following request is received:
|
|
44
47
|
"""
|
|
45
48
|
GET /identity/ HTTP/1.1
|
|
49
|
+
host: nex.toa.io
|
|
46
50
|
authorization: Bearer ${{ User.id_token }}
|
|
47
51
|
accept: application/yaml
|
|
48
52
|
"""
|
|
49
53
|
Then the following reply is sent:
|
|
50
54
|
"""
|
|
51
55
|
200 OK
|
|
56
|
+
|
|
52
57
|
id: ${{ User.id }}
|
|
53
58
|
"""
|
|
54
59
|
|
|
55
60
|
Scenario: Getting identity for a user with symmetric tokens
|
|
56
61
|
Given the `identity.federation` configuration:
|
|
57
62
|
"""yaml
|
|
58
|
-
explicit_identity_creation: false
|
|
59
63
|
trust:
|
|
60
|
-
-
|
|
64
|
+
- iss: http://localhost:44444
|
|
61
65
|
secrets:
|
|
62
66
|
HS384:
|
|
63
67
|
k1: the-secret
|
|
@@ -69,6 +73,7 @@ Feature: Identity Federation
|
|
|
69
73
|
When the following request is received:
|
|
70
74
|
"""
|
|
71
75
|
GET /identity/ HTTP/1.1
|
|
76
|
+
host: nex.toa.io
|
|
72
77
|
authorization: Bearer ${{ GoodUser.id_token }}
|
|
73
78
|
accept: application/yaml
|
|
74
79
|
content-type: application/yaml
|
|
@@ -81,11 +86,11 @@ Feature: Identity Federation
|
|
|
81
86
|
id: ${{ GoodUser.id }}
|
|
82
87
|
"""
|
|
83
88
|
|
|
84
|
-
Scenario: Creating an Identity using inception
|
|
89
|
+
Scenario: Creating an Identity using inception
|
|
85
90
|
Given the `identity.federation` configuration:
|
|
86
91
|
"""yaml
|
|
87
92
|
trust:
|
|
88
|
-
-
|
|
93
|
+
- iss: http://localhost:44444
|
|
89
94
|
"""
|
|
90
95
|
Given the `users` is running with the following manifest:
|
|
91
96
|
"""yaml
|
|
@@ -93,8 +98,8 @@ Feature: Identity Federation
|
|
|
93
98
|
/:
|
|
94
99
|
anonymous: true
|
|
95
100
|
POST:
|
|
96
|
-
io:output:
|
|
97
|
-
incept: id
|
|
101
|
+
io:output: [id]
|
|
102
|
+
auth:incept: id
|
|
98
103
|
endpoint: create
|
|
99
104
|
"""
|
|
100
105
|
And the IDP token for Bill is issued
|
|
@@ -102,6 +107,7 @@ Feature: Identity Federation
|
|
|
102
107
|
# identity inception
|
|
103
108
|
"""
|
|
104
109
|
POST /users/ HTTP/1.1
|
|
110
|
+
host: nex.toa.io
|
|
105
111
|
authorization: Bearer ${{ Bill.id_token }}
|
|
106
112
|
accept: application/yaml
|
|
107
113
|
content-type: application/yaml
|
|
@@ -119,6 +125,7 @@ Feature: Identity Federation
|
|
|
119
125
|
When the following request is received:
|
|
120
126
|
"""
|
|
121
127
|
GET /identity/ HTTP/1.1
|
|
128
|
+
host: nex.toa.io
|
|
122
129
|
authorization: Token ${{ Bill.token }}
|
|
123
130
|
accept: application/yaml
|
|
124
131
|
"""
|
|
@@ -130,24 +137,72 @@ Feature: Identity Federation
|
|
|
130
137
|
When the following request is received:
|
|
131
138
|
"""
|
|
132
139
|
GET /identity/ HTTP/1.1
|
|
140
|
+
host: nex.toa.io
|
|
133
141
|
authorization: Bearer ${{ Bill.id_token }}
|
|
134
142
|
accept: application/yaml
|
|
135
143
|
"""
|
|
136
144
|
Then the following reply is sent:
|
|
137
145
|
"""
|
|
138
146
|
200 OK
|
|
147
|
+
|
|
139
148
|
id: ${{ Bill.id }}
|
|
140
149
|
"""
|
|
141
150
|
And the following request is received:
|
|
142
151
|
# same credentials
|
|
143
152
|
"""
|
|
144
153
|
POST /users/ HTTP/1.1
|
|
154
|
+
host: nex.toa.io
|
|
145
155
|
authorization: Bearer ${{ Bill.id_token }}
|
|
146
|
-
content-type:
|
|
156
|
+
content-type: application/yaml
|
|
147
157
|
|
|
148
158
|
name: Mary Louis
|
|
149
159
|
"""
|
|
150
160
|
Then the following reply is sent:
|
|
151
161
|
"""
|
|
152
|
-
|
|
162
|
+
409 Conflict
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
Scenario: Granting a `system` role to a Principal
|
|
166
|
+
Given the `identity.federation` configuration:
|
|
167
|
+
"""yaml
|
|
168
|
+
trust:
|
|
169
|
+
- iss: http://localhost:44444
|
|
170
|
+
principal:
|
|
171
|
+
iss: http://localhost:44444
|
|
172
|
+
sub: root
|
|
173
|
+
"""
|
|
174
|
+
And the IDP token for root is issued
|
|
175
|
+
|
|
176
|
+
# create an identity
|
|
177
|
+
When the following request is received:
|
|
178
|
+
"""
|
|
179
|
+
GET /identity/ HTTP/1.1
|
|
180
|
+
host: nex.toa.io
|
|
181
|
+
authorization: Bearer ${{ root.id_token }}
|
|
182
|
+
accept: application/yaml
|
|
183
|
+
content-type: application/yaml
|
|
184
|
+
"""
|
|
185
|
+
Then the following reply is sent:
|
|
186
|
+
"""
|
|
187
|
+
200 OK
|
|
188
|
+
authorization: Token ${{ root.token }}
|
|
189
|
+
|
|
190
|
+
id: ${{ root.id }}
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
# check the role
|
|
194
|
+
When the following request is received:
|
|
195
|
+
"""
|
|
196
|
+
GET /identity/ HTTP/1.1
|
|
197
|
+
host: nex.toa.io
|
|
198
|
+
accept: application/yaml
|
|
199
|
+
authorization: Token ${{ root.token }}
|
|
200
|
+
"""
|
|
201
|
+
Then the following reply is sent:
|
|
202
|
+
"""
|
|
203
|
+
200 OK
|
|
204
|
+
|
|
205
|
+
id: ${{ root.id }}
|
|
206
|
+
roles:
|
|
207
|
+
- system
|
|
153
208
|
"""
|
|
@@ -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
|
+
"""
|