itsi 0.1.19 → 0.1.20

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 (393) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Cargo.lock +941 -241
  4. data/README.md +67 -55
  5. data/crates/itsi_server/Cargo.toml +3 -3
  6. data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +2 -2
  7. data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +150 -19
  8. data/crates/itsi_server/src/ruby_types/itsi_server.rs +1 -0
  9. data/crates/itsi_server/src/server/binds/listener.rs +34 -29
  10. data/crates/itsi_server/src/server/binds/tls/locked_dir_cache.rs +2 -2
  11. data/crates/itsi_server/src/server/binds/tls.rs +1 -1
  12. data/crates/itsi_server/src/server/middleware_stack/middleware.rs +33 -28
  13. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +56 -3
  14. data/crates/itsi_server/src/server/middleware_stack/middlewares/csp.rs +179 -0
  15. data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +25 -2
  16. data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +3 -3
  17. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +2 -1
  18. data/crates/itsi_server/src/server/middleware_stack/mod.rs +32 -34
  19. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +10 -4
  20. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +30 -7
  21. data/crates/itsi_server/src/server/thread_worker.rs +2 -2
  22. data/crates/itsi_server/src/services/static_file_server.rs +30 -28
  23. data/crates/itsi_tracing/src/lib.rs +39 -8
  24. data/docker/Dockerfile +12 -0
  25. data/docs/content/_index.md +18 -10
  26. data/docs/content/acknowledgements/_index.md +43 -0
  27. data/docs/content/configuration/_index.md +98 -0
  28. data/docs/content/contact/_index.md +7 -0
  29. data/docs/content/faqs/_index.md +27 -0
  30. data/docs/content/features/_index.md +285 -0
  31. data/docs/content/getting_started/_index.md +70 -0
  32. data/docs/content/getting_started/local_development.md +40 -0
  33. data/docs/content/getting_started/logging.md +16 -0
  34. data/docs/content/getting_started/running_itsi_in_production.md +24 -0
  35. data/docs/content/itsi-server-100.png +0 -0
  36. data/docs/content/itsi_scheduler/_index.md +105 -0
  37. data/docs/content/itsi_scheduler/itsi-scheduler-100.png +0 -0
  38. data/docs/content/ruby-lsp.png +0 -0
  39. data/docs/content/ruby.svg +948 -0
  40. data/docs/data/icons.yaml +949 -0
  41. data/docs/hugo.yaml +27 -28
  42. data/fairytale.txt +34 -0
  43. data/gems/scheduler/Cargo.lock +46 -46
  44. data/gems/scheduler/README.md +53 -24
  45. data/gems/scheduler/itsi-scheduler-100.png +0 -0
  46. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  47. data/gems/server/Cargo.lock +950 -239
  48. data/gems/server/README.md +2 -0
  49. data/gems/server/exe/itsi +5 -5
  50. data/gems/server/lib/itsi/server/config/config_helpers.rb +93 -0
  51. data/gems/server/lib/itsi/server/config/dsl.rb +81 -33
  52. data/gems/server/lib/itsi/server/config/known_paths/KitchensinkDirectories.txt +2346 -0
  53. data/gems/server/lib/itsi/server/config/known_paths/Randomfiles.txt +24 -0
  54. data/gems/server/lib/itsi/server/config/known_paths/UnixDotfiles.txt +52 -0
  55. data/gems/server/lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt +29 -0
  56. data/gems/server/lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt +1668 -0
  57. data/gems/server/lib/itsi/server/config/known_paths/backdoors/shells.txt +1167 -0
  58. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt +7 -0
  59. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt +6 -0
  60. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt +79 -0
  61. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt +3948 -0
  62. data/gems/server/lib/itsi/server/config/known_paths/cms/README.md +5 -0
  63. data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_plugins.txt +6320 -0
  64. data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_themes.txt +828 -0
  65. data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_plugins.txt +224 -0
  66. data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_themes.txt +30 -0
  67. data/gems/server/lib/itsi/server/config/known_paths/cms/php-nuke.txt +2142 -0
  68. data/gems/server/lib/itsi/server/config/known_paths/cms/wordpress.txt +1566 -0
  69. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt +46 -0
  70. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins.txt +13366 -0
  71. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt +68662 -0
  72. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt +225 -0
  73. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.readme +12 -0
  74. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.txt +7336 -0
  75. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt +17576 -0
  76. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt +80 -0
  77. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt +14 -0
  78. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt +865 -0
  79. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt +186 -0
  80. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt +30 -0
  81. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt +93 -0
  82. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt +1918 -0
  83. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt +8 -0
  84. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt +56180 -0
  85. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt +62290 -0
  86. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt +2367 -0
  87. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt +2450 -0
  88. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt +35323 -0
  89. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt +37037 -0
  90. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt +107982 -0
  91. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt +119600 -0
  92. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt +26593 -0
  93. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt +30009 -0
  94. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt +1233 -0
  95. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt +1289 -0
  96. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt +16243 -0
  97. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt +17128 -0
  98. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt +56293 -0
  99. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt +63087 -0
  100. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt +17776 -0
  101. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt +20122 -0
  102. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt +914 -0
  103. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt +963 -0
  104. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt +10848 -0
  105. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt +11424 -0
  106. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt +38267 -0
  107. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt +43003 -0
  108. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt +445 -0
  109. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt +36 -0
  110. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt +44 -0
  111. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/Logins.txt +71 -0
  112. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/cfm.txt +294 -0
  113. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/html.txt +295 -0
  114. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/jsp.txt +294 -0
  115. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/php.txt +294 -0
  116. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt +294 -0
  117. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt +294 -0
  118. data/gems/server/lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt +47 -0
  119. data/gems/server/lib/itsi/server/config/known_paths/php/PHP.txt +30 -0
  120. data/gems/server/lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt +5 -0
  121. data/gems/server/lib/itsi/server/config/known_paths/proxy-conf.txt +31 -0
  122. data/gems/server/lib/itsi/server/config/known_paths/tftp.txt +79 -0
  123. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt +86 -0
  124. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt +16 -0
  125. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt +101 -0
  126. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt +47 -0
  127. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt +16 -0
  128. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt +111 -0
  129. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt +390 -0
  130. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt +38 -0
  131. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt +239 -0
  132. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt +2 -0
  133. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt +578 -0
  134. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt +187 -0
  135. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt +5 -0
  136. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt +13 -0
  137. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt +3 -0
  138. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt +1937 -0
  139. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt +206 -0
  140. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt +18 -0
  141. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt +60 -0
  142. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt +192 -0
  143. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/README.md +6 -0
  144. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt +121 -0
  145. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt +463 -0
  146. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt +1707 -0
  147. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt +19 -0
  148. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt +51 -0
  149. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt +35 -0
  150. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt +73 -0
  151. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt +160 -0
  152. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt +366 -0
  153. data/gems/server/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt +30 -0
  154. data/gems/server/lib/itsi/server/config/known_paths.rb +17 -0
  155. data/gems/server/lib/itsi/server/config/middleware/_index.md +54 -0
  156. data/gems/server/lib/itsi/server/config/middleware/log_requests.md +63 -0
  157. data/gems/server/lib/itsi/server/config/middleware/log_requests.rb +33 -0
  158. data/gems/server/lib/itsi/server/config/middleware.rb +9 -0
  159. data/gems/server/lib/itsi/server/config/option.rb +9 -0
  160. data/gems/server/lib/itsi/server/config/options/_index.md +36 -0
  161. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.md +35 -0
  162. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.rb +18 -0
  163. data/gems/server/lib/itsi/server/config/options/threads.md +39 -0
  164. data/gems/server/lib/itsi/server/config/options/threads.rb +17 -0
  165. data/gems/server/lib/itsi/server/config/options/workers.md +43 -0
  166. data/gems/server/lib/itsi/server/config/options/workers.rb +17 -0
  167. data/gems/server/lib/itsi/server/config/typed_struct.rb +203 -0
  168. data/gems/server/lib/itsi/server/config.rb +124 -30
  169. data/gems/server/lib/itsi/server/signal_trap.rb +5 -1
  170. data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +1 -1
  171. data/gems/server/lib/itsi/server/version.rb +1 -1
  172. data/gems/server/lib/itsi/server.rb +27 -6
  173. data/gems/server/lib/ruby_lsp/itsi/addon.rb +64 -48
  174. data/gems/server/test/helpers/test_helper.rb +64 -5
  175. data/gems/server/test/middleware/test_log_requests.rb +17 -0
  176. data/gems/server/test/options/test_threads.rb +15 -0
  177. data/gems/server/test/options/test_workers.rb +18 -0
  178. data/gems/server/test/test_itsi_server.rb +81 -94
  179. data/itsi-scheduler-100.png +0 -0
  180. data/itsi-server-100.png +0 -0
  181. data/lib/itsi/version.rb +1 -1
  182. data/tasks.txt +36 -28
  183. metadata +147 -215
  184. data/crates/_index.md +0 -0
  185. data/crates/itsi_server/src/ruby_types/README.md +0 -21
  186. data/crates/itsi_server/test.md +0 -14
  187. data/docs/Itsi.rb +0 -17
  188. data/docs/content/about.md +0 -6
  189. data/docs/content/docs/_index.md +0 -18
  190. data/docs/content/docs/first-page.md +0 -9
  191. data/docs/content/docs/folder/_index.md +0 -10
  192. data/docs/content/docs/folder/leaf.md +0 -7
  193. data/foo/Itsi.rb +0 -122
  194. data/gems/_index.md +0 -18
  195. data/gems/scheduler/CHANGELOG.md +0 -5
  196. data/gems/scheduler/CODE_OF_CONDUCT.md +0 -139
  197. data/gems/scheduler/LICENSE.txt +0 -21
  198. data/gems/scheduler/_index.md +0 -7
  199. data/gems/server/CHANGELOG.md +0 -10
  200. data/gems/server/CODE_OF_CONDUCT.md +0 -139
  201. data/gems/server/LICENSE.txt +0 -21
  202. data/gems/server/_index.md +0 -6
  203. data/sandbox/README.md +0 -5
  204. data/sandbox/deploy/main.tf +0 -238
  205. data/sandbox/deploy/outputs.tf +0 -4
  206. data/sandbox/deploy/vars.tf +0 -11
  207. data/sandbox/falcon_benchmark/Gemfile +0 -10
  208. data/sandbox/falcon_benchmark/Gemfile.lock +0 -140
  209. data/sandbox/falcon_benchmark/config.ru +0 -54
  210. data/sandbox/itsi_file/Gemfile +0 -13
  211. data/sandbox/itsi_file/Gemfile.lock +0 -111
  212. data/sandbox/itsi_file/Itsi.rb +0 -474
  213. data/sandbox/itsi_file/call.json +0 -1
  214. data/sandbox/itsi_file/echo_client/Gemfile +0 -10
  215. data/sandbox/itsi_file/echo_client/Gemfile.lock +0 -27
  216. data/sandbox/itsi_file/echo_client/README.md +0 -95
  217. data/sandbox/itsi_file/echo_client/echo_client.rb +0 -164
  218. data/sandbox/itsi_file/echo_client/gen_proto.sh +0 -17
  219. data/sandbox/itsi_file/echo_client/lib/echo_pb.rb +0 -16
  220. data/sandbox/itsi_file/echo_client/lib/echo_services_pb.rb +0 -29
  221. data/sandbox/itsi_file/echo_client/run_client.rb +0 -64
  222. data/sandbox/itsi_file/echo_client/test_compressions.sh +0 -20
  223. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile +0 -10
  224. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile.lock +0 -79
  225. data/sandbox/itsi_file/echo_service_nonitsi/echo.proto +0 -26
  226. data/sandbox/itsi_file/echo_service_nonitsi/echo_pb.rb +0 -16
  227. data/sandbox/itsi_file/echo_service_nonitsi/echo_services_pb.rb +0 -29
  228. data/sandbox/itsi_file/echo_service_nonitsi/server.rb +0 -52
  229. data/sandbox/itsi_file/error.html +0 -2
  230. data/sandbox/itsi_file/organisations_controller.rb +0 -20
  231. data/sandbox/itsi_file/public/assets/image.png +0 -0
  232. data/sandbox/itsi_sandbox_async/Gemfile +0 -10
  233. data/sandbox/itsi_sandbox_async/Gemfile.lock +0 -69
  234. data/sandbox/itsi_sandbox_async/config.ru +0 -9
  235. data/sandbox/itsi_sandbox_hanami/.env +0 -2
  236. data/sandbox/itsi_sandbox_hanami/.gitignore +0 -6
  237. data/sandbox/itsi_sandbox_hanami/.rspec +0 -1
  238. data/sandbox/itsi_sandbox_hanami/Gemfile +0 -49
  239. data/sandbox/itsi_sandbox_hanami/Gemfile.lock +0 -440
  240. data/sandbox/itsi_sandbox_hanami/Guardfile +0 -9
  241. data/sandbox/itsi_sandbox_hanami/Procfile.dev +0 -2
  242. data/sandbox/itsi_sandbox_hanami/README.md +0 -1
  243. data/sandbox/itsi_sandbox_hanami/Rakefile +0 -3
  244. data/sandbox/itsi_sandbox_hanami/app/action.rb +0 -12
  245. data/sandbox/itsi_sandbox_hanami/app/actions/.keep +0 -0
  246. data/sandbox/itsi_sandbox_hanami/app/assets/css/app.css +0 -5
  247. data/sandbox/itsi_sandbox_hanami/app/assets/images/favicon.ico +0 -0
  248. data/sandbox/itsi_sandbox_hanami/app/assets/js/app.js +0 -1
  249. data/sandbox/itsi_sandbox_hanami/app/db/relation.rb +0 -10
  250. data/sandbox/itsi_sandbox_hanami/app/db/repo.rb +0 -10
  251. data/sandbox/itsi_sandbox_hanami/app/db/struct.rb +0 -10
  252. data/sandbox/itsi_sandbox_hanami/app/operation.rb +0 -9
  253. data/sandbox/itsi_sandbox_hanami/app/relations/.keep +0 -0
  254. data/sandbox/itsi_sandbox_hanami/app/repos/.keep +0 -0
  255. data/sandbox/itsi_sandbox_hanami/app/structs/.keep +0 -0
  256. data/sandbox/itsi_sandbox_hanami/app/templates/layouts/app.html.erb +0 -14
  257. data/sandbox/itsi_sandbox_hanami/app/view.rb +0 -9
  258. data/sandbox/itsi_sandbox_hanami/app/views/helpers.rb +0 -10
  259. data/sandbox/itsi_sandbox_hanami/bin/dev +0 -8
  260. data/sandbox/itsi_sandbox_hanami/config/app.rb +0 -8
  261. data/sandbox/itsi_sandbox_hanami/config/assets.js +0 -16
  262. data/sandbox/itsi_sandbox_hanami/config/db/migrate/.keep +0 -0
  263. data/sandbox/itsi_sandbox_hanami/config/db/seeds.rb +0 -15
  264. data/sandbox/itsi_sandbox_hanami/config/puma.rb +0 -47
  265. data/sandbox/itsi_sandbox_hanami/config/routes.rb +0 -7
  266. data/sandbox/itsi_sandbox_hanami/config/settings.rb +0 -9
  267. data/sandbox/itsi_sandbox_hanami/config.ru +0 -5
  268. data/sandbox/itsi_sandbox_hanami/db/.keep +0 -0
  269. data/sandbox/itsi_sandbox_hanami/lib/itsi_hanami/types.rb +0 -11
  270. data/sandbox/itsi_sandbox_hanami/lib/tasks/.keep +0 -0
  271. data/sandbox/itsi_sandbox_hanami/package-lock.json +0 -946
  272. data/sandbox/itsi_sandbox_hanami/package.json +0 -8
  273. data/sandbox/itsi_sandbox_hanami/spec/requests/root_spec.rb +0 -11
  274. data/sandbox/itsi_sandbox_hanami/spec/spec_helper.rb +0 -9
  275. data/sandbox/itsi_sandbox_hanami/spec/support/db/cleaning.rb +0 -42
  276. data/sandbox/itsi_sandbox_hanami/spec/support/db.rb +0 -10
  277. data/sandbox/itsi_sandbox_hanami/spec/support/features.rb +0 -5
  278. data/sandbox/itsi_sandbox_hanami/spec/support/operations.rb +0 -8
  279. data/sandbox/itsi_sandbox_hanami/spec/support/requests.rb +0 -13
  280. data/sandbox/itsi_sandbox_hanami/spec/support/rspec.rb +0 -61
  281. data/sandbox/itsi_sandbox_rack/Gemfile +0 -17
  282. data/sandbox/itsi_sandbox_rack/Gemfile.lock +0 -153
  283. data/sandbox/itsi_sandbox_rack/config.ru +0 -5
  284. data/sandbox/itsi_sandbox_rack_lint/Gemfile +0 -7
  285. data/sandbox/itsi_sandbox_rack_lint/Gemfile.lock +0 -27
  286. data/sandbox/itsi_sandbox_rack_lint/config.ru +0 -3
  287. data/sandbox/itsi_sandbox_rails/.dockerignore +0 -48
  288. data/sandbox/itsi_sandbox_rails/.gitattributes +0 -9
  289. data/sandbox/itsi_sandbox_rails/.github/dependabot.yml +0 -12
  290. data/sandbox/itsi_sandbox_rails/.github/workflows/ci.yml +0 -90
  291. data/sandbox/itsi_sandbox_rails/.gitignore +0 -35
  292. data/sandbox/itsi_sandbox_rails/.rubocop.yml +0 -8
  293. data/sandbox/itsi_sandbox_rails/.ruby-version +0 -1
  294. data/sandbox/itsi_sandbox_rails/Dockerfile +0 -69
  295. data/sandbox/itsi_sandbox_rails/Gemfile +0 -66
  296. data/sandbox/itsi_sandbox_rails/Gemfile.lock +0 -429
  297. data/sandbox/itsi_sandbox_rails/README.md +0 -24
  298. data/sandbox/itsi_sandbox_rails/Rakefile +0 -6
  299. data/sandbox/itsi_sandbox_rails/app/assets/config/manifest.js +0 -4
  300. data/sandbox/itsi_sandbox_rails/app/assets/images/.keep +0 -0
  301. data/sandbox/itsi_sandbox_rails/app/assets/stylesheets/application.css +0 -15
  302. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/channel.rb +0 -4
  303. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/connection.rb +0 -4
  304. data/sandbox/itsi_sandbox_rails/app/controllers/application_controller.rb +0 -4
  305. data/sandbox/itsi_sandbox_rails/app/controllers/concerns/.keep +0 -0
  306. data/sandbox/itsi_sandbox_rails/app/controllers/home_controller.rb +0 -66
  307. data/sandbox/itsi_sandbox_rails/app/controllers/live_controller.rb +0 -40
  308. data/sandbox/itsi_sandbox_rails/app/controllers/uploads_controller.rb +0 -29
  309. data/sandbox/itsi_sandbox_rails/app/helpers/application_helper.rb +0 -2
  310. data/sandbox/itsi_sandbox_rails/app/javascript/application.js +0 -3
  311. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/application.js +0 -9
  312. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/hello_controller.js +0 -7
  313. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/index.js +0 -4
  314. data/sandbox/itsi_sandbox_rails/app/jobs/application_job.rb +0 -7
  315. data/sandbox/itsi_sandbox_rails/app/mailers/application_mailer.rb +0 -4
  316. data/sandbox/itsi_sandbox_rails/app/models/application_record.rb +0 -3
  317. data/sandbox/itsi_sandbox_rails/app/models/concerns/.keep +0 -0
  318. data/sandbox/itsi_sandbox_rails/app/models/post.rb +0 -2
  319. data/sandbox/itsi_sandbox_rails/app/views/layouts/application.html.erb +0 -23
  320. data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.html.erb +0 -13
  321. data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.text.erb +0 -1
  322. data/sandbox/itsi_sandbox_rails/app/views/pwa/manifest.json.erb +0 -22
  323. data/sandbox/itsi_sandbox_rails/app/views/pwa/service-worker.js +0 -26
  324. data/sandbox/itsi_sandbox_rails/bin/brakeman +0 -7
  325. data/sandbox/itsi_sandbox_rails/bin/bundle +0 -109
  326. data/sandbox/itsi_sandbox_rails/bin/docker-entrypoint +0 -13
  327. data/sandbox/itsi_sandbox_rails/bin/importmap +0 -4
  328. data/sandbox/itsi_sandbox_rails/bin/rails +0 -4
  329. data/sandbox/itsi_sandbox_rails/bin/rake +0 -4
  330. data/sandbox/itsi_sandbox_rails/bin/rubocop +0 -8
  331. data/sandbox/itsi_sandbox_rails/bin/setup +0 -37
  332. data/sandbox/itsi_sandbox_rails/config/application.rb +0 -27
  333. data/sandbox/itsi_sandbox_rails/config/boot.rb +0 -4
  334. data/sandbox/itsi_sandbox_rails/config/cable.yml +0 -10
  335. data/sandbox/itsi_sandbox_rails/config/credentials.yml.enc +0 -1
  336. data/sandbox/itsi_sandbox_rails/config/database.yml +0 -30
  337. data/sandbox/itsi_sandbox_rails/config/environment.rb +0 -5
  338. data/sandbox/itsi_sandbox_rails/config/environments/development.rb +0 -82
  339. data/sandbox/itsi_sandbox_rails/config/environments/production.rb +0 -106
  340. data/sandbox/itsi_sandbox_rails/config/environments/test.rb +0 -67
  341. data/sandbox/itsi_sandbox_rails/config/importmap.rb +0 -7
  342. data/sandbox/itsi_sandbox_rails/config/initializers/assets.rb +0 -12
  343. data/sandbox/itsi_sandbox_rails/config/initializers/content_security_policy.rb +0 -25
  344. data/sandbox/itsi_sandbox_rails/config/initializers/filter_parameter_logging.rb +0 -8
  345. data/sandbox/itsi_sandbox_rails/config/initializers/inflections.rb +0 -16
  346. data/sandbox/itsi_sandbox_rails/config/initializers/permissions_policy.rb +0 -13
  347. data/sandbox/itsi_sandbox_rails/config/locales/en.yml +0 -31
  348. data/sandbox/itsi_sandbox_rails/config/puma.rb +0 -34
  349. data/sandbox/itsi_sandbox_rails/config/routes.rb +0 -23
  350. data/sandbox/itsi_sandbox_rails/config/storage.yml +0 -34
  351. data/sandbox/itsi_sandbox_rails/config.ru +0 -6
  352. data/sandbox/itsi_sandbox_rails/db/migrate/20250301041554_create_posts.rb +0 -10
  353. data/sandbox/itsi_sandbox_rails/db/schema.rb +0 -23
  354. data/sandbox/itsi_sandbox_rails/db/seeds.rb +0 -9
  355. data/sandbox/itsi_sandbox_rails/lib/assets/.keep +0 -0
  356. data/sandbox/itsi_sandbox_rails/lib/tasks/.keep +0 -0
  357. data/sandbox/itsi_sandbox_rails/log/.keep +0 -0
  358. data/sandbox/itsi_sandbox_rails/public/404.html +0 -67
  359. data/sandbox/itsi_sandbox_rails/public/406-unsupported-browser.html +0 -66
  360. data/sandbox/itsi_sandbox_rails/public/422.html +0 -67
  361. data/sandbox/itsi_sandbox_rails/public/500.html +0 -66
  362. data/sandbox/itsi_sandbox_rails/public/icon.png +0 -0
  363. data/sandbox/itsi_sandbox_rails/public/icon.svg +0 -3
  364. data/sandbox/itsi_sandbox_rails/public/robots.txt +0 -1
  365. data/sandbox/itsi_sandbox_rails/storage/.keep +0 -0
  366. data/sandbox/itsi_sandbox_rails/test/application_system_test_case.rb +0 -5
  367. data/sandbox/itsi_sandbox_rails/test/channels/application_cable/connection_test.rb +0 -13
  368. data/sandbox/itsi_sandbox_rails/test/controllers/.keep +0 -0
  369. data/sandbox/itsi_sandbox_rails/test/fixtures/files/.keep +0 -0
  370. data/sandbox/itsi_sandbox_rails/test/helpers/.keep +0 -0
  371. data/sandbox/itsi_sandbox_rails/test/integration/.keep +0 -0
  372. data/sandbox/itsi_sandbox_rails/test/mailers/.keep +0 -0
  373. data/sandbox/itsi_sandbox_rails/test/models/.keep +0 -0
  374. data/sandbox/itsi_sandbox_rails/test/system/.keep +0 -0
  375. data/sandbox/itsi_sandbox_rails/test/test_helper.rb +0 -15
  376. data/sandbox/itsi_sandbox_rails/tmp/.keep +0 -0
  377. data/sandbox/itsi_sandbox_rails/tmp/pids/.keep +0 -0
  378. data/sandbox/itsi_sandbox_rails/tmp/storage/.keep +0 -0
  379. data/sandbox/itsi_sandbox_rails/vendor/.keep +0 -0
  380. data/sandbox/itsi_sandbox_rails/vendor/javascript/.keep +0 -0
  381. data/sandbox/itsi_sandbox_roda/Gemfile +0 -5
  382. data/sandbox/itsi_sandbox_roda/Gemfile.lock +0 -37
  383. data/sandbox/itsi_sandbox_roda/config.ru +0 -39
  384. data/sandbox/itsi_sinatra/Gemfile +0 -9
  385. data/sandbox/itsi_sinatra/Gemfile.lock +0 -81
  386. data/sandbox/itsi_sinatra/app.rb +0 -8
  387. data/sandbox/pebble/docker-compose.yml +0 -11
  388. data/sandbox/static_files/.env +0 -1
  389. data/sandbox/static_files/404.html +0 -25
  390. data/sandbox/static_files/_DSC0102.NEF.jpg +0 -0
  391. data/sandbox/static_files/about.html +0 -68
  392. data/sandbox/static_files/tiny.html +0 -1
  393. data/sandbox/static_files/writebook.zip +0 -0
@@ -1,6 +1,4 @@
1
- require "socket"
2
- require "net/http"
3
- require "minitest/autorun"
1
+ require_relative "helpers/test_helper"
4
2
 
5
3
  class TestItsiServer < Minitest::Test
6
4
  def test_that_it_has_a_version_number
@@ -8,25 +6,25 @@ class TestItsiServer < Minitest::Test
8
6
  end
9
7
 
10
8
  def test_hello_world
11
- run_app(lambda do |env|
9
+ server(app: lambda do |env|
12
10
  [200, { "Content-Type" => "text/plain" }, ["Hello, World!"]]
13
- end) do |uri|
14
- assert_equal "Hello, World!", Net::HTTP.get(uri)
11
+ end) do
12
+ assert_equal "Hello, World!", get("/")
15
13
  end
16
14
  end
17
15
 
18
16
  def test_post
19
- run_app(lambda do |env|
17
+ server(app: lambda do |env|
20
18
  assert_equal env["REQUEST_METHOD"], "POST"
21
19
  assert_equal "data", env["rack.input"].read
22
20
  [200, { "Content-Type" => "text/plain" }, ["Hello, World!"]]
23
- end) do |uri|
24
- assert_equal "Hello, World!", Net::HTTP.post(uri, "data").body
21
+ end) do
22
+ assert_equal "Hello, World!", post("/", "data").body
25
23
  end
26
24
  end
27
25
 
28
26
  def test_full_hijack
29
- run_app(lambda do |env|
27
+ server(app: lambda do |env|
30
28
  io = env["rack.hijack"].call
31
29
  io.write("HTTP/1.1 200 Ok\r\n")
32
30
  io.write("Content-Type: text/plain\r\n")
@@ -38,99 +36,95 @@ class TestItsiServer < Minitest::Test
38
36
  io.write("World!\r\n")
39
37
  io.write("0\r\n\r\n")
40
38
  io.close
41
- end) do |uri|
42
- assert_equal "Hello, World!", Net::HTTP.get(uri)
39
+ end) do
40
+ assert_equal "Hello, World!", get("/")
43
41
  end
44
42
  end
45
43
 
46
44
  def test_streaming_body
47
- run_app(lambda do |env|
45
+ server(app: lambda do |env|
48
46
  [200, { "Content-Type" => "text/plain" }, lambda { |stream|
49
47
  stream.write("Hello")
50
48
  stream.write(", World!")
51
49
  stream.close
52
50
  }]
53
- end) do |uri|
54
- assert_equal "Hello, World!", Net::HTTP.get(uri)
51
+ end) do
52
+ assert_equal "Hello, World!", get("/")
55
53
  end
56
54
  end
57
55
 
58
56
  def test_partial_hijack
59
- run_app(lambda do |env|
57
+ server(app: lambda do |env|
60
58
  [200, { "Content-Type" => "text/plain", "rack.hijack" => lambda { |stream|
61
59
  stream.write("Hello")
62
60
  stream.write(", World!")
63
61
  stream.close
64
62
  } }, []]
65
- end) do |uri|
66
- assert_equal "Hello, World!", Net::HTTP.get(uri)
63
+ end) do
64
+ assert_equal "Hello, World!", get("/")
67
65
  end
68
66
  end
69
67
 
70
68
  def test_enumerable_body
71
- run_app(lambda do |env|
69
+ server(app: lambda do |env|
72
70
  [200, { "Content-Type" => "application/json" },
73
71
  %W[one\n two\n three\n]]
74
- end) do |uri|
75
- assert_equal "one\ntwo\nthree\n", Net::HTTP.get(uri)
72
+ end) do
73
+ assert_equal "one\ntwo\nthree\n", get("/")
76
74
  end
77
75
  end
78
76
 
79
77
  def test_scheduler_non_blocking
80
- run_app(
81
- lambda do |env|
82
- sleep 0.25
83
- [200, { "Content-Type" => "text/plain" }, "Response: #{env["PATH_INFO"][1..-1]}"]
84
- end,
85
- scheduler_class: "Itsi::Scheduler"
86
- ) do |uri|
78
+ server(
79
+ itsi_rb: lambda do
80
+ fiber_scheduler "Itsi::Scheduler"
81
+ run(lambda do |env|
82
+ sleep 0.25
83
+ [200, { "Content-Type" => "text/plain" }, "Response: #{env["PATH_INFO"][1..-1]}"]
84
+ end)
85
+ end
86
+ ) do
87
87
  start_time = Time.now
88
88
  20.times.map do
89
89
  Thread.new do
90
90
  payload = SecureRandom.hex(16)
91
- local_uri = uri.dup
92
- local_uri.path = "/#{payload}"
93
- response = Net::HTTP.start(local_uri.hostname, local_uri.port) do |http|
94
- http.request(Net::HTTP::Get.new(local_uri))
95
- end
91
+ response = get_resp("/#{payload}")
96
92
  assert_equal "Response: #{payload}", response.body
97
93
  end
98
94
  end.each(&:join)
95
+
99
96
  assert_in_delta 0.25, Time.now - start_time, 0.5
100
97
  end
101
98
  end
102
99
 
103
100
  def test_query_params
104
- run_app(lambda do |env|
101
+ server(app: lambda do |env|
105
102
  [200, { "Content-Type" => "text/plain" }, [env["QUERY_STRING"]]]
106
- end) do |uri|
107
- uri.query = "foo=bar&baz=qux"
108
- assert_equal "foo=bar&baz=qux", Net::HTTP.get(uri)
103
+ end) do
104
+ assert_equal "foo=bar&baz=qux", get("/?foo=bar&baz=qux")
109
105
  end
110
106
  end
111
107
 
112
108
  def test_put_request
113
- run_app(lambda do |env|
109
+ server(app: lambda do |env|
114
110
  body = env["rack.input"].read
115
111
  [200, { "Content-Type" => "text/plain" }, [body]]
116
112
  end) do |uri|
117
- uri_obj = URI(uri)
118
- req = Net::HTTP::Put.new(uri_obj)
113
+ req = Net::HTTP::Put.new(uri)
119
114
  req.body = "put data"
120
- response = Net::HTTP.start(uri_obj.hostname, uri_obj.port) { |http| http.request(req) }
115
+ response = Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) }
121
116
  assert_equal "put data", response.body
122
117
  end
123
118
  end
124
119
 
125
120
  def test_custom_headers
126
- run_app(lambda do |env|
121
+ server(app: lambda do |env|
127
122
  header = env["HTTP_X_CUSTOM"] || ""
128
123
  [200, { "Content-Type" => "text/plain" }, [header]]
129
124
  end) do |uri|
130
- uri_obj = URI(uri)
131
- req = Net::HTTP::Get.new(uri_obj)
125
+ req = Net::HTTP::Get.new(uri)
132
126
  req["X-Custom"] = "custom-value"
133
- response = Net::HTTP.start(uri_obj.hostname, uri_obj.port) { |http| http.request(req) }
127
+ response = Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) }
134
128
  assert_equal "custom-value", response.body
135
129
  end
136
130
  end
@@ -138,48 +132,44 @@ class TestItsiServer < Minitest::Test
138
132
  def test_error_response
139
133
  response = nil
140
134
  capture_subprocess_io do
141
- run_app(lambda do |env|
135
+ server(app: lambda do |env|
142
136
  raise "Intentional error for testing"
143
- end) do |uri|
144
- response = Net::HTTP.get_response(uri)
137
+ end) do
138
+ response = get_resp("/")
145
139
  end
146
140
  end
147
141
  assert_equal "500", response.code
148
142
  end
149
143
 
150
144
  def test_redirect
151
- run_app(lambda do |env|
145
+ server(app: lambda do |env|
152
146
  [302, { "Location" => "http://example.com" }, []]
153
- end) do |uri|
154
- response = Net::HTTP.get_response(uri)
147
+ end) do
148
+ response = get_resp("/")
155
149
  assert_equal "302", response.code
156
150
  assert_equal "http://example.com", response["location"]
157
151
  end
158
152
  end
159
153
 
160
154
  def test_not_found
161
- run_app(lambda do |env|
155
+ server(app: lambda do |env|
162
156
  if env["PATH_INFO"] == "/"
163
157
  [200, { "Content-Type" => "text/plain" }, ["Home"]]
164
158
  else
165
159
  [404, { "Content-Type" => "text/plain" }, ["Not Found"]]
166
160
  end
167
- end) do |uri|
168
- uri.path = "/nonexistent"
169
- response = Net::HTTP.get_response(uri)
161
+ end) do
162
+ response = get_resp("/nonexistent")
170
163
  assert_equal "404", response.code
171
164
  assert_equal "Not Found", response.body
172
165
  end
173
166
  end
174
167
 
175
168
  def test_head_request
176
- run_app(lambda do |env|
169
+ server(app: lambda do |env|
177
170
  [200, { "Content-Type" => "text/plain", "Content-Length" => "13" }, ["Hello, World!"]]
178
- end) do |uri|
179
- uri_obj = URI(uri)
180
- response = Net::HTTP.start(uri_obj.hostname, uri_obj.port) do |http|
181
- http.head("/")
182
- end
171
+ end) do
172
+ response = head("/")
183
173
  assert_equal "200", response.code
184
174
  assert_empty response.body.to_s
185
175
  assert_equal "13", response["content-length"]
@@ -187,12 +177,10 @@ class TestItsiServer < Minitest::Test
187
177
  end
188
178
 
189
179
  def test_options_request
190
- run_app(lambda do |env|
180
+ server(app: lambda do |env|
191
181
  [200, { "Allow" => "GET,POST,OPTIONS", "Content-Type" => "text/plain" }, ["Options Response"]]
192
- end) do |uri|
193
- uri_obj = URI(uri)
194
- req = Net::HTTP::Options.new(uri_obj)
195
- response = Net::HTTP.start(uri_obj.hostname, uri_obj.port) { |http| http.request(req) }
182
+ end) do
183
+ response = options("/")
196
184
  assert_equal "200", response.code
197
185
  assert_equal "GET,POST,OPTIONS", response["allow"]
198
186
  assert_equal "Options Response", response.body
@@ -200,10 +188,10 @@ class TestItsiServer < Minitest::Test
200
188
  end
201
189
 
202
190
  def test_cookie_handling
203
- run_app(lambda do |env|
191
+ server(app: lambda do |env|
204
192
  [200, { "Content-Type" => "text/plain", "Set-Cookie" => "session=abc123; Path=/" }, ["Cookie Test"]]
205
- end) do |uri|
206
- response = Net::HTTP.get_response(uri)
193
+ end) do
194
+ response = get_resp('/')
207
195
  assert_equal "200", response.code
208
196
  assert_match(/session=abc123/, response["set-cookie"])
209
197
  assert_equal "Cookie Test", response.body
@@ -211,10 +199,10 @@ class TestItsiServer < Minitest::Test
211
199
  end
212
200
 
213
201
  def test_multiple_headers
214
- run_app(lambda do |env|
202
+ server(app: lambda do |env|
215
203
  [200, { "Content-Type" => "text/plain", "X-Example" => "one, two, three" }, ["Multiple Headers"]]
216
- end) do |uri|
217
- response = Net::HTTP.get_response(uri)
204
+ end) do
205
+ response = get_resp("/")
218
206
  assert_equal "200", response.code
219
207
  assert_equal "one, two, three", response["x-example"]
220
208
  assert_equal "Multiple Headers", response.body
@@ -223,30 +211,30 @@ class TestItsiServer < Minitest::Test
223
211
 
224
212
  def test_large_body
225
213
  large_text = "A" * 10_000
226
- run_app(lambda do |env|
214
+ server(app: lambda do |env|
227
215
  [200, { "Content-Type" => "text/plain", "Content-Length" => large_text.bytesize.to_s }, [large_text]]
228
- end) do |uri|
229
- response = Net::HTTP.get_response(uri)
216
+ end) do
217
+ response = get_resp("/")
230
218
  assert_equal "200", response.code
231
219
  assert_equal large_text, response.body
232
220
  end
233
221
  end
234
222
 
235
223
  def test_custom_status_code
236
- run_app(lambda do |env|
224
+ server(app: lambda do |env|
237
225
  [201, { "Content-Type" => "text/plain" }, ["Created"]]
238
- end) do |uri|
239
- response = Net::HTTP.get_response(uri)
226
+ end) do
227
+ response = get_resp("/")
240
228
  assert_equal "201", response.code
241
229
  assert_equal "Created", response.body
242
230
  end
243
231
  end
244
232
 
245
233
  def test_empty_body
246
- run_app(lambda do |env|
234
+ server(app: lambda do |env|
247
235
  [204, { "Content-Type" => "text/plain" }, []]
248
- end) do |uri|
249
- response = Net::HTTP.get_response(uri)
236
+ end) do
237
+ response = get_resp("/")
250
238
  assert_equal "204", response.code
251
239
  assert_nil response.body
252
240
  end
@@ -254,44 +242,43 @@ class TestItsiServer < Minitest::Test
254
242
 
255
243
  def test_utf8_response
256
244
  utf8_text = "こんにちは世界"
257
- run_app(lambda do |env|
245
+ server(app: lambda do |env|
258
246
  [200, { "Content-Type" => "text/plain; charset=utf-8" }, [utf8_text]]
259
- end) do |uri|
260
- response = Net::HTTP.get_response(uri)
247
+ end) do
248
+ response = get_resp("/")
261
249
  assert_equal "200", response.code
262
250
  assert_equal utf8_text, response.body.force_encoding("UTF-8")
263
251
  end
264
252
  end
265
253
 
266
254
  def test_custom_request_header
267
- run_app(lambda do |env|
255
+ server(app: lambda do |env|
268
256
  header_value = env["HTTP_X_MY_HEADER"] || ""
269
257
  [200, { "Content-Type" => "text/plain" }, [header_value]]
270
258
  end) do |uri|
271
- uri_obj = URI(uri)
272
- req = Net::HTTP::Get.new(uri_obj)
259
+
260
+ req = Net::HTTP::Get.new(uri)
273
261
  req["X-My-Header"] = "test-header"
274
- response = Net::HTTP.start(uri_obj.hostname, uri_obj.port) { |http| http.request(req) }
262
+ response = Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) }
275
263
  assert_equal "test-header", response.body
276
264
  end
277
265
  end
278
266
 
279
267
  def test_url_encoded_query_params
280
- run_app(lambda do |env|
268
+ server(app: lambda do |env|
281
269
  [200, { "Content-Type" => "text/plain" }, [env["QUERY_STRING"]]]
282
- end) do |uri|
283
- uri.query = "param=%C3%A9" # %C3%A9 represents 'é'
284
- assert_equal "param=%C3%A9", Net::HTTP.get(uri)
270
+ end) do
271
+ assert_equal "param=%C3%A9", get("/?param=%C3%A9")
285
272
  end
286
273
  end
287
274
 
288
275
  def test_https
289
- run_app(lambda do |env|
276
+ server(app: lambda do |env|
290
277
  [200, { "Content-Type" => "text/plain" }, ["Hello, HTTPS!"]]
291
278
  end, protocol: "https") do |uri|
292
279
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true,
293
280
  verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
294
- http.request(Net::HTTP::Get.new(uri))
281
+ http.request(Net::HTTP::Get.new("/"))
295
282
  end
296
283
  assert_equal "200", response.code
297
284
  assert_equal "Hello, HTTPS!", response.body
Binary file
Binary file
data/lib/itsi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Itsi
2
- VERSION = "0.1.19"
2
+ VERSION = "0.1.20"
3
3
  end
data/tasks.txt CHANGED
@@ -1,23 +1,21 @@
1
- -- Stretch goals:
2
- - Single acceptor
3
- - H3
4
- - OpenAPI gen
5
-
6
- Feature complete. Polish and Release (At Lake):
7
- - Establish pattern for separate files for dsl feature, accumulated errors, ruby-dsl and "Did you mean" function.
8
- - Always do dry-run before reloading app.
9
- - More elegant route printing (middleware)
10
- - Fix default config (make sane choices)
11
-
12
- -- Feature breakdown. For each feature make sure we have
1
+ Feature complete! Polish and Release (At Lake):
2
+ -- Feature breakdown. Per feature make sure we have
13
3
  --- Clean Code
4
+ --- Debug logging
14
5
  --- Ultra robust config, with sane and safe defaults.
15
6
  --- Complete Documentation (Readme + Blog)
7
+ --- Nice middleware printing
16
8
  --- Tests.
17
- --- Debug Logging
18
- --- Parameters for everything
19
- --- No unwrap
20
- --- Beautiful LSP and did you mean integration
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.
21
19
 
22
20
  - Feature List:
23
21
  -- HTTP
@@ -30,12 +28,13 @@ Feature complete. Polish and Release (At Lake):
30
28
  -- Streaming Bodies
31
29
  -- Rate Limiter
32
30
  -- Auth JWT/Basic/API
33
- -- gRPC
34
- -- File Watcher
35
- -- Allow/Deny
31
+ -- gRPC Server (Plug in existing Ruby gRPC handlers)
32
+ -- File Watcher and auto-reloading
33
+ -- Allow/Deny lists
36
34
  -- Cache control
37
35
  -- compression
38
36
  -- CORS
37
+ -- CSP Reporting
39
38
  -- etag
40
39
  -- Intrusion Protection
41
40
  -- Proxy
@@ -48,13 +47,11 @@ Feature complete. Polish and Release (At Lake):
48
47
  -- Logging
49
48
  -- Cluster
50
49
  -- Single
51
- -- Restart
52
- -- Stream body
53
- -- Thread high/low
50
+ -- Graceful and Hot Restart
51
+ -- Streaming body
54
52
  -- Unix Sockets
55
- -- Uneven request distribution (Retry central acceptor, core affinity)
56
- -- Mini apps, one-file sites.
57
- -- Lsp and Did you mean
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.
58
55
  -- Author Final default Itsi-file
59
56
  -- Add notes on: PGGSSENCMODE="disable" and OBJC_DISABLE_INITIALIZE_FORK_SAFETY=
60
57
 
@@ -63,10 +60,21 @@ Later:
63
60
  - Even faster Hash creation for Rack
64
61
  - Image resizer
65
62
  - First class Rackless Websockets
66
- - Implement better Request timeouts (non-fiber mode. Kill stuck threads. Default to nil)
67
63
  - Print out warning if we can detect that a location block will never be hit.
68
64
  - Built in obs Dashboard + Stats
69
65
  - Support UDP
70
66
  - Support unix socket proxy
71
- -- WASM pluggable middleware
72
- -- gRPC proxying
67
+ - WASM pluggable middleware
68
+ - 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