itsi 0.1.19 → 0.2.2

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 (645) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/Cargo.lock +942 -242
  4. data/LICENSE.txt +698 -0
  5. data/README.md +77 -54
  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 +3 -3
  38. data/crates/itsi_server/src/lib.rs +2 -1
  39. data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +20 -3
  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 +255 -65
  42. data/crates/itsi_server/src/ruby_types/itsi_server.rs +3 -0
  43. data/crates/itsi_server/src/server/binds/bind.rs +3 -0
  44. data/crates/itsi_server/src/server/binds/listener.rs +44 -32
  45. data/crates/itsi_server/src/server/binds/tls/locked_dir_cache.rs +2 -2
  46. data/crates/itsi_server/src/server/binds/tls.rs +14 -6
  47. data/crates/itsi_server/src/server/middleware_stack/middleware.rs +33 -28
  48. data/crates/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +12 -5
  49. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +8 -1
  50. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +9 -1
  51. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +95 -37
  52. data/crates/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +11 -2
  53. data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +39 -12
  54. data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +36 -27
  55. data/crates/itsi_server/src/server/middleware_stack/middlewares/csp.rs +193 -0
  56. data/crates/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +12 -3
  57. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +74 -72
  58. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +15 -1
  59. data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +11 -8
  60. data/crates/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +19 -11
  61. data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +5 -5
  62. data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +2 -2
  63. data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +31 -2
  64. data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +17 -20
  65. data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +19 -8
  66. data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +16 -37
  67. data/crates/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +22 -12
  68. data/crates/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +26 -11
  69. data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +3 -3
  70. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +9 -2
  71. data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +14 -4
  72. data/crates/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +19 -0
  73. data/crates/itsi_server/src/server/middleware_stack/mod.rs +69 -35
  74. data/crates/itsi_server/src/server/mod.rs +1 -0
  75. data/crates/itsi_server/src/server/redirect_type.rs +26 -0
  76. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +30 -18
  77. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +77 -17
  78. data/crates/itsi_server/src/server/signal.rs +1 -0
  79. data/crates/itsi_server/src/server/size_limited_incoming.rs +6 -0
  80. data/crates/itsi_server/src/server/thread_worker.rs +6 -2
  81. data/crates/itsi_server/src/services/itsi_http_service.rs +20 -2
  82. data/crates/itsi_server/src/services/rate_limiter.rs +15 -4
  83. data/crates/itsi_server/src/services/static_file_server.rs +63 -47
  84. data/crates/itsi_tracing/src/lib.rs +80 -29
  85. data/docker/Dockerfile +12 -0
  86. data/docs/content/_index.md +17 -10
  87. data/docs/content/acknowledgements/_index.md +46 -0
  88. data/docs/content/configuration/_index.md +101 -0
  89. data/docs/content/contact/_index.md +14 -0
  90. data/docs/content/faqs/_index.md +29 -0
  91. data/docs/content/features/_index.md +291 -0
  92. data/docs/content/getting_started/_index.md +73 -0
  93. data/docs/content/getting_started/local_development.md +100 -0
  94. data/docs/content/getting_started/logging.md +23 -0
  95. data/docs/content/getting_started/running_itsi_in_production.md +26 -0
  96. data/docs/content/getting_started/signals.md +38 -0
  97. data/docs/content/itsi-server-100.png +0 -0
  98. data/docs/content/itsi_scheduler/_index.md +106 -0
  99. data/docs/content/itsi_scheduler/itsi-scheduler-100.png +0 -0
  100. data/docs/content/ruby-lsp.png +0 -0
  101. data/docs/content/ruby.svg +948 -0
  102. data/docs/content/utilities/_index.md +13 -0
  103. data/docs/content/utilities/config_file_testing.md +17 -0
  104. data/docs/content/utilities/passfile_generator.md +41 -0
  105. data/docs/content/utilities/route_testing.md +27 -0
  106. data/docs/content/utilities/secrets_management.md +30 -0
  107. data/docs/data/icons.yaml +949 -0
  108. data/docs/hugo.yaml +27 -28
  109. data/fairytale.txt +33 -0
  110. data/gems/scheduler/Cargo.lock +47 -47
  111. data/gems/scheduler/README.md +52 -24
  112. data/gems/scheduler/Rakefile +0 -4
  113. data/gems/scheduler/itsi-scheduler-100.png +0 -0
  114. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  115. data/gems/scheduler/lib/itsi/scheduler.rb +9 -4
  116. data/gems/scheduler/test/test_active_record.rb +12 -7
  117. data/gems/server/Cargo.lock +950 -239
  118. data/gems/server/README.md +2 -0
  119. data/gems/server/Rakefile +0 -4
  120. data/gems/server/exe/itsi +16 -5
  121. data/gems/server/lib/itsi/http_request/response_status_shortcodes.rb +2 -0
  122. data/gems/server/lib/itsi/http_request.rb +40 -9
  123. data/gems/server/lib/itsi/http_response.rb +2 -1
  124. data/gems/server/lib/itsi/passfile.rb +0 -1
  125. data/gems/server/lib/itsi/server/config/config_helpers.rb +105 -0
  126. data/gems/server/lib/itsi/server/config/dsl.rb +44 -411
  127. data/gems/server/lib/itsi/server/config/known_paths/KitchensinkDirectories.txt +2346 -0
  128. data/gems/server/lib/itsi/server/config/known_paths/Randomfiles.txt +24 -0
  129. data/gems/server/lib/itsi/server/config/known_paths/UnixDotfiles.txt +52 -0
  130. data/gems/server/lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt +29 -0
  131. data/gems/server/lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt +1668 -0
  132. data/gems/server/lib/itsi/server/config/known_paths/backdoors/shells.txt +1167 -0
  133. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt +7 -0
  134. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt +6 -0
  135. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt +79 -0
  136. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt +3948 -0
  137. data/gems/server/lib/itsi/server/config/known_paths/cms/README.md +5 -0
  138. data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_plugins.txt +6320 -0
  139. data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_themes.txt +828 -0
  140. data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_plugins.txt +224 -0
  141. data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_themes.txt +30 -0
  142. data/gems/server/lib/itsi/server/config/known_paths/cms/php-nuke.txt +2142 -0
  143. data/gems/server/lib/itsi/server/config/known_paths/cms/wordpress.txt +1566 -0
  144. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt +46 -0
  145. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins.txt +13366 -0
  146. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt +68662 -0
  147. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt +225 -0
  148. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.readme +12 -0
  149. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.txt +7336 -0
  150. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt +17576 -0
  151. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt +80 -0
  152. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt +14 -0
  153. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt +865 -0
  154. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt +186 -0
  155. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt +30 -0
  156. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt +93 -0
  157. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt +1918 -0
  158. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt +8 -0
  159. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt +56180 -0
  160. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt +62290 -0
  161. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt +2367 -0
  162. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt +2450 -0
  163. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt +35323 -0
  164. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt +37037 -0
  165. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt +107982 -0
  166. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt +119600 -0
  167. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt +26593 -0
  168. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt +30009 -0
  169. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt +1233 -0
  170. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt +1289 -0
  171. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt +16243 -0
  172. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt +17128 -0
  173. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt +56293 -0
  174. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt +63087 -0
  175. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt +17776 -0
  176. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt +20122 -0
  177. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt +914 -0
  178. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt +963 -0
  179. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt +10848 -0
  180. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt +11424 -0
  181. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt +38267 -0
  182. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt +43003 -0
  183. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt +445 -0
  184. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt +36 -0
  185. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt +44 -0
  186. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/Logins.txt +71 -0
  187. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/cfm.txt +294 -0
  188. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/html.txt +295 -0
  189. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/jsp.txt +294 -0
  190. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/php.txt +294 -0
  191. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt +294 -0
  192. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt +294 -0
  193. data/gems/server/lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt +47 -0
  194. data/gems/server/lib/itsi/server/config/known_paths/php/PHP.txt +30 -0
  195. data/gems/server/lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt +5 -0
  196. data/gems/server/lib/itsi/server/config/known_paths/proxy-conf.txt +31 -0
  197. data/gems/server/lib/itsi/server/config/known_paths/tftp.txt +79 -0
  198. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt +86 -0
  199. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt +16 -0
  200. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt +101 -0
  201. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt +47 -0
  202. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt +16 -0
  203. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt +111 -0
  204. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt +390 -0
  205. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt +38 -0
  206. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt +239 -0
  207. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt +2 -0
  208. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt +578 -0
  209. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt +187 -0
  210. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt +5 -0
  211. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt +13 -0
  212. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt +3 -0
  213. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt +1937 -0
  214. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt +206 -0
  215. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt +18 -0
  216. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt +60 -0
  217. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt +192 -0
  218. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/README.md +6 -0
  219. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt +121 -0
  220. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt +463 -0
  221. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt +1707 -0
  222. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt +19 -0
  223. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt +51 -0
  224. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt +35 -0
  225. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt +73 -0
  226. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt +160 -0
  227. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt +366 -0
  228. data/gems/server/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt +30 -0
  229. data/gems/server/lib/itsi/server/config/known_paths.rb +20 -0
  230. data/gems/server/lib/itsi/server/config/middleware/_index.md +56 -0
  231. data/gems/server/lib/itsi/server/config/middleware/allow_list.md +46 -0
  232. data/gems/server/lib/itsi/server/config/middleware/allow_list.rb +42 -0
  233. data/gems/server/lib/itsi/server/config/middleware/auth_api_key.md +90 -0
  234. data/gems/server/lib/itsi/server/config/middleware/auth_api_key.rb +51 -0
  235. data/gems/server/lib/itsi/server/config/middleware/auth_basic.md +45 -0
  236. data/gems/server/lib/itsi/server/config/middleware/auth_basic.rb +44 -0
  237. data/gems/server/lib/itsi/server/config/middleware/auth_jwt.md +82 -0
  238. data/gems/server/lib/itsi/server/config/middleware/auth_jwt.rb +38 -0
  239. data/gems/server/lib/itsi/server/config/middleware/cache_control.md +78 -0
  240. data/gems/server/lib/itsi/server/config/middleware/cache_control.rb +45 -0
  241. data/gems/server/lib/itsi/server/config/middleware/cidr_to_regex.rb +50 -0
  242. data/gems/server/lib/itsi/server/config/middleware/compression.md +50 -0
  243. data/gems/server/lib/itsi/server/config/middleware/compression.rb +37 -0
  244. data/gems/server/lib/itsi/server/config/middleware/cors.md +93 -0
  245. data/gems/server/lib/itsi/server/config/middleware/cors.rb +32 -0
  246. data/gems/server/lib/itsi/server/config/middleware/csp.md +37 -0
  247. data/gems/server/lib/itsi/server/config/middleware/csp.rb +44 -0
  248. data/gems/server/lib/itsi/server/config/middleware/deny_list.md +45 -0
  249. data/gems/server/lib/itsi/server/config/middleware/deny_list.rb +42 -0
  250. data/gems/server/lib/itsi/server/config/middleware/endpoint/_index.md +159 -0
  251. data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.md +186 -0
  252. data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.rb +33 -0
  253. data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.md +12 -0
  254. data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.rb +42 -0
  255. data/gems/server/lib/itsi/server/config/middleware/endpoint/endpoint.rb +99 -0
  256. data/gems/server/lib/itsi/server/config/middleware/endpoint/get.md +12 -0
  257. data/gems/server/lib/itsi/server/config/middleware/endpoint/get.rb +42 -0
  258. data/gems/server/lib/itsi/server/config/middleware/endpoint/http_request.md +44 -0
  259. data/gems/server/lib/itsi/server/config/middleware/endpoint/http_response.md +39 -0
  260. data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.md +12 -0
  261. data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.rb +42 -0
  262. data/gems/server/lib/itsi/server/config/middleware/endpoint/post.md +12 -0
  263. data/gems/server/lib/itsi/server/config/middleware/endpoint/post.rb +42 -0
  264. data/gems/server/lib/itsi/server/config/middleware/endpoint/put.md +12 -0
  265. data/gems/server/lib/itsi/server/config/middleware/endpoint/put.rb +42 -0
  266. data/gems/server/lib/itsi/server/config/middleware/endpoint/schemas.md +122 -0
  267. data/gems/server/lib/itsi/server/config/middleware/error_response.md +61 -0
  268. data/gems/server/lib/itsi/server/config/middleware/error_response.rb +36 -0
  269. data/gems/server/lib/itsi/server/config/middleware/etag.md +59 -0
  270. data/gems/server/lib/itsi/server/config/middleware/etag.rb +27 -0
  271. data/gems/server/lib/itsi/server/config/middleware/grpc.md +172 -0
  272. data/gems/server/lib/itsi/server/config/middleware/grpc.rb +54 -0
  273. data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.md +124 -0
  274. data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.rb +61 -0
  275. data/gems/server/lib/itsi/server/config/middleware/location.md +107 -0
  276. data/gems/server/lib/itsi/server/config/middleware/location.rb +99 -0
  277. data/gems/server/lib/itsi/server/config/middleware/log_requests.md +65 -0
  278. data/gems/server/lib/itsi/server/config/middleware/log_requests.rb +31 -0
  279. data/gems/server/lib/itsi/server/config/middleware/max_body.md +18 -0
  280. data/gems/server/lib/itsi/server/config/middleware/max_body.rb +21 -0
  281. data/gems/server/lib/itsi/server/config/middleware/proxy.md +62 -0
  282. data/gems/server/lib/itsi/server/config/middleware/proxy.rb +41 -0
  283. data/gems/server/lib/itsi/server/config/middleware/rackup_file.md +54 -0
  284. data/gems/server/lib/itsi/server/config/middleware/rackup_file.rb +44 -0
  285. data/gems/server/lib/itsi/server/config/middleware/rate_limit.md +126 -0
  286. data/gems/server/lib/itsi/server/config/middleware/rate_limit.rb +34 -0
  287. data/gems/server/lib/itsi/server/config/middleware/rate_limit_store.rb +25 -0
  288. data/gems/server/lib/itsi/server/config/middleware/redirect.md +55 -0
  289. data/gems/server/lib/itsi/server/config/middleware/redirect.rb +25 -0
  290. data/gems/server/lib/itsi/server/config/middleware/request_headers.md +34 -0
  291. data/gems/server/lib/itsi/server/config/middleware/request_headers.rb +24 -0
  292. data/gems/server/lib/itsi/server/config/middleware/response_headers.md +33 -0
  293. data/gems/server/lib/itsi/server/config/middleware/response_headers.rb +25 -0
  294. data/gems/server/lib/itsi/server/config/middleware/run.md +60 -0
  295. data/gems/server/lib/itsi/server/config/middleware/run.rb +43 -0
  296. data/gems/server/lib/itsi/server/config/middleware/static_assets.md +73 -0
  297. data/gems/server/lib/itsi/server/config/middleware/static_assets.rb +87 -0
  298. data/gems/server/lib/itsi/server/config/middleware/static_response.md +44 -0
  299. data/gems/server/lib/itsi/server/config/middleware/static_response.rb +29 -0
  300. data/gems/server/lib/itsi/server/config/middleware/string_rewrite.md +67 -0
  301. data/gems/server/lib/itsi/server/config/middleware/token_source.rb +32 -0
  302. data/gems/server/lib/itsi/server/config/middleware.rb +13 -0
  303. data/gems/server/lib/itsi/server/config/option.rb +14 -0
  304. data/gems/server/lib/itsi/server/config/options/_index.md +37 -0
  305. data/gems/server/lib/itsi/server/config/options/auto_reload_config.md +13 -0
  306. data/gems/server/lib/itsi/server/config/options/auto_reload_config.rb +41 -0
  307. data/gems/server/lib/itsi/server/config/options/bind.md +71 -0
  308. data/gems/server/lib/itsi/server/config/options/bind.rb +26 -0
  309. data/gems/server/lib/itsi/server/config/options/certificates.md +65 -0
  310. data/gems/server/lib/itsi/server/config/options/daemonize.md +14 -0
  311. data/gems/server/lib/itsi/server/config/options/daemonize.rb +19 -0
  312. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.md +34 -0
  313. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.rb +21 -0
  314. data/gems/server/lib/itsi/server/config/options/header_read_timeout.md +17 -0
  315. data/gems/server/lib/itsi/server/config/options/header_read_timeout.rb +19 -0
  316. data/gems/server/lib/itsi/server/config/options/hooks/_index.md +11 -0
  317. data/gems/server/lib/itsi/server/config/options/hooks/after_fork.md +13 -0
  318. data/gems/server/lib/itsi/server/config/options/hooks/after_fork.rb +28 -0
  319. data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.md +14 -0
  320. data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.rb +28 -0
  321. data/gems/server/lib/itsi/server/config/options/hooks/after_start.md +12 -0
  322. data/gems/server/lib/itsi/server/config/options/hooks/after_start.rb +28 -0
  323. data/gems/server/lib/itsi/server/config/options/hooks/before_fork.md +13 -0
  324. data/gems/server/lib/itsi/server/config/options/hooks/before_fork.rb +28 -0
  325. data/gems/server/lib/itsi/server/config/options/hooks/before_restart.md +12 -0
  326. data/gems/server/lib/itsi/server/config/options/hooks/before_restart.rb +28 -0
  327. data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.md +12 -0
  328. data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.rb +28 -0
  329. data/gems/server/lib/itsi/server/config/options/include.md +20 -0
  330. data/gems/server/lib/itsi/server/config/options/include.rb +36 -0
  331. data/gems/server/lib/itsi/server/config/options/listen_backlog.md +11 -0
  332. data/gems/server/lib/itsi/server/config/options/listen_backlog.rb +19 -0
  333. data/gems/server/lib/itsi/server/config/options/log_format.md +18 -0
  334. data/gems/server/lib/itsi/server/config/options/log_format.rb +19 -0
  335. data/gems/server/lib/itsi/server/config/options/log_level.md +34 -0
  336. data/gems/server/lib/itsi/server/config/options/log_level.rb +20 -0
  337. data/gems/server/lib/itsi/server/config/options/log_target.md +38 -0
  338. data/gems/server/lib/itsi/server/config/options/log_target.rb +19 -0
  339. data/gems/server/lib/itsi/server/config/options/log_target_filters.md +17 -0
  340. data/gems/server/lib/itsi/server/config/options/log_target_filters.rb +19 -0
  341. data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.md +27 -0
  342. data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.rb +24 -0
  343. data/gems/server/lib/itsi/server/config/options/nodelay.md +16 -0
  344. data/gems/server/lib/itsi/server/config/options/nodelay.rb +19 -0
  345. data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.md +19 -0
  346. data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.rb +18 -0
  347. data/gems/server/lib/itsi/server/config/options/pin_worker_cores.md +17 -0
  348. data/gems/server/lib/itsi/server/config/options/pin_worker_cores.rb +19 -0
  349. data/gems/server/lib/itsi/server/config/options/preload.md +21 -0
  350. data/gems/server/lib/itsi/server/config/options/preload.rb +18 -0
  351. data/gems/server/lib/itsi/server/config/options/recv_buffer_size.md +15 -0
  352. data/gems/server/lib/itsi/server/config/options/recv_buffer_size.rb +19 -0
  353. data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.md +21 -0
  354. data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.rb +30 -0
  355. data/gems/server/lib/itsi/server/config/options/request_timeout.md +23 -0
  356. data/gems/server/lib/itsi/server/config/options/request_timeout.rb +19 -0
  357. data/gems/server/lib/itsi/server/config/options/reuse_address.md +16 -0
  358. data/gems/server/lib/itsi/server/config/options/reuse_address.rb +19 -0
  359. data/gems/server/lib/itsi/server/config/options/reuse_port.md +16 -0
  360. data/gems/server/lib/itsi/server/config/options/reuse_port.rb +19 -0
  361. data/gems/server/lib/itsi/server/config/options/scheduler_threads.md +34 -0
  362. data/gems/server/lib/itsi/server/config/options/scheduler_threads.rb +17 -0
  363. data/gems/server/lib/itsi/server/config/options/shutdown_timeout.md +17 -0
  364. data/gems/server/lib/itsi/server/config/options/shutdown_timeout.rb +19 -0
  365. data/gems/server/lib/itsi/server/config/options/stream_body.md +32 -0
  366. data/gems/server/lib/itsi/server/config/options/stream_body.rb +18 -0
  367. data/gems/server/lib/itsi/server/config/options/threads.md +44 -0
  368. data/gems/server/lib/itsi/server/config/options/threads.rb +17 -0
  369. data/gems/server/lib/itsi/server/config/options/watch.md +16 -0
  370. data/gems/server/lib/itsi/server/config/options/watch.rb +28 -0
  371. data/gems/server/lib/itsi/server/config/options/worker_memory_limit.md +22 -0
  372. data/gems/server/lib/itsi/server/config/options/worker_memory_limit.rb +18 -0
  373. data/gems/server/lib/itsi/server/config/options/workers.md +42 -0
  374. data/gems/server/lib/itsi/server/config/options/workers.rb +17 -0
  375. data/gems/server/lib/itsi/server/config/typed_struct.rb +242 -0
  376. data/gems/server/lib/itsi/server/config.rb +134 -11
  377. data/gems/server/lib/itsi/server/default_config/Itsi.rb +3 -3
  378. data/gems/server/lib/itsi/server/grpc/grpc_call.rb +1 -1
  379. data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +11 -4
  380. data/gems/server/lib/itsi/server/rack/handler/itsi.rb +3 -3
  381. data/gems/server/lib/itsi/server/route_tester.rb +58 -8
  382. data/gems/server/lib/itsi/server/signal_trap.rb +5 -1
  383. data/gems/server/lib/itsi/server/typed_handlers/param_parser.rb +14 -18
  384. data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +6 -5
  385. data/gems/server/lib/itsi/server/typed_handlers.rb +12 -4
  386. data/gems/server/lib/itsi/server/version.rb +1 -1
  387. data/gems/server/lib/itsi/server.rb +122 -17
  388. data/gems/server/lib/ruby_lsp/itsi/addon.rb +66 -48
  389. data/gems/server/test/helpers/test_helper.rb +130 -11
  390. data/gems/server/test/middleware/allow_list.rb +128 -0
  391. data/gems/server/test/middleware/auth_api_key.rb +141 -0
  392. data/gems/server/test/middleware/auth_basic.rb +91 -0
  393. data/gems/server/test/middleware/auth_jwt.rb +214 -0
  394. data/gems/server/test/middleware/cache_control.rb +82 -0
  395. data/gems/server/test/middleware/cidr_to_regex.rb +46 -0
  396. data/gems/server/test/middleware/compression.rb +89 -0
  397. data/gems/server/test/middleware/cors.rb +113 -0
  398. data/gems/server/test/middleware/csp.rb +62 -0
  399. data/gems/server/test/middleware/deny_list.rb +131 -0
  400. data/gems/server/test/middleware/endpoint.rb +300 -0
  401. data/gems/server/test/middleware/etag.rb +75 -0
  402. data/gems/server/test/middleware/grpc/grpc.rb +158 -0
  403. data/gems/server/test/middleware/grpc/test_service.proto +32 -0
  404. data/gems/server/test/middleware/grpc/test_service_impl.rb +28 -0
  405. data/gems/server/test/middleware/grpc/test_service_pb.rb +18 -0
  406. data/gems/server/test/middleware/grpc/test_service_services_pb.rb +30 -0
  407. data/gems/server/test/middleware/header_interpolation.rb +35 -0
  408. data/gems/server/test/middleware/intrusion_protection.rb +259 -0
  409. data/gems/server/test/middleware/location.rb +220 -0
  410. data/gems/server/test/middleware/max_body.rb +20 -0
  411. data/gems/server/test/middleware/proxy.rb +415 -0
  412. data/gems/server/test/middleware/rate_limit.rb +211 -0
  413. data/gems/server/test/middleware/redirect.rb +85 -0
  414. data/gems/server/test/middleware/request_headers.rb +50 -0
  415. data/gems/server/test/middleware/response_headers.rb +50 -0
  416. data/gems/server/test/middleware/static_assets.rb +374 -0
  417. data/gems/server/test/middleware/static_response.rb +56 -0
  418. data/gems/server/test/middleware/string_rewrite.rb +112 -0
  419. data/gems/server/test/middleware/test_log_requests.rb +17 -0
  420. data/gems/server/test/options/bind.rb +47 -0
  421. data/gems/server/test/options/header_read_timeout.rb +23 -0
  422. data/gems/server/test/options/test_request_timeout.rb +16 -0
  423. data/gems/server/test/options/test_threads.rb +15 -0
  424. data/gems/server/test/options/test_workers.rb +16 -0
  425. data/gems/server/test/{test_itsi_server.rb → rack/test_rack_server.rb} +82 -95
  426. data/grpc_test/Itsi.rb +11 -0
  427. data/grpc_test/echo.proto +14 -0
  428. data/grpc_test/echo_pb.rb +16 -0
  429. data/grpc_test/echo_service_impl.rb +8 -0
  430. data/{sandbox/itsi_file/echo_service_nonitsi → grpc_test}/echo_services_pb.rb +0 -7
  431. data/itsi-scheduler-100.png +0 -0
  432. data/itsi-server-100.png +0 -0
  433. data/lib/itsi/version.rb +1 -1
  434. data/tasks.txt +17 -66
  435. metadata +352 -217
  436. data/crates/_index.md +0 -0
  437. data/crates/itsi_server/src/ruby_types/README.md +0 -21
  438. data/crates/itsi_server/test.md +0 -14
  439. data/docs/Itsi.rb +0 -17
  440. data/docs/content/about.md +0 -6
  441. data/docs/content/docs/_index.md +0 -18
  442. data/docs/content/docs/first-page.md +0 -9
  443. data/docs/content/docs/folder/_index.md +0 -10
  444. data/docs/content/docs/folder/leaf.md +0 -7
  445. data/foo/Itsi.rb +0 -122
  446. data/gems/_index.md +0 -18
  447. data/gems/scheduler/CHANGELOG.md +0 -5
  448. data/gems/scheduler/CODE_OF_CONDUCT.md +0 -139
  449. data/gems/scheduler/LICENSE.txt +0 -21
  450. data/gems/scheduler/_index.md +0 -7
  451. data/gems/server/CHANGELOG.md +0 -10
  452. data/gems/server/CODE_OF_CONDUCT.md +0 -139
  453. data/gems/server/LICENSE.txt +0 -21
  454. data/gems/server/_index.md +0 -6
  455. data/gems/server/lib/itsi/server/default_config/Itsi-rackup.rb +0 -119
  456. data/sandbox/README.md +0 -5
  457. data/sandbox/deploy/main.tf +0 -238
  458. data/sandbox/deploy/outputs.tf +0 -4
  459. data/sandbox/deploy/vars.tf +0 -11
  460. data/sandbox/falcon_benchmark/Gemfile +0 -10
  461. data/sandbox/falcon_benchmark/Gemfile.lock +0 -140
  462. data/sandbox/falcon_benchmark/config.ru +0 -54
  463. data/sandbox/itsi_file/Gemfile +0 -13
  464. data/sandbox/itsi_file/Gemfile.lock +0 -111
  465. data/sandbox/itsi_file/Itsi.rb +0 -474
  466. data/sandbox/itsi_file/call.json +0 -1
  467. data/sandbox/itsi_file/echo_client/Gemfile +0 -10
  468. data/sandbox/itsi_file/echo_client/Gemfile.lock +0 -27
  469. data/sandbox/itsi_file/echo_client/README.md +0 -95
  470. data/sandbox/itsi_file/echo_client/echo_client.rb +0 -164
  471. data/sandbox/itsi_file/echo_client/gen_proto.sh +0 -17
  472. data/sandbox/itsi_file/echo_client/lib/echo_pb.rb +0 -16
  473. data/sandbox/itsi_file/echo_client/lib/echo_services_pb.rb +0 -29
  474. data/sandbox/itsi_file/echo_client/run_client.rb +0 -64
  475. data/sandbox/itsi_file/echo_client/test_compressions.sh +0 -20
  476. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile +0 -10
  477. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile.lock +0 -79
  478. data/sandbox/itsi_file/echo_service_nonitsi/echo.proto +0 -26
  479. data/sandbox/itsi_file/echo_service_nonitsi/echo_pb.rb +0 -16
  480. data/sandbox/itsi_file/echo_service_nonitsi/server.rb +0 -52
  481. data/sandbox/itsi_file/error.html +0 -2
  482. data/sandbox/itsi_file/organisations_controller.rb +0 -20
  483. data/sandbox/itsi_file/public/assets/image.png +0 -0
  484. data/sandbox/itsi_sandbox_async/Gemfile +0 -10
  485. data/sandbox/itsi_sandbox_async/Gemfile.lock +0 -69
  486. data/sandbox/itsi_sandbox_async/config.ru +0 -9
  487. data/sandbox/itsi_sandbox_hanami/.env +0 -2
  488. data/sandbox/itsi_sandbox_hanami/.gitignore +0 -6
  489. data/sandbox/itsi_sandbox_hanami/.rspec +0 -1
  490. data/sandbox/itsi_sandbox_hanami/Gemfile +0 -49
  491. data/sandbox/itsi_sandbox_hanami/Gemfile.lock +0 -440
  492. data/sandbox/itsi_sandbox_hanami/Guardfile +0 -9
  493. data/sandbox/itsi_sandbox_hanami/Procfile.dev +0 -2
  494. data/sandbox/itsi_sandbox_hanami/README.md +0 -1
  495. data/sandbox/itsi_sandbox_hanami/Rakefile +0 -3
  496. data/sandbox/itsi_sandbox_hanami/app/action.rb +0 -12
  497. data/sandbox/itsi_sandbox_hanami/app/actions/.keep +0 -0
  498. data/sandbox/itsi_sandbox_hanami/app/assets/css/app.css +0 -5
  499. data/sandbox/itsi_sandbox_hanami/app/assets/images/favicon.ico +0 -0
  500. data/sandbox/itsi_sandbox_hanami/app/assets/js/app.js +0 -1
  501. data/sandbox/itsi_sandbox_hanami/app/db/relation.rb +0 -10
  502. data/sandbox/itsi_sandbox_hanami/app/db/repo.rb +0 -10
  503. data/sandbox/itsi_sandbox_hanami/app/db/struct.rb +0 -10
  504. data/sandbox/itsi_sandbox_hanami/app/operation.rb +0 -9
  505. data/sandbox/itsi_sandbox_hanami/app/relations/.keep +0 -0
  506. data/sandbox/itsi_sandbox_hanami/app/repos/.keep +0 -0
  507. data/sandbox/itsi_sandbox_hanami/app/structs/.keep +0 -0
  508. data/sandbox/itsi_sandbox_hanami/app/templates/layouts/app.html.erb +0 -14
  509. data/sandbox/itsi_sandbox_hanami/app/view.rb +0 -9
  510. data/sandbox/itsi_sandbox_hanami/app/views/helpers.rb +0 -10
  511. data/sandbox/itsi_sandbox_hanami/bin/dev +0 -8
  512. data/sandbox/itsi_sandbox_hanami/config/app.rb +0 -8
  513. data/sandbox/itsi_sandbox_hanami/config/assets.js +0 -16
  514. data/sandbox/itsi_sandbox_hanami/config/db/migrate/.keep +0 -0
  515. data/sandbox/itsi_sandbox_hanami/config/db/seeds.rb +0 -15
  516. data/sandbox/itsi_sandbox_hanami/config/puma.rb +0 -47
  517. data/sandbox/itsi_sandbox_hanami/config/routes.rb +0 -7
  518. data/sandbox/itsi_sandbox_hanami/config/settings.rb +0 -9
  519. data/sandbox/itsi_sandbox_hanami/config.ru +0 -5
  520. data/sandbox/itsi_sandbox_hanami/db/.keep +0 -0
  521. data/sandbox/itsi_sandbox_hanami/lib/itsi_hanami/types.rb +0 -11
  522. data/sandbox/itsi_sandbox_hanami/lib/tasks/.keep +0 -0
  523. data/sandbox/itsi_sandbox_hanami/package-lock.json +0 -946
  524. data/sandbox/itsi_sandbox_hanami/package.json +0 -8
  525. data/sandbox/itsi_sandbox_hanami/spec/requests/root_spec.rb +0 -11
  526. data/sandbox/itsi_sandbox_hanami/spec/spec_helper.rb +0 -9
  527. data/sandbox/itsi_sandbox_hanami/spec/support/db/cleaning.rb +0 -42
  528. data/sandbox/itsi_sandbox_hanami/spec/support/db.rb +0 -10
  529. data/sandbox/itsi_sandbox_hanami/spec/support/features.rb +0 -5
  530. data/sandbox/itsi_sandbox_hanami/spec/support/operations.rb +0 -8
  531. data/sandbox/itsi_sandbox_hanami/spec/support/requests.rb +0 -13
  532. data/sandbox/itsi_sandbox_hanami/spec/support/rspec.rb +0 -61
  533. data/sandbox/itsi_sandbox_rack/Gemfile +0 -17
  534. data/sandbox/itsi_sandbox_rack/Gemfile.lock +0 -153
  535. data/sandbox/itsi_sandbox_rack/config.ru +0 -5
  536. data/sandbox/itsi_sandbox_rack_lint/Gemfile +0 -7
  537. data/sandbox/itsi_sandbox_rack_lint/Gemfile.lock +0 -27
  538. data/sandbox/itsi_sandbox_rack_lint/config.ru +0 -3
  539. data/sandbox/itsi_sandbox_rails/.dockerignore +0 -48
  540. data/sandbox/itsi_sandbox_rails/.gitattributes +0 -9
  541. data/sandbox/itsi_sandbox_rails/.github/dependabot.yml +0 -12
  542. data/sandbox/itsi_sandbox_rails/.github/workflows/ci.yml +0 -90
  543. data/sandbox/itsi_sandbox_rails/.gitignore +0 -35
  544. data/sandbox/itsi_sandbox_rails/.rubocop.yml +0 -8
  545. data/sandbox/itsi_sandbox_rails/.ruby-version +0 -1
  546. data/sandbox/itsi_sandbox_rails/Dockerfile +0 -69
  547. data/sandbox/itsi_sandbox_rails/Gemfile +0 -66
  548. data/sandbox/itsi_sandbox_rails/Gemfile.lock +0 -429
  549. data/sandbox/itsi_sandbox_rails/README.md +0 -24
  550. data/sandbox/itsi_sandbox_rails/Rakefile +0 -6
  551. data/sandbox/itsi_sandbox_rails/app/assets/config/manifest.js +0 -4
  552. data/sandbox/itsi_sandbox_rails/app/assets/images/.keep +0 -0
  553. data/sandbox/itsi_sandbox_rails/app/assets/stylesheets/application.css +0 -15
  554. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/channel.rb +0 -4
  555. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/connection.rb +0 -4
  556. data/sandbox/itsi_sandbox_rails/app/controllers/application_controller.rb +0 -4
  557. data/sandbox/itsi_sandbox_rails/app/controllers/concerns/.keep +0 -0
  558. data/sandbox/itsi_sandbox_rails/app/controllers/home_controller.rb +0 -66
  559. data/sandbox/itsi_sandbox_rails/app/controllers/live_controller.rb +0 -40
  560. data/sandbox/itsi_sandbox_rails/app/controllers/uploads_controller.rb +0 -29
  561. data/sandbox/itsi_sandbox_rails/app/helpers/application_helper.rb +0 -2
  562. data/sandbox/itsi_sandbox_rails/app/javascript/application.js +0 -3
  563. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/application.js +0 -9
  564. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/hello_controller.js +0 -7
  565. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/index.js +0 -4
  566. data/sandbox/itsi_sandbox_rails/app/jobs/application_job.rb +0 -7
  567. data/sandbox/itsi_sandbox_rails/app/mailers/application_mailer.rb +0 -4
  568. data/sandbox/itsi_sandbox_rails/app/models/application_record.rb +0 -3
  569. data/sandbox/itsi_sandbox_rails/app/models/concerns/.keep +0 -0
  570. data/sandbox/itsi_sandbox_rails/app/models/post.rb +0 -2
  571. data/sandbox/itsi_sandbox_rails/app/views/layouts/application.html.erb +0 -23
  572. data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.html.erb +0 -13
  573. data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.text.erb +0 -1
  574. data/sandbox/itsi_sandbox_rails/app/views/pwa/manifest.json.erb +0 -22
  575. data/sandbox/itsi_sandbox_rails/app/views/pwa/service-worker.js +0 -26
  576. data/sandbox/itsi_sandbox_rails/bin/brakeman +0 -7
  577. data/sandbox/itsi_sandbox_rails/bin/bundle +0 -109
  578. data/sandbox/itsi_sandbox_rails/bin/docker-entrypoint +0 -13
  579. data/sandbox/itsi_sandbox_rails/bin/importmap +0 -4
  580. data/sandbox/itsi_sandbox_rails/bin/rails +0 -4
  581. data/sandbox/itsi_sandbox_rails/bin/rake +0 -4
  582. data/sandbox/itsi_sandbox_rails/bin/rubocop +0 -8
  583. data/sandbox/itsi_sandbox_rails/bin/setup +0 -37
  584. data/sandbox/itsi_sandbox_rails/config/application.rb +0 -27
  585. data/sandbox/itsi_sandbox_rails/config/boot.rb +0 -4
  586. data/sandbox/itsi_sandbox_rails/config/cable.yml +0 -10
  587. data/sandbox/itsi_sandbox_rails/config/credentials.yml.enc +0 -1
  588. data/sandbox/itsi_sandbox_rails/config/database.yml +0 -30
  589. data/sandbox/itsi_sandbox_rails/config/environment.rb +0 -5
  590. data/sandbox/itsi_sandbox_rails/config/environments/development.rb +0 -82
  591. data/sandbox/itsi_sandbox_rails/config/environments/production.rb +0 -106
  592. data/sandbox/itsi_sandbox_rails/config/environments/test.rb +0 -67
  593. data/sandbox/itsi_sandbox_rails/config/importmap.rb +0 -7
  594. data/sandbox/itsi_sandbox_rails/config/initializers/assets.rb +0 -12
  595. data/sandbox/itsi_sandbox_rails/config/initializers/content_security_policy.rb +0 -25
  596. data/sandbox/itsi_sandbox_rails/config/initializers/filter_parameter_logging.rb +0 -8
  597. data/sandbox/itsi_sandbox_rails/config/initializers/inflections.rb +0 -16
  598. data/sandbox/itsi_sandbox_rails/config/initializers/permissions_policy.rb +0 -13
  599. data/sandbox/itsi_sandbox_rails/config/locales/en.yml +0 -31
  600. data/sandbox/itsi_sandbox_rails/config/puma.rb +0 -34
  601. data/sandbox/itsi_sandbox_rails/config/routes.rb +0 -23
  602. data/sandbox/itsi_sandbox_rails/config/storage.yml +0 -34
  603. data/sandbox/itsi_sandbox_rails/config.ru +0 -6
  604. data/sandbox/itsi_sandbox_rails/db/migrate/20250301041554_create_posts.rb +0 -10
  605. data/sandbox/itsi_sandbox_rails/db/schema.rb +0 -23
  606. data/sandbox/itsi_sandbox_rails/db/seeds.rb +0 -9
  607. data/sandbox/itsi_sandbox_rails/lib/assets/.keep +0 -0
  608. data/sandbox/itsi_sandbox_rails/lib/tasks/.keep +0 -0
  609. data/sandbox/itsi_sandbox_rails/log/.keep +0 -0
  610. data/sandbox/itsi_sandbox_rails/public/404.html +0 -67
  611. data/sandbox/itsi_sandbox_rails/public/406-unsupported-browser.html +0 -66
  612. data/sandbox/itsi_sandbox_rails/public/422.html +0 -67
  613. data/sandbox/itsi_sandbox_rails/public/500.html +0 -66
  614. data/sandbox/itsi_sandbox_rails/public/icon.png +0 -0
  615. data/sandbox/itsi_sandbox_rails/public/icon.svg +0 -3
  616. data/sandbox/itsi_sandbox_rails/public/robots.txt +0 -1
  617. data/sandbox/itsi_sandbox_rails/storage/.keep +0 -0
  618. data/sandbox/itsi_sandbox_rails/test/application_system_test_case.rb +0 -5
  619. data/sandbox/itsi_sandbox_rails/test/channels/application_cable/connection_test.rb +0 -13
  620. data/sandbox/itsi_sandbox_rails/test/controllers/.keep +0 -0
  621. data/sandbox/itsi_sandbox_rails/test/fixtures/files/.keep +0 -0
  622. data/sandbox/itsi_sandbox_rails/test/helpers/.keep +0 -0
  623. data/sandbox/itsi_sandbox_rails/test/integration/.keep +0 -0
  624. data/sandbox/itsi_sandbox_rails/test/mailers/.keep +0 -0
  625. data/sandbox/itsi_sandbox_rails/test/models/.keep +0 -0
  626. data/sandbox/itsi_sandbox_rails/test/system/.keep +0 -0
  627. data/sandbox/itsi_sandbox_rails/test/test_helper.rb +0 -15
  628. data/sandbox/itsi_sandbox_rails/tmp/.keep +0 -0
  629. data/sandbox/itsi_sandbox_rails/tmp/pids/.keep +0 -0
  630. data/sandbox/itsi_sandbox_rails/tmp/storage/.keep +0 -0
  631. data/sandbox/itsi_sandbox_rails/vendor/.keep +0 -0
  632. data/sandbox/itsi_sandbox_rails/vendor/javascript/.keep +0 -0
  633. data/sandbox/itsi_sandbox_roda/Gemfile +0 -5
  634. data/sandbox/itsi_sandbox_roda/Gemfile.lock +0 -37
  635. data/sandbox/itsi_sandbox_roda/config.ru +0 -39
  636. data/sandbox/itsi_sinatra/Gemfile +0 -9
  637. data/sandbox/itsi_sinatra/Gemfile.lock +0 -81
  638. data/sandbox/itsi_sinatra/app.rb +0 -8
  639. data/sandbox/pebble/docker-compose.yml +0 -11
  640. data/sandbox/static_files/.env +0 -1
  641. data/sandbox/static_files/404.html +0 -25
  642. data/sandbox/static_files/_DSC0102.NEF.jpg +0 -0
  643. data/sandbox/static_files/about.html +0 -68
  644. data/sandbox/static_files/tiny.html +0 -1
  645. data/sandbox/static_files/writebook.zip +0 -0
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: Configuration
3
+ type: docs
4
+ weight: 3
5
+ next: options/
6
+ prev: getting_started/
7
+ ---
8
+
9
+ ## Itsi.rb
10
+ To realize the full power of all of Itsi's features, you'll typically create a configuration file
11
+ (usually named `Itsi.rb`) at the root of your project.<br/>
12
+ If you're ready to get stuck in and learn all about what Itsi has to offer, use
13
+ `itsi init` to generate a fresh configuration file and read through the following [options](/options/) and [middleware](/middleware/) sections.
14
+
15
+
16
+ ## Out-of-the-box
17
+ If you prefer a more gradual introduction, Itsi provides several out-of-the box capabilities that you can take advantage of immediately, *without* needing to create a dedicated configuration file.
18
+
19
+
20
+
21
+ ## Run Rack Applications
22
+ Itsi will automatically host your Rack application if you launch it in a directory with a `config.ru` file.
23
+ This means, it's a drop-in server replacement (and potentially a free performance boost) for your favorite `Rails`, `Hanami`, or `Sinatra` applications.
24
+
25
+ To get started just run
26
+ ```ruby
27
+ itsi # or
28
+ bundle exec itsi
29
+ ```
30
+
31
+ There's also a Rails adapter allowing you to add it to your Gemfile and launch it using the `rails server` command.
32
+
33
+ ```ruby
34
+ rails server -U itsi
35
+ ```
36
+ {{< callout type="info" >}}
37
+ Note that `rails server -U itsi` runs Itsi with an intentionally minimal footprint, specifically for development purposes. To take full advantage of Itsi's concurrency features,
38
+ it's advised you tweak these inside a dedicated `Itsi.rb` file.
39
+ {{< /callout >}}
40
+
41
+
42
+
43
+ ## Host static files
44
+ You can run Itsi as a fully fledged, static file server.
45
+ With a single command, Itsi will start an HTTP server to serve files from the current directory.
46
+ To get started just run.
47
+ ```ruby
48
+ itsi static # or
49
+ bundle exec itsi static
50
+ ```
51
+
52
+ > This starts a server with a minimal set of defaults. Look at the [`static_assets`](/middleware/static_assets) middleware page to learn more about how to configure Itsi for full control over static file server capabilities.
53
+
54
+ ## Tweak your Itsi server
55
+ Several of the most common features of Itsi are configurable using command line flags.
56
+ Run `itsi --help` to see all available options. If you apply both command line flags and an `Itsi.rb` config file, the command line flags will take precedence.
57
+
58
+ ```bash
59
+ ❯ itsi --help
60
+ Usage: itsi [COMMAND] [options]
61
+ -C, --config CONFIG_FILE Itsi Configuration file to use (default: Itsi.rb)
62
+ -w, --workers WORKERS Number of workers
63
+ -d, --daemonize Run the process as a daemon
64
+ -t, --threads THREADS Number of threads (default: 1)
65
+ --[no-]multithreaded-reactor Use a multithreaded reactor
66
+ -r, --rackup_file FILE Rackup file to use (default: config.ru)
67
+ --worker-memory-limit MEMORY_LIMIT
68
+ Memory limit for each worker (default: None). If this limit is breached the worker is gracefully restarted
69
+ -f [CLASS_NAME], Scheduler class to use (default: nil). Provide blank or true to use Itsi::Scheduler, or a classname to use an alternative scheduler
70
+ --fiber_scheduler
71
+ --preload [true, false, :bundle_group_name]
72
+ Toggle preloading the application
73
+ -b, --bind BIND Bind address (default: http://0.0.0.0:3000). You can specify this flag multiple times to bind to multiple addresses.
74
+ -c, --cert_path CERT_PATH Path to the SSL certificate file (must follow a --bind option). You can specify this flag multiple times.
75
+ -k, --key_path KEY_PATH Path to the SSL key file (must follow a --bind option). You can specify this flag multiple times.
76
+ --shutdown_timeout SHUTDOWN_TIMEOUT
77
+ Graceful timeout period before forcing workers to shutdown
78
+ --stream-body Stream body frames (default: false for best compatibility)
79
+ -h, --help Show this help message
80
+ --reexec PARAMS Reexec the server with the given parameters
81
+ --listeners LISTENERS Listeners for reexec
82
+ --passfile PASSFILE Passfile
83
+ --algorithm ALGORITHM Algorithm for password hashing
84
+ COMMAND:
85
+ init - Initialize a new Itsi.rb server configuration file
86
+ status - Show the status of the server
87
+ start - Start the Itsi server
88
+ serve - Start the Itsi server
89
+ stop - Stop the server
90
+ reload - Reload the server
91
+ restart - Restart the server
92
+ add_worker - Add a new worker to the server cluster
93
+ remove_worker - Remove a worker from the server cluster
94
+ test - Test config file validity
95
+ routes - Print the routes of the server
96
+ passfile - Manage hashed users and passwords in a passfile (like .htpasswd). [add, echo, remove, list]
97
+ secret - Generate a new secret for use in a JWT verifier
98
+ test_route - Test which route a request will be routed to
99
+ static - Serve static assets in the given directory
100
+
101
+ ```
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: Contact
3
+ type: docs
4
+ sidebar:
5
+ exclude: true
6
+ ---
7
+ <img src="../itsi-server-100.png" alt="asd" width="80px" style="display: block; margin-left: auto; margin-right: auto;">
8
+
9
+ * GitHub: [@wouterken](https://github.com/wouterken/)
10
+ * Email: [wc@pico.net.nz](mailto:wc@pico.net.nz)
11
+
12
+ For general inquiries, please feel free to contact me via email at wc@pico.net.nz.
13
+
14
+ For issues and bugs, please open an issue on GitHub at https://github.com/wouterken/itsi/issues.
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: FAQs
3
+ type: docs
4
+ prev: middleware/
5
+ next: utilities/
6
+ ---
7
+
8
+ {{% details title="Is it just for Ruby applications?" closed="true" %}}
9
+ **No!** While one of Itsi's goals is to be the most frictionless way to get Ruby onto the web, it stands alone as a powerful reverse Proxy, static File Server and API gateway.
10
+
11
+ You can have Itsi sit in front of *any* application that speaks HTTP and immediately benefit from security middleware, performance enhancements, and more.
12
+ You will need to write a little bit of Ruby, just to configure your Itsi server inside the `Itsi.rb` file. Who knows, maybe you'll learn to love it!
13
+ {{% /details %}}
14
+
15
+ {{% details title="What's it written in?" closed="true" %}}
16
+ The heart of Itsi is a Rust server, leaning *heavily* on [tokio](https://tokio.rs) and [hyper](https://hyper.rs) and many other fantastic and high performance Rust libraries.
17
+ Take a look at the [Cargo.toml](https://github.com/wouterken/itsi/blob/main/crates/itsi_server/Cargo.toml) to see them all.
18
+
19
+ This is exposed via a robust and ergonomic Ruby DSL.
20
+ {{% /details %}}
21
+
22
+ {{% details title="What license is it under?" closed="true" %}}
23
+ Itsi is an open source project licensed under the terms of the [LGPLv3](https://www.gnu.org/licenses/lgpl-3.0.en.html).
24
+
25
+ You can integrate and use Itsi in your projects—whether they are open source or proprietary—without any licensing fees or obligations, as long as you use Itsi in its unmodified form. However, if you modify Itsi’s source code and distribute the modified version, you are required to release your modifications under the same LGPLv3 license.
26
+
27
+ If these terms do not meet your project’s needs or if you require bespoke support and legal assurances, Itsi is also available under alternative commercial licensing options.
28
+ Please contact commercial@itsi.fyi for more information.
29
+ {{% /details %}}
@@ -0,0 +1,291 @@
1
+ ---
2
+ title: Features
3
+ type: docs
4
+ weight: 1
5
+ next: /getting_started
6
+ ---
7
+
8
+ Itsi bundles a slew of essential modern web features into a single, easy-to-use package.
9
+ Here's a list of the essentials.
10
+ Or jump straight in to <a target="_blank" href="tsi](/getting_started)">install</a> and <a target="_blank" href="t](/configuration)"> configure</a> for a deeper dive.
11
+
12
+ {{< callout >}}
13
+ You don't need to use all of the features listed below to benefit from Itsi. E.g.
14
+ * Use it *just* as fast, robust and memory efficient Rack server.
15
+ * Or as a reverse proxy that allows you to use plain-old Ruby for configuration.
16
+
17
+ Pick and choose **just** the features that make sense for you.
18
+
19
+ {{< /callout >}}
20
+
21
+
22
+ ## Web Essentials
23
+ {{% details title="Compression" closed="true" %}}
24
+ * `zstd`, `br`, `gzip` and `deflate` compression.
25
+ * Conditional compression based on route, content-type and body size
26
+ * Streaming compression
27
+ * Serve static precompressed files from the file-system
28
+ * gRPC compression (`zlib` and `gzip`)
29
+ * See <a target="_blank" href="/middleware/compression">compression</a>
30
+ {{% /details %}}
31
+
32
+ {{% details title="CORS" closed="true" %}}
33
+ * Full control over CORS rules on a location-by-location basis.
34
+ * See <a target="_blank" href="/middleware/cors">cors</a>
35
+ {{% /details %}}
36
+
37
+ {{% details title="ETag and Cache Control" closed="true" %}}
38
+ * Weak and Strong eTag support.
39
+ * `If-None-Match` and `If-Modified-Since` support.
40
+ * Automated etag generation for dynamic content (or forwarding of existing `etags` if present)
41
+ * See <a target="_blank" href="/middleware/etag">etag</a> and <a target="_blank" href="/middleware/cache_control">cache_control</a>
42
+ {{% /details %}}
43
+
44
+ {{% details title="Configurable Middleware" closed="true" %}}
45
+ * Expressive controls to apply middleware selectively on a request-by-request basis.
46
+ * Expressive matching based on route, content-type and body size, hostnames etc.
47
+ * A single Itsi process can support simultaneous running of several apps, each with specialized configuration.
48
+ * See <a target="_blank" href="/middleware/location">location</a>
49
+ {{% /details %}}
50
+
51
+ {{% details title="Redirects" closed="true" %}}
52
+ * Simple redirect functionality (all of `permanent`, `temporary`, `found`, `moved_permanently`)
53
+ * HTTP to HTTPS Redirects
54
+ * Dynamic URL Rewriting
55
+ * See <a target="_blank" href="/middleware/redirect">redirect</a>
56
+ {{% /details %}}
57
+
58
+ {{% details title="Reverse Proxy" closed="true" %}}
59
+ * Seamlessly Proxy to downstream HTTP services
60
+ * Hostname and SNI overrides
61
+ * Header overrides
62
+ * Multiple backends per host, with load balancing and failover support
63
+ * Automatic retries for Idempotent requests
64
+ * Configurable error pages
65
+ * See <a target="_blank" href="/middleware/proxy">proxy</a>
66
+ {{% /details %}}
67
+
68
+ {{% details title="Range Requests" closed="true" %}}
69
+ * Partial content delivery support, so clients can resume downloads or stream large files efficiently.
70
+ * See <a target="_blank" href="/middleware/static_assets">static_assets</a>
71
+ {{% /details %}}
72
+
73
+ {{% details title="Static File Server" closed="true" %}}
74
+ Efficiently serves static assets with proper content types and caching headers.
75
+ * Auto index generation
76
+ * Configurable in-memory caching for faster serving of small and frequently accessed files.
77
+ * Auto try `.html` extension (for cleaner paths)
78
+ * Configurable fallback behaviour (e.g. route request misses to an index.html for SPAs)
79
+ * See <a target="_blank" href="/middleware/static_assets">static_assets</a>
80
+ {{% /details %}}
81
+
82
+ {{% details title="Multiple Binds" closed="true" %}}
83
+ * Itsi can listen on multiple IP addresses or ports simultaneously for flexible deployment.
84
+ * Unix socket binds (both plain-text and TLS) are supported.
85
+ * See <a target="_blank" href="/options/bind">bind</a>.
86
+ {{% /details %}}
87
+
88
+ ## DevOps
89
+ {{% details title="File Watcher & Live Reloading" closed="true" %}}
90
+ * Monitors file changes and to automatically reloads configuration or content.
91
+ * Use custom watchers to e.g. trigger frontend builds on file changes.
92
+ * See <a target="_blank" href="/getting_started/local_development">local_development</a>, <a target="_blank" href="/options/auto_reload_config">auto_reload_config</a>, and <a target="_blank" href="/options/watch">watch</a>.
93
+ {{% /details %}}
94
+
95
+ {{% details title="LSP and shell completion support" closed="true" %}}
96
+ * The bundled RubyLSP addon provides rich inline documentation and hover support when editing `Itsi.rb` files.
97
+ * Shell completion support (add `eval "$(itsi --install-completions)"` to the bottom of your shell init file)
98
+ * See <a target="_blank" href="/getting_started/local_development">local_development</a>.
99
+ {{% /details %}}
100
+
101
+ {{% details title="Status Reporting" closed="true" %}}
102
+ * Send SIGUSR2 to trigger detailed status report across all Itsi processes.
103
+ * See <a target="_blank" href="/getting_started/signals">signals</a>.
104
+ {{% /details %}}
105
+
106
+ {{% details title="Granular Logging" closed="true" %}}
107
+ * Support logging using plain-text and structured `JSON` formats.
108
+ * Support `STDOUT`, file-system and combined log sinks.
109
+ * Apply selective log levels for specific log targets only.
110
+ * Configurable request logging middleware, with custom log templates.
111
+ * See <a target="_blank" href="/middleware/log_requests">Request Logs</a> & <a target="_blank" href="/getting_started/logging">Logging</a>.
112
+ {{% /details %}}
113
+
114
+ {{% details title="Hot Config Reloads & Config File Validation" closed="true" %}}
115
+ * Zero-downtime config file reloads.
116
+ * Phased restart support when running in `cluster` mode
117
+ * Config file testing and dry-run functionality
118
+ * See <a target="_blank" href="/getting_started/signals">signals</a> and <a target="_blank" href="/options/auto_reload_config">auto_reload_config</a>.
119
+ {{% /details %}}
120
+
121
+ {{% details title="Configurable Error Responses" closed="true" %}}
122
+ * Provide your own exception responses (HTML and JSON) for all common exception scenarios, or simply rely on the light-weight defaults.
123
+ * See <a target="_blank" href="/middleware/error_response">error_responses</a>.
124
+ {{% /details %}}
125
+
126
+ {{% details title="Management Signals" closed="true" %}}
127
+ * Use a full suite of Unix signals to control your live Itsi cluster.
128
+ * Add or remove workers on the fly, reload config, generate status reports etc.
129
+ * See <a target="_blank" href="/getting_started/signals">signals</a>.
130
+ {{% /details %}}
131
+
132
+ ## Security
133
+ {{% details title="JWT/API Key/Basic Auth" closed="true" %}}
134
+ * Apply common authentication patterns at the middleware layer.
135
+ * API Key (`bcrypt`, `argon2`, `sha256`, `sha512`)
136
+ * JWT (`hs256`, `HS384`, `HS512`, `RS256`, `RS384`, `RS512`, `ES256`, `ES384`, `PS256`, `PS384`, `PS512`)
137
+ * Basic Auth (`bcrypt`, `argon2`, `sha256`, `sha512`)
138
+
139
+ Itsi also comes bundled with a passfile generator, to help you manage your password hashes effectively.
140
+
141
+ * See <a target="_blank" href="/middleware/auth_jwt">auth_jwt</a>, <a target="_blank" href="/middleware/auth_api_key">auth_api_key</a>, <a target="_blank" href="/middleware/auth_basic">auth_basic</a> and <a target="_blank" href="/utilities/passfile_generator">passfile</a>.
142
+ {{% /details %}}
143
+
144
+ {{% details title="Automatic Let's Encrypt Certificates" closed="true" %}}
145
+ * Automated provisioning of Let's Encrypt certificates.
146
+ * File system caching of certificate data to avoid excessive API calls.
147
+ * Supports usage of subject alternative names (SANs) for certificates that span multiple domains/sub-domains.
148
+ * See <a target="_blank" href="/options/certificates#production-certificates-lets-encrypt">certificates</a>.
149
+ {{% /details %}}
150
+
151
+ {{% details title="Automatic Development Certificates" closed="true" %}}
152
+ * Easily mirror your production SSL set-up in Development
153
+ * Custom local CA generation (add this CA cert to your trusted root certificates for warning-less SSL during local development)
154
+ * See <a target="_blank" href="/options/certificates#development">certificates</a>.
155
+ {{% /details %}}
156
+
157
+ {{% details title="(Distributed) Rate Limiting" closed="true" %}}
158
+ * Combine any number of configurable rate limits
159
+ * Support for a `Redis` backend for distributed rate limiting (falls back to in-memory backend)
160
+ * In-memory backend for simple setups and local development.
161
+ * See <a target="_blank" href="/middleware/rate_limit">rate_limit</a>.
162
+ {{% /details %}}
163
+
164
+ {{% details title="Allow & Deny Lists" closed="true" %}}
165
+ * IP Allow lists to limit access to a specific set of IP addresses or blocks.
166
+ * IP Deny lists to block access from specific IP addresses or blocks.
167
+ * See <a target="_blank" href="/middleware/allow_list">allow_list</a> & <a target="_blank" href="/middleware/deny_list">deny_list</a>.
168
+ {{% /details %}}
169
+
170
+ {{% details title="Intrusion Protection" closed="true" %}}
171
+ * Automatically scan request paths and headers for known malicious patterns
172
+ * Configurable ban rules to block offenders for a specified duration.
173
+ * See <a target="_blank" href="/middleware/intrusion_protection">intrusion_protection</a>
174
+ {{% /details %}}
175
+
176
+ {{% details title="Slowhttp attack prevention" closed="true" %}}
177
+ * Protections against several slowhttp attacks (e.g. Slowloris, Slowbody), through header and request timeouts and maximum request body sizes.
178
+ * See <a target="_blank" href="/options/max_body">max_body</a>, <a target="_blank" href="/options/request_timeout">request_timeout</a> and <a target="_blank" href="/options/header_read_timeout">header_read_timeout</a>
179
+ {{% /details %}}
180
+
181
+ {{% details title="CSP Reporting" closed="true" %}}
182
+ * Simple configuration for enabling CSP headers.
183
+ * Support for hosting a CSP reporting endpoint to track violations of CSPs running in reporting only mode.
184
+ * See <a target="_blank" href="/middleware/csp">CSP</a>
185
+ {{% /details %}}
186
+
187
+ ## Protocols & Standards
188
+ {{% details title="HTTP2" closed="true" %}}
189
+ * Benefit from connection multiplexing by using http2 all the way from client to app/file server.
190
+ * `Itsi`'s underlying HTTP1 and 2 implementations are provided directly by <a target="_blank" href="https://github.com/hyperium/hyper">hyper</a>. Itsi simply exposes these existing capabilities. This means that once <a target="_blank" href="https://hyper.rs/contrib/roadmap/#http3">h3</a> lands in Hyper - we'll get it in Itsi too!
191
+ {{% /details %}}
192
+
193
+ {{% details title="Rack Server" closed="true" %}}
194
+ * Rack compliant. Itsi plays nicely with your existing Rack-based applications and middleware.
195
+ * See <a target="_blank" href="/middleware/run">run</a> and <a target="_blank" href="/middleware/rackup_file">rackup_file</a>
196
+ {{% /details %}}
197
+
198
+ {{% details title="gRPC Server" closed="true" %}}
199
+ * Itsi is compatible with ruby `grpc` service handlers and can
200
+ replace the <a target="_blank" href="https://github.com/grpc/grpc/blob/master/src/ruby/README.md">official</a> Ruby gRPC server implementation for a free performance boost!
201
+ * Consider enabling [non-blocking IO](/options/fiber_scheduler) to further enhance performance.
202
+ * Support for gRPC server reflection (use with tools like evans and Postman for easy service discovery)
203
+ * Support for gzip and zlib compression
204
+ * See <a target="_blank" href="/middleware/grpc">grpc</a>
205
+ {{% /details %}}
206
+
207
+ {{% details title="gRPC+REST compatibility mode" closed="true" %}}
208
+ * Itsi provides a `gRPC+REST` compatibility layer for easy reuse of gRPC endpoints by clients and environments that are not gRPC capable. Invoke unidirectional and streaming endpoints using plain-old JSON.
209
+ * See <a target="_blank" href="/middleware/grpc">grpc</a>
210
+ {{< callout type="warn" >}}
211
+ Note: This is not the same as <a target="_blank" href="https://grpc.io/blog/grpc-with-json/">gRPC with JSON</a> which swaps out protobuf for JSON but still relies on gRPC's underlying framing mechanics.
212
+ {{< /callout >}}
213
+ {{% /details %}}
214
+
215
+ {{% details title="WebSockets" closed="true" %}}
216
+ * WebSocket support for Rack apps (e.g. <a target="_blank" a href="https://guides.rubyonrails.org/action_cable_overview.html">ActionCable</a>)
217
+ {{% /details %}}
218
+
219
+ ## Concurrency & Performance
220
+ {{% details title="Cluster Mode" closed="true" %}}
221
+ * Supports running in a clustered mode, to fully leverage multi-core systems.
222
+ * See <a target="_blank" href="/options/workers">workers</a>.
223
+ {{% /details %}}
224
+
225
+ {{% details title="Non-blocking(Fiber Scheduler) Mode" closed="true" %}}
226
+ * Support for Ruby’s fiber scheduler for non-blocking concurrency, boosting performance during I/O operations.
227
+ * Use Itsi's own high-performance built-in <a target="_blank" href="/itsi_scheduler">Fiber Scheduler</a> or if your prefer you can bring your own!
228
+ * See <a target="_blank" href="/options/fiber_scheduler">fiber_scheduler</a>.
229
+ {{% /details %}}
230
+
231
+ {{% details title="Hybrid Blocking/Non-Blocking Mode" closed="true" %}}
232
+ * `Itsi` allows you to split endpoints between using a Fiber scheduler versus running using the traditional blocking IO model. This allows you to dip your toes into the waters of Ruby's new non-blocking IO, without having to port an entire application at once!
233
+ * See <a target="_blank" href="/options/scheduler_threads">scheduler_threads</a>.
234
+ {{% /details %}}
235
+
236
+ {{% details title="Non-blocking by design" closed="true" %}}
237
+ * Itsi is underpinned by <a target="_blank" href="https://hyper.rs/">hyper</a> and <a target="_blank" href="https://tokio.rs/">tokio</a> and as such is fundamentally an evented, non-blocking server. Whether you're proxying, serving large files, or delegating to Ruby endpoints, `Itsi` remains responsive, even under heavy load.
238
+ {{% /details %}}
239
+
240
+ ## Ruby
241
+ {{% details title="Preloading" closed="true" %}}
242
+ * Preload your Ruby application code before forking to benefit from reduced memory through CoW
243
+ * Alternatively, use groups in bundler to target specific gems or dependencies for preloading
244
+ * See <a target="_blank" href="/options/preload">preload</a>.
245
+ {{% /details %}}
246
+
247
+ {{% details title="Streaming Response Bodies" closed="true" %}}
248
+ * For both <a target="_blank" href="https://github.com/rack/rack/blob/main/SPEC.rdoc#the-body-">streaming</a> and <a target="_blank" href="https://github.com/rack/rack/blob/main/SPEC.rdoc#enumerable-body-">Enumerable</a> bodies, Itsi sends data to the client as soon as it is available. This means modules like <a target="_blank" href="https://api.rubyonrails.org/v7.1/classes/ActionController/Live.html">ActionController</a> behave as expected, and the minimal buffering keeps `Itsi`'s memory footprint consistently low.
249
+ {{% /details %}}
250
+
251
+ {{% details title="Streaming Request Bodies" closed="true" %}}
252
+ * Itsi supports streaming incoming request bodies too, for efficient processing of large simultaneous input streams (Disabled by default for maximum compatibility).
253
+ * See <a target="_blank" href="/options/stream_body">stream_body</a>.
254
+ {{% /details %}}
255
+
256
+ {{% details title="Full & Partial Rack Hijacking" closed="true" %}}
257
+ * Itsi supports both <a href="https://github.com/rack/rack/blob/main/SPEC.rdoc#hijacking-" target="_blank">full</a> and partial Rack hijacking. Even over HTTP2!
258
+ {{< callout type="warn" >}}
259
+ By design, Full hijacking assumes you are writing a raw HTTP1 response directly to a raw connection stream.
260
+ Itsi's support for full hijack over HTTP2 is similar to what you would see if running a dedicated reverse proxy in front of a Ruby app.
261
+ Itsi translates that request from HTTP1 to HTTP2, in real-time, allowing full hijacking endpoints to write HTTP1 and the client to receive HTTP2.
262
+ {{< /callout >}}
263
+ {{% /details %}}
264
+
265
+ {{% details title="Sendfile" closed="true" %}}
266
+ * Itsi allows Ruby apps to set a `X-Sendfile` header to enable efficient, streaming file transfers, outside of Ruby, via fast native code.
267
+ * See <a target="_blank" href="/middleware/run">run</a> and <a target="_blank" href="/middleware/rackup_file">rackup_file</a>.
268
+
269
+ {{< callout type="info" >}}
270
+ Note that despite the header being named `X-Sendfile`, Itsi does not use the Sendfile system call, instead delegating the efficient streaming to Tokio's native asynchronous file streaming capabilities.
271
+ {{< /callout >}}
272
+
273
+ {{% /details %}}
274
+
275
+ {{% details title="Graceful Memory Limits" closed="true" %}}
276
+ * Itsi allows you to specify memory limits for Ruby processes. When the limit is reached, Itsi gracefully terminates the process and also invokes a dedicated `after_memory_threshold_reached` callback,
277
+ so that you can log the event for further analysis.
278
+ * See <a target="_blank" href="/options/worker_memory_limit">worker_memory_limit</a> and <a target="_blank" href="/options/after_memory_threshold_reached">after_memory_threshold_reached</a>.
279
+ {{% /details %}}
280
+
281
+ {{% details title="OOB GC" closed="true" %}}
282
+ * Itsi can be configured to periodically trigger GC every N idle periods (where an idle period is defined as a time where no requests are currently queued).
283
+ * Periodic triggering of GC outside of the request flow can help reduce the impact of GC on latency.
284
+ * See <a target="_blank" href="/options/oob_gc">oob_gc_threshold</a>
285
+ {{% /details %}}
286
+
287
+ {{% details title="'Rackless' Ruby Apps" closed="true" %}}
288
+ * Itsi allows definition of ultra-light-weight Ruby web-apps, using plain old functions and procs.
289
+ * For simple endpoints this barebones option can provide a substantial increase in throughput over a Rack request (primarily by avoiding allocating the env hash and response array)
290
+ * See <a target="_blank" href="/middleware/endpoint">endpoint</a>
291
+ {{% /details %}}
@@ -0,0 +1,73 @@
1
+ ---
2
+ title: Getting Started
3
+ type: docs
4
+ weight: 2
5
+ prev: features/
6
+ next: getting_started/local_development/
7
+ ---
8
+
9
+ {{% steps %}}
10
+
11
+ ### Step 1 - Install Ruby
12
+
13
+ Install Ruby
14
+
15
+ [https://www.ruby-lang.org/en/documentation/installation/](https://www.ruby-lang.org/en/documentation/installation/)
16
+
17
+ ### Step 2 - Install Itsi
18
+
19
+ {{< tabs items="Linux,Mac,Windows" >}}
20
+ {{< tab >}}
21
+ **Prerequisites**
22
+
23
+ You'll need at least `build-essential` and `libclang-dev` installed to build Itsi on Linux.
24
+ E.g.
25
+ ```bash
26
+ apt-get install build-essential libclang-dev
27
+ ```
28
+
29
+ Then use `gem` to install the Itsi package. This will in turn install both the
30
+ `itsi-server` gem, and the `itsi-scheduler` gem.
31
+
32
+
33
+ ```bash
34
+ gem install itsi
35
+ ```
36
+
37
+ {{< callout type="info" >}}
38
+ If you wish to use either the scheduler or server independently, these can be installed individually
39
+ by running `gem install itsi-server` or `gem install itsi-scheduler`.
40
+ {{< /callout >}}
41
+
42
+ {{< /tab >}}
43
+ {{< tab >}}
44
+ **Mac**:
45
+ ```bash
46
+ gem install itsi
47
+ ```
48
+ {{< callout type="info" >}}
49
+ If you wish to use either the scheduler or server independently, these can be installed individually
50
+ by running `gem install itsi-server` or `gem install itsi-scheduler`.
51
+ {{< /callout >}}
52
+
53
+ {{< /tab >}}
54
+ {{< tab >}}**Windows**: Itsi currently doesn't support native Windows builds, but it runs well on [https://learn.microsoft.com/en-us/windows/wsl/install](WSL).
55
+
56
+ Follow the linked instructions to Install a linux distribution like Ubuntu or Debian and then follow the instructions in the Linux tab.
57
+ {{< /tab >}}
58
+
59
+ {{< /tabs >}}
60
+
61
+ ### Step 3 - Learn More
62
+
63
+ Great! You now have Itsi installed. Go to one of the following pages to learn how to use it:
64
+
65
+
66
+ {{< cards >}}
67
+ {{< card link="./local_development" title="Local Development" icon="star" >}}
68
+ {{< card link="../options" title="Options" icon="adjustments" >}}
69
+ {{< card link="../middleware" title="Middleware" icon="cog" >}}
70
+ {{< card link="https://github.com/wouterken/itsi" title="Source Code" icon="github" >}}
71
+ {{< /cards >}}
72
+
73
+ {{% /steps %}}
@@ -0,0 +1,100 @@
1
+ ---
2
+ title: Local Development
3
+ type: docs
4
+ prev: getting_started
5
+ weight: 3
6
+ ---
7
+
8
+ {{< callout>}}
9
+ This document is not required reading, but it can significantly improve your local development experience with Itsi.
10
+ {{< /callout >}}
11
+
12
+ ## Ruby LSP Add-on
13
+ Itsi's [RubyLSP](https://shopify.github.io/ruby-lsp/) add-on allows you to see the full documentation of all of Itsi's [`options`](/options) and [`middleware`](/middleware) directly
14
+ inside your editor. It also gives you easy-to-use auto-completion and snippets for lightning fast changes to `Itsi.rb` configuration files.
15
+ You don't need to install the RubyLSP add-on to use Itsi, if both Itsi and RubyLSP are installed and activated in the same project, RubyLSP will automatically
16
+ discover and load the addon.
17
+
18
+ <img src="/ruby-lsp.png" alt="asd" width="700px" style="display: block; margin-left: auto; margin-right: auto;">
19
+
20
+ ## Live Config Reloading
21
+ Add `auto_reload_config!` to your `Itsi.rb` configuration file and Itsi will automatically hot reload its config with every change you make.
22
+ Concerned about errors? Itsi will validate your config first before it tries to apply it. If there are errors, Itsi will provide detailed logs and safely continue with the existing config.
23
+
24
+ ### File Watcher
25
+ You can have Itsi watch other files on the file-system and trigger automatic actions in response.
26
+ Use the `watch(glob, commands)` method to specify files or directories to watch, and command to execute with each change.
27
+ E.g.
28
+ ```ruby
29
+ watch "**.js", [%w[npm run build]]
30
+ watch "**.md", [%w[rake docs:build]]
31
+ ```
32
+
33
+ ## Print Routes
34
+ Itsi comes with a built-in command to see all the routes that are configured in your application. To use it, simply run the following command:
35
+ ```bash
36
+ itsi routes
37
+ ```
38
+
39
+ E.g.
40
+ ```bash
41
+ ────────────────────────────────────────────────────────────────────────────
42
+ Route: /app/users/(?<id>[^/]+
43
+ Conditions: (none)
44
+ Middleware: • log_requests(before: I am th..., after: [{reque...)
45
+ • compress
46
+ • cors(*, GET POST PUT DELETE)
47
+ • app /Users/pico/Development/itsi/gems/server/lib/itsi/server/typed_handlers.rb:9
48
+ ────────────────────────────────────────────────────────────────────────────
49
+ Route: /app/users/?
50
+ Conditions: (none)
51
+ Middleware: • log_requests(before: I am th..., after: [{reque...)
52
+ • compress
53
+ • cors(*, GET POST PUT DELETE)
54
+ • app /Users/pico/Development/itsi/gems/server/lib/itsi/server/rack_interface.rb:15
55
+
56
+ ```
57
+ ## Test Config
58
+ Itsi allows you to validate your configuration without having to run the application.
59
+
60
+ ```bash
61
+ itsi test
62
+ ```
63
+
64
+ You can optionally provide an explicit config file path using
65
+ ```bash
66
+ itsi test -C /path/to/Itsi.rb
67
+ ```
68
+
69
+
70
+
71
+ ## Shell Completions
72
+ Itsi can also help you install shell completions, which are useful if you find yourself using the `itsi` executable a lot and forgetting the commands.
73
+ Add the following line to the bottom of your ~/.bashrc or ~/.zshrc file:
74
+
75
+ ```bash
76
+ eval "$(itsi --install-completions)"
77
+ ```
78
+
79
+ ## macOS Fork Safety Considerations
80
+
81
+ On macOS, using fork() in multithreaded applications can lead to crashes due to the Objective-C runtime’s behavior. This is particularly relevant when working with tools like Itsi that may utilize fork() under the hood.
82
+
83
+ ### Understanding the Issue
84
+
85
+ Apple’s Objective-C runtime is not fork-safe in multithreaded environments. When a process that uses Objective-C APIs forks, the child process may crash if it interacts with the Objective-C runtime before calling exec(). This behavior is by design to prevent potential deadlocks and inconsistent states.  
86
+
87
+ Common symptoms include errors like:
88
+ ```
89
+ objc[51435]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
90
+ We cannot safely call it or ignore it in the fork() child process. Crashing instead.
91
+ ```
92
+
93
+ ### Workarounds:
94
+ To mitigate these issues, consider the following environment variables:
95
+ * `OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`: Disables the Objective-C runtime’s fork safety checks. Use with caution, as it may mask underlying issues .  
96
+ * `PGGSSENCMODE=disable`: Disables GSSAPI encryption in PostgreSQL, which can cause issues in forked processes .
97
+
98
+ Itsi includes a mechanism to automatically re-execute itself with the necessary environment variables set when running on macOS, effectively performing the above workarounds for you.
99
+
100
+ If you prefer to manage these settings yourself, you can disable this behavior by setting the `ITSI_DISABLE_AUTO_DISABLE_DARWIN_FORK_SAFETY_WARNINGS` environment variable:
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: Logging
3
+ type: docs
4
+ weight: 4
5
+ next: /signals
6
+ ---
7
+
8
+ Itsi has a very configurable logging system. You can configure logging use the `Itsi.rb` configuration file, environment variables or a combination of both.
9
+
10
+ ## Basics
11
+ For basic logging needs, set a global log-level using the `ITSI_LOG` environment variable (to one of `trace`, `debug`, `info`, `warn`, `error`)
12
+
13
+ ## Fine-grained control
14
+
15
+ For fine-grained, configuration-based control read through how to use the following options and middleware:
16
+
17
+ ### Options
18
+ * [`log_level`](/options/log_level)
19
+ * [`log_target`](/options/log_target)
20
+ * [`log_format`](/options/log_format)
21
+ * [`log_target_filters`](/options/log_target_filters)
22
+ ### Middleware
23
+ * [`log_requests`](/options/log_requests)