@toa.io/extensions.exposition 1.0.0-alpha.4 → 1.0.0-alpha.41

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.
Files changed (398) hide show
  1. package/components/context.toa.yaml +2 -2
  2. package/components/identity.bans/manifest.toa.yaml +15 -7
  3. package/components/identity.bans/operations/transit.d.ts +14 -0
  4. package/components/identity.bans/operations/transit.js +11 -0
  5. package/components/identity.bans/operations/transit.js.map +1 -0
  6. package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
  7. package/components/identity.bans/source/transit.ts +21 -0
  8. package/components/identity.bans/tsconfig.json +9 -0
  9. package/components/identity.basic/manifest.toa.yaml +22 -9
  10. package/components/identity.basic/operations/authenticate.d.ts +5 -1
  11. package/components/identity.basic/operations/authenticate.js +5 -2
  12. package/components/identity.basic/operations/authenticate.js.map +1 -1
  13. package/components/identity.basic/operations/incept.d.ts +12 -0
  14. package/components/identity.basic/operations/incept.js +26 -0
  15. package/components/identity.basic/operations/incept.js.map +1 -0
  16. package/components/identity.basic/operations/transit.d.ts +4 -4
  17. package/components/identity.basic/operations/transit.js +5 -3
  18. package/components/identity.basic/operations/transit.js.map +1 -1
  19. package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
  20. package/components/identity.basic/operations/types.d.ts +8 -4
  21. package/components/identity.basic/source/authenticate.ts +16 -5
  22. package/components/identity.basic/source/incept.ts +38 -0
  23. package/components/identity.basic/source/transit.ts +8 -6
  24. package/components/identity.basic/source/types.ts +8 -4
  25. package/components/identity.federation/manifest.toa.yaml +28 -22
  26. package/components/identity.federation/operations/authenticate.d.ts +2 -2
  27. package/components/identity.federation/operations/authenticate.js +3 -10
  28. package/components/identity.federation/operations/authenticate.js.map +1 -1
  29. package/components/identity.federation/operations/incept.d.ts +11 -0
  30. package/components/identity.federation/operations/{create.js → incept.js} +6 -7
  31. package/components/identity.federation/operations/incept.js.map +1 -0
  32. package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
  33. package/components/identity.federation/operations/lib/jwt.js +3 -3
  34. package/components/identity.federation/operations/lib/jwt.js.map +1 -1
  35. package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
  36. package/components/identity.federation/operations/types/configuration.d.ts +14 -0
  37. package/components/identity.federation/operations/types/configuration.js +3 -0
  38. package/components/identity.federation/operations/types/configuration.js.map +1 -0
  39. package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +13 -6
  40. package/components/identity.federation/operations/types/context.js +3 -0
  41. package/components/identity.federation/operations/types/context.js.map +1 -0
  42. package/components/identity.federation/operations/types/entity.d.ts +6 -0
  43. package/components/identity.federation/operations/{types.js → types/entity.js} +1 -1
  44. package/components/identity.federation/operations/types/entity.js.map +1 -0
  45. package/components/identity.federation/operations/types/index.d.ts +3 -0
  46. package/components/identity.federation/operations/types/index.js +20 -0
  47. package/components/identity.federation/operations/types/index.js.map +1 -0
  48. package/components/identity.federation/source/authenticate.ts +5 -18
  49. package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
  50. package/components/identity.federation/source/lib/jwt.test.ts +2 -2
  51. package/components/identity.federation/source/lib/jwt.ts +7 -8
  52. package/components/identity.federation/source/types/configuration.ts +15 -0
  53. package/components/identity.federation/source/{types.ts → types/context.ts} +15 -5
  54. package/components/identity.federation/source/types/entity.ts +6 -0
  55. package/components/identity.federation/source/types/index.ts +3 -0
  56. package/components/identity.federation/tsconfig.json +2 -2
  57. package/components/identity.roles/manifest.toa.yaml +18 -6
  58. package/components/identity.roles/operations/grant.d.ts +10 -0
  59. package/components/identity.roles/operations/grant.js +21 -0
  60. package/components/identity.roles/operations/grant.js.map +1 -0
  61. package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
  62. package/components/identity.roles/operations/lib/Entity.js +3 -0
  63. package/components/identity.roles/operations/lib/Entity.js.map +1 -0
  64. package/components/identity.roles/operations/list.d.ts +1 -4
  65. package/components/identity.roles/operations/list.js.map +1 -1
  66. package/components/identity.roles/operations/principal.d.ts +4 -6
  67. package/components/identity.roles/operations/principal.js +6 -1
  68. package/components/identity.roles/operations/principal.js.map +1 -1
  69. package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
  70. package/components/identity.roles/source/grant.ts +32 -0
  71. package/components/identity.roles/source/lib/Entity.ts +5 -0
  72. package/components/identity.roles/source/list.ts +2 -4
  73. package/components/identity.roles/source/principal.ts +10 -8
  74. package/components/identity.tokens/manifest.toa.yaml +19 -5
  75. package/components/identity.tokens/operations/authenticate.d.ts +2 -2
  76. package/components/identity.tokens/operations/authenticate.js +10 -4
  77. package/components/identity.tokens/operations/authenticate.js.map +1 -1
  78. package/components/identity.tokens/operations/decrypt.js +1 -0
  79. package/components/identity.tokens/operations/decrypt.js.map +1 -1
  80. package/components/identity.tokens/operations/encrypt.js +5 -1
  81. package/components/identity.tokens/operations/encrypt.js.map +1 -1
  82. package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
  83. package/components/identity.tokens/operations/types.d.ts +8 -2
  84. package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
  85. package/components/identity.tokens/source/authenticate.test.ts +11 -4
  86. package/components/identity.tokens/source/authenticate.ts +12 -5
  87. package/components/identity.tokens/source/decrypt.test.ts +5 -3
  88. package/components/identity.tokens/source/decrypt.ts +9 -8
  89. package/components/identity.tokens/source/encrypt.test.ts +26 -2
  90. package/components/identity.tokens/source/encrypt.ts +5 -1
  91. package/components/identity.tokens/source/types.ts +9 -2
  92. package/components/octets.storage/manifest.toa.yaml +0 -7
  93. package/documentation/access.md +27 -16
  94. package/documentation/authorities.md +53 -0
  95. package/documentation/cache.md +8 -1
  96. package/documentation/components.md +47 -22
  97. package/documentation/identity.md +17 -22
  98. package/documentation/io.md +56 -0
  99. package/documentation/protocol.md +3 -0
  100. package/documentation/query.md +17 -11
  101. package/documentation/require.md +15 -0
  102. package/documentation/tree.md +22 -4
  103. package/documentation/vary.md +14 -14
  104. package/features/access.feature +89 -47
  105. package/features/annotation.feature +2 -0
  106. package/features/authorities.basic.feature +141 -0
  107. package/features/authorities.feature +32 -0
  108. package/features/authorities.federation.feature +99 -0
  109. package/features/authorities.tokens.feature +118 -0
  110. package/features/body.feature +4 -0
  111. package/features/cache.feature +112 -5
  112. package/features/cors.feature +7 -2
  113. package/features/debug.feature +34 -0
  114. package/features/directives.feature +5 -0
  115. package/features/dynamic.feature +18 -7
  116. package/features/errors.feature +18 -4
  117. package/features/etag.feature +18 -1
  118. package/features/identity.bans.feature +137 -0
  119. package/features/identity.basic.feature +142 -19
  120. package/features/identity.feature +7 -2
  121. package/features/identity.federation.feature +67 -14
  122. package/features/identity.roles.feature +220 -4
  123. package/features/identity.tokens.feature +57 -4
  124. package/features/io.feature +205 -0
  125. package/features/octets.entries.feature +10 -0
  126. package/features/octets.feature +60 -64
  127. package/features/octets.meta.feature +7 -3
  128. package/features/octets.workflows.feature +14 -0
  129. package/features/probes.feature +14 -0
  130. package/features/{queries.feature → query.feature} +50 -3
  131. package/features/require.feature +67 -0
  132. package/features/response.feature +12 -3
  133. package/features/routes.feature +25 -12
  134. package/features/steps/Database.ts +17 -10
  135. package/features/steps/Gateway.ts +23 -6
  136. package/features/steps/IdP.ts +28 -23
  137. package/features/steps/components/echo/manifest.toa.yaml +5 -1
  138. package/features/steps/components/echo/operations/identity.js +7 -0
  139. package/features/steps/components/pots/manifest.toa.yaml +2 -0
  140. package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
  141. package/features/streams.feature +1 -0
  142. package/features/timing.feature +27 -1
  143. package/features/vary.feature +105 -3
  144. package/package.json +12 -11
  145. package/readme.md +19 -14
  146. package/schemas/annotation.cos.yaml +1 -1
  147. package/schemas/io/input.cos.yaml +3 -0
  148. package/schemas/io/message.cos.yaml +5 -0
  149. package/schemas/io/output.cos.yaml +5 -0
  150. package/source/Annotation.ts +3 -3
  151. package/source/Context.ts +6 -4
  152. package/source/Directive.test.ts +4 -4
  153. package/source/Directive.ts +11 -38
  154. package/source/Endpoint.ts +43 -8
  155. package/source/Factory.ts +11 -7
  156. package/source/Gateway.ts +16 -44
  157. package/source/HTTP/Context.ts +24 -2
  158. package/source/HTTP/Server.ts +56 -43
  159. package/source/HTTP/exceptions.ts +7 -1
  160. package/source/HTTP/messages.test.ts +38 -2
  161. package/source/HTTP/messages.ts +7 -3
  162. package/source/Mapping.ts +6 -1
  163. package/source/Query.test.ts +1 -1
  164. package/source/Query.ts +35 -24
  165. package/source/RTD/Context.ts +7 -10
  166. package/source/RTD/Directives.ts +28 -4
  167. package/source/RTD/Endpoint.ts +6 -4
  168. package/source/RTD/Match.ts +2 -7
  169. package/source/RTD/Method.ts +7 -13
  170. package/source/RTD/Node.ts +13 -14
  171. package/source/RTD/Tree.ts +17 -16
  172. package/source/RTD/factory.ts +3 -6
  173. package/source/Tenant.ts +0 -8
  174. package/source/deployment.ts +32 -22
  175. package/source/directives/auth/Authorization.ts +38 -19
  176. package/source/directives/auth/Delegate.ts +42 -0
  177. package/source/directives/auth/Incept.ts +3 -2
  178. package/source/directives/auth/Role.test.ts +53 -6
  179. package/source/directives/auth/Role.ts +22 -14
  180. package/source/directives/auth/types.ts +1 -1
  181. package/source/directives/cache/Cache.ts +15 -8
  182. package/source/directives/cache/Control.ts +42 -16
  183. package/source/directives/cors/CORS.ts +13 -7
  184. package/source/directives/dev/Development.ts +4 -4
  185. package/source/directives/index.ts +6 -4
  186. package/source/directives/io/Directive.ts +11 -0
  187. package/source/directives/io/IO.ts +43 -0
  188. package/source/directives/io/Input.ts +50 -0
  189. package/source/directives/io/Message.ts +1 -0
  190. package/source/directives/io/Output.ts +69 -0
  191. package/source/directives/io/index.ts +3 -0
  192. package/source/directives/io/schemas.ts +12 -0
  193. package/source/directives/octets/Context.ts +4 -3
  194. package/source/directives/octets/Delete.ts +4 -2
  195. package/source/directives/octets/Directive.ts +10 -0
  196. package/source/directives/octets/Fetch.ts +4 -3
  197. package/source/directives/octets/List.ts +4 -2
  198. package/source/directives/octets/Octets.ts +6 -8
  199. package/source/directives/octets/Store.ts +12 -4
  200. package/source/directives/octets/Workflow.ts +10 -3
  201. package/source/directives/octets/types.ts +0 -7
  202. package/source/directives/require/Directive.ts +5 -0
  203. package/source/directives/require/Headers.ts +20 -0
  204. package/source/directives/require/Require.ts +28 -0
  205. package/source/directives/require/index.ts +3 -0
  206. package/source/directives/vary/Directive.ts +2 -1
  207. package/source/directives/vary/Embed.ts +14 -8
  208. package/source/directives/vary/Vary.ts +7 -5
  209. package/source/directives/vary/embeddings/Authority.ts +8 -0
  210. package/source/directives/vary/embeddings/Embedding.ts +2 -1
  211. package/source/directives/vary/embeddings/Header.ts +8 -6
  212. package/source/directives/vary/embeddings/Language.ts +1 -1
  213. package/source/directives/vary/embeddings/Parameter.ts +14 -0
  214. package/source/directives/vary/embeddings/index.ts +6 -4
  215. package/source/exceptions.ts +22 -11
  216. package/source/root.ts +5 -0
  217. package/source/schemas.ts +1 -1
  218. package/transpiled/Annotation.d.ts +3 -3
  219. package/transpiled/Context.d.ts +6 -4
  220. package/transpiled/Directive.d.ts +4 -17
  221. package/transpiled/Directive.js +4 -7
  222. package/transpiled/Directive.js.map +1 -1
  223. package/transpiled/Endpoint.d.ts +5 -3
  224. package/transpiled/Endpoint.js +30 -5
  225. package/transpiled/Endpoint.js.map +1 -1
  226. package/transpiled/Factory.js +9 -4
  227. package/transpiled/Factory.js.map +1 -1
  228. package/transpiled/Gateway.d.ts +1 -4
  229. package/transpiled/Gateway.js +10 -26
  230. package/transpiled/Gateway.js.map +1 -1
  231. package/transpiled/HTTP/Context.d.ts +8 -1
  232. package/transpiled/HTTP/Context.js +15 -2
  233. package/transpiled/HTTP/Context.js.map +1 -1
  234. package/transpiled/HTTP/Server.d.ts +13 -2
  235. package/transpiled/HTTP/Server.js +41 -35
  236. package/transpiled/HTTP/Server.js.map +1 -1
  237. package/transpiled/HTTP/exceptions.d.ts +4 -1
  238. package/transpiled/HTTP/exceptions.js +7 -1
  239. package/transpiled/HTTP/exceptions.js.map +1 -1
  240. package/transpiled/HTTP/messages.d.ts +1 -0
  241. package/transpiled/HTTP/messages.js +9 -3
  242. package/transpiled/HTTP/messages.js.map +1 -1
  243. package/transpiled/Mapping.js +4 -1
  244. package/transpiled/Mapping.js.map +1 -1
  245. package/transpiled/Query.d.ts +1 -0
  246. package/transpiled/Query.js +21 -20
  247. package/transpiled/Query.js.map +1 -1
  248. package/transpiled/RTD/Context.d.ts +7 -6
  249. package/transpiled/RTD/Directives.d.ts +19 -4
  250. package/transpiled/RTD/Endpoint.d.ts +6 -4
  251. package/transpiled/RTD/Match.d.ts +2 -4
  252. package/transpiled/RTD/Method.d.ts +7 -7
  253. package/transpiled/RTD/Method.js.map +1 -1
  254. package/transpiled/RTD/Node.d.ts +4 -6
  255. package/transpiled/RTD/Node.js +2 -1
  256. package/transpiled/RTD/Node.js.map +1 -1
  257. package/transpiled/RTD/Tree.d.ts +6 -6
  258. package/transpiled/RTD/Tree.js +4 -1
  259. package/transpiled/RTD/Tree.js.map +1 -1
  260. package/transpiled/RTD/factory.d.ts +2 -4
  261. package/transpiled/RTD/factory.js +1 -1
  262. package/transpiled/RTD/factory.js.map +1 -1
  263. package/transpiled/Tenant.d.ts +0 -1
  264. package/transpiled/Tenant.js +0 -6
  265. package/transpiled/Tenant.js.map +1 -1
  266. package/transpiled/deployment.d.ts +1 -1
  267. package/transpiled/deployment.js +28 -20
  268. package/transpiled/deployment.js.map +1 -1
  269. package/transpiled/directives/auth/Authorization.d.ts +2 -3
  270. package/transpiled/directives/auth/Authorization.js +26 -12
  271. package/transpiled/directives/auth/Authorization.js.map +1 -1
  272. package/transpiled/directives/auth/Delegate.d.ts +10 -0
  273. package/transpiled/directives/auth/Delegate.js +34 -0
  274. package/transpiled/directives/auth/Delegate.js.map +1 -0
  275. package/transpiled/directives/auth/Incept.js +3 -2
  276. package/transpiled/directives/auth/Incept.js.map +1 -1
  277. package/transpiled/directives/auth/Role.d.ts +4 -1
  278. package/transpiled/directives/auth/Role.js +20 -14
  279. package/transpiled/directives/auth/Role.js.map +1 -1
  280. package/transpiled/directives/cache/Cache.d.ts +5 -5
  281. package/transpiled/directives/cache/Cache.js +10 -4
  282. package/transpiled/directives/cache/Cache.js.map +1 -1
  283. package/transpiled/directives/cache/Control.d.ts +2 -1
  284. package/transpiled/directives/cache/Control.js +29 -12
  285. package/transpiled/directives/cache/Control.js.map +1 -1
  286. package/transpiled/directives/cors/CORS.d.ts +2 -3
  287. package/transpiled/directives/cors/CORS.js +13 -7
  288. package/transpiled/directives/cors/CORS.js.map +1 -1
  289. package/transpiled/directives/dev/Development.d.ts +3 -3
  290. package/transpiled/directives/dev/Development.js +1 -1
  291. package/transpiled/directives/dev/Development.js.map +1 -1
  292. package/transpiled/directives/index.d.ts +2 -2
  293. package/transpiled/directives/index.js +5 -3
  294. package/transpiled/directives/index.js.map +1 -1
  295. package/transpiled/directives/io/Directive.d.ts +8 -0
  296. package/transpiled/directives/io/Directive.js +3 -0
  297. package/transpiled/directives/io/Directive.js.map +1 -0
  298. package/transpiled/directives/io/IO.d.ts +9 -0
  299. package/transpiled/directives/io/IO.js +33 -0
  300. package/transpiled/directives/io/IO.js.map +1 -0
  301. package/transpiled/directives/io/Input.d.ts +11 -0
  302. package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -26
  303. package/transpiled/directives/io/Input.js.map +1 -0
  304. package/transpiled/directives/io/Message.d.ts +1 -0
  305. package/transpiled/directives/io/Message.js +3 -0
  306. package/transpiled/directives/io/Message.js.map +1 -0
  307. package/transpiled/directives/io/Output.d.ts +13 -0
  308. package/transpiled/directives/io/Output.js +76 -0
  309. package/transpiled/directives/io/Output.js.map +1 -0
  310. package/transpiled/directives/io/index.d.ts +2 -0
  311. package/transpiled/directives/io/index.js +6 -0
  312. package/transpiled/directives/io/index.js.map +1 -0
  313. package/transpiled/directives/io/schemas.d.ts +7 -0
  314. package/transpiled/directives/io/schemas.js +14 -0
  315. package/transpiled/directives/io/schemas.js.map +1 -0
  316. package/transpiled/directives/octets/Context.d.ts +3 -3
  317. package/transpiled/directives/octets/Context.js +4 -2
  318. package/transpiled/directives/octets/Context.js.map +1 -1
  319. package/transpiled/directives/octets/Delete.d.ts +3 -2
  320. package/transpiled/directives/octets/Delete.js +3 -1
  321. package/transpiled/directives/octets/Delete.js.map +1 -1
  322. package/transpiled/directives/octets/Directive.d.ts +8 -0
  323. package/transpiled/directives/octets/Directive.js +8 -0
  324. package/transpiled/directives/octets/Directive.js.map +1 -0
  325. package/transpiled/directives/octets/Fetch.d.ts +3 -2
  326. package/transpiled/directives/octets/Fetch.js +3 -1
  327. package/transpiled/directives/octets/Fetch.js.map +1 -1
  328. package/transpiled/directives/octets/List.d.ts +3 -2
  329. package/transpiled/directives/octets/List.js +3 -1
  330. package/transpiled/directives/octets/List.js.map +1 -1
  331. package/transpiled/directives/octets/Octets.d.ts +4 -4
  332. package/transpiled/directives/octets/Octets.js +2 -4
  333. package/transpiled/directives/octets/Octets.js.map +1 -1
  334. package/transpiled/directives/octets/Store.d.ts +3 -2
  335. package/transpiled/directives/octets/Store.js +10 -3
  336. package/transpiled/directives/octets/Store.js.map +1 -1
  337. package/transpiled/directives/octets/Workflow.d.ts +3 -2
  338. package/transpiled/directives/octets/Workflow.js +9 -2
  339. package/transpiled/directives/octets/Workflow.js.map +1 -1
  340. package/transpiled/directives/octets/types.d.ts +0 -5
  341. package/transpiled/directives/require/Directive.d.ts +4 -0
  342. package/transpiled/directives/require/Directive.js +3 -0
  343. package/transpiled/directives/require/Directive.js.map +1 -0
  344. package/transpiled/directives/require/Headers.d.ts +7 -0
  345. package/transpiled/directives/require/Headers.js +19 -0
  346. package/transpiled/directives/require/Headers.js.map +1 -0
  347. package/transpiled/directives/require/Require.d.ts +9 -0
  348. package/transpiled/directives/require/Require.js +27 -0
  349. package/transpiled/directives/require/Require.js.map +1 -0
  350. package/transpiled/directives/require/index.d.ts +2 -0
  351. package/transpiled/directives/require/index.js +6 -0
  352. package/transpiled/directives/require/index.js.map +1 -0
  353. package/transpiled/directives/vary/Directive.d.ts +2 -1
  354. package/transpiled/directives/vary/Embed.d.ts +2 -1
  355. package/transpiled/directives/vary/Embed.js +8 -6
  356. package/transpiled/directives/vary/Embed.js.map +1 -1
  357. package/transpiled/directives/vary/Vary.d.ts +3 -3
  358. package/transpiled/directives/vary/Vary.js +3 -3
  359. package/transpiled/directives/vary/Vary.js.map +1 -1
  360. package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
  361. package/transpiled/directives/vary/embeddings/Authority.js +10 -0
  362. package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
  363. package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
  364. package/transpiled/directives/vary/embeddings/Header.js +8 -6
  365. package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
  366. package/transpiled/directives/vary/embeddings/Language.js +1 -1
  367. package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
  368. package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
  369. package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
  370. package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
  371. package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
  372. package/transpiled/directives/vary/embeddings/index.js +8 -4
  373. package/transpiled/directives/vary/embeddings/index.js.map +1 -1
  374. package/transpiled/exceptions.d.ts +3 -2
  375. package/transpiled/exceptions.js +13 -7
  376. package/transpiled/exceptions.js.map +1 -1
  377. package/transpiled/root.js +5 -0
  378. package/transpiled/root.js.map +1 -1
  379. package/transpiled/schemas.d.ts +1 -1
  380. package/transpiled/schemas.js +2 -2
  381. package/transpiled/schemas.js.map +1 -1
  382. package/transpiled/tsconfig.tsbuildinfo +1 -1
  383. package/components/identity.basic/operations/create.d.ts +0 -10
  384. package/components/identity.basic/operations/create.js +0 -10
  385. package/components/identity.basic/operations/create.js.map +0 -1
  386. package/components/identity.basic/source/create.ts +0 -18
  387. package/components/identity.federation/operations/create.d.ts +0 -10
  388. package/components/identity.federation/operations/create.js.map +0 -1
  389. package/components/identity.federation/operations/schemas.d.ts +0 -59
  390. package/components/identity.federation/operations/schemas.js +0 -9
  391. package/components/identity.federation/operations/schemas.js.map +0 -1
  392. package/components/identity.federation/operations/types.js.map +0 -1
  393. package/components/identity.federation/source/schemas.ts +0 -61
  394. package/components/octets.storage/operations/permute.js +0 -7
  395. package/source/HTTP/Server.test.ts +0 -126
  396. package/source/directives/octets/Permute.ts +0 -43
  397. package/transpiled/directives/octets/Permute.d.ts +0 -10
  398. package/transpiled/directives/octets/Permute.js.map +0 -1
@@ -1,21 +1,21 @@
1
+ @security
1
2
  Feature: Identity Federation
2
3
 
3
4
  Background:
4
5
  Given the `identity.federation` database is empty
5
6
  Given local IDP is running
6
7
 
7
-
8
8
  Scenario: Getting identity for a new user
9
9
  Given the `identity.federation` configuration:
10
10
  """yaml
11
- explicit_identity_creation: false
12
11
  trust:
13
- - issuer: http://localhost:44444
12
+ - iss: http://localhost:44444
14
13
  """
15
14
  And the IDP token for User is issued
16
15
  When the following request is received:
17
16
  """
18
17
  GET /identity/ HTTP/1.1
18
+ host: nex.toa.io
19
19
  authorization: Bearer ${{ User.id_token }}
20
20
  accept: application/yaml
21
21
  content-type: application/yaml
@@ -27,39 +27,41 @@ Feature: Identity Federation
27
27
 
28
28
  id: ${{ User.id }}
29
29
  roles: []
30
- scheme: bearer
31
30
  """
32
- # validate token
31
+ # validate TOKEN
33
32
  When the following request is received:
34
33
  """
35
34
  GET /identity/ HTTP/1.1
35
+ host: nex.toa.io
36
36
  accept: application/yaml
37
37
  authorization: Token ${{ User.token }}
38
38
  """
39
39
  Then the following reply is sent:
40
40
  """
41
41
  200 OK
42
+
42
43
  id: ${{ User.id }}
43
44
  """
44
- # ensuring identity idemptotency
45
+ # ensuring identity idempotency
45
46
  When the following request is received:
46
47
  """
47
48
  GET /identity/ HTTP/1.1
49
+ host: nex.toa.io
48
50
  authorization: Bearer ${{ User.id_token }}
49
51
  accept: application/yaml
50
52
  """
51
53
  Then the following reply is sent:
52
54
  """
53
55
  200 OK
56
+
54
57
  id: ${{ User.id }}
55
58
  """
56
59
 
57
60
  Scenario: Getting identity for a user with symmetric tokens
58
61
  Given the `identity.federation` configuration:
59
62
  """yaml
60
- explicit_identity_creation: false
61
63
  trust:
62
- - issuer: http://localhost:44444
64
+ - iss: http://localhost:44444
63
65
  secrets:
64
66
  HS384:
65
67
  k1: the-secret
@@ -71,6 +73,7 @@ Feature: Identity Federation
71
73
  When the following request is received:
72
74
  """
73
75
  GET /identity/ HTTP/1.1
76
+ host: nex.toa.io
74
77
  authorization: Bearer ${{ GoodUser.id_token }}
75
78
  accept: application/yaml
76
79
  content-type: application/yaml
@@ -81,14 +84,13 @@ Feature: Identity Federation
81
84
  authorization: Token ${{ GoodUser.token }}
82
85
 
83
86
  id: ${{ GoodUser.id }}
84
- scheme: bearer
85
87
  """
86
88
 
87
- Scenario: Creating an Identity using inception with existing credentials
89
+ Scenario: Creating an Identity using inception
88
90
  Given the `identity.federation` configuration:
89
91
  """yaml
90
92
  trust:
91
- - issuer: http://localhost:44444
93
+ - iss: http://localhost:44444
92
94
  """
93
95
  Given the `users` is running with the following manifest:
94
96
  """yaml
@@ -96,7 +98,8 @@ Feature: Identity Federation
96
98
  /:
97
99
  anonymous: true
98
100
  POST:
99
- incept: id
101
+ io:output: [id]
102
+ auth:incept: id
100
103
  endpoint: create
101
104
  """
102
105
  And the IDP token for Bill is issued
@@ -104,6 +107,7 @@ Feature: Identity Federation
104
107
  # identity inception
105
108
  """
106
109
  POST /users/ HTTP/1.1
110
+ host: nex.toa.io
107
111
  authorization: Bearer ${{ Bill.id_token }}
108
112
  accept: application/yaml
109
113
  content-type: application/yaml
@@ -121,6 +125,7 @@ Feature: Identity Federation
121
125
  When the following request is received:
122
126
  """
123
127
  GET /identity/ HTTP/1.1
128
+ host: nex.toa.io
124
129
  authorization: Token ${{ Bill.token }}
125
130
  accept: application/yaml
126
131
  """
@@ -132,24 +137,72 @@ Feature: Identity Federation
132
137
  When the following request is received:
133
138
  """
134
139
  GET /identity/ HTTP/1.1
140
+ host: nex.toa.io
135
141
  authorization: Bearer ${{ Bill.id_token }}
136
142
  accept: application/yaml
137
143
  """
138
144
  Then the following reply is sent:
139
145
  """
140
146
  200 OK
147
+
141
148
  id: ${{ Bill.id }}
142
149
  """
143
150
  And the following request is received:
144
151
  # same credentials
145
152
  """
146
153
  POST /users/ HTTP/1.1
154
+ host: nex.toa.io
147
155
  authorization: Bearer ${{ Bill.id_token }}
148
- content-type: text/plain
156
+ content-type: application/yaml
149
157
 
150
158
  name: Mary Louis
151
159
  """
152
160
  Then the following reply is sent:
153
161
  """
154
- 403 Forbidden
162
+ 409 Conflict
163
+ """
164
+
165
+ Scenario: Granting a `system` role to a Principal
166
+ Given the `identity.federation` configuration:
167
+ """yaml
168
+ trust:
169
+ - iss: http://localhost:44444
170
+ principal:
171
+ iss: http://localhost:44444
172
+ sub: root-mock-id
173
+ """
174
+ And the IDP token for root is issued
175
+
176
+ # create an identity
177
+ When the following request is received:
178
+ """
179
+ GET /identity/ HTTP/1.1
180
+ host: nex.toa.io
181
+ authorization: Bearer ${{ root.id_token }}
182
+ accept: application/yaml
183
+ content-type: application/yaml
184
+ """
185
+ Then the following reply is sent:
186
+ """
187
+ 200 OK
188
+ authorization: Token ${{ root.token }}
189
+
190
+ id: ${{ root.id }}
191
+ """
192
+
193
+ # check the role
194
+ When the following request is received:
195
+ """
196
+ GET /identity/ HTTP/1.1
197
+ host: nex.toa.io
198
+ accept: application/yaml
199
+ authorization: Token ${{ root.token }}
200
+ """
201
+ Then the following reply is sent:
202
+ """
203
+ 200 OK
204
+
205
+ id: ${{ root.id }}
206
+ roles:
207
+ - system
155
208
  """
@@ -1,16 +1,20 @@
1
+ @security
1
2
  Feature: Roles management
2
3
 
3
- Scenario: Adding a role to an Identity
4
+ Scenario: Granting a role to an Identity
5
+ # root:secret
6
+ # user:pass
4
7
  Given the `identity.basic` database contains:
5
- | _id | username | password |
6
- | 72cf9b0ab0ac4ab2b8036e4e940ddcae | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
7
- | 4344518184ad44228baffce7a44fd0b1 | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
8
+ | _id | authority | username | password |
9
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
10
+ | 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
8
11
  And the `identity.roles` database contains:
9
12
  | _id | identity | role |
10
13
  | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
11
14
  And the annotation:
12
15
  """yaml
13
16
  /:
17
+ io:output: true
14
18
  auth:role: test
15
19
  GET:
16
20
  dev:stub:
@@ -20,6 +24,7 @@ Feature: Roles management
20
24
  # user doesn't have the required role
21
25
  """
22
26
  GET / HTTP/1.1
27
+ host: nex.toa.io
23
28
  authorization: Basic dXNlcjpwYXNz
24
29
  """
25
30
  Then the following reply is sent:
@@ -30,7 +35,9 @@ Feature: Roles management
30
35
  # root adds a role to a user
31
36
  """
32
37
  POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
38
+ host: nex.toa.io
33
39
  authorization: Basic cm9vdDpzZWNyZXQ=
40
+ accept: application/yaml
34
41
  content-type: application/yaml
35
42
 
36
43
  role: test
@@ -38,14 +45,223 @@ Feature: Roles management
38
45
  Then the following reply is sent:
39
46
  """
40
47
  201 Created
48
+
49
+ grantor: 72cf9b0ab0ac4ab2b8036e4e940ddcae
41
50
  """
42
51
  When the following request is received:
43
52
  # user now have the role
44
53
  """
45
54
  GET / HTTP/1.1
55
+ host: nex.toa.io
46
56
  authorization: Basic dXNlcjpwYXNz
47
57
  """
48
58
  Then the following reply is sent:
49
59
  """
50
60
  200 OK
51
61
  """
62
+
63
+ Scenario Outline: Delegating roles
64
+ # moderator:secret
65
+ # assistant:pass
66
+ Given the `identity.basic` database contains:
67
+ | _id | authority | username | password |
68
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
69
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
70
+ And the `identity.roles` database contains:
71
+ | _id | identity | role |
72
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
73
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
74
+ And the annotation:
75
+ """yaml
76
+ /:
77
+ io:output: true
78
+ auth:role: app:moderation:photos
79
+ GET:
80
+ dev:stub:
81
+ access: granted!
82
+ """
83
+ When the following request is received:
84
+ # assistant doesn't have the required role
85
+ """
86
+ GET / HTTP/1.1
87
+ host: nex.toa.io
88
+ authorization: Basic YXNzaXN0YW50OnBhc3M=
89
+ """
90
+ Then the following reply is sent:
91
+ """
92
+ 403 Forbidden
93
+ """
94
+ When the following request is received:
95
+ # moderator delegates a role to an assistant
96
+ """
97
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
98
+ host: nex.toa.io
99
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
100
+ content-type: application/yaml
101
+
102
+ role: <role>
103
+ """
104
+ Then the following reply is sent:
105
+ """
106
+ 201 Created
107
+ """
108
+ When the following request is received:
109
+ # assistant has access
110
+ """
111
+ GET / HTTP/1.1
112
+ host: nex.toa.io
113
+ authorization: Basic YXNzaXN0YW50OnBhc3M=
114
+ """
115
+ Then the following reply is sent:
116
+ """
117
+ 200 OK
118
+ """
119
+ Examples:
120
+ | role |
121
+ | app:moderation |
122
+ | app:moderation:photos |
123
+
124
+ Scenario: Delegating role out of own scope
125
+ Given the `identity.basic` database contains:
126
+ | _id | authority | username | password |
127
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
128
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
129
+ And the `identity.roles` database contains:
130
+ | _id | identity | role |
131
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
132
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
133
+ And the annotation:
134
+ """yaml
135
+ /:
136
+ io:output: true
137
+ auth:role: app:moderation:photos
138
+ GET:
139
+ dev:stub:
140
+ access: granted!
141
+ """
142
+ When the following request is received:
143
+ """
144
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
145
+ host: nex.toa.io
146
+ accept: application/yaml
147
+ content-type: application/yaml
148
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
149
+
150
+ role: app:finance
151
+ """
152
+ Then the following reply is sent:
153
+ """
154
+ 422 Unprocessable Entity
155
+
156
+ code: OUT_OF_SCOPE
157
+ """
158
+
159
+ Scenario: Delegating role without `system:identity:roles:delegation` role
160
+ Given the `identity.basic` database contains:
161
+ | _id | authority | username | password |
162
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
163
+ | 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
164
+ And the `identity.roles` database contains:
165
+ | _id | identity | role |
166
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
167
+ And the annotation:
168
+ """yaml
169
+ /:
170
+ io:output: true
171
+ auth:role: app:moderation:photos
172
+ GET:
173
+ dev:stub:
174
+ access: granted!
175
+ """
176
+ When the following request is received:
177
+ """
178
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
179
+ host: nex.toa.io
180
+ content-type: application/yaml
181
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
182
+
183
+ role: app:moderation
184
+ """
185
+ Then the following reply is sent:
186
+ """
187
+ 403 Forbidden
188
+ """
189
+
190
+ Scenario Outline: Invalid role name
191
+ Given the `identity.basic` database contains:
192
+ | _id | authority | username | password |
193
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
194
+ And the `identity.roles` database contains:
195
+ | _id | identity | role |
196
+ | 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
197
+ When the following request is received:
198
+ # root adds a role to a user
199
+ """
200
+ POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
201
+ host: nex.toa.io
202
+ authorization: Basic cm9vdDpzZWNyZXQ=
203
+ content-type: application/yaml
204
+
205
+ role: <role>
206
+ """
207
+ Then the following reply is sent:
208
+ """
209
+ 400 Bad Request
210
+ """
211
+ Examples:
212
+ | role |
213
+ | app! |
214
+ | app: |
215
+ | app:no spaces |
216
+
217
+ Scenario: Dynamic roles
218
+ Given the `identity.basic` database contains:
219
+ | _id | authority | username | password |
220
+ | 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
221
+ And the `identity.roles` database contains:
222
+ | _id | identity | role |
223
+ | 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:29e54ae1:moderation |
224
+ And the annotation:
225
+ """yaml
226
+ /:
227
+ /broken:
228
+ auth:role: app:{org}:moderation
229
+ GET:
230
+ dev:stub: never
231
+ /:org:
232
+ io:output: true
233
+ auth:role: app:{org}:moderation
234
+ GET:
235
+ dev:stub:
236
+ access: granted!
237
+ """
238
+ When the following request is received:
239
+ """
240
+ GET /29e54ae1/ HTTP/1.1
241
+ host: nex.toa.io
242
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
243
+ """
244
+ Then the following reply is sent:
245
+ """
246
+ 200 OK
247
+ """
248
+ When the following request is received:
249
+ """
250
+ GET /88584c9b/ HTTP/1.1
251
+ host: nex.toa.io
252
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
253
+ """
254
+ Then the following reply is sent:
255
+ """
256
+ 403 Forbidden
257
+ """
258
+ When the following request is received:
259
+ """
260
+ GET /broken/ HTTP/1.1
261
+ host: nex.toa.io
262
+ authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
263
+ """
264
+ Then the following reply is sent:
265
+ """
266
+ 500 Internal Server Error
267
+ """
@@ -1,12 +1,14 @@
1
+ @security
1
2
  Feature: Tokens lifecycle
2
3
 
3
4
  Scenario: Switching to Token authentication scheme
4
5
  Given the `identity.basic` database contains:
5
- | _id | username | password |
6
- | efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
6
+ | _id | authority | username | password |
7
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
7
8
  Given the annotation:
8
9
  """yaml
9
10
  /:
11
+ io:output: true
10
12
  /hello/:id:
11
13
  auth:id: id
12
14
  GET:
@@ -15,6 +17,7 @@ Feature: Tokens lifecycle
15
17
  When the following request is received:
16
18
  """
17
19
  GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
20
+ host: nex.toa.io
18
21
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
19
22
  accept: text/plain
20
23
  """
@@ -35,6 +38,7 @@ Feature: Tokens lifecycle
35
38
  And the annotation:
36
39
  """yaml
37
40
  /:
41
+ io:output: true
38
42
  /hello/:id:
39
43
  auth:id: id
40
44
  GET:
@@ -43,6 +47,7 @@ Feature: Tokens lifecycle
43
47
  When the following request is received:
44
48
  """
45
49
  GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
50
+ host: nex.toa.io
46
51
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
47
52
  accept: text/plain
48
53
  """
@@ -57,6 +62,7 @@ Feature: Tokens lifecycle
57
62
  When the following request is received:
58
63
  """
59
64
  GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
65
+ host: nex.toa.io
60
66
  authorization: Token ${{ token }}
61
67
  accept: text/plain
62
68
  """
@@ -72,6 +78,7 @@ Feature: Tokens lifecycle
72
78
  Given the annotation:
73
79
  """yaml
74
80
  /:
81
+ io:output: true
75
82
  /:id:
76
83
  id: id
77
84
  GET:
@@ -83,11 +90,12 @@ Feature: Tokens lifecycle
83
90
  refresh: 0.1
84
91
  """
85
92
  And the `identity.basic` database contains:
86
- | _id | _version | username | password |
87
- | efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
93
+ | _id | _version | authority | username | password |
94
+ | efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
88
95
  When the following request is received:
89
96
  """
90
97
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
98
+ host: nex.toa.io
91
99
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
92
100
  """
93
101
  Then the following reply is sent:
@@ -98,6 +106,7 @@ Feature: Tokens lifecycle
98
106
  When the following request is received:
99
107
  """
100
108
  PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
109
+ host: nex.toa.io
101
110
  authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
102
111
  content-type: application/yaml
103
112
 
@@ -111,9 +120,53 @@ Feature: Tokens lifecycle
111
120
  When the following request is received:
112
121
  """
113
122
  GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
123
+ host: nex.toa.io
114
124
  authorization: Token ${{ token }}
115
125
  """
116
126
  Then the following reply is sent:
117
127
  """
118
128
  401 Unauthorized
119
129
  """
130
+
131
+ Scenario: Issuing own token
132
+ Given the `identity.basic` database contains:
133
+ | _id | authority | username | password |
134
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
135
+ When the following request is received:
136
+ """
137
+ GET /identity/ HTTP/1.1
138
+ host: nex.toa.io
139
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
140
+ """
141
+ Then the following reply is sent:
142
+ """
143
+ 200 OK
144
+ authorization: Token ${{ token }}
145
+ """
146
+ When the following request is received:
147
+ """
148
+ POST /identity/tokens/ HTTP/1.1
149
+ host: nex.toa.io
150
+ authorization: Token ${{ token }}
151
+ content-type: application/yaml
152
+
153
+ lifetime: 0
154
+ """
155
+ Then the following reply is sent:
156
+ """
157
+ 201 Created
158
+ """
159
+ # Token scheme must be used
160
+ When the following request is received:
161
+ """
162
+ POST /identity/tokens/ HTTP/1.1
163
+ host: nex.toa.io
164
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
165
+ content-type: application/yaml
166
+
167
+ lifetime: 60
168
+ """
169
+ Then the following reply is sent:
170
+ """
171
+ 403 Forbidden
172
+ """