itsi 0.1.20 → 0.2.3

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 (323) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -8
  3. data/Cargo.lock +29 -30
  4. data/LICENSE.txt +698 -0
  5. data/README.md +16 -4
  6. data/Rakefile +9 -5
  7. data/crates/itsi_acme/.gitignore +4 -0
  8. data/crates/itsi_acme/Cargo.toml +86 -0
  9. data/crates/itsi_acme/LICENSE-APACHE +201 -0
  10. data/crates/itsi_acme/LICENSE-MIT +23 -0
  11. data/crates/itsi_acme/README.md +9 -0
  12. data/crates/itsi_acme/examples/high_level.rs +63 -0
  13. data/crates/itsi_acme/examples/high_level_warp.rs +52 -0
  14. data/crates/itsi_acme/examples/low_level.rs +87 -0
  15. data/crates/itsi_acme/examples/low_level_axum.rs +66 -0
  16. data/crates/itsi_acme/src/acceptor.rs +81 -0
  17. data/crates/itsi_acme/src/acme.rs +354 -0
  18. data/crates/itsi_acme/src/axum.rs +86 -0
  19. data/crates/itsi_acme/src/cache.rs +39 -0
  20. data/crates/itsi_acme/src/caches/boxed.rs +80 -0
  21. data/crates/itsi_acme/src/caches/composite.rs +69 -0
  22. data/crates/itsi_acme/src/caches/dir.rs +106 -0
  23. data/crates/itsi_acme/src/caches/mod.rs +11 -0
  24. data/crates/itsi_acme/src/caches/no.rs +78 -0
  25. data/crates/itsi_acme/src/caches/test.rs +136 -0
  26. data/crates/itsi_acme/src/config.rs +172 -0
  27. data/crates/itsi_acme/src/https_helper.rs +69 -0
  28. data/crates/itsi_acme/src/incoming.rs +142 -0
  29. data/crates/itsi_acme/src/jose.rs +161 -0
  30. data/crates/itsi_acme/src/lib.rs +142 -0
  31. data/crates/itsi_acme/src/resolver.rs +59 -0
  32. data/crates/itsi_acme/src/state.rs +424 -0
  33. data/crates/itsi_rb_helpers/src/lib.rs +4 -3
  34. data/crates/itsi_scheduler/Cargo.toml +1 -1
  35. data/crates/itsi_scheduler/src/itsi_scheduler.rs +8 -2
  36. data/crates/itsi_scheduler/src/lib.rs +1 -0
  37. data/crates/itsi_server/Cargo.toml +1 -1
  38. data/crates/itsi_server/src/lib.rs +2 -1
  39. data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +18 -1
  40. data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +11 -3
  41. data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +148 -66
  42. data/crates/itsi_server/src/ruby_types/itsi_server.rs +2 -0
  43. data/crates/itsi_server/src/server/binds/bind.rs +3 -0
  44. data/crates/itsi_server/src/server/binds/listener.rs +12 -5
  45. data/crates/itsi_server/src/server/binds/tls.rs +13 -5
  46. data/crates/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +12 -5
  47. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +8 -1
  48. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +9 -1
  49. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +48 -43
  50. data/crates/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +11 -2
  51. data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +39 -12
  52. data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +36 -27
  53. data/crates/itsi_server/src/server/middleware_stack/middlewares/csp.rs +25 -11
  54. data/crates/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +12 -3
  55. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +74 -72
  56. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +15 -1
  57. data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +11 -8
  58. data/crates/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +19 -11
  59. data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +5 -5
  60. data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +2 -2
  61. data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +11 -5
  62. data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +17 -20
  63. data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +19 -8
  64. data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +16 -37
  65. data/crates/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +22 -12
  66. data/crates/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +26 -11
  67. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +7 -1
  68. data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +14 -4
  69. data/crates/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +19 -0
  70. data/crates/itsi_server/src/server/middleware_stack/mod.rs +49 -13
  71. data/crates/itsi_server/src/server/mod.rs +1 -0
  72. data/crates/itsi_server/src/server/redirect_type.rs +26 -0
  73. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +22 -16
  74. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +49 -12
  75. data/crates/itsi_server/src/server/signal.rs +1 -0
  76. data/crates/itsi_server/src/server/size_limited_incoming.rs +6 -0
  77. data/crates/itsi_server/src/server/thread_worker.rs +5 -1
  78. data/crates/itsi_server/src/services/itsi_http_service.rs +20 -2
  79. data/crates/itsi_server/src/services/rate_limiter.rs +15 -4
  80. data/crates/itsi_server/src/services/static_file_server.rs +33 -19
  81. data/crates/itsi_tracing/src/lib.rs +42 -22
  82. data/docs/content/_index.md +2 -3
  83. data/docs/content/acknowledgements/_index.md +5 -2
  84. data/docs/content/configuration/_index.md +8 -5
  85. data/docs/content/contact/_index.md +8 -1
  86. data/docs/content/directory_listing.jpg +0 -0
  87. data/docs/content/error_page.jpg +0 -0
  88. data/docs/content/faqs/_index.md +5 -3
  89. data/docs/content/features/_index.md +56 -50
  90. data/docs/content/getting_started/_index.md +8 -5
  91. data/docs/content/getting_started/local_development.md +76 -9
  92. data/docs/content/getting_started/logging.md +15 -9
  93. data/docs/content/getting_started/running_itsi_in_production.md +5 -3
  94. data/docs/content/getting_started/signals.md +37 -0
  95. data/docs/content/itsi_scheduler/_index.md +8 -7
  96. data/docs/content/utilities/_index.md +13 -0
  97. data/docs/content/utilities/config_file_testing.md +17 -0
  98. data/docs/content/utilities/passfile_generator.md +41 -0
  99. data/docs/content/utilities/route_testing.md +27 -0
  100. data/docs/content/utilities/secrets_management.md +30 -0
  101. data/docs/hugo.yaml +4 -1
  102. data/fairytale.txt +3 -4
  103. data/gems/scheduler/Cargo.lock +74 -17
  104. data/gems/scheduler/README.md +4 -5
  105. data/gems/scheduler/Rakefile +0 -4
  106. data/gems/scheduler/itsi-scheduler.gemspec +2 -2
  107. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  108. data/gems/scheduler/lib/itsi/scheduler.rb +9 -4
  109. data/gems/scheduler/test/test_active_record.rb +12 -7
  110. data/gems/server/Cargo.lock +28 -29
  111. data/gems/server/Rakefile +0 -4
  112. data/gems/server/exe/itsi +13 -2
  113. data/gems/server/itsi-server.gemspec +2 -2
  114. data/gems/server/lib/itsi/http_request/response_status_shortcodes.rb +2 -0
  115. data/gems/server/lib/itsi/http_request.rb +58 -30
  116. data/gems/server/lib/itsi/http_response.rb +10 -7
  117. data/gems/server/lib/itsi/passfile.rb +6 -7
  118. data/gems/server/lib/itsi/server/config/config_helpers.rb +41 -29
  119. data/gems/server/lib/itsi/server/config/dsl.rb +22 -442
  120. data/gems/server/lib/itsi/server/config/known_paths.rb +14 -7
  121. data/gems/server/lib/itsi/server/config/middleware/_index.md +6 -4
  122. data/gems/server/lib/itsi/server/config/middleware/allow_list.md +46 -0
  123. data/gems/server/lib/itsi/server/config/middleware/allow_list.rb +42 -0
  124. data/gems/server/lib/itsi/server/config/middleware/auth_api_key.md +90 -0
  125. data/gems/server/lib/itsi/server/config/middleware/auth_api_key.rb +51 -0
  126. data/gems/server/lib/itsi/server/config/middleware/auth_basic.md +45 -0
  127. data/gems/server/lib/itsi/server/config/middleware/auth_basic.rb +44 -0
  128. data/gems/server/lib/itsi/server/config/middleware/auth_jwt.md +82 -0
  129. data/gems/server/lib/itsi/server/config/middleware/auth_jwt.rb +38 -0
  130. data/gems/server/lib/itsi/server/config/middleware/cache_control.md +78 -0
  131. data/gems/server/lib/itsi/server/config/middleware/cache_control.rb +45 -0
  132. data/gems/server/lib/itsi/server/config/middleware/cidr_to_regex.rb +50 -0
  133. data/gems/server/lib/itsi/server/config/middleware/compression.md +50 -0
  134. data/gems/server/lib/itsi/server/config/middleware/compression.rb +37 -0
  135. data/gems/server/lib/itsi/server/config/middleware/cors.md +93 -0
  136. data/gems/server/lib/itsi/server/config/middleware/cors.rb +32 -0
  137. data/gems/server/lib/itsi/server/config/middleware/csp.md +37 -0
  138. data/gems/server/lib/itsi/server/config/middleware/csp.rb +44 -0
  139. data/gems/server/lib/itsi/server/config/middleware/deny_list.md +45 -0
  140. data/gems/server/lib/itsi/server/config/middleware/deny_list.rb +42 -0
  141. data/gems/server/lib/itsi/server/config/middleware/endpoint/_index.md +159 -0
  142. data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.md +186 -0
  143. data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.rb +33 -0
  144. data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.md +12 -0
  145. data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.rb +42 -0
  146. data/gems/server/lib/itsi/server/config/middleware/endpoint/endpoint.rb +99 -0
  147. data/gems/server/lib/itsi/server/config/middleware/endpoint/get.md +12 -0
  148. data/gems/server/lib/itsi/server/config/middleware/endpoint/get.rb +42 -0
  149. data/gems/server/lib/itsi/server/config/middleware/endpoint/http_request.md +44 -0
  150. data/gems/server/lib/itsi/server/config/middleware/endpoint/http_response.md +39 -0
  151. data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.md +12 -0
  152. data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.rb +42 -0
  153. data/gems/server/lib/itsi/server/config/middleware/endpoint/post.md +12 -0
  154. data/gems/server/lib/itsi/server/config/middleware/endpoint/post.rb +42 -0
  155. data/gems/server/lib/itsi/server/config/middleware/endpoint/put.md +12 -0
  156. data/gems/server/lib/itsi/server/config/middleware/endpoint/put.rb +42 -0
  157. data/gems/server/lib/itsi/server/config/middleware/endpoint/schemas.md +122 -0
  158. data/gems/server/lib/itsi/server/config/middleware/error_response.md +74 -0
  159. data/gems/server/lib/itsi/server/config/middleware/error_response.rb +36 -0
  160. data/gems/server/lib/itsi/server/config/middleware/etag.md +59 -0
  161. data/gems/server/lib/itsi/server/config/middleware/etag.rb +27 -0
  162. data/gems/server/lib/itsi/server/config/middleware/grpc.md +172 -0
  163. data/gems/server/lib/itsi/server/config/middleware/grpc.rb +54 -0
  164. data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.md +124 -0
  165. data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.rb +61 -0
  166. data/gems/server/lib/itsi/server/config/middleware/location.md +107 -0
  167. data/gems/server/lib/itsi/server/config/middleware/location.rb +99 -0
  168. data/gems/server/lib/itsi/server/config/middleware/log_requests.md +13 -11
  169. data/gems/server/lib/itsi/server/config/middleware/log_requests.rb +1 -3
  170. data/gems/server/lib/itsi/server/config/middleware/max_body.md +18 -0
  171. data/gems/server/lib/itsi/server/config/middleware/max_body.rb +21 -0
  172. data/gems/server/lib/itsi/server/config/middleware/proxy.md +62 -0
  173. data/gems/server/lib/itsi/server/config/middleware/proxy.rb +41 -0
  174. data/gems/server/lib/itsi/server/config/middleware/rackup_file.md +54 -0
  175. data/gems/server/lib/itsi/server/config/middleware/rackup_file.rb +44 -0
  176. data/gems/server/lib/itsi/server/config/middleware/rate_limit.md +126 -0
  177. data/gems/server/lib/itsi/server/config/middleware/rate_limit.rb +34 -0
  178. data/gems/server/lib/itsi/server/config/middleware/rate_limit_store.rb +25 -0
  179. data/gems/server/lib/itsi/server/config/middleware/redirect.md +55 -0
  180. data/gems/server/lib/itsi/server/config/middleware/redirect.rb +25 -0
  181. data/gems/server/lib/itsi/server/config/middleware/request_headers.md +34 -0
  182. data/gems/server/lib/itsi/server/config/middleware/request_headers.rb +24 -0
  183. data/gems/server/lib/itsi/server/config/middleware/response_headers.md +33 -0
  184. data/gems/server/lib/itsi/server/config/middleware/response_headers.rb +25 -0
  185. data/gems/server/lib/itsi/server/config/middleware/run.md +60 -0
  186. data/gems/server/lib/itsi/server/config/middleware/run.rb +43 -0
  187. data/gems/server/lib/itsi/server/config/middleware/static_assets.md +113 -0
  188. data/gems/server/lib/itsi/server/config/middleware/static_assets.rb +87 -0
  189. data/gems/server/lib/itsi/server/config/middleware/static_response.md +44 -0
  190. data/gems/server/lib/itsi/server/config/middleware/static_response.rb +29 -0
  191. data/gems/server/lib/itsi/server/config/middleware/string_rewrite.md +67 -0
  192. data/gems/server/lib/itsi/server/config/middleware/token_source.rb +32 -0
  193. data/gems/server/lib/itsi/server/config/middleware.rb +4 -0
  194. data/gems/server/lib/itsi/server/config/option.rb +4 -0
  195. data/gems/server/lib/itsi/server/config/options/_index.md +3 -2
  196. data/gems/server/lib/itsi/server/config/options/auto_reload_config.md +13 -0
  197. data/gems/server/lib/itsi/server/config/options/auto_reload_config.rb +41 -0
  198. data/gems/server/lib/itsi/server/config/options/bind.md +71 -0
  199. data/gems/server/lib/itsi/server/config/options/bind.rb +26 -0
  200. data/gems/server/lib/itsi/server/config/options/certificates.md +65 -0
  201. data/gems/server/lib/itsi/server/config/options/daemonize.md +14 -0
  202. data/gems/server/lib/itsi/server/config/options/daemonize.rb +19 -0
  203. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.md +1 -2
  204. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.rb +6 -3
  205. data/gems/server/lib/itsi/server/config/options/header_read_timeout.md +17 -0
  206. data/gems/server/lib/itsi/server/config/options/header_read_timeout.rb +19 -0
  207. data/gems/server/lib/itsi/server/config/options/hooks/_index.md +11 -0
  208. data/gems/server/lib/itsi/server/config/options/hooks/after_fork.md +13 -0
  209. data/gems/server/lib/itsi/server/config/options/hooks/after_fork.rb +28 -0
  210. data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.md +14 -0
  211. data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.rb +28 -0
  212. data/gems/server/lib/itsi/server/config/options/hooks/after_start.md +12 -0
  213. data/gems/server/lib/itsi/server/config/options/hooks/after_start.rb +28 -0
  214. data/gems/server/lib/itsi/server/config/options/hooks/before_fork.md +13 -0
  215. data/gems/server/lib/itsi/server/config/options/hooks/before_fork.rb +28 -0
  216. data/gems/server/lib/itsi/server/config/options/hooks/before_restart.md +12 -0
  217. data/gems/server/lib/itsi/server/config/options/hooks/before_restart.rb +28 -0
  218. data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.md +12 -0
  219. data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.rb +28 -0
  220. data/gems/server/lib/itsi/server/config/options/include.md +20 -0
  221. data/gems/server/lib/itsi/server/config/options/include.rb +36 -0
  222. data/gems/server/lib/itsi/server/config/options/listen_backlog.md +11 -0
  223. data/gems/server/lib/itsi/server/config/options/listen_backlog.rb +19 -0
  224. data/gems/server/lib/itsi/server/config/options/log_format.md +18 -0
  225. data/gems/server/lib/itsi/server/config/options/log_format.rb +19 -0
  226. data/gems/server/lib/itsi/server/config/options/log_level.md +34 -0
  227. data/gems/server/lib/itsi/server/config/options/log_level.rb +20 -0
  228. data/gems/server/lib/itsi/server/config/options/log_target.md +38 -0
  229. data/gems/server/lib/itsi/server/config/options/log_target.rb +19 -0
  230. data/gems/server/lib/itsi/server/config/options/log_target_filters.md +17 -0
  231. data/gems/server/lib/itsi/server/config/options/log_target_filters.rb +19 -0
  232. data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.md +27 -0
  233. data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.rb +24 -0
  234. data/gems/server/lib/itsi/server/config/options/nodelay.md +16 -0
  235. data/gems/server/lib/itsi/server/config/options/nodelay.rb +19 -0
  236. data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.md +19 -0
  237. data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.rb +18 -0
  238. data/gems/server/lib/itsi/server/config/options/pin_worker_cores.md +17 -0
  239. data/gems/server/lib/itsi/server/config/options/pin_worker_cores.rb +19 -0
  240. data/gems/server/lib/itsi/server/config/options/preload.md +21 -0
  241. data/gems/server/lib/itsi/server/config/options/preload.rb +18 -0
  242. data/gems/server/lib/itsi/server/config/options/recv_buffer_size.md +15 -0
  243. data/gems/server/lib/itsi/server/config/options/recv_buffer_size.rb +19 -0
  244. data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.md +21 -0
  245. data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.rb +30 -0
  246. data/gems/server/lib/itsi/server/config/options/request_timeout.md +23 -0
  247. data/gems/server/lib/itsi/server/config/options/request_timeout.rb +19 -0
  248. data/gems/server/lib/itsi/server/config/options/reuse_address.md +16 -0
  249. data/gems/server/lib/itsi/server/config/options/reuse_address.rb +19 -0
  250. data/gems/server/lib/itsi/server/config/options/reuse_port.md +16 -0
  251. data/gems/server/lib/itsi/server/config/options/reuse_port.rb +19 -0
  252. data/gems/server/lib/itsi/server/config/options/scheduler_threads.md +34 -0
  253. data/gems/server/lib/itsi/server/config/options/scheduler_threads.rb +17 -0
  254. data/gems/server/lib/itsi/server/config/options/shutdown_timeout.md +17 -0
  255. data/gems/server/lib/itsi/server/config/options/shutdown_timeout.rb +19 -0
  256. data/gems/server/lib/itsi/server/config/options/stream_body.md +32 -0
  257. data/gems/server/lib/itsi/server/config/options/stream_body.rb +18 -0
  258. data/gems/server/lib/itsi/server/config/options/threads.md +7 -2
  259. data/gems/server/lib/itsi/server/config/options/threads.rb +1 -1
  260. data/gems/server/lib/itsi/server/config/options/watch.md +16 -0
  261. data/gems/server/lib/itsi/server/config/options/watch.rb +28 -0
  262. data/gems/server/lib/itsi/server/config/options/worker_memory_limit.md +22 -0
  263. data/gems/server/lib/itsi/server/config/options/worker_memory_limit.rb +18 -0
  264. data/gems/server/lib/itsi/server/config/options/workers.md +1 -2
  265. data/gems/server/lib/itsi/server/config/options/workers.rb +1 -1
  266. data/gems/server/lib/itsi/server/config/typed_struct.rb +68 -32
  267. data/gems/server/lib/itsi/server/config.rb +163 -119
  268. data/gems/server/lib/itsi/server/default_app/default_app.rb +1 -1
  269. data/gems/server/lib/itsi/server/default_config/Itsi.rb +3 -3
  270. data/gems/server/lib/itsi/server/grpc/grpc_call.rb +4 -5
  271. data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +10 -4
  272. data/gems/server/lib/itsi/server/rack/handler/itsi.rb +2 -3
  273. data/gems/server/lib/itsi/server/rack_interface.rb +0 -1
  274. data/gems/server/lib/itsi/server/route_tester.rb +61 -9
  275. data/gems/server/lib/itsi/server/signal_trap.rb +1 -1
  276. data/gems/server/lib/itsi/server/typed_handlers/param_parser.rb +14 -18
  277. data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +13 -10
  278. data/gems/server/lib/itsi/server/typed_handlers.rb +12 -4
  279. data/gems/server/lib/itsi/server/version.rb +1 -1
  280. data/gems/server/lib/itsi/server.rb +111 -27
  281. data/gems/server/lib/itsi/standard_headers.rb +80 -80
  282. data/gems/server/lib/ruby_lsp/itsi/addon.rb +20 -18
  283. data/gems/server/test/helpers/test_helper.rb +90 -29
  284. data/gems/server/test/middleware/allow_list.rb +128 -0
  285. data/gems/server/test/middleware/auth_api_key.rb +141 -0
  286. data/gems/server/test/middleware/auth_basic.rb +91 -0
  287. data/gems/server/test/middleware/auth_jwt.rb +214 -0
  288. data/gems/server/test/middleware/cache_control.rb +82 -0
  289. data/gems/server/test/middleware/cidr_to_regex.rb +46 -0
  290. data/gems/server/test/middleware/compression.rb +89 -0
  291. data/gems/server/test/middleware/cors.rb +113 -0
  292. data/gems/server/test/middleware/csp.rb +62 -0
  293. data/gems/server/test/middleware/deny_list.rb +131 -0
  294. data/gems/server/test/middleware/endpoint.rb +300 -0
  295. data/gems/server/test/middleware/etag.rb +75 -0
  296. data/gems/server/test/middleware/grpc/grpc.rb +158 -0
  297. data/gems/server/test/middleware/grpc/test_service.proto +32 -0
  298. data/gems/server/test/middleware/grpc/test_service_impl.rb +28 -0
  299. data/gems/server/test/middleware/grpc/test_service_pb.rb +18 -0
  300. data/gems/server/test/middleware/grpc/test_service_services_pb.rb +30 -0
  301. data/gems/server/test/middleware/header_interpolation.rb +35 -0
  302. data/gems/server/test/middleware/intrusion_protection.rb +259 -0
  303. data/gems/server/test/middleware/location.rb +220 -0
  304. data/gems/server/test/middleware/max_body.rb +20 -0
  305. data/gems/server/test/middleware/proxy.rb +415 -0
  306. data/gems/server/test/middleware/rate_limit.rb +211 -0
  307. data/gems/server/test/middleware/redirect.rb +85 -0
  308. data/gems/server/test/middleware/request_headers.rb +50 -0
  309. data/gems/server/test/middleware/response_headers.rb +50 -0
  310. data/gems/server/test/middleware/static_assets.rb +374 -0
  311. data/gems/server/test/middleware/static_response.rb +56 -0
  312. data/gems/server/test/middleware/string_rewrite.rb +112 -0
  313. data/gems/server/test/middleware/test_log_requests.rb +54 -2
  314. data/gems/server/test/options/bind.rb +47 -0
  315. data/gems/server/test/options/header_read_timeout.rb +23 -0
  316. data/gems/server/test/options/test_request_timeout.rb +16 -0
  317. data/gems/server/test/options/test_workers.rb +11 -6
  318. data/gems/server/test/{test_itsi_server.rb → rack/test_rack_server.rb} +2 -2
  319. data/lib/itsi/version.rb +1 -1
  320. data/tasks.txt +15 -72
  321. metadata +209 -10
  322. data/examples/static_assets_example.rb +0 -83
  323. data/gems/server/lib/itsi/server/default_config/Itsi-rackup.rb +0 -119
@@ -1,17 +1,69 @@
1
1
  require_relative "../helpers/test_helper"
2
2
 
3
3
  class TestLogRequests < Minitest::Test
4
-
4
+ # 1. before‑only logging
5
5
  def test_it_supports_logging_before_requests
6
+ stdout, = capture_subprocess_io do
7
+ server(
8
+ itsi_rb: lambda do
9
+ log_level :info
10
+ log_requests \
11
+ before: {
12
+ level: "INFO",
13
+ format: "[{request_id}] BEFORE {method} {path_and_query}"
14
+ }
15
+ get("/foo?bar=baz") { |r| r.ok "ok" }
16
+ end
17
+ ) do
18
+ get_resp("/foo?bar=baz")
19
+ end
20
+ end
6
21
 
22
+ # should emit something like "[a1b2c3] BEFORE GET /foo?bar=baz"
23
+ assert_match(%r{\[[0-9a-f]+\] BEFORE GET /foo\?bar=baz}, stdout)
7
24
  end
8
25
 
26
+ # 2. after‑only logging
9
27
  def test_it_supports_logging_after_requests
28
+ stdout, = capture_subprocess_io do
29
+ server(
30
+ itsi_rb: lambda do
31
+ log_level :info
32
+ log_requests \
33
+ after: {
34
+ level: "INFO",
35
+ format: "[{request_id}] AFTER {status} in {response_time}"
36
+ }
37
+ get("/foo") { |r| r.ok "ok" }
38
+ end
39
+ ) do
40
+ get_resp("/foo")
41
+ end
42
+ end
10
43
 
44
+ # should emit something like "[d4e5f6] AFTER 200 in 1.234ms"
45
+ assert_match(/\[[0-9a-f]+\] AFTER 200 in \d+\.\d+ms/, stdout)
11
46
  end
12
47
 
48
+ # 3. custom log‑level is honored
13
49
  def test_it_supports_configuring_log_level
50
+ stdout, = capture_subprocess_io do
51
+ server(
52
+ itsi_rb: lambda do
53
+ log_level :error
54
+ log_requests \
55
+ before: {
56
+ level: "ERROR",
57
+ format: "X"
58
+ }
59
+ get("/foo") { |r| r.ok "ok" }
60
+ end
61
+ ) do
62
+ get_resp("/foo")
63
+ end
64
+ end
14
65
 
66
+ # our line should begin with "ERROR" and then our literal "X"
67
+ assert_match(/ERROR.*X/, stdout)
15
68
  end
16
-
17
69
  end
@@ -0,0 +1,47 @@
1
+ require_relative "../helpers/test_helper"
2
+
3
+ class TestBind < Minitest::Test
4
+ def test_http
5
+ server(
6
+ app: lambda do |env|
7
+ [200, { "Content-Type" => "text/plain" }, ["Hello, World!"]]
8
+ end) do
9
+ assert_equal "Hello, World!", get("/")
10
+ end
11
+ end
12
+
13
+
14
+ def test_https
15
+ server(app: lambda do |env|
16
+ [200, { "Content-Type" => "text/plain" }, ["Hello, HTTPS!"]]
17
+ end, protocol: "https") do |uri|
18
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true,
19
+ verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
20
+ http.request(Net::HTTP::Get.new("/"))
21
+ end
22
+ assert_equal "200", response.code
23
+ assert_equal "Hello, HTTPS!", response.body
24
+ end
25
+ end
26
+
27
+ def test_unix_socket_http
28
+ server(
29
+ bind: free_bind("http", unix_socket: true),
30
+ app: lambda do |env|
31
+ [200, { "Content-Type" => "text/plain" }, ["Hello, World!"]]
32
+ end) do
33
+ assert_equal "Hello, World!", get("/")
34
+ end
35
+ end
36
+
37
+ def test_unix_socket_https
38
+ server(
39
+ bind: free_bind("http", unix_socket: true),
40
+ app: lambda do |env|
41
+ [200, { "Content-Type" => "text/plain" }, ["Hello, World!"]]
42
+ end) do
43
+ assert_equal "Hello, World!", get("/")
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,23 @@
1
+ require_relative "../helpers/test_helper"
2
+
3
+ class TestHeaderReadTimeout < Minitest::Test
4
+ def test_header_timeout_enforced
5
+ server(
6
+ itsi_rb: lambda do
7
+ header_read_timeout 0.1
8
+ get("/") { |r| r.ok "hi" }
9
+ end
10
+ ) do
11
+ socket = TCPSocket.new("127.0.0.1", @uri.port)
12
+ socket.write("GET / HTTP/1.1\r\nHost: localhost\r\n") # don’t send \r\n\r\n
13
+
14
+ sleep 0.2 # exceed header timeout
15
+ socket.write("\r\n\r\n")
16
+ response = socket.read
17
+ rescue StandardError => e
18
+ assert_equal e.class, Errno::ECONNRESET
19
+ ensure
20
+ socket&.close
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ require_relative "../helpers/test_helper"
2
+
3
+ class TestRequestTimeout < Minitest::Test
4
+ def test_request_timeout_applies
5
+ server(
6
+ itsi_rb: lambda do
7
+ workers 3
8
+ request_timeout 0.1
9
+ get("/") { |r| sleep 0.2; r.ok "late" }
10
+ end
11
+ ) do
12
+ res = get_resp("/")
13
+ assert_equal "504", res.code
14
+ end
15
+ end
16
+ end
@@ -1,18 +1,23 @@
1
1
  require_relative "../helpers/test_helper"
2
2
 
3
3
  class TestWorkers < Minitest::Test
4
-
5
4
  def test_it_can_run_multiple_workers
6
5
  worker_count = 4
7
6
 
8
7
  server(
9
8
  itsi_rb: lambda do
10
-
11
9
  workers worker_count
12
- get("/foo"){|r| r.ok Process.pid}
13
-
14
- end) do
15
- assert_equal worker_count, 30.times.map { |i| get("/foo") }.uniq.size
10
+ get("/foo") { |r| r.ok Process.pid }
11
+ end
12
+ ) do
13
+ seen = Set.new
14
+ Timeout.timeout(2) do
15
+ loop do
16
+ seen << get("foo")
17
+ break if seen.size == worker_count
18
+ end
19
+ end
20
+ assert_equal worker_count, seen.size
16
21
  end
17
22
  end
18
23
  end
@@ -1,6 +1,6 @@
1
- require_relative "helpers/test_helper"
1
+ require_relative "../helpers/test_helper"
2
2
 
3
- class TestItsiServer < Minitest::Test
3
+ class TestRackServer < Minitest::Test
4
4
  def test_that_it_has_a_version_number
5
5
  refute_nil ::Itsi::Server::VERSION
6
6
  end
data/lib/itsi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Itsi
2
- VERSION = "0.1.20"
2
+ VERSION = '0.2.3'
3
3
  end
data/tasks.txt CHANGED
@@ -1,80 +1,23 @@
1
- Feature complete! Polish and Release (At Lake):
2
- -- Feature breakdown. Per feature make sure we have
3
- --- Clean Code
4
- --- Debug logging
5
- --- Ultra robust config, with sane and safe defaults.
6
- --- Complete Documentation (Readme + Blog)
7
- --- Nice middleware printing
8
- --- Tests.
9
- --- Targetable Debug Logging
10
- --- Good default config value
11
-
12
- - Go on unwrap hunt
13
-
14
-
15
- Fill in Changelog.md date
16
- Retest in live environment
17
- - Add examples
18
- *maybe* leave service running on live server to verify let's encrypt renewals.
19
-
20
- - Feature List:
21
- -- HTTP
22
- -- HTTP2
23
- -- TLS
24
- -- Websockets
25
- -- Headers (Replace is equal to remove plus append)
26
- -- Hijack
27
- -- Callable
28
- -- Streaming Bodies
29
- -- Rate Limiter
30
- -- Auth JWT/Basic/API
31
- -- gRPC Server (Plug in existing Ruby gRPC handlers)
32
- -- File Watcher and auto-reloading
33
- -- Allow/Deny lists
34
- -- Cache control
35
- -- compression
36
- -- CORS
37
- -- CSP Reporting
38
- -- etag
39
- -- Intrusion Protection
40
- -- Proxy
41
- -- Header changes (also support append, replace, remove)
42
- -- Endpoint
43
- -- Rackup
44
- -- Rack inline
45
- -- Static assets
46
- -- Redirect (HTTP to HTTPS!)
47
- -- Logging
48
- -- Cluster
49
- -- Single
50
- -- Graceful and Hot Restart
51
- -- Streaming body
52
- -- Unix Sockets
53
- -- Support for running high-performance mini-apps, written and served directly from the singular Itsi.rb configuration file.
54
- -- Well documented complete with LSP support.
55
- -- Author Final default Itsi-file
56
- -- Add notes on: PGGSSENCMODE="disable" and OBJC_DISABLE_INITIALIZE_FORK_SAFETY=
57
-
58
- Later:
1
+ Tasks:
2
+ - Static ruby build
3
+ - Add way to opt non Itsi.rb files into LSP
59
4
  - OTel
60
5
  - Even faster Hash creation for Rack
61
6
  - Image resizer
62
7
  - First class Rackless Websockets
63
8
  - Print out warning if we can detect that a location block will never be hit.
64
9
  - Built in obs Dashboard + Stats
65
- - Support UDP
66
- - Support unix socket proxy
67
10
  - WASM pluggable middleware
11
+ - Support UDP Proxy
12
+ - Support Unix Socket Proxy
68
13
  - gRPC proxying
69
-
70
- -- Stretch goals:
71
- - HTTP-01 Autocert
72
- - H3
73
- - OpenAPI gen
74
- - Finish Single acceptor mode (Optional)
75
- - Introduce Option
76
- - Finish Unix implementation
77
- - Kill a single worker (impact)
78
- - Clean shutdown and restart while in single acceptor mode
79
- - Fix Hang
80
- - Introduce Socket Options
14
+ - HTTP-01 Autocert
15
+ - H3
16
+ - OpenAPI gen
17
+ - Finish Single acceptor mode (Optional)
18
+ - Introduce Option
19
+ - Finish Unix implementation
20
+ - Very single worker shutdown (impact)
21
+ - Clean shutdown and restart while in single acceptor mode
22
+ - Fix Hang
23
+ - Introduce Socket Options
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itsi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
@@ -15,28 +15,28 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 0.1.20
18
+ version: 0.2.3
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: 0.1.20
25
+ version: 0.2.3
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: itsi-server
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: 0.1.20
32
+ version: 0.2.3
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.1.20
39
+ version: 0.2.3
40
40
  description: Wrapper Gem for both the Itsi server and the Itsi Fiber scheduler
41
41
  email:
42
42
  - wc@pico.net.nz
@@ -47,8 +47,35 @@ files:
47
47
  - CHANGELOG.md
48
48
  - Cargo.lock
49
49
  - Cargo.toml
50
+ - LICENSE.txt
50
51
  - README.md
51
52
  - Rakefile
53
+ - crates/itsi_acme/.gitignore
54
+ - crates/itsi_acme/Cargo.toml
55
+ - crates/itsi_acme/LICENSE-APACHE
56
+ - crates/itsi_acme/LICENSE-MIT
57
+ - crates/itsi_acme/README.md
58
+ - crates/itsi_acme/examples/high_level.rs
59
+ - crates/itsi_acme/examples/high_level_warp.rs
60
+ - crates/itsi_acme/examples/low_level.rs
61
+ - crates/itsi_acme/examples/low_level_axum.rs
62
+ - crates/itsi_acme/src/acceptor.rs
63
+ - crates/itsi_acme/src/acme.rs
64
+ - crates/itsi_acme/src/axum.rs
65
+ - crates/itsi_acme/src/cache.rs
66
+ - crates/itsi_acme/src/caches/boxed.rs
67
+ - crates/itsi_acme/src/caches/composite.rs
68
+ - crates/itsi_acme/src/caches/dir.rs
69
+ - crates/itsi_acme/src/caches/mod.rs
70
+ - crates/itsi_acme/src/caches/no.rs
71
+ - crates/itsi_acme/src/caches/test.rs
72
+ - crates/itsi_acme/src/config.rs
73
+ - crates/itsi_acme/src/https_helper.rs
74
+ - crates/itsi_acme/src/incoming.rs
75
+ - crates/itsi_acme/src/jose.rs
76
+ - crates/itsi_acme/src/lib.rs
77
+ - crates/itsi_acme/src/resolver.rs
78
+ - crates/itsi_acme/src/state.rs
52
79
  - crates/itsi_error/Cargo.lock
53
80
  - crates/itsi_error/Cargo.toml
54
81
  - crates/itsi_error/src/lib.rs
@@ -142,6 +169,7 @@ files:
142
169
  - crates/itsi_server/src/server/middleware_stack/mod.rs
143
170
  - crates/itsi_server/src/server/mod.rs
144
171
  - crates/itsi_server/src/server/process_worker.rs
172
+ - crates/itsi_server/src/server/redirect_type.rs
145
173
  - crates/itsi_server/src/server/request_job.rs
146
174
  - crates/itsi_server/src/server/serve_strategy/cluster_mode.rs
147
175
  - crates/itsi_server/src/server/serve_strategy/mod.rs
@@ -166,22 +194,29 @@ files:
166
194
  - docs/content/acknowledgements/_index.md
167
195
  - docs/content/configuration/_index.md
168
196
  - docs/content/contact/_index.md
197
+ - docs/content/directory_listing.jpg
198
+ - docs/content/error_page.jpg
169
199
  - docs/content/faqs/_index.md
170
200
  - docs/content/features/_index.md
171
201
  - docs/content/getting_started/_index.md
172
202
  - docs/content/getting_started/local_development.md
173
203
  - docs/content/getting_started/logging.md
174
204
  - docs/content/getting_started/running_itsi_in_production.md
205
+ - docs/content/getting_started/signals.md
175
206
  - docs/content/itsi-server-100.png
176
207
  - docs/content/itsi_scheduler/_index.md
177
208
  - docs/content/itsi_scheduler/itsi-scheduler-100.png
178
209
  - docs/content/ruby-lsp.png
179
210
  - docs/content/ruby.svg
211
+ - docs/content/utilities/_index.md
212
+ - docs/content/utilities/config_file_testing.md
213
+ - docs/content/utilities/passfile_generator.md
214
+ - docs/content/utilities/route_testing.md
215
+ - docs/content/utilities/secrets_management.md
180
216
  - docs/data/icons.yaml
181
217
  - docs/go.mod
182
218
  - docs/go.sum
183
219
  - docs/hugo.yaml
184
- - examples/static_assets_example.rb
185
220
  - fairytale.txt
186
221
  - gems/scheduler/.gitignore
187
222
  - gems/scheduler/.rubocop.yml
@@ -329,20 +364,152 @@ files:
329
364
  - gems/server/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt
330
365
  - gems/server/lib/itsi/server/config/middleware.rb
331
366
  - gems/server/lib/itsi/server/config/middleware/_index.md
367
+ - gems/server/lib/itsi/server/config/middleware/allow_list.md
368
+ - gems/server/lib/itsi/server/config/middleware/allow_list.rb
369
+ - gems/server/lib/itsi/server/config/middleware/auth_api_key.md
370
+ - gems/server/lib/itsi/server/config/middleware/auth_api_key.rb
371
+ - gems/server/lib/itsi/server/config/middleware/auth_basic.md
372
+ - gems/server/lib/itsi/server/config/middleware/auth_basic.rb
373
+ - gems/server/lib/itsi/server/config/middleware/auth_jwt.md
374
+ - gems/server/lib/itsi/server/config/middleware/auth_jwt.rb
375
+ - gems/server/lib/itsi/server/config/middleware/cache_control.md
376
+ - gems/server/lib/itsi/server/config/middleware/cache_control.rb
377
+ - gems/server/lib/itsi/server/config/middleware/cidr_to_regex.rb
378
+ - gems/server/lib/itsi/server/config/middleware/compression.md
379
+ - gems/server/lib/itsi/server/config/middleware/compression.rb
380
+ - gems/server/lib/itsi/server/config/middleware/cors.md
381
+ - gems/server/lib/itsi/server/config/middleware/cors.rb
382
+ - gems/server/lib/itsi/server/config/middleware/csp.md
383
+ - gems/server/lib/itsi/server/config/middleware/csp.rb
384
+ - gems/server/lib/itsi/server/config/middleware/deny_list.md
385
+ - gems/server/lib/itsi/server/config/middleware/deny_list.rb
386
+ - gems/server/lib/itsi/server/config/middleware/endpoint/_index.md
387
+ - gems/server/lib/itsi/server/config/middleware/endpoint/controller.md
388
+ - gems/server/lib/itsi/server/config/middleware/endpoint/controller.rb
389
+ - gems/server/lib/itsi/server/config/middleware/endpoint/delete.md
390
+ - gems/server/lib/itsi/server/config/middleware/endpoint/delete.rb
391
+ - gems/server/lib/itsi/server/config/middleware/endpoint/endpoint.rb
392
+ - gems/server/lib/itsi/server/config/middleware/endpoint/get.md
393
+ - gems/server/lib/itsi/server/config/middleware/endpoint/get.rb
394
+ - gems/server/lib/itsi/server/config/middleware/endpoint/http_request.md
395
+ - gems/server/lib/itsi/server/config/middleware/endpoint/http_response.md
396
+ - gems/server/lib/itsi/server/config/middleware/endpoint/patch.md
397
+ - gems/server/lib/itsi/server/config/middleware/endpoint/patch.rb
398
+ - gems/server/lib/itsi/server/config/middleware/endpoint/post.md
399
+ - gems/server/lib/itsi/server/config/middleware/endpoint/post.rb
400
+ - gems/server/lib/itsi/server/config/middleware/endpoint/put.md
401
+ - gems/server/lib/itsi/server/config/middleware/endpoint/put.rb
402
+ - gems/server/lib/itsi/server/config/middleware/endpoint/schemas.md
403
+ - gems/server/lib/itsi/server/config/middleware/error_response.md
404
+ - gems/server/lib/itsi/server/config/middleware/error_response.rb
405
+ - gems/server/lib/itsi/server/config/middleware/etag.md
406
+ - gems/server/lib/itsi/server/config/middleware/etag.rb
407
+ - gems/server/lib/itsi/server/config/middleware/grpc.md
408
+ - gems/server/lib/itsi/server/config/middleware/grpc.rb
409
+ - gems/server/lib/itsi/server/config/middleware/intrusion_protection.md
410
+ - gems/server/lib/itsi/server/config/middleware/intrusion_protection.rb
411
+ - gems/server/lib/itsi/server/config/middleware/location.md
412
+ - gems/server/lib/itsi/server/config/middleware/location.rb
332
413
  - gems/server/lib/itsi/server/config/middleware/log_requests.md
333
414
  - gems/server/lib/itsi/server/config/middleware/log_requests.rb
415
+ - gems/server/lib/itsi/server/config/middleware/max_body.md
416
+ - gems/server/lib/itsi/server/config/middleware/max_body.rb
417
+ - gems/server/lib/itsi/server/config/middleware/proxy.md
418
+ - gems/server/lib/itsi/server/config/middleware/proxy.rb
419
+ - gems/server/lib/itsi/server/config/middleware/rackup_file.md
420
+ - gems/server/lib/itsi/server/config/middleware/rackup_file.rb
421
+ - gems/server/lib/itsi/server/config/middleware/rate_limit.md
422
+ - gems/server/lib/itsi/server/config/middleware/rate_limit.rb
423
+ - gems/server/lib/itsi/server/config/middleware/rate_limit_store.rb
424
+ - gems/server/lib/itsi/server/config/middleware/redirect.md
425
+ - gems/server/lib/itsi/server/config/middleware/redirect.rb
426
+ - gems/server/lib/itsi/server/config/middleware/request_headers.md
427
+ - gems/server/lib/itsi/server/config/middleware/request_headers.rb
428
+ - gems/server/lib/itsi/server/config/middleware/response_headers.md
429
+ - gems/server/lib/itsi/server/config/middleware/response_headers.rb
430
+ - gems/server/lib/itsi/server/config/middleware/run.md
431
+ - gems/server/lib/itsi/server/config/middleware/run.rb
432
+ - gems/server/lib/itsi/server/config/middleware/static_assets.md
433
+ - gems/server/lib/itsi/server/config/middleware/static_assets.rb
434
+ - gems/server/lib/itsi/server/config/middleware/static_response.md
435
+ - gems/server/lib/itsi/server/config/middleware/static_response.rb
436
+ - gems/server/lib/itsi/server/config/middleware/string_rewrite.md
437
+ - gems/server/lib/itsi/server/config/middleware/token_source.rb
334
438
  - gems/server/lib/itsi/server/config/option.rb
335
439
  - gems/server/lib/itsi/server/config/options/_index.md
440
+ - gems/server/lib/itsi/server/config/options/auto_reload_config.md
441
+ - gems/server/lib/itsi/server/config/options/auto_reload_config.rb
442
+ - gems/server/lib/itsi/server/config/options/bind.md
443
+ - gems/server/lib/itsi/server/config/options/bind.rb
444
+ - gems/server/lib/itsi/server/config/options/certificates.md
445
+ - gems/server/lib/itsi/server/config/options/daemonize.md
446
+ - gems/server/lib/itsi/server/config/options/daemonize.rb
336
447
  - gems/server/lib/itsi/server/config/options/fiber_scheduler.md
337
448
  - gems/server/lib/itsi/server/config/options/fiber_scheduler.rb
449
+ - gems/server/lib/itsi/server/config/options/header_read_timeout.md
450
+ - gems/server/lib/itsi/server/config/options/header_read_timeout.rb
451
+ - gems/server/lib/itsi/server/config/options/hooks/_index.md
452
+ - gems/server/lib/itsi/server/config/options/hooks/after_fork.md
453
+ - gems/server/lib/itsi/server/config/options/hooks/after_fork.rb
454
+ - gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.md
455
+ - gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.rb
456
+ - gems/server/lib/itsi/server/config/options/hooks/after_start.md
457
+ - gems/server/lib/itsi/server/config/options/hooks/after_start.rb
458
+ - gems/server/lib/itsi/server/config/options/hooks/before_fork.md
459
+ - gems/server/lib/itsi/server/config/options/hooks/before_fork.rb
460
+ - gems/server/lib/itsi/server/config/options/hooks/before_restart.md
461
+ - gems/server/lib/itsi/server/config/options/hooks/before_restart.rb
462
+ - gems/server/lib/itsi/server/config/options/hooks/before_shutdown.md
463
+ - gems/server/lib/itsi/server/config/options/hooks/before_shutdown.rb
464
+ - gems/server/lib/itsi/server/config/options/include.md
465
+ - gems/server/lib/itsi/server/config/options/include.rb
466
+ - gems/server/lib/itsi/server/config/options/listen_backlog.md
467
+ - gems/server/lib/itsi/server/config/options/listen_backlog.rb
468
+ - gems/server/lib/itsi/server/config/options/log_format.md
469
+ - gems/server/lib/itsi/server/config/options/log_format.rb
470
+ - gems/server/lib/itsi/server/config/options/log_level.md
471
+ - gems/server/lib/itsi/server/config/options/log_level.rb
472
+ - gems/server/lib/itsi/server/config/options/log_target.md
473
+ - gems/server/lib/itsi/server/config/options/log_target.rb
474
+ - gems/server/lib/itsi/server/config/options/log_target_filters.md
475
+ - gems/server/lib/itsi/server/config/options/log_target_filters.rb
476
+ - gems/server/lib/itsi/server/config/options/multithreaded_reactor.md
477
+ - gems/server/lib/itsi/server/config/options/multithreaded_reactor.rb
478
+ - gems/server/lib/itsi/server/config/options/nodelay.md
479
+ - gems/server/lib/itsi/server/config/options/nodelay.rb
480
+ - gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.md
481
+ - gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.rb
482
+ - gems/server/lib/itsi/server/config/options/pin_worker_cores.md
483
+ - gems/server/lib/itsi/server/config/options/pin_worker_cores.rb
484
+ - gems/server/lib/itsi/server/config/options/preload.md
485
+ - gems/server/lib/itsi/server/config/options/preload.rb
486
+ - gems/server/lib/itsi/server/config/options/recv_buffer_size.md
487
+ - gems/server/lib/itsi/server/config/options/recv_buffer_size.rb
488
+ - gems/server/lib/itsi/server/config/options/redirect_http_to_https.md
489
+ - gems/server/lib/itsi/server/config/options/redirect_http_to_https.rb
490
+ - gems/server/lib/itsi/server/config/options/request_timeout.md
491
+ - gems/server/lib/itsi/server/config/options/request_timeout.rb
492
+ - gems/server/lib/itsi/server/config/options/reuse_address.md
493
+ - gems/server/lib/itsi/server/config/options/reuse_address.rb
494
+ - gems/server/lib/itsi/server/config/options/reuse_port.md
495
+ - gems/server/lib/itsi/server/config/options/reuse_port.rb
496
+ - gems/server/lib/itsi/server/config/options/scheduler_threads.md
497
+ - gems/server/lib/itsi/server/config/options/scheduler_threads.rb
498
+ - gems/server/lib/itsi/server/config/options/shutdown_timeout.md
499
+ - gems/server/lib/itsi/server/config/options/shutdown_timeout.rb
500
+ - gems/server/lib/itsi/server/config/options/stream_body.md
501
+ - gems/server/lib/itsi/server/config/options/stream_body.rb
338
502
  - gems/server/lib/itsi/server/config/options/threads.md
339
503
  - gems/server/lib/itsi/server/config/options/threads.rb
504
+ - gems/server/lib/itsi/server/config/options/watch.md
505
+ - gems/server/lib/itsi/server/config/options/watch.rb
506
+ - gems/server/lib/itsi/server/config/options/worker_memory_limit.md
507
+ - gems/server/lib/itsi/server/config/options/worker_memory_limit.rb
340
508
  - gems/server/lib/itsi/server/config/options/workers.md
341
509
  - gems/server/lib/itsi/server/config/options/workers.rb
342
510
  - gems/server/lib/itsi/server/config/typed_struct.rb
343
511
  - gems/server/lib/itsi/server/default_app/default_app.rb
344
512
  - gems/server/lib/itsi/server/default_app/index.html
345
- - gems/server/lib/itsi/server/default_config/Itsi-rackup.rb
346
513
  - gems/server/lib/itsi/server/default_config/Itsi.rb
347
514
  - gems/server/lib/itsi/server/grpc/grpc_call.rb
348
515
  - gems/server/lib/itsi/server/grpc/grpc_interface.rb
@@ -363,10 +530,42 @@ files:
363
530
  - gems/server/lib/shell_completions/completions.rb
364
531
  - gems/server/sig/itsi_server.rbs
365
532
  - gems/server/test/helpers/test_helper.rb
533
+ - gems/server/test/middleware/allow_list.rb
534
+ - gems/server/test/middleware/auth_api_key.rb
535
+ - gems/server/test/middleware/auth_basic.rb
536
+ - gems/server/test/middleware/auth_jwt.rb
537
+ - gems/server/test/middleware/cache_control.rb
538
+ - gems/server/test/middleware/cidr_to_regex.rb
539
+ - gems/server/test/middleware/compression.rb
540
+ - gems/server/test/middleware/cors.rb
541
+ - gems/server/test/middleware/csp.rb
542
+ - gems/server/test/middleware/deny_list.rb
543
+ - gems/server/test/middleware/endpoint.rb
544
+ - gems/server/test/middleware/etag.rb
545
+ - gems/server/test/middleware/grpc/grpc.rb
546
+ - gems/server/test/middleware/grpc/test_service.proto
547
+ - gems/server/test/middleware/grpc/test_service_impl.rb
548
+ - gems/server/test/middleware/grpc/test_service_pb.rb
549
+ - gems/server/test/middleware/grpc/test_service_services_pb.rb
550
+ - gems/server/test/middleware/header_interpolation.rb
551
+ - gems/server/test/middleware/intrusion_protection.rb
552
+ - gems/server/test/middleware/location.rb
553
+ - gems/server/test/middleware/max_body.rb
554
+ - gems/server/test/middleware/proxy.rb
555
+ - gems/server/test/middleware/rate_limit.rb
556
+ - gems/server/test/middleware/redirect.rb
557
+ - gems/server/test/middleware/request_headers.rb
558
+ - gems/server/test/middleware/response_headers.rb
559
+ - gems/server/test/middleware/static_assets.rb
560
+ - gems/server/test/middleware/static_response.rb
561
+ - gems/server/test/middleware/string_rewrite.rb
366
562
  - gems/server/test/middleware/test_log_requests.rb
563
+ - gems/server/test/options/bind.rb
564
+ - gems/server/test/options/header_read_timeout.rb
565
+ - gems/server/test/options/test_request_timeout.rb
367
566
  - gems/server/test/options/test_threads.rb
368
567
  - gems/server/test/options/test_workers.rb
369
- - gems/server/test/test_itsi_server.rb
568
+ - gems/server/test/rack/test_rack_server.rb
370
569
  - itsi-scheduler-100.png
371
570
  - itsi-server-100.png
372
571
  - lib/itsi.rb
@@ -377,8 +576,8 @@ licenses:
377
576
  - MIT
378
577
  metadata:
379
578
  homepage_uri: https://itsi.fyi
380
- source_code_uri: https://github.com/woutercoppieters/itsi
381
- changelog_uri: https://github.com/woutercoppieters/itsi/blob/main/CHANGELOG.md
579
+ source_code_uri: https://github.com/wouterken/itsi
580
+ changelog_uri: https://github.com/wouterken/itsi/blob/main/CHANGELOG.md
382
581
  rdoc_options: []
383
582
  require_paths:
384
583
  - lib