@toa.io/extensions.exposition 1.0.0-alpha.4 → 1.0.0-alpha.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/context.toa.yaml +2 -2
- package/components/identity.bans/manifest.toa.yaml +15 -7
- package/components/identity.bans/operations/transit.d.ts +14 -0
- package/components/identity.bans/operations/transit.js +11 -0
- package/components/identity.bans/operations/transit.js.map +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/source/transit.ts +21 -0
- package/components/identity.bans/tsconfig.json +9 -0
- package/components/identity.basic/manifest.toa.yaml +22 -9
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +5 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +5 -3
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +8 -4
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +8 -6
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +28 -22
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +3 -10
- 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 +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} +13 -6
- 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 +5 -18
- 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 +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +15 -5
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -0
- package/components/identity.federation/tsconfig.json +2 -2
- package/components/identity.roles/manifest.toa.yaml +18 -6
- package/components/identity.roles/operations/grant.d.ts +10 -0
- package/components/identity.roles/operations/grant.js +21 -0
- package/components/identity.roles/operations/grant.js.map +1 -0
- package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
- package/components/identity.roles/operations/lib/Entity.js +3 -0
- package/components/identity.roles/operations/lib/Entity.js.map +1 -0
- package/components/identity.roles/operations/list.d.ts +1 -4
- package/components/identity.roles/operations/list.js.map +1 -1
- package/components/identity.roles/operations/principal.d.ts +4 -6
- package/components/identity.roles/operations/principal.js +6 -1
- package/components/identity.roles/operations/principal.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +32 -0
- package/components/identity.roles/source/lib/Entity.ts +5 -0
- package/components/identity.roles/source/list.ts +2 -4
- package/components/identity.roles/source/principal.ts +10 -8
- package/components/identity.tokens/manifest.toa.yaml +19 -5
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +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 -7
- package/documentation/access.md +27 -16
- package/documentation/authorities.md +53 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +47 -22
- package/documentation/identity.md +17 -22
- package/documentation/io.md +56 -0
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +17 -11
- package/documentation/require.md +15 -0
- package/documentation/tree.md +22 -4
- package/documentation/vary.md +14 -14
- package/features/access.feature +89 -47
- 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 +4 -0
- package/features/cache.feature +112 -5
- package/features/cors.feature +7 -2
- package/features/debug.feature +34 -0
- package/features/directives.feature +5 -0
- package/features/dynamic.feature +18 -7
- package/features/errors.feature +18 -4
- package/features/etag.feature +18 -1
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +142 -19
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +67 -14
- package/features/identity.roles.feature +220 -4
- package/features/identity.tokens.feature +57 -4
- package/features/io.feature +205 -0
- package/features/octets.entries.feature +10 -0
- 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 +23 -6
- package/features/steps/IdP.ts +28 -23
- package/features/steps/components/echo/manifest.toa.yaml +5 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/pots/manifest.toa.yaml +2 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +27 -1
- package/features/vary.feature +105 -3
- package/package.json +12 -11
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- package/schemas/io/input.cos.yaml +3 -0
- package/schemas/io/message.cos.yaml +5 -0
- package/schemas/io/output.cos.yaml +5 -0
- package/source/Annotation.ts +3 -3
- package/source/Context.ts +6 -4
- package/source/Directive.test.ts +4 -4
- package/source/Directive.ts +11 -38
- package/source/Endpoint.ts +43 -8
- package/source/Factory.ts +11 -7
- package/source/Gateway.ts +16 -44
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +56 -43
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/messages.ts +1 -1
- package/source/Mapping.ts +6 -1
- 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 +32 -22
- package/source/directives/auth/Authorization.ts +38 -19
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Incept.ts +3 -2
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +22 -14
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +15 -8
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/cors/CORS.ts +13 -7
- 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 +4 -3
- package/source/directives/octets/Delete.ts +4 -2
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +4 -3
- package/source/directives/octets/List.ts +4 -2
- package/source/directives/octets/Octets.ts +6 -8
- package/source/directives/octets/Store.ts +12 -4
- package/source/directives/octets/Workflow.ts +10 -3
- package/source/directives/octets/types.ts +0 -7
- 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 +7 -5
- package/source/directives/vary/embeddings/Authority.ts +8 -0
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Header.ts +8 -6
- package/source/directives/vary/embeddings/Language.ts +1 -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/root.ts +5 -0
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Context.d.ts +6 -4
- package/transpiled/Directive.d.ts +4 -17
- package/transpiled/Directive.js +4 -7
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +5 -3
- package/transpiled/Endpoint.js +30 -5
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +9 -4
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +1 -4
- package/transpiled/Gateway.js +10 -26
- 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 +41 -35
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +4 -1
- package/transpiled/HTTP/exceptions.js +7 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/messages.js +1 -1
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Mapping.js +4 -1
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +1 -0
- package/transpiled/Query.js +21 -20
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/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 -20
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Authorization.d.ts +2 -3
- package/transpiled/directives/auth/Authorization.js +26 -12
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +10 -0
- package/transpiled/directives/auth/Delegate.js +34 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +3 -2
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +20 -14
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +5 -5
- 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.d.ts +2 -3
- package/transpiled/directives/cors/CORS.js +13 -7
- 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 -26
- package/transpiled/directives/io/Input.js.map +1 -0
- package/transpiled/directives/io/Message.d.ts +1 -0
- package/transpiled/directives/io/Message.js +3 -0
- package/transpiled/directives/io/Message.js.map +1 -0
- package/transpiled/directives/io/Output.d.ts +13 -0
- package/transpiled/directives/io/Output.js +76 -0
- package/transpiled/directives/io/Output.js.map +1 -0
- package/transpiled/directives/io/index.d.ts +2 -0
- package/transpiled/directives/io/index.js +6 -0
- package/transpiled/directives/io/index.js.map +1 -0
- package/transpiled/directives/io/schemas.d.ts +7 -0
- package/transpiled/directives/io/schemas.js +14 -0
- package/transpiled/directives/io/schemas.js.map +1 -0
- package/transpiled/directives/octets/Context.d.ts +3 -3
- package/transpiled/directives/octets/Context.js +4 -2
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +3 -2
- package/transpiled/directives/octets/Delete.js +3 -1
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.d.ts +8 -0
- package/transpiled/directives/octets/Directive.js +8 -0
- package/transpiled/directives/octets/Directive.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +3 -2
- package/transpiled/directives/octets/Fetch.js +3 -1
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +3 -2
- package/transpiled/directives/octets/List.js +3 -1
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +4 -4
- package/transpiled/directives/octets/Octets.js +2 -4
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +3 -2
- package/transpiled/directives/octets/Store.js +10 -3
- 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/types.d.ts +0 -5
- 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 +3 -3
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Authority.js +10 -0
- package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Header.js +8 -6
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Language.js +1 -1
- 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/root.js +5 -0
- package/transpiled/root.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/octets.storage/operations/permute.js +0 -7
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -43
- package/transpiled/directives/octets/Permute.d.ts +0 -10
- package/transpiled/directives/octets/Permute.js.map +0 -1
package/features/access.feature
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Access authorization
|
|
2
3
|
|
|
3
4
|
Background:
|
|
4
5
|
Given the `identity.basic` database contains:
|
|
5
6
|
# developer:secret
|
|
6
7
|
# user:12345
|
|
7
|
-
| _id | username | password |
|
|
8
|
-
| efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
9
|
-
| e8e4f9c2a68d419b861403d71fabc915 | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
|
|
8
|
+
| _id | authority | username | password |
|
|
9
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
10
|
+
| e8e4f9c2a68d419b861403d71fabc915 | nex | user | $2b$10$Frszmrmsz9iwSXzBbRRMKeDVKsNxozkrLNSsN.SnVC.KPxLtQr/bK |
|
|
10
11
|
And the `identity.bans` database is empty
|
|
11
12
|
|
|
12
13
|
Scenario: Deny by default
|
|
@@ -20,6 +21,7 @@ Feature: Access authorization
|
|
|
20
21
|
When the following request is received:
|
|
21
22
|
"""
|
|
22
23
|
GET / HTTP/1.1
|
|
24
|
+
host: nex.toa.io
|
|
23
25
|
"""
|
|
24
26
|
Then the following reply is sent:
|
|
25
27
|
"""
|
|
@@ -30,6 +32,7 @@ Feature: Access authorization
|
|
|
30
32
|
Given the annotation:
|
|
31
33
|
"""yaml
|
|
32
34
|
/:
|
|
35
|
+
io:output: true
|
|
33
36
|
auth:anonymous: true
|
|
34
37
|
GET:
|
|
35
38
|
dev:stub:
|
|
@@ -38,6 +41,7 @@ Feature: Access authorization
|
|
|
38
41
|
When the following request is received:
|
|
39
42
|
"""
|
|
40
43
|
GET / HTTP/1.1
|
|
44
|
+
host: nex.toa.io
|
|
41
45
|
accept: application/yaml
|
|
42
46
|
"""
|
|
43
47
|
Then the following reply is sent:
|
|
@@ -60,6 +64,7 @@ Feature: Access authorization
|
|
|
60
64
|
When the following request is received:
|
|
61
65
|
"""
|
|
62
66
|
GET / HTTP/1.1
|
|
67
|
+
host: nex.toa.io
|
|
63
68
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
64
69
|
"""
|
|
65
70
|
Then the following reply is sent:
|
|
@@ -71,6 +76,7 @@ Feature: Access authorization
|
|
|
71
76
|
Given the annotation:
|
|
72
77
|
"""yaml
|
|
73
78
|
/:
|
|
79
|
+
io:output: true
|
|
74
80
|
/:id:
|
|
75
81
|
auth:id: id
|
|
76
82
|
GET:
|
|
@@ -80,6 +86,7 @@ Feature: Access authorization
|
|
|
80
86
|
When the following request is received:
|
|
81
87
|
"""
|
|
82
88
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
89
|
+
host: nex.toa.io
|
|
83
90
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
84
91
|
accept: application/yaml
|
|
85
92
|
"""
|
|
@@ -93,6 +100,7 @@ Feature: Access authorization
|
|
|
93
100
|
When the following request is received:
|
|
94
101
|
"""
|
|
95
102
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
103
|
+
host: nex.toa.io
|
|
96
104
|
authorization: Basic dXNlcjoxMjM0NQ==
|
|
97
105
|
accept: application/yaml
|
|
98
106
|
"""
|
|
@@ -109,6 +117,7 @@ Feature: Access authorization
|
|
|
109
117
|
And the annotation:
|
|
110
118
|
"""yaml
|
|
111
119
|
/:
|
|
120
|
+
io:output: true
|
|
112
121
|
auth:role: developer
|
|
113
122
|
GET:
|
|
114
123
|
dev:stub:
|
|
@@ -118,6 +127,7 @@ Feature: Access authorization
|
|
|
118
127
|
# identity with `developer` and `user` roles
|
|
119
128
|
"""
|
|
120
129
|
GET / HTTP/1.1
|
|
130
|
+
host: nex.toa.io
|
|
121
131
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
122
132
|
accept: application/yaml
|
|
123
133
|
"""
|
|
@@ -132,6 +142,7 @@ Feature: Access authorization
|
|
|
132
142
|
# identity with no roles
|
|
133
143
|
"""
|
|
134
144
|
GET / HTTP/1.1
|
|
145
|
+
host: nex.toa.io
|
|
135
146
|
authorization: Basic dXNlcjoxMjM0NQ==
|
|
136
147
|
"""
|
|
137
148
|
Then the following reply is sent:
|
|
@@ -146,6 +157,7 @@ Feature: Access authorization
|
|
|
146
157
|
And the annotation:
|
|
147
158
|
"""yaml
|
|
148
159
|
/:
|
|
160
|
+
io:output: true
|
|
149
161
|
/:
|
|
150
162
|
auth:role: developer:rust:junior # role scope matches
|
|
151
163
|
/nested:
|
|
@@ -159,6 +171,7 @@ Feature: Access authorization
|
|
|
159
171
|
When the following request is received:
|
|
160
172
|
"""
|
|
161
173
|
GET /nested/ HTTP/1.1
|
|
174
|
+
host: nex.toa.io
|
|
162
175
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
163
176
|
accept: text/plain
|
|
164
177
|
"""
|
|
@@ -172,6 +185,7 @@ Feature: Access authorization
|
|
|
172
185
|
When the following request is received:
|
|
173
186
|
"""
|
|
174
187
|
GET /javascript/ HTTP/1.1
|
|
188
|
+
host: nex.toa.io
|
|
175
189
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
176
190
|
"""
|
|
177
191
|
Then the following reply is sent:
|
|
@@ -190,6 +204,7 @@ Feature: Access authorization
|
|
|
190
204
|
- developer
|
|
191
205
|
- admin
|
|
192
206
|
GET:
|
|
207
|
+
io:output: true
|
|
193
208
|
dev:stub:
|
|
194
209
|
access: granted!
|
|
195
210
|
"""
|
|
@@ -197,6 +212,7 @@ Feature: Access authorization
|
|
|
197
212
|
# identity with `developer` and `user` roles
|
|
198
213
|
"""
|
|
199
214
|
GET / HTTP/1.1
|
|
215
|
+
host: nex.toa.io
|
|
200
216
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
201
217
|
accept: application/yaml
|
|
202
218
|
"""
|
|
@@ -215,6 +231,7 @@ Feature: Access authorization
|
|
|
215
231
|
And the annotation:
|
|
216
232
|
"""yaml
|
|
217
233
|
/:
|
|
234
|
+
io:output: true
|
|
218
235
|
/rust/:id:
|
|
219
236
|
auth:rule:
|
|
220
237
|
id: id
|
|
@@ -233,6 +250,7 @@ Feature: Access authorization
|
|
|
233
250
|
When the following request is received:
|
|
234
251
|
"""
|
|
235
252
|
GET /rust/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
253
|
+
host: nex.toa.io
|
|
236
254
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
237
255
|
accept: application/yaml
|
|
238
256
|
"""
|
|
@@ -246,6 +264,7 @@ Feature: Access authorization
|
|
|
246
264
|
When the following request is received:
|
|
247
265
|
"""
|
|
248
266
|
GET /javascript/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
267
|
+
host: nex.toa.io
|
|
249
268
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
250
269
|
"""
|
|
251
270
|
Then the following reply is sent:
|
|
@@ -257,6 +276,7 @@ Feature: Access authorization
|
|
|
257
276
|
Given the annotation:
|
|
258
277
|
"""yaml
|
|
259
278
|
/:
|
|
279
|
+
io:output: true
|
|
260
280
|
/:id:
|
|
261
281
|
auth:id: id
|
|
262
282
|
GET:
|
|
@@ -265,8 +285,37 @@ Feature: Access authorization
|
|
|
265
285
|
"""
|
|
266
286
|
When the following request is received:
|
|
267
287
|
"""
|
|
268
|
-
GET /
|
|
269
|
-
|
|
288
|
+
GET /identity/ HTTP/1.1
|
|
289
|
+
host: nex.toa.io
|
|
290
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
291
|
+
accept: application/yaml
|
|
292
|
+
"""
|
|
293
|
+
Then the following reply is sent:
|
|
294
|
+
"""
|
|
295
|
+
200 OK
|
|
296
|
+
authorization: Token ${{ developer.token }}
|
|
297
|
+
|
|
298
|
+
id: ${{ developer.id }}
|
|
299
|
+
"""
|
|
300
|
+
When the following request is received:
|
|
301
|
+
"""
|
|
302
|
+
GET /identity/ HTTP/1.1
|
|
303
|
+
host: nex.toa.io
|
|
304
|
+
authorization: Basic dXNlcjoxMjM0NQ==
|
|
305
|
+
accept: application/yaml
|
|
306
|
+
"""
|
|
307
|
+
Then the following reply is sent:
|
|
308
|
+
"""
|
|
309
|
+
200 OK
|
|
310
|
+
authorization: Token ${{ user.token }}
|
|
311
|
+
|
|
312
|
+
id: ${{ user.id }}
|
|
313
|
+
"""
|
|
314
|
+
When the following request is received:
|
|
315
|
+
"""
|
|
316
|
+
GET /${{ developer.id }}/ HTTP/1.1
|
|
317
|
+
host: nex.toa.io
|
|
318
|
+
authorization: Token ${{ developer.token }}
|
|
270
319
|
accept: application/yaml
|
|
271
320
|
"""
|
|
272
321
|
Then the following reply is sent:
|
|
@@ -282,8 +331,9 @@ Feature: Access authorization
|
|
|
282
331
|
"""
|
|
283
332
|
When the following request is received:
|
|
284
333
|
"""
|
|
285
|
-
GET /
|
|
286
|
-
|
|
334
|
+
GET /${{ user.id }}/ HTTP/1.1
|
|
335
|
+
host: nex.toa.io
|
|
336
|
+
authorization: Token ${{ developer.token }}
|
|
287
337
|
accept: application/yaml
|
|
288
338
|
"""
|
|
289
339
|
Then the following reply is sent:
|
|
@@ -295,6 +345,7 @@ Feature: Access authorization
|
|
|
295
345
|
Given the annotation:
|
|
296
346
|
"""yaml
|
|
297
347
|
/:
|
|
348
|
+
io:output: true
|
|
298
349
|
auth:role: developer
|
|
299
350
|
GET:
|
|
300
351
|
dev:stub:
|
|
@@ -306,6 +357,7 @@ Feature: Access authorization
|
|
|
306
357
|
When the following request is received:
|
|
307
358
|
"""
|
|
308
359
|
GET / HTTP/1.1
|
|
360
|
+
host: nex.toa.io
|
|
309
361
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
310
362
|
accept: application/yaml
|
|
311
363
|
"""
|
|
@@ -320,6 +372,7 @@ Feature: Access authorization
|
|
|
320
372
|
When the following request is received:
|
|
321
373
|
"""
|
|
322
374
|
GET / HTTP/1.1
|
|
375
|
+
host: nex.toa.io
|
|
323
376
|
authorization: Token ${{ token }}
|
|
324
377
|
accept: application/yaml
|
|
325
378
|
"""
|
|
@@ -335,6 +388,7 @@ Feature: Access authorization
|
|
|
335
388
|
Given the annotation:
|
|
336
389
|
"""yaml
|
|
337
390
|
/:
|
|
391
|
+
io:output: true
|
|
338
392
|
/:id:
|
|
339
393
|
auth:scheme: basic
|
|
340
394
|
auth:id: id
|
|
@@ -345,6 +399,7 @@ Feature: Access authorization
|
|
|
345
399
|
When the following request is received:
|
|
346
400
|
"""
|
|
347
401
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
402
|
+
host: nex.toa.io
|
|
348
403
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
349
404
|
accept: application/yaml
|
|
350
405
|
"""
|
|
@@ -358,6 +413,7 @@ Feature: Access authorization
|
|
|
358
413
|
When the following request is received:
|
|
359
414
|
"""
|
|
360
415
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
416
|
+
host: nex.toa.io
|
|
361
417
|
authorization: Token v3.local.9oEtVJkfRw4cOJ8M4DxuVuAN29dGT26XMYyPAoXtwrkdkiJVSVj46sMNAOdlxwKGszJZV_ReOL26dxDVlsQ7QAIuRhRPlvsHYNOhcD-LApoAXV0S3IK16EMoEv7tE9z70FCLC3WoIW9RIQ8PR3uZhAdhSgBilsVOpWrk4XtnfCIlVwhYMKu79a66oZZhV2Q7Kl3nfYsf84-6rAL_1H0MsqCDUHVXuIg
|
|
362
418
|
accept: text/plain
|
|
363
419
|
"""
|
|
@@ -374,11 +430,13 @@ Feature: Access authorization
|
|
|
374
430
|
|
|
375
431
|
Given the annotation:
|
|
376
432
|
"""yaml
|
|
377
|
-
|
|
433
|
+
/:
|
|
434
|
+
anonymous: true
|
|
378
435
|
"""
|
|
379
436
|
When the following request is received:
|
|
380
437
|
"""
|
|
381
438
|
POST /identity/roles/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
439
|
+
host: nex.toa.io
|
|
382
440
|
content-type: application/yaml
|
|
383
441
|
|
|
384
442
|
role: developer
|
|
@@ -388,62 +446,46 @@ Feature: Access authorization
|
|
|
388
446
|
401 Unauthorized
|
|
389
447
|
"""
|
|
390
448
|
|
|
391
|
-
Scenario:
|
|
449
|
+
Scenario: Authorization delegation
|
|
392
450
|
Given the `identity.roles` database contains:
|
|
393
|
-
| _id | identity | role
|
|
394
|
-
| 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 |
|
|
395
|
-
And the
|
|
396
|
-
"""yaml
|
|
397
|
-
/:
|
|
398
|
-
/:id:
|
|
399
|
-
auth:id: id
|
|
400
|
-
GET:
|
|
401
|
-
dev:stub:
|
|
402
|
-
access: granted!
|
|
403
|
-
"""
|
|
404
|
-
And the `identity.tokens` configuration:
|
|
451
|
+
| _id | identity | role |
|
|
452
|
+
| 775a648d054e4ce1a65f8f17e5b51803 | efe3a65ebbee47ed95a73edd911ea328 | developer |
|
|
453
|
+
And the `echo` is running with the following manifest:
|
|
405
454
|
"""yaml
|
|
406
|
-
|
|
455
|
+
exposition:
|
|
456
|
+
/:
|
|
457
|
+
io:output: true
|
|
458
|
+
auth:delegate: identity
|
|
459
|
+
GET: identity
|
|
407
460
|
"""
|
|
408
461
|
When the following request is received:
|
|
409
462
|
"""
|
|
410
|
-
GET /
|
|
411
|
-
|
|
463
|
+
GET /echo/ HTTP/1.1
|
|
464
|
+
host: nex.toa.io
|
|
465
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
466
|
+
accept: application/yaml
|
|
412
467
|
"""
|
|
413
468
|
Then the following reply is sent:
|
|
414
469
|
"""
|
|
415
470
|
200 OK
|
|
416
471
|
authorization: Token ${{ token }}
|
|
417
|
-
"""
|
|
418
|
-
When the following request is received:
|
|
419
|
-
"""
|
|
420
|
-
PUT /identity/bans/e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
421
|
-
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
422
|
-
content-type: application/yaml
|
|
423
472
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
204 No Content
|
|
473
|
+
identity:
|
|
474
|
+
id: efe3a65ebbee47ed95a73edd911ea328
|
|
475
|
+
roles:
|
|
476
|
+
- developer
|
|
429
477
|
"""
|
|
430
|
-
# accessing a resource with a banned Identity
|
|
431
478
|
When the following request is received:
|
|
432
479
|
"""
|
|
433
|
-
GET /
|
|
434
|
-
|
|
480
|
+
GET /echo/ HTTP/1.1
|
|
481
|
+
host: nex.toa.io
|
|
482
|
+
authorization: Token ${{ token }}
|
|
435
483
|
"""
|
|
436
484
|
Then the following reply is sent:
|
|
437
485
|
"""
|
|
438
|
-
|
|
439
|
-
"""
|
|
440
|
-
Then after 1 second
|
|
441
|
-
When the following request is received:
|
|
442
|
-
"""
|
|
443
|
-
GET /e8e4f9c2a68d419b861403d71fabc915/ HTTP/1.1
|
|
444
|
-
authorization: Token ${{ token }}
|
|
486
|
+
200 OK
|
|
445
487
|
"""
|
|
446
|
-
|
|
488
|
+
And the reply does not contain:
|
|
447
489
|
"""
|
|
448
|
-
|
|
490
|
+
authorization: Token
|
|
449
491
|
"""
|
|
@@ -4,6 +4,7 @@ Feature: Annotation
|
|
|
4
4
|
Given the annotation:
|
|
5
5
|
"""yaml
|
|
6
6
|
/:
|
|
7
|
+
io:output: true
|
|
7
8
|
anonymous: true
|
|
8
9
|
/foo:
|
|
9
10
|
GET:
|
|
@@ -17,6 +18,7 @@ Feature: Annotation
|
|
|
17
18
|
When the following request is received:
|
|
18
19
|
"""
|
|
19
20
|
GET /foo/ HTTP/1.1
|
|
21
|
+
host: nex.toa.io
|
|
20
22
|
accept: application/yaml
|
|
21
23
|
"""
|
|
22
24
|
Then the following reply is sent:
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
Feature: Basic credentials with authorities
|
|
2
|
+
|
|
3
|
+
Scenario: Basic credentials are scoped to authorities
|
|
4
|
+
Given the annotation:
|
|
5
|
+
"""yaml
|
|
6
|
+
authorities:
|
|
7
|
+
one: the.one.com
|
|
8
|
+
two: the.two.com
|
|
9
|
+
/:
|
|
10
|
+
/:id:
|
|
11
|
+
auth:id: id
|
|
12
|
+
io:output: true
|
|
13
|
+
GET:
|
|
14
|
+
dev:stub: Hello
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
# create basic credentials within the `one` authority
|
|
18
|
+
When the following request is received:
|
|
19
|
+
"""
|
|
20
|
+
POST /identity/basic/ HTTP/1.1
|
|
21
|
+
host: the.one.com
|
|
22
|
+
content-type: application/yaml
|
|
23
|
+
accept: application/yaml
|
|
24
|
+
|
|
25
|
+
username: #{{ id | set one.username }}
|
|
26
|
+
password: #{{ password 8 | set one.password }}
|
|
27
|
+
"""
|
|
28
|
+
Then the following reply is sent:
|
|
29
|
+
"""
|
|
30
|
+
201 Created
|
|
31
|
+
|
|
32
|
+
id: ${{ one.id }}
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
# create basic credentials within the `two` authority
|
|
36
|
+
When the following request is received:
|
|
37
|
+
"""
|
|
38
|
+
POST /identity/basic/ HTTP/1.1
|
|
39
|
+
host: the.two.com
|
|
40
|
+
content-type: application/yaml
|
|
41
|
+
accept: application/yaml
|
|
42
|
+
|
|
43
|
+
username: #{{ id | set two.username }}
|
|
44
|
+
password: #{{ password 8 | set two.password }}
|
|
45
|
+
"""
|
|
46
|
+
Then the following reply is sent:
|
|
47
|
+
"""
|
|
48
|
+
201 Created
|
|
49
|
+
|
|
50
|
+
id: ${{ two.id }}
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
# access the resource with the `one` authority
|
|
54
|
+
When the following request is received:
|
|
55
|
+
"""
|
|
56
|
+
GET /${{ one.id }}/ HTTP/1.1
|
|
57
|
+
host: the.one.com
|
|
58
|
+
authorization: Basic #{{ basic one }}
|
|
59
|
+
"""
|
|
60
|
+
Then the following reply is sent:
|
|
61
|
+
"""
|
|
62
|
+
200 OK
|
|
63
|
+
"""
|
|
64
|
+
When the following request is received:
|
|
65
|
+
"""
|
|
66
|
+
GET /${{ two.id }}/ HTTP/1.1
|
|
67
|
+
host: the.one.com
|
|
68
|
+
authorization: Basic #{{ basic two }}
|
|
69
|
+
"""
|
|
70
|
+
Then the following reply is sent:
|
|
71
|
+
"""
|
|
72
|
+
401 Unauthorized
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
# access the resource with the `two` authority
|
|
76
|
+
When the following request is received:
|
|
77
|
+
"""
|
|
78
|
+
GET /${{ one.id }}/ HTTP/1.1
|
|
79
|
+
host: the.two.com
|
|
80
|
+
authorization: Basic #{{ basic one }}
|
|
81
|
+
"""
|
|
82
|
+
Then the following reply is sent:
|
|
83
|
+
"""
|
|
84
|
+
401 Unauthorized
|
|
85
|
+
"""
|
|
86
|
+
When the following request is received:
|
|
87
|
+
"""
|
|
88
|
+
GET /${{ two.id }}/ HTTP/1.1
|
|
89
|
+
host: the.two.com
|
|
90
|
+
authorization: Basic #{{ basic two }}
|
|
91
|
+
"""
|
|
92
|
+
Then the following reply is sent:
|
|
93
|
+
"""
|
|
94
|
+
200 OK
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
# create `one` credentials in the `two` authority
|
|
98
|
+
When the following request is received:
|
|
99
|
+
"""
|
|
100
|
+
POST /identity/basic/ HTTP/1.1
|
|
101
|
+
host: the.one.com
|
|
102
|
+
content-type: application/yaml
|
|
103
|
+
accept: application/yaml
|
|
104
|
+
|
|
105
|
+
username: ${{ one.username }}
|
|
106
|
+
password: ${{ one.password }}
|
|
107
|
+
"""
|
|
108
|
+
Then the following reply is sent:
|
|
109
|
+
"""
|
|
110
|
+
409 Conflict
|
|
111
|
+
"""
|
|
112
|
+
When the following request is received:
|
|
113
|
+
"""
|
|
114
|
+
POST /identity/basic/ HTTP/1.1
|
|
115
|
+
host: the.two.com
|
|
116
|
+
content-type: application/yaml
|
|
117
|
+
accept: application/yaml
|
|
118
|
+
|
|
119
|
+
username: ${{ one.username }}
|
|
120
|
+
password: ${{ one.password }}
|
|
121
|
+
"""
|
|
122
|
+
Then the following reply is sent:
|
|
123
|
+
"""
|
|
124
|
+
201 Created
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
# create `two` credentials in the `one` authority
|
|
128
|
+
When the following request is received:
|
|
129
|
+
"""
|
|
130
|
+
POST /identity/basic/ HTTP/1.1
|
|
131
|
+
host: the.one.com
|
|
132
|
+
content-type: application/yaml
|
|
133
|
+
accept: application/yaml
|
|
134
|
+
|
|
135
|
+
username: ${{ two.username }}
|
|
136
|
+
password: ${{ two.password }}
|
|
137
|
+
"""
|
|
138
|
+
Then the following reply is sent:
|
|
139
|
+
"""
|
|
140
|
+
201 Created
|
|
141
|
+
"""
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
Feature: Authorities
|
|
2
|
+
|
|
3
|
+
Scenario: Accessing an authority
|
|
4
|
+
Given the annotation:
|
|
5
|
+
"""yaml
|
|
6
|
+
authorities:
|
|
7
|
+
example: the.example.com
|
|
8
|
+
/:
|
|
9
|
+
anonymous: true
|
|
10
|
+
GET:
|
|
11
|
+
dev:stub: Hello
|
|
12
|
+
"""
|
|
13
|
+
When the following request is received:
|
|
14
|
+
"""
|
|
15
|
+
GET / HTTP/1.1
|
|
16
|
+
host: the.example.com
|
|
17
|
+
"""
|
|
18
|
+
Then the following reply is sent:
|
|
19
|
+
"""
|
|
20
|
+
200 OK
|
|
21
|
+
"""
|
|
22
|
+
When the following request is received:
|
|
23
|
+
"""
|
|
24
|
+
GET / HTTP/1.1
|
|
25
|
+
host: the.other.com
|
|
26
|
+
"""
|
|
27
|
+
Then the following reply is sent:
|
|
28
|
+
"""
|
|
29
|
+
404 Not Found
|
|
30
|
+
|
|
31
|
+
Unknown authority
|
|
32
|
+
"""
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
Feature: OIDC tokens with authorities
|
|
2
|
+
|
|
3
|
+
Scenario: OIDC tokens are scoped to authorities
|
|
4
|
+
Given the annotation:
|
|
5
|
+
"""yaml
|
|
6
|
+
authorities:
|
|
7
|
+
one: the.one.com
|
|
8
|
+
two: the.two.com
|
|
9
|
+
/:
|
|
10
|
+
/:id:
|
|
11
|
+
auth:id: id
|
|
12
|
+
GET:
|
|
13
|
+
dev:stub: Hello
|
|
14
|
+
"""
|
|
15
|
+
And local IDP is running
|
|
16
|
+
And the `identity.federation` database is empty
|
|
17
|
+
And the `identity.federation` configuration:
|
|
18
|
+
"""yaml
|
|
19
|
+
trust:
|
|
20
|
+
- iss: http://localhost:44444
|
|
21
|
+
"""
|
|
22
|
+
And the IDP token for One is issued
|
|
23
|
+
And the IDP token for Two is issued
|
|
24
|
+
|
|
25
|
+
# create identities
|
|
26
|
+
When the following request is received:
|
|
27
|
+
"""
|
|
28
|
+
POST /identity/federation/ HTTP/1.1
|
|
29
|
+
host: the.one.com
|
|
30
|
+
accept: application/yaml
|
|
31
|
+
content-type: application/yaml
|
|
32
|
+
|
|
33
|
+
credentials: ${{ One.id_token }}
|
|
34
|
+
"""
|
|
35
|
+
Then the following reply is sent:
|
|
36
|
+
"""
|
|
37
|
+
201 Created
|
|
38
|
+
|
|
39
|
+
id: ${{ One.id }}
|
|
40
|
+
"""
|
|
41
|
+
When the following request is received:
|
|
42
|
+
"""
|
|
43
|
+
POST /identity/federation/ HTTP/1.1
|
|
44
|
+
host: the.two.com
|
|
45
|
+
accept: application/yaml
|
|
46
|
+
content-type: application/yaml
|
|
47
|
+
|
|
48
|
+
credentials: ${{ Two.id_token }}
|
|
49
|
+
"""
|
|
50
|
+
Then the following reply is sent:
|
|
51
|
+
"""
|
|
52
|
+
201 Created
|
|
53
|
+
|
|
54
|
+
id: ${{ Two.id }}
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
# access `one` authority
|
|
58
|
+
When the following request is received:
|
|
59
|
+
"""
|
|
60
|
+
GET /${{ One.id }}/ HTTP/1.1
|
|
61
|
+
host: the.one.com
|
|
62
|
+
authorization: Bearer ${{ One.id_token }}
|
|
63
|
+
"""
|
|
64
|
+
Then the following reply is sent:
|
|
65
|
+
"""
|
|
66
|
+
200 OK
|
|
67
|
+
"""
|
|
68
|
+
When the following request is received:
|
|
69
|
+
"""
|
|
70
|
+
GET /${{ Two.id }}/ HTTP/1.1
|
|
71
|
+
host: the.one.com
|
|
72
|
+
authorization: Bearer ${{ Two.id_token }}
|
|
73
|
+
"""
|
|
74
|
+
Then the following reply is sent:
|
|
75
|
+
"""
|
|
76
|
+
401 Unauthorized
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
# access `two` authority
|
|
80
|
+
When the following request is received:
|
|
81
|
+
"""
|
|
82
|
+
GET /${{ One.id }}/ HTTP/1.1
|
|
83
|
+
host: the.two.com
|
|
84
|
+
authorization: Bearer ${{ One.id_token }}
|
|
85
|
+
"""
|
|
86
|
+
Then the following reply is sent:
|
|
87
|
+
"""
|
|
88
|
+
401 Unauthorized
|
|
89
|
+
"""
|
|
90
|
+
When the following request is received:
|
|
91
|
+
"""
|
|
92
|
+
GET /${{ Two.id }}/ HTTP/1.1
|
|
93
|
+
host: the.two.com
|
|
94
|
+
authorization: Bearer ${{ Two.id_token }}
|
|
95
|
+
"""
|
|
96
|
+
Then the following reply is sent:
|
|
97
|
+
"""
|
|
98
|
+
200 OK
|
|
99
|
+
"""
|