@toa.io/extensions.exposition 1.0.0-alpha.291 → 1.0.0-alpha.293
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/identity.basic/package.json +8 -0
- package/components/identity.federation/package.json +8 -0
- package/components/identity.passkeys/package.json +8 -0
- package/components/identity.tokens/package.json +10 -0
- package/package.json +25 -13
- package/transpiled/Discovery/Explorer.js +1 -1
- package/transpiled/Discovery/Explorer.js.map +1 -1
- package/transpiled/Discovery/Site.js +1 -1
- package/transpiled/Discovery/Site.js.map +1 -1
- package/transpiled/Discovery/trunk.js +1 -1
- package/transpiled/Discovery/trunk.js.map +1 -1
- package/transpiled/Endpoint.js +3 -0
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +1 -1
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.js +1 -1
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +1 -1
- package/transpiled/HTTP/Server.js +1 -1
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/Introspection.d.ts +6 -0
- package/transpiled/Introspection.js +1 -0
- package/transpiled/Introspection.js.map +1 -1
- package/transpiled/MCP/Server.d.ts +1 -1
- package/transpiled/MCP/Server.js +1 -1
- package/transpiled/MCP/Server.js.map +1 -1
- package/transpiled/MCP/discover.d.ts +1 -1
- package/transpiled/MCP/schema.js +2 -2
- package/transpiled/Query.d.ts +2 -12
- package/transpiled/Query.js +3 -13
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RPC/Dispatcher.d.ts +1 -1
- package/transpiled/RPC/Dispatcher.js +2 -2
- package/transpiled/RPC/Dispatcher.js.map +1 -1
- package/transpiled/RTD/Endpoint.d.ts +2 -3
- package/transpiled/RTD/Tree.js +1 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.js +1 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/RTD/syntax/index.d.ts +1 -2
- package/transpiled/RTD/syntax/index.js +1 -2
- package/transpiled/RTD/syntax/index.js.map +1 -1
- package/transpiled/Tenant.js +1 -1
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/directives/auth/Authorization.js +1 -1
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/io/IO.js +1 -1
- package/transpiled/directives/io/IO.js.map +1 -1
- package/transpiled/directives/oauth/documents.d.ts +1 -1
- package/transpiled/index.d.ts +0 -2
- package/transpiled/index.js +0 -2
- package/transpiled/index.js.map +1 -1
- package/transpiled/service.js +1 -1
- package/transpiled/service.js.map +1 -1
- package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
- package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
- package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
- package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
- package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
- package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
- package/ui/dist/_app/immutable/chunks/{D9tE1yyO.js → DVlaUfVU.js} +1 -1
- package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
- package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
- package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
- package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
- package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
- package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
- package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
- package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
- package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
- package/ui/dist/_app/version.json +1 -1
- package/ui/dist/index.html +12 -12
- package/CHANGELOG.md +0 -35
- package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
- package/components/identity.basic/source/lib/credentials.test.ts +0 -18
- package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
- package/components/identity.clients/source/lib/canonical.test.ts +0 -43
- package/components/identity.clients/source/lib/cimd.test.ts +0 -122
- package/components/identity.clients/source/lib/redirect.test.ts +0 -47
- package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
- package/components/identity.credentials/source/list.test.ts +0 -70
- package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
- package/components/identity.federation/source/lib/discovery.test.ts +0 -60
- package/components/identity.federation/source/list.test.ts +0 -41
- package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
- package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
- package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
- package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
- package/components/identity.passkeys/source/errors.test.ts +0 -34
- package/components/identity.passkeys/source/webauthn.test.ts +0 -26
- package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
- package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
- package/components/identity.tokens/source/authenticate.test.ts +0 -112
- package/components/identity.tokens/source/decrypt.test.ts +0 -216
- package/components/identity.tokens/source/encrypt.test.ts +0 -150
- package/components/identity.tokens/source/issue.test.ts +0 -73
- package/components/identity.tokens/source/lib/form.test.ts +0 -25
- package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
- package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
- package/context.toa.yaml +0 -31
- package/cucumber.mjs +0 -7
- package/documentation/.assets/ia3-dark.jpg +0 -0
- package/documentation/.assets/ia3-light.jpg +0 -0
- package/documentation/.assets/overview-dark.jpg +0 -0
- package/documentation/.assets/overview-light.jpg +0 -0
- package/documentation/.assets/role-scopes-dark.jpg +0 -0
- package/documentation/.assets/role-scopes-light.jpg +0 -0
- package/documentation/.assets/rtd-dark.jpg +0 -0
- package/documentation/.assets/rtd-light.jpg +0 -0
- package/documentation/access.md +0 -350
- package/documentation/authorities.md +0 -51
- package/documentation/cache.md +0 -72
- package/documentation/components.md +0 -472
- package/documentation/consent.md +0 -101
- package/documentation/credentials.md +0 -88
- package/documentation/dev.md +0 -30
- package/documentation/discovery.md +0 -81
- package/documentation/flow.md +0 -44
- package/documentation/help.md +0 -122
- package/documentation/identity.md +0 -304
- package/documentation/introspection.md +0 -123
- package/documentation/io.md +0 -167
- package/documentation/ip.md +0 -24
- package/documentation/map.md +0 -123
- package/documentation/mcp.md +0 -183
- package/documentation/notes/desync.jpg +0 -0
- package/documentation/notes/peers.md +0 -59
- package/documentation/notes/sse.md +0 -71
- package/documentation/notes/throttling.md +0 -122
- package/documentation/oauth.md +0 -180
- package/documentation/octets.md +0 -334
- package/documentation/passkeys.md +0 -11
- package/documentation/protocol.md +0 -120
- package/documentation/query.md +0 -324
- package/documentation/require.md +0 -15
- package/documentation/rpc.md +0 -154
- package/documentation/tracing.md +0 -70
- package/documentation/tree.md +0 -199
- package/features/access.feature +0 -596
- package/features/annotation.feature +0 -32
- package/features/auth.assert.feature +0 -55
- package/features/auth.bearer.feature +0 -120
- package/features/auth.claims.feature +0 -171
- package/features/auth.incept.feature +0 -166
- package/features/auth.input.feature +0 -59
- package/features/authorities.basic.feature +0 -141
- package/features/authorities.feature +0 -71
- package/features/authorities.federation.feature +0 -100
- package/features/authorities.tokens.feature +0 -117
- package/features/body.feature +0 -76
- package/features/cache.feature +0 -368
- package/features/configuration.feature +0 -206
- package/features/cors.feature +0 -127
- package/features/credentials.feature +0 -106
- package/features/debug.feature +0 -34
- package/features/dev.feature +0 -90
- package/features/directives.feature +0 -61
- package/features/discovery.feature +0 -213
- package/features/discovery.ui.feature +0 -213
- package/features/dynamic.feature +0 -192
- package/features/errors.feature +0 -258
- package/features/etag.feature +0 -239
- package/features/flow.feature +0 -148
- package/features/help.feature +0 -512
- package/features/identity.bans.feature +0 -200
- package/features/identity.basic.feature +0 -666
- package/features/identity.feature +0 -240
- package/features/identity.federation.feature +0 -396
- package/features/identity.otp.feature +0 -142
- package/features/identity.roles.feature +0 -568
- package/features/identity.tokens.custom.feature +0 -430
- package/features/identity.tokens.feature +0 -131
- package/features/interruptions.feature +0 -20
- package/features/introspection.feature +0 -565
- package/features/introspection.map.feature +0 -108
- package/features/io.feature +0 -204
- package/features/io.throttle.feature +0 -166
- package/features/map.feature +0 -360
- package/features/mcp.feature +0 -753
- package/features/methods.feature +0 -48
- package/features/oauth.clients.feature +0 -195
- package/features/oauth.discovery.feature +0 -164
- package/features/oauth.grants.feature +0 -301
- package/features/octets.cloudinary.feature +0 -233
- package/features/octets.download.feature +0 -194
- package/features/octets.entries.feature +0 -83
- package/features/octets.feature +0 -306
- package/features/octets.head.feature +0 -40
- package/features/octets.location.feature +0 -83
- package/features/octets.meta.feature +0 -117
- package/features/octets.workflows.feature +0 -565
- package/features/passkeys.feature +0 -66
- package/features/probes.feature +0 -18
- package/features/query.feature +0 -389
- package/features/realtime.feature +0 -34
- package/features/require.feature +0 -66
- package/features/response.feature +0 -103
- package/features/routes.feature +0 -224
- package/features/rpc.feature +0 -429
- package/features/server.feature +0 -21
- package/features/site/_app/immutable/asset.js +0 -1
- package/features/site/favicon.ico +0 -0
- package/features/site/index.html +0 -10
- package/features/steps/.env.example +0 -5
- package/features/steps/Captures.ts +0 -20
- package/features/steps/Cloudinary.ts +0 -12
- package/features/steps/Common.ts +0 -38
- package/features/steps/Components.ts +0 -115
- package/features/steps/Database.ts +0 -106
- package/features/steps/Gateway.ts +0 -240
- package/features/steps/HTTP.ts +0 -96
- package/features/steps/IDP.ts +0 -361
- package/features/steps/Identity.ts +0 -54
- package/features/steps/OTP.ts +0 -42
- package/features/steps/Parameters.ts +0 -162
- package/features/steps/Probe.ts +0 -38
- package/features/steps/Realtime.ts +0 -175
- package/features/steps/Workspace.ts +0 -48
- package/features/steps/components/audit/manifest.toa.yaml +0 -20
- package/features/steps/components/audit/operations/record.js +0 -5
- package/features/steps/components/echo/manifest.toa.yaml +0 -59
- package/features/steps/components/echo/operations/affect.js +0 -3
- package/features/steps/components/echo/operations/compute.js +0 -3
- package/features/steps/components/echo/operations/echo.js +0 -3
- package/features/steps/components/echo/operations/error.js +0 -7
- package/features/steps/components/echo/operations/identity.js +0 -3
- package/features/steps/components/echo/operations/parameters.js +0 -3
- package/features/steps/components/echo/operations/ping.js +0 -3
- package/features/steps/components/echo/operations/unwrap.js +0 -3
- package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
- package/features/steps/components/echo.beacon/operations/hello.js +0 -3
- package/features/steps/components/greeter/manifest.toa.yaml +0 -5
- package/features/steps/components/greeter/operations/greet.js +0 -3
- package/features/steps/components/notify/manifest.toa.yaml +0 -20
- package/features/steps/components/notify/operations/send.js +0 -5
- package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
- package/features/steps/components/octets.tester/operations/authority.js +0 -3
- package/features/steps/components/octets.tester/operations/bar.js +0 -9
- package/features/steps/components/octets.tester/operations/baz.js +0 -9
- package/features/steps/components/octets.tester/operations/concat.js +0 -5
- package/features/steps/components/octets.tester/operations/echo.js +0 -5
- package/features/steps/components/octets.tester/operations/err.js +0 -14
- package/features/steps/components/octets.tester/operations/foo.js +0 -5
- package/features/steps/components/octets.tester/operations/id.js +0 -5
- package/features/steps/components/octets.tester/operations/identity.js +0 -5
- package/features/steps/components/octets.tester/operations/lenna.png +0 -0
- package/features/steps/components/octets.tester/operations/redirect.js +0 -17
- package/features/steps/components/octets.tester/operations/yex.js +0 -14
- package/features/steps/components/octets.tester/operations/yield.js +0 -11
- package/features/steps/components/orders/manifest.toa.yaml +0 -30
- package/features/steps/components/orders/operations/create.js +0 -7
- package/features/steps/components/pots/manifest.toa.yaml +0 -91
- package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
- package/features/steps/components/pricing/manifest.toa.yaml +0 -13
- package/features/steps/components/pricing/operations/quote.js +0 -3
- package/features/steps/components/sequences/manifest.toa.yaml +0 -11
- package/features/steps/components/sequences/operations/numbers.js +0 -5
- package/features/steps/components/sequences/operations/tokens.js +0 -14
- package/features/steps/components/users/manifest.toa.yaml +0 -30
- package/features/steps/components/users/operations/create.js +0 -11
- package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
- package/features/steps/map.ts +0 -30
- package/features/steps/tsconfig.json +0 -9
- package/features/streams.feature +0 -35
- package/features/timestamps.feature +0 -41
- package/features/timing.feature +0 -49
- package/features/tracing.feature +0 -123
- package/schemas/annotation.cos.yaml +0 -125
- package/schemas/call.cos.yaml +0 -18
- package/schemas/directive.cos.yaml +0 -7
- package/schemas/method.cos.yaml +0 -23
- package/schemas/node.cos.yaml +0 -22
- package/schemas/query.cos.yaml +0 -31
- package/schemas/querystring.cos.yaml +0 -19
- package/schemas/range.cos.yaml +0 -10
- package/schemas/route.cos.yaml +0 -6
- package/source/Annotation.ts +0 -89
- package/source/Branch.test.ts +0 -40
- package/source/Branch.ts +0 -44
- package/source/Composition.ts +0 -51
- package/source/Context.ts +0 -11
- package/source/Directive.test.ts +0 -199
- package/source/Directive.ts +0 -248
- package/source/Discovery/Explorer.ts +0 -34
- package/source/Discovery/Site.test.ts +0 -147
- package/source/Discovery/Site.ts +0 -202
- package/source/Discovery/index.ts +0 -3
- package/source/Discovery/tree.test.ts +0 -175
- package/source/Discovery/tree.ts +0 -77
- package/source/Discovery/trunk.ts +0 -33
- package/source/Endpoint.test.ts +0 -67
- package/source/Endpoint.ts +0 -157
- package/source/Factory.ts +0 -42
- package/source/Gateway.ts +0 -390
- package/source/HTTP/Context.ts +0 -143
- package/source/HTTP/Probe.ts +0 -99
- package/source/HTTP/Server.ts +0 -430
- package/source/HTTP/Timing.ts +0 -14
- package/source/HTTP/address.test.ts +0 -28
- package/source/HTTP/address.ts +0 -16
- package/source/HTTP/exceptions.ts +0 -99
- package/source/HTTP/formats/form.ts +0 -21
- package/source/HTTP/formats/index.ts +0 -36
- package/source/HTTP/formats/json.ts +0 -14
- package/source/HTTP/formats/msgpack.ts +0 -14
- package/source/HTTP/formats/text.ts +0 -10
- package/source/HTTP/formats/yaml.test.ts +0 -22
- package/source/HTTP/formats/yaml.ts +0 -40
- package/source/HTTP/index.ts +0 -6
- package/source/HTTP/messages.test.ts +0 -196
- package/source/HTTP/messages.ts +0 -186
- package/source/HTTP/types.ts +0 -39
- package/source/Interception.ts +0 -37
- package/source/Introspection.ts +0 -179
- package/source/MCP/Server.ts +0 -335
- package/source/MCP/discover.ts +0 -51
- package/source/MCP/errors.ts +0 -80
- package/source/MCP/index.ts +0 -1
- package/source/MCP/schema.test.ts +0 -91
- package/source/MCP/schema.ts +0 -94
- package/source/MCP/tools.ts +0 -144
- package/source/MCP/types.ts +0 -84
- package/source/Mapping.ts +0 -101
- package/source/Query.test.ts +0 -54
- package/source/Query.ts +0 -277
- package/source/RPC/Context.ts +0 -75
- package/source/RPC/Dispatcher.ts +0 -150
- package/source/RPC/errors.test.ts +0 -77
- package/source/RPC/errors.ts +0 -82
- package/source/RPC/index.ts +0 -1
- package/source/RPC/names.test.ts +0 -141
- package/source/RPC/names.ts +0 -176
- package/source/RPC/types.ts +0 -34
- package/source/RTD/Context.ts +0 -16
- package/source/RTD/Directives.ts +0 -126
- package/source/RTD/Endpoint.ts +0 -27
- package/source/RTD/Match.ts +0 -11
- package/source/RTD/Method.ts +0 -39
- package/source/RTD/Node.ts +0 -169
- package/source/RTD/Route.ts +0 -93
- package/source/RTD/Tree.ts +0 -137
- package/source/RTD/expiration.test.ts +0 -81
- package/source/RTD/factory.ts +0 -105
- package/source/RTD/index.ts +0 -8
- package/source/RTD/segment.test.ts +0 -35
- package/source/RTD/segment.ts +0 -51
- package/source/RTD/syntax/index.ts +0 -2
- package/source/RTD/syntax/parse.test.ts +0 -196
- package/source/RTD/syntax/parse.ts +0 -171
- package/source/RTD/syntax/types.ts +0 -69
- package/source/RTD/walk.test.ts +0 -147
- package/source/Remotes.test.ts +0 -79
- package/source/Remotes.ts +0 -39
- package/source/Tenant.ts +0 -73
- package/source/const.ts +0 -45
- package/source/deployment.ts +0 -96
- package/source/directives/auth/Anonymous.test.ts +0 -70
- package/source/directives/auth/Anonymous.ts +0 -36
- package/source/directives/auth/Anyone.ts +0 -23
- package/source/directives/auth/Assert.ts +0 -43
- package/source/directives/auth/Authorization.test.ts +0 -24
- package/source/directives/auth/Authorization.ts +0 -388
- package/source/directives/auth/Delegate.test.ts +0 -36
- package/source/directives/auth/Delegate.ts +0 -54
- package/source/directives/auth/Echo.ts +0 -24
- package/source/directives/auth/Federation.ts +0 -104
- package/source/directives/auth/Id.ts +0 -37
- package/source/directives/auth/Incept.ts +0 -117
- package/source/directives/auth/Input.ts +0 -92
- package/source/directives/auth/Role.test.ts +0 -147
- package/source/directives/auth/Role.ts +0 -99
- package/source/directives/auth/Rule.ts +0 -59
- package/source/directives/auth/Scheme.ts +0 -31
- package/source/directives/auth/create.ts +0 -11
- package/source/directives/auth/index.ts +0 -3
- package/source/directives/auth/schemes.test.ts +0 -18
- package/source/directives/auth/schemes.ts +0 -39
- package/source/directives/auth/split.ts +0 -14
- package/source/directives/auth/types.ts +0 -75
- package/source/directives/cache/Cache.ts +0 -92
- package/source/directives/cache/Control.ts +0 -81
- package/source/directives/cache/Exact.ts +0 -7
- package/source/directives/cache/etag.ts +0 -38
- package/source/directives/cache/index.ts +0 -3
- package/source/directives/cache/types.ts +0 -9
- package/source/directives/cors/CORS.test.ts +0 -75
- package/source/directives/cors/CORS.ts +0 -88
- package/source/directives/cors/index.ts +0 -3
- package/source/directives/dev/Development.ts +0 -41
- package/source/directives/dev/Faulty.ts +0 -31
- package/source/directives/dev/Sleep.ts +0 -53
- package/source/directives/dev/Stub.ts +0 -14
- package/source/directives/dev/Throw.ts +0 -14
- package/source/directives/dev/index.ts +0 -3
- package/source/directives/dev/types.ts +0 -5
- package/source/directives/flow/Compose.ts +0 -98
- package/source/directives/flow/Fetch.ts +0 -86
- package/source/directives/flow/Flow.ts +0 -43
- package/source/directives/flow/index.ts +0 -3
- package/source/directives/flow/types.ts +0 -7
- package/source/directives/help/Family.ts +0 -122
- package/source/directives/help/Help.test.ts +0 -227
- package/source/directives/help/Help.ts +0 -47
- package/source/directives/help/Parameters.ts +0 -47
- package/source/directives/help/described.ts +0 -57
- package/source/directives/help/index.ts +0 -45
- package/source/directives/index.ts +0 -33
- package/source/directives/io/Directive.ts +0 -17
- package/source/directives/io/IO.ts +0 -118
- package/source/directives/io/Input.ts +0 -55
- package/source/directives/io/Message.ts +0 -1
- package/source/directives/io/Output.ts +0 -81
- package/source/directives/io/Status.test.ts +0 -88
- package/source/directives/io/Status.ts +0 -47
- package/source/directives/io/Throttle.ts +0 -30
- package/source/directives/io/index.ts +0 -3
- package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
- package/source/directives/io/lib/throttle/Configuration.ts +0 -68
- package/source/directives/io/lib/throttle/Keys.ts +0 -53
- package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
- package/source/directives/io/lib/throttle/Quotas.ts +0 -190
- package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
- package/source/directives/io/lib/throttle/Sync.ts +0 -93
- package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
- package/source/directives/io/lib/throttle/Warning.ts +0 -29
- package/source/directives/io/lib/throttle/components/Component.ts +0 -7
- package/source/directives/io/lib/throttle/components/IP.ts +0 -30
- package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
- package/source/directives/io/lib/throttle/components/Path.ts +0 -8
- package/source/directives/io/lib/throttle/components/Route.ts +0 -19
- package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
- package/source/directives/io/lib/throttle/components/index.ts +0 -19
- package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
- package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
- package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
- package/source/directives/io/lib/throttle/index.ts +0 -4
- package/source/directives/io/schemas.test.ts +0 -40
- package/source/directives/io/schemas.ts +0 -16
- package/source/directives/map/Authority.ts +0 -15
- package/source/directives/map/Buffer.ts +0 -15
- package/source/directives/map/Claims.ts +0 -63
- package/source/directives/map/Directive.ts +0 -4
- package/source/directives/map/Headers.ts +0 -60
- package/source/directives/map/Language.ts +0 -45
- package/source/directives/map/Languages.ts +0 -17
- package/source/directives/map/Map.ts +0 -85
- package/source/directives/map/Mapping.ts +0 -45
- package/source/directives/map/Properties.ts +0 -15
- package/source/directives/map/Segments.ts +0 -52
- package/source/directives/map/index.ts +0 -3
- package/source/directives/mcp/MCP.ts +0 -33
- package/source/directives/mcp/Tool.test.ts +0 -56
- package/source/directives/mcp/Tool.ts +0 -32
- package/source/directives/mcp/index.ts +0 -6
- package/source/directives/oauth/Discovery.ts +0 -66
- package/source/directives/oauth/documents.ts +0 -110
- package/source/directives/oauth/index.ts +0 -3
- package/source/directives/octets/Context.ts +0 -23
- package/source/directives/octets/Delete.ts +0 -96
- package/source/directives/octets/Directive.ts +0 -21
- package/source/directives/octets/Get.ts +0 -88
- package/source/directives/octets/Octets.ts +0 -82
- package/source/directives/octets/Put.ts +0 -186
- package/source/directives/octets/Workflow.ts +0 -60
- package/source/directives/octets/bytes.test.ts +0 -33
- package/source/directives/octets/bytes.ts +0 -18
- package/source/directives/octets/index.ts +0 -3
- package/source/directives/octets/schemas.test.ts +0 -20
- package/source/directives/octets/schemas.ts +0 -15
- package/source/directives/octets/types.ts +0 -9
- package/source/directives/octets/workflows/Execution.ts +0 -130
- package/source/directives/octets/workflows/Workflow.ts +0 -51
- package/source/directives/octets/workflows/index.ts +0 -1
- package/source/directives/require/Directive.ts +0 -5
- package/source/directives/require/Headers.ts +0 -19
- package/source/directives/require/Require.ts +0 -27
- package/source/directives/require/index.ts +0 -3
- package/source/discovery.ts +0 -1
- package/source/exceptions.ts +0 -47
- package/source/index.ts +0 -12
- package/source/io.ts +0 -4
- package/source/manifest.test.ts +0 -56
- package/source/manifest.ts +0 -56
- package/source/octets.d.ts +0 -17
- package/source/root.ts +0 -59
- package/source/schemas.test.ts +0 -31
- package/source/schemas.ts +0 -15
- package/source/service.ts +0 -94
- package/source/shortcuts.ts +0 -14
- package/source/userland.ts +0 -47
- package/transpiled/Annotation.d.ts +0 -70
- package/transpiled/Annotation.js +0 -2
- package/transpiled/Annotation.js.map +0 -1
- package/transpiled/RTD/syntax/parse.d.ts +0 -4
- package/transpiled/RTD/syntax/parse.js +0 -112
- package/transpiled/RTD/syntax/parse.js.map +0 -1
- package/transpiled/RTD/syntax/types.d.ts +0 -52
- package/transpiled/RTD/syntax/types.js +0 -11
- package/transpiled/RTD/syntax/types.js.map +0 -1
- package/transpiled/const.d.ts +0 -36
- package/transpiled/const.js +0 -37
- package/transpiled/const.js.map +0 -1
- package/transpiled/deployment.d.ts +0 -6
- package/transpiled/deployment.js +0 -76
- package/transpiled/deployment.js.map +0 -1
- package/transpiled/manifest.d.ts +0 -3
- package/transpiled/manifest.js +0 -39
- package/transpiled/manifest.js.map +0 -1
- package/transpiled/schemas.d.ts +0 -9
- package/transpiled/schemas.js +0 -9
- package/transpiled/schemas.js.map +0 -1
- package/transpiled/shortcuts.d.ts +0 -3
- package/transpiled/shortcuts.js +0 -13
- package/transpiled/shortcuts.js.map +0 -1
- package/tsconfig.json +0 -13
- package/tsconfig.tsbuildinfo +0 -1
- package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
- package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
- package/ui/dist/_app/immutable/chunks/B_pK3U1C.js +0 -6
- package/ui/dist/_app/immutable/chunks/CiKbPLyY.js +0 -1
- package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
- package/ui/dist/_app/immutable/entry/app.DMqmL4NY.js +0 -2
- package/ui/dist/_app/immutable/entry/start.CRe7HWBI.js +0 -1
- package/ui/dist/_app/immutable/nodes/0.D9m-6cbM.js +0 -1
- package/ui/dist/_app/immutable/nodes/1.Cgi_RcSO.js +0 -1
- package/ui/dist/_app/immutable/nodes/2.D_Cbxgz4.js +0 -14
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
Feature: OTP authentication
|
|
2
|
-
|
|
3
|
-
OTP credentials format is base64(username:password)
|
|
4
|
-
|
|
5
|
-
Background:
|
|
6
|
-
Given the `identity.otp` configuration:
|
|
7
|
-
"""yaml
|
|
8
|
-
lifetime: 1
|
|
9
|
-
"""
|
|
10
|
-
And the Gateway is running
|
|
11
|
-
|
|
12
|
-
Scenario: Authenticate using OTP
|
|
13
|
-
Given OTP for `alice` in `nex` authority is issued
|
|
14
|
-
When the following request is received:
|
|
15
|
-
"""
|
|
16
|
-
GET /identity/ HTTP/1.1
|
|
17
|
-
host: nex.toa.io
|
|
18
|
-
authorization: OTP ${{ alice.otp }}
|
|
19
|
-
accept: application/yaml
|
|
20
|
-
"""
|
|
21
|
-
Then the following reply is sent:
|
|
22
|
-
"""
|
|
23
|
-
200 OK
|
|
24
|
-
authorization: Token ${{ token }}
|
|
25
|
-
|
|
26
|
-
id: ${{ id }}
|
|
27
|
-
"""
|
|
28
|
-
|
|
29
|
-
# valid only once
|
|
30
|
-
When the following request is received:
|
|
31
|
-
"""
|
|
32
|
-
GET /identity/ HTTP/1.1
|
|
33
|
-
host: nex.toa.io
|
|
34
|
-
authorization: OTP ${{ alice.otp }}
|
|
35
|
-
accept: application/yaml
|
|
36
|
-
"""
|
|
37
|
-
Then the following reply is sent:
|
|
38
|
-
"""
|
|
39
|
-
401 Unauthorized
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
# same username is resolved to the same identity
|
|
43
|
-
Given OTP for `alice` in `nex` authority is issued
|
|
44
|
-
When the following request is received:
|
|
45
|
-
"""
|
|
46
|
-
GET /identity/ HTTP/1.1
|
|
47
|
-
host: nex.toa.io
|
|
48
|
-
authorization: OTP ${{ alice.otp }}
|
|
49
|
-
accept: application/yaml
|
|
50
|
-
"""
|
|
51
|
-
Then the following reply is sent:
|
|
52
|
-
"""
|
|
53
|
-
200 OK
|
|
54
|
-
|
|
55
|
-
id: ${{ id }}
|
|
56
|
-
"""
|
|
57
|
-
|
|
58
|
-
# expiration
|
|
59
|
-
Given OTP for `alice` in `nex` authority is issued
|
|
60
|
-
And after 1 second
|
|
61
|
-
When the following request is received:
|
|
62
|
-
"""
|
|
63
|
-
GET /identity/ HTTP/1.1
|
|
64
|
-
host: nex.toa.io
|
|
65
|
-
authorization: OTP ${{ alice.otp }}
|
|
66
|
-
accept: application/yaml
|
|
67
|
-
"""
|
|
68
|
-
Then the following reply is sent:
|
|
69
|
-
"""
|
|
70
|
-
401 Unauthorized
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
Scenario: Generate own OTP
|
|
74
|
-
Given transient identity bob
|
|
75
|
-
When the following request is received:
|
|
76
|
-
"""
|
|
77
|
-
POST /identity/otp/${{ bob.id }}/ HTTP/1.1
|
|
78
|
-
host: nex.toa.io
|
|
79
|
-
authorization: Token ${{ bob.token }}
|
|
80
|
-
accept: application/yaml
|
|
81
|
-
"""
|
|
82
|
-
Then the following reply is sent:
|
|
83
|
-
"""
|
|
84
|
-
201 Created
|
|
85
|
-
|
|
86
|
-
code: '${{ bob.code }}'
|
|
87
|
-
"""
|
|
88
|
-
|
|
89
|
-
When the following request is received:
|
|
90
|
-
"""
|
|
91
|
-
GET /identity/ HTTP/1.1
|
|
92
|
-
host: nex.toa.io
|
|
93
|
-
authorization: OTP #{{ otp bob }}
|
|
94
|
-
accept: application/yaml
|
|
95
|
-
"""
|
|
96
|
-
Then the following reply is sent:
|
|
97
|
-
"""
|
|
98
|
-
200 OK
|
|
99
|
-
|
|
100
|
-
id: ${{ bob.id }}
|
|
101
|
-
"""
|
|
102
|
-
|
|
103
|
-
Scenario: Guessing OTP codes
|
|
104
|
-
Given the `identity.otp` configuration:
|
|
105
|
-
"""yaml
|
|
106
|
-
lifetime: 60
|
|
107
|
-
attempts: 2
|
|
108
|
-
"""
|
|
109
|
-
And the Gateway is running
|
|
110
|
-
And OTP for `alice` in `nex` authority is issued
|
|
111
|
-
# alice:wrong
|
|
112
|
-
When the following request is received:
|
|
113
|
-
"""
|
|
114
|
-
GET /identity/ HTTP/1.1
|
|
115
|
-
host: nex.toa.io
|
|
116
|
-
authorization: OTP YWxpY2U6d3Jvbmc=
|
|
117
|
-
"""
|
|
118
|
-
Then the following reply is sent:
|
|
119
|
-
"""
|
|
120
|
-
401 Unauthorized
|
|
121
|
-
"""
|
|
122
|
-
When the following request is received:
|
|
123
|
-
"""
|
|
124
|
-
GET /identity/ HTTP/1.1
|
|
125
|
-
host: nex.toa.io
|
|
126
|
-
authorization: OTP YWxpY2U6d3Jvbmc=
|
|
127
|
-
"""
|
|
128
|
-
Then the following reply is sent:
|
|
129
|
-
"""
|
|
130
|
-
401 Unauthorized
|
|
131
|
-
"""
|
|
132
|
-
# the attempts are spent, the code itself is refused
|
|
133
|
-
When the following request is received:
|
|
134
|
-
"""
|
|
135
|
-
GET /identity/ HTTP/1.1
|
|
136
|
-
host: nex.toa.io
|
|
137
|
-
authorization: OTP ${{ alice.otp }}
|
|
138
|
-
"""
|
|
139
|
-
Then the following reply is sent:
|
|
140
|
-
"""
|
|
141
|
-
401 Unauthorized
|
|
142
|
-
"""
|
|
@@ -1,568 +0,0 @@
|
|
|
1
|
-
@security
|
|
2
|
-
Feature: Roles management
|
|
3
|
-
|
|
4
|
-
Scenario: Granting a role to an Identity
|
|
5
|
-
# root:secret
|
|
6
|
-
# user:pass
|
|
7
|
-
Given the `identity.basic` database contains:
|
|
8
|
-
| _id | authority | username | password |
|
|
9
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
10
|
-
| 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
11
|
-
And the `identity.roles` database contains:
|
|
12
|
-
| _id | identity | role |
|
|
13
|
-
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
14
|
-
And the annotation:
|
|
15
|
-
"""yaml
|
|
16
|
-
/:
|
|
17
|
-
io:output: true
|
|
18
|
-
auth:role: foo:bar
|
|
19
|
-
GET:
|
|
20
|
-
dev:stub:
|
|
21
|
-
access: granted!
|
|
22
|
-
"""
|
|
23
|
-
When the following request is received:
|
|
24
|
-
# user doesn't have the required role
|
|
25
|
-
"""
|
|
26
|
-
GET / HTTP/1.1
|
|
27
|
-
host: nex.toa.io
|
|
28
|
-
authorization: Basic dXNlcjpwYXNz
|
|
29
|
-
"""
|
|
30
|
-
Then the following reply is sent:
|
|
31
|
-
"""
|
|
32
|
-
403 Forbidden
|
|
33
|
-
"""
|
|
34
|
-
When the following request is received:
|
|
35
|
-
# root adds a role to a user
|
|
36
|
-
"""
|
|
37
|
-
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
38
|
-
host: nex.toa.io
|
|
39
|
-
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
40
|
-
accept: application/yaml
|
|
41
|
-
content-type: application/yaml
|
|
42
|
-
|
|
43
|
-
role: foo:bar
|
|
44
|
-
"""
|
|
45
|
-
Then the following reply is sent:
|
|
46
|
-
"""
|
|
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
|
|
61
|
-
"""
|
|
62
|
-
Then the following reply is sent:
|
|
63
|
-
"""
|
|
64
|
-
201 Created
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
# user now have the role
|
|
68
|
-
When the following request is received:
|
|
69
|
-
"""
|
|
70
|
-
GET / HTTP/1.1
|
|
71
|
-
host: nex.toa.io
|
|
72
|
-
authorization: Basic dXNlcjpwYXNz
|
|
73
|
-
"""
|
|
74
|
-
Then the following reply is sent:
|
|
75
|
-
"""
|
|
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: INACCESSIBLE_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: Invalid identity id
|
|
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
|
-
"""
|
|
227
|
-
POST /identity/roles/invalid/ HTTP/1.1
|
|
228
|
-
host: nex.toa.io
|
|
229
|
-
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
230
|
-
content-type: application/yaml
|
|
231
|
-
|
|
232
|
-
role: app:test
|
|
233
|
-
"""
|
|
234
|
-
Then the following reply is sent:
|
|
235
|
-
"""
|
|
236
|
-
400 Bad Request
|
|
237
|
-
"""
|
|
238
|
-
|
|
239
|
-
Scenario Outline: Invalid role name
|
|
240
|
-
Given the `identity.basic` database contains:
|
|
241
|
-
| _id | authority | username | password |
|
|
242
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
243
|
-
And the `identity.roles` database contains:
|
|
244
|
-
| _id | identity | role |
|
|
245
|
-
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
246
|
-
When the following request is received:
|
|
247
|
-
# root adds a role to a user
|
|
248
|
-
"""
|
|
249
|
-
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
250
|
-
host: nex.toa.io
|
|
251
|
-
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
252
|
-
content-type: application/yaml
|
|
253
|
-
|
|
254
|
-
role: <role>
|
|
255
|
-
"""
|
|
256
|
-
Then the following reply is sent:
|
|
257
|
-
"""
|
|
258
|
-
400 Bad Request
|
|
259
|
-
"""
|
|
260
|
-
Examples:
|
|
261
|
-
| role |
|
|
262
|
-
| app! |
|
|
263
|
-
| app: |
|
|
264
|
-
| app:no spaces |
|
|
265
|
-
|
|
266
|
-
Scenario: Dynamic roles
|
|
267
|
-
Given the `identity.basic` database contains:
|
|
268
|
-
| _id | authority | username | password |
|
|
269
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
270
|
-
And the `identity.roles` database contains:
|
|
271
|
-
| _id | identity | role |
|
|
272
|
-
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:29e54ae1:moderation |
|
|
273
|
-
And the annotation:
|
|
274
|
-
"""yaml
|
|
275
|
-
/:
|
|
276
|
-
/broken:
|
|
277
|
-
auth:role: app:{org}:moderation
|
|
278
|
-
GET:
|
|
279
|
-
dev:stub: never
|
|
280
|
-
/:org:
|
|
281
|
-
io:output: true
|
|
282
|
-
auth:role: app:{org}:moderation
|
|
283
|
-
GET:
|
|
284
|
-
dev:stub:
|
|
285
|
-
access: granted!
|
|
286
|
-
"""
|
|
287
|
-
When the following request is received:
|
|
288
|
-
"""
|
|
289
|
-
GET /29e54ae1/ HTTP/1.1
|
|
290
|
-
host: nex.toa.io
|
|
291
|
-
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
292
|
-
"""
|
|
293
|
-
Then the following reply is sent:
|
|
294
|
-
"""
|
|
295
|
-
200 OK
|
|
296
|
-
"""
|
|
297
|
-
When the following request is received:
|
|
298
|
-
"""
|
|
299
|
-
GET /88584c9b/ HTTP/1.1
|
|
300
|
-
host: nex.toa.io
|
|
301
|
-
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
302
|
-
"""
|
|
303
|
-
Then the following reply is sent:
|
|
304
|
-
"""
|
|
305
|
-
403 Forbidden
|
|
306
|
-
"""
|
|
307
|
-
When the following request is received:
|
|
308
|
-
"""
|
|
309
|
-
GET /broken/ HTTP/1.1
|
|
310
|
-
host: nex.toa.io
|
|
311
|
-
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
312
|
-
"""
|
|
313
|
-
Then the following reply is sent:
|
|
314
|
-
"""
|
|
315
|
-
500 Internal Server Error
|
|
316
|
-
"""
|
|
317
|
-
|
|
318
|
-
Scenario: Role changes reach a Token holder at refresh
|
|
319
|
-
# root:secret
|
|
320
|
-
# user:pass
|
|
321
|
-
Given the `identity.basic` database contains:
|
|
322
|
-
| _id | authority | username | password |
|
|
323
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
324
|
-
| 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
325
|
-
And the `identity.roles` database contains:
|
|
326
|
-
| _id | identity | role |
|
|
327
|
-
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
328
|
-
And the `identity.tokens` configuration:
|
|
329
|
-
"""yaml
|
|
330
|
-
refresh: 1
|
|
331
|
-
"""
|
|
332
|
-
And the annotation:
|
|
333
|
-
"""yaml
|
|
334
|
-
/:
|
|
335
|
-
io:output: true
|
|
336
|
-
auth:role: foo:bar
|
|
337
|
-
GET:
|
|
338
|
-
dev:stub:
|
|
339
|
-
access: granted!
|
|
340
|
-
"""
|
|
341
|
-
When the following request is received:
|
|
342
|
-
"""
|
|
343
|
-
GET /identity/ HTTP/1.1
|
|
344
|
-
host: nex.toa.io
|
|
345
|
-
authorization: Basic dXNlcjpwYXNz
|
|
346
|
-
"""
|
|
347
|
-
Then the following reply is sent:
|
|
348
|
-
"""
|
|
349
|
-
200 OK
|
|
350
|
-
authorization: Token ${{ token }}
|
|
351
|
-
"""
|
|
352
|
-
When the following request is received:
|
|
353
|
-
# root grants a role to the user
|
|
354
|
-
"""
|
|
355
|
-
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
356
|
-
host: nex.toa.io
|
|
357
|
-
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
358
|
-
content-type: application/yaml
|
|
359
|
-
|
|
360
|
-
role: foo:bar
|
|
361
|
-
"""
|
|
362
|
-
Then the following reply is sent:
|
|
363
|
-
"""
|
|
364
|
-
201 Created
|
|
365
|
-
"""
|
|
366
|
-
# the token was issued before the grant
|
|
367
|
-
When the following request is received:
|
|
368
|
-
"""
|
|
369
|
-
GET / HTTP/1.1
|
|
370
|
-
host: nex.toa.io
|
|
371
|
-
authorization: Token ${{ token }}
|
|
372
|
-
"""
|
|
373
|
-
Then the following reply is sent:
|
|
374
|
-
"""
|
|
375
|
-
403 Forbidden
|
|
376
|
-
"""
|
|
377
|
-
Then after 1 second
|
|
378
|
-
When the following request is received:
|
|
379
|
-
"""
|
|
380
|
-
GET /identity/ HTTP/1.1
|
|
381
|
-
host: nex.toa.io
|
|
382
|
-
authorization: Token ${{ token }}
|
|
383
|
-
"""
|
|
384
|
-
Then the following reply is sent:
|
|
385
|
-
"""
|
|
386
|
-
200 OK
|
|
387
|
-
authorization: Token ${{ granted }}
|
|
388
|
-
"""
|
|
389
|
-
When the following request is received:
|
|
390
|
-
"""
|
|
391
|
-
GET / HTTP/1.1
|
|
392
|
-
host: nex.toa.io
|
|
393
|
-
authorization: Token ${{ granted }}
|
|
394
|
-
accept: application/yaml
|
|
395
|
-
"""
|
|
396
|
-
Then the following reply is sent:
|
|
397
|
-
"""
|
|
398
|
-
200 OK
|
|
399
|
-
|
|
400
|
-
access: granted!
|
|
401
|
-
"""
|
|
402
|
-
When the following request is received:
|
|
403
|
-
# root revokes the role
|
|
404
|
-
"""
|
|
405
|
-
DELETE /identity/roles/4344518184ad44228baffce7a44fd0b1/foo:bar/ HTTP/1.1
|
|
406
|
-
host: nex.toa.io
|
|
407
|
-
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
408
|
-
"""
|
|
409
|
-
Then the following reply is sent:
|
|
410
|
-
"""
|
|
411
|
-
200 OK
|
|
412
|
-
"""
|
|
413
|
-
Then after 1 second
|
|
414
|
-
When the following request is received:
|
|
415
|
-
"""
|
|
416
|
-
GET /identity/ HTTP/1.1
|
|
417
|
-
host: nex.toa.io
|
|
418
|
-
authorization: Token ${{ granted }}
|
|
419
|
-
"""
|
|
420
|
-
Then the following reply is sent:
|
|
421
|
-
"""
|
|
422
|
-
200 OK
|
|
423
|
-
authorization: Token ${{ revoked }}
|
|
424
|
-
"""
|
|
425
|
-
When the following request is received:
|
|
426
|
-
"""
|
|
427
|
-
GET / HTTP/1.1
|
|
428
|
-
host: nex.toa.io
|
|
429
|
-
authorization: Token ${{ revoked }}
|
|
430
|
-
"""
|
|
431
|
-
Then the following reply is sent:
|
|
432
|
-
"""
|
|
433
|
-
403 Forbidden
|
|
434
|
-
"""
|
|
435
|
-
|
|
436
|
-
Scenario: Revoking a role without `system:identity:roles`
|
|
437
|
-
Given the `identity.basic` database contains:
|
|
438
|
-
| _id | authority | username | password |
|
|
439
|
-
| 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
440
|
-
And the `identity.roles` database contains:
|
|
441
|
-
| _id | identity | role |
|
|
442
|
-
| 30c969e05ff6437097ed5f07fc52358e | 4344518184ad44228baffce7a44fd0b1 | foo:bar |
|
|
443
|
-
When the following request is received:
|
|
444
|
-
"""
|
|
445
|
-
DELETE /identity/roles/4344518184ad44228baffce7a44fd0b1/foo:bar/ HTTP/1.1
|
|
446
|
-
host: nex.toa.io
|
|
447
|
-
authorization: Basic dXNlcjpwYXNz
|
|
448
|
-
"""
|
|
449
|
-
Then the following reply is sent:
|
|
450
|
-
"""
|
|
451
|
-
403 Forbidden
|
|
452
|
-
"""
|
|
453
|
-
|
|
454
|
-
Scenario: Revoking a role revokes custom tokens
|
|
455
|
-
# root:secret
|
|
456
|
-
# user:pass
|
|
457
|
-
Given the `identity.basic` database contains:
|
|
458
|
-
| _id | authority | username | password |
|
|
459
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
460
|
-
| 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
461
|
-
And the `identity.roles` database contains:
|
|
462
|
-
| _id | identity | role |
|
|
463
|
-
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
464
|
-
| 30c969e05ff6437097ed5f07fc52358e | 4344518184ad44228baffce7a44fd0b1 | foo:bar |
|
|
465
|
-
And the `identity.keys` database is empty
|
|
466
|
-
And the `identity.tokens` configuration:
|
|
467
|
-
"""yaml
|
|
468
|
-
cache:
|
|
469
|
-
ttl: 1
|
|
470
|
-
"""
|
|
471
|
-
And the annotation:
|
|
472
|
-
"""yaml
|
|
473
|
-
/:
|
|
474
|
-
io:output: true
|
|
475
|
-
auth:role: foo:bar
|
|
476
|
-
GET:
|
|
477
|
-
dev:stub:
|
|
478
|
-
access: granted!
|
|
479
|
-
"""
|
|
480
|
-
When the following request is received:
|
|
481
|
-
"""
|
|
482
|
-
POST /identity/tokens/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
483
|
-
host: nex.toa.io
|
|
484
|
-
authorization: Basic dXNlcjpwYXNz
|
|
485
|
-
accept: application/yaml
|
|
486
|
-
content-type: application/yaml
|
|
487
|
-
|
|
488
|
-
label: Forever token
|
|
489
|
-
lifetime: 0
|
|
490
|
-
"""
|
|
491
|
-
Then the following reply is sent:
|
|
492
|
-
"""
|
|
493
|
-
201 Created
|
|
494
|
-
|
|
495
|
-
token: ${{ token }}
|
|
496
|
-
"""
|
|
497
|
-
When the following request is received:
|
|
498
|
-
"""
|
|
499
|
-
GET / HTTP/1.1
|
|
500
|
-
host: nex.toa.io
|
|
501
|
-
authorization: Token ${{ token }}
|
|
502
|
-
"""
|
|
503
|
-
Then the following reply is sent:
|
|
504
|
-
"""
|
|
505
|
-
200 OK
|
|
506
|
-
"""
|
|
507
|
-
When the following request is received:
|
|
508
|
-
# root revokes the role
|
|
509
|
-
"""
|
|
510
|
-
DELETE /identity/roles/4344518184ad44228baffce7a44fd0b1/foo:bar/ HTTP/1.1
|
|
511
|
-
host: nex.toa.io
|
|
512
|
-
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
513
|
-
"""
|
|
514
|
-
Then the following reply is sent:
|
|
515
|
-
"""
|
|
516
|
-
200 OK
|
|
517
|
-
"""
|
|
518
|
-
# the key is revoked eventually, and the runtime forgets it after `cache.ttl`
|
|
519
|
-
Then after 2 seconds
|
|
520
|
-
When the following request is received:
|
|
521
|
-
"""
|
|
522
|
-
GET / HTTP/1.1
|
|
523
|
-
host: nex.toa.io
|
|
524
|
-
authorization: Token ${{ token }}
|
|
525
|
-
"""
|
|
526
|
-
Then the following reply is sent:
|
|
527
|
-
"""
|
|
528
|
-
401 Unauthorized
|
|
529
|
-
"""
|
|
530
|
-
|
|
531
|
-
Scenario: Delegating the right to delegate
|
|
532
|
-
Given the `identity.basic` database contains:
|
|
533
|
-
| _id | authority | username | password |
|
|
534
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
535
|
-
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
536
|
-
And the `identity.roles` database contains:
|
|
537
|
-
| _id | identity | role |
|
|
538
|
-
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
|
|
539
|
-
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
540
|
-
When the following request is received:
|
|
541
|
-
"""
|
|
542
|
-
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
543
|
-
host: nex.toa.io
|
|
544
|
-
accept: application/yaml
|
|
545
|
-
content-type: application/yaml
|
|
546
|
-
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
547
|
-
|
|
548
|
-
role: system:identity:roles:delegation
|
|
549
|
-
"""
|
|
550
|
-
Then the following reply is sent:
|
|
551
|
-
"""
|
|
552
|
-
422 Unprocessable Entity
|
|
553
|
-
|
|
554
|
-
code: INACCESSIBLE_SCOPE
|
|
555
|
-
"""
|
|
556
|
-
When the following request is received:
|
|
557
|
-
"""
|
|
558
|
-
GET /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
559
|
-
host: nex.toa.io
|
|
560
|
-
accept: application/yaml
|
|
561
|
-
authorization: Basic YXNzaXN0YW50OnBhc3M=
|
|
562
|
-
"""
|
|
563
|
-
Then the following reply is sent:
|
|
564
|
-
"""
|
|
565
|
-
200 OK
|
|
566
|
-
|
|
567
|
-
[]
|
|
568
|
-
"""
|