itsi 0.1.18 → 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 (394) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Cargo.lock +924 -385
  4. data/README.md +67 -55
  5. data/crates/itsi_server/Cargo.toml +7 -4
  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 +932 -382
  48. data/gems/server/README.md +2 -0
  49. data/gems/server/exe/itsi +5 -5
  50. data/gems/server/lib/itsi/http_request.rb +1 -0
  51. data/gems/server/lib/itsi/server/config/config_helpers.rb +93 -0
  52. data/gems/server/lib/itsi/server/config/dsl.rb +98 -37
  53. data/gems/server/lib/itsi/server/config/known_paths/KitchensinkDirectories.txt +2346 -0
  54. data/gems/server/lib/itsi/server/config/known_paths/Randomfiles.txt +24 -0
  55. data/gems/server/lib/itsi/server/config/known_paths/UnixDotfiles.txt +52 -0
  56. data/gems/server/lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt +29 -0
  57. data/gems/server/lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt +1668 -0
  58. data/gems/server/lib/itsi/server/config/known_paths/backdoors/shells.txt +1167 -0
  59. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt +7 -0
  60. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt +6 -0
  61. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt +79 -0
  62. data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt +3948 -0
  63. data/gems/server/lib/itsi/server/config/known_paths/cms/README.md +5 -0
  64. data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_plugins.txt +6320 -0
  65. data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_themes.txt +828 -0
  66. data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_plugins.txt +224 -0
  67. data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_themes.txt +30 -0
  68. data/gems/server/lib/itsi/server/config/known_paths/cms/php-nuke.txt +2142 -0
  69. data/gems/server/lib/itsi/server/config/known_paths/cms/wordpress.txt +1566 -0
  70. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt +46 -0
  71. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins.txt +13366 -0
  72. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt +68662 -0
  73. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt +225 -0
  74. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.readme +12 -0
  75. data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.txt +7336 -0
  76. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt +17576 -0
  77. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt +80 -0
  78. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt +14 -0
  79. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt +865 -0
  80. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt +186 -0
  81. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt +30 -0
  82. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt +93 -0
  83. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt +1918 -0
  84. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt +8 -0
  85. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt +56180 -0
  86. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt +62290 -0
  87. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt +2367 -0
  88. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt +2450 -0
  89. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt +35323 -0
  90. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt +37037 -0
  91. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt +107982 -0
  92. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt +119600 -0
  93. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt +26593 -0
  94. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt +30009 -0
  95. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt +1233 -0
  96. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt +1289 -0
  97. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt +16243 -0
  98. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt +17128 -0
  99. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt +56293 -0
  100. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt +63087 -0
  101. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt +17776 -0
  102. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt +20122 -0
  103. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt +914 -0
  104. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt +963 -0
  105. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt +10848 -0
  106. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt +11424 -0
  107. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt +38267 -0
  108. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt +43003 -0
  109. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt +445 -0
  110. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt +36 -0
  111. data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt +44 -0
  112. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/Logins.txt +71 -0
  113. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/cfm.txt +294 -0
  114. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/html.txt +295 -0
  115. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/jsp.txt +294 -0
  116. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/php.txt +294 -0
  117. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt +294 -0
  118. data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt +294 -0
  119. data/gems/server/lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt +47 -0
  120. data/gems/server/lib/itsi/server/config/known_paths/php/PHP.txt +30 -0
  121. data/gems/server/lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt +5 -0
  122. data/gems/server/lib/itsi/server/config/known_paths/proxy-conf.txt +31 -0
  123. data/gems/server/lib/itsi/server/config/known_paths/tftp.txt +79 -0
  124. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt +86 -0
  125. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt +16 -0
  126. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt +101 -0
  127. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt +47 -0
  128. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt +16 -0
  129. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt +111 -0
  130. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt +390 -0
  131. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt +38 -0
  132. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt +239 -0
  133. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt +2 -0
  134. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt +578 -0
  135. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt +187 -0
  136. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt +5 -0
  137. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt +13 -0
  138. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt +3 -0
  139. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt +1937 -0
  140. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt +206 -0
  141. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt +18 -0
  142. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt +60 -0
  143. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt +192 -0
  144. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/README.md +6 -0
  145. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt +121 -0
  146. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt +463 -0
  147. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt +1707 -0
  148. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt +19 -0
  149. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt +51 -0
  150. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt +35 -0
  151. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt +73 -0
  152. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt +160 -0
  153. data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt +366 -0
  154. data/gems/server/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt +30 -0
  155. data/gems/server/lib/itsi/server/config/known_paths.rb +17 -0
  156. data/gems/server/lib/itsi/server/config/middleware/_index.md +54 -0
  157. data/gems/server/lib/itsi/server/config/middleware/log_requests.md +63 -0
  158. data/gems/server/lib/itsi/server/config/middleware/log_requests.rb +33 -0
  159. data/gems/server/lib/itsi/server/config/middleware.rb +9 -0
  160. data/gems/server/lib/itsi/server/config/option.rb +9 -0
  161. data/gems/server/lib/itsi/server/config/options/_index.md +36 -0
  162. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.md +35 -0
  163. data/gems/server/lib/itsi/server/config/options/fiber_scheduler.rb +18 -0
  164. data/gems/server/lib/itsi/server/config/options/threads.md +39 -0
  165. data/gems/server/lib/itsi/server/config/options/threads.rb +17 -0
  166. data/gems/server/lib/itsi/server/config/options/workers.md +43 -0
  167. data/gems/server/lib/itsi/server/config/options/workers.rb +17 -0
  168. data/gems/server/lib/itsi/server/config/typed_struct.rb +203 -0
  169. data/gems/server/lib/itsi/server/config.rb +124 -30
  170. data/gems/server/lib/itsi/server/signal_trap.rb +5 -1
  171. data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +1 -1
  172. data/gems/server/lib/itsi/server/version.rb +1 -1
  173. data/gems/server/lib/itsi/server.rb +27 -6
  174. data/gems/server/lib/ruby_lsp/itsi/addon.rb +64 -48
  175. data/gems/server/test/helpers/test_helper.rb +64 -5
  176. data/gems/server/test/middleware/test_log_requests.rb +17 -0
  177. data/gems/server/test/options/test_threads.rb +15 -0
  178. data/gems/server/test/options/test_workers.rb +18 -0
  179. data/gems/server/test/test_itsi_server.rb +81 -94
  180. data/itsi-scheduler-100.png +0 -0
  181. data/itsi-server-100.png +0 -0
  182. data/lib/itsi/version.rb +1 -1
  183. data/tasks.txt +36 -28
  184. metadata +147 -215
  185. data/crates/_index.md +0 -0
  186. data/crates/itsi_server/src/ruby_types/README.md +0 -21
  187. data/crates/itsi_server/test.md +0 -14
  188. data/docs/Itsi.rb +0 -17
  189. data/docs/content/about.md +0 -6
  190. data/docs/content/docs/_index.md +0 -18
  191. data/docs/content/docs/first-page.md +0 -9
  192. data/docs/content/docs/folder/_index.md +0 -10
  193. data/docs/content/docs/folder/leaf.md +0 -7
  194. data/foo/Itsi.rb +0 -122
  195. data/gems/_index.md +0 -18
  196. data/gems/scheduler/CHANGELOG.md +0 -5
  197. data/gems/scheduler/CODE_OF_CONDUCT.md +0 -139
  198. data/gems/scheduler/LICENSE.txt +0 -21
  199. data/gems/scheduler/_index.md +0 -7
  200. data/gems/server/CHANGELOG.md +0 -10
  201. data/gems/server/CODE_OF_CONDUCT.md +0 -139
  202. data/gems/server/LICENSE.txt +0 -21
  203. data/gems/server/_index.md +0 -6
  204. data/sandbox/README.md +0 -5
  205. data/sandbox/deploy/main.tf +0 -238
  206. data/sandbox/deploy/outputs.tf +0 -4
  207. data/sandbox/deploy/vars.tf +0 -11
  208. data/sandbox/falcon_benchmark/Gemfile +0 -10
  209. data/sandbox/falcon_benchmark/Gemfile.lock +0 -140
  210. data/sandbox/falcon_benchmark/config.ru +0 -54
  211. data/sandbox/itsi_file/Gemfile +0 -13
  212. data/sandbox/itsi_file/Gemfile.lock +0 -111
  213. data/sandbox/itsi_file/Itsi.rb +0 -473
  214. data/sandbox/itsi_file/call.json +0 -1
  215. data/sandbox/itsi_file/echo_client/Gemfile +0 -10
  216. data/sandbox/itsi_file/echo_client/Gemfile.lock +0 -27
  217. data/sandbox/itsi_file/echo_client/README.md +0 -95
  218. data/sandbox/itsi_file/echo_client/echo_client.rb +0 -164
  219. data/sandbox/itsi_file/echo_client/gen_proto.sh +0 -17
  220. data/sandbox/itsi_file/echo_client/lib/echo_pb.rb +0 -16
  221. data/sandbox/itsi_file/echo_client/lib/echo_services_pb.rb +0 -29
  222. data/sandbox/itsi_file/echo_client/run_client.rb +0 -64
  223. data/sandbox/itsi_file/echo_client/test_compressions.sh +0 -20
  224. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile +0 -10
  225. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile.lock +0 -79
  226. data/sandbox/itsi_file/echo_service_nonitsi/echo.proto +0 -26
  227. data/sandbox/itsi_file/echo_service_nonitsi/echo_pb.rb +0 -16
  228. data/sandbox/itsi_file/echo_service_nonitsi/echo_services_pb.rb +0 -29
  229. data/sandbox/itsi_file/echo_service_nonitsi/server.rb +0 -52
  230. data/sandbox/itsi_file/error.html +0 -2
  231. data/sandbox/itsi_file/organisations_controller.rb +0 -20
  232. data/sandbox/itsi_file/public/assets/image.png +0 -0
  233. data/sandbox/itsi_sandbox_async/Gemfile +0 -10
  234. data/sandbox/itsi_sandbox_async/Gemfile.lock +0 -69
  235. data/sandbox/itsi_sandbox_async/config.ru +0 -9
  236. data/sandbox/itsi_sandbox_hanami/.env +0 -2
  237. data/sandbox/itsi_sandbox_hanami/.gitignore +0 -6
  238. data/sandbox/itsi_sandbox_hanami/.rspec +0 -1
  239. data/sandbox/itsi_sandbox_hanami/Gemfile +0 -49
  240. data/sandbox/itsi_sandbox_hanami/Gemfile.lock +0 -440
  241. data/sandbox/itsi_sandbox_hanami/Guardfile +0 -9
  242. data/sandbox/itsi_sandbox_hanami/Procfile.dev +0 -2
  243. data/sandbox/itsi_sandbox_hanami/README.md +0 -1
  244. data/sandbox/itsi_sandbox_hanami/Rakefile +0 -3
  245. data/sandbox/itsi_sandbox_hanami/app/action.rb +0 -12
  246. data/sandbox/itsi_sandbox_hanami/app/actions/.keep +0 -0
  247. data/sandbox/itsi_sandbox_hanami/app/assets/css/app.css +0 -5
  248. data/sandbox/itsi_sandbox_hanami/app/assets/images/favicon.ico +0 -0
  249. data/sandbox/itsi_sandbox_hanami/app/assets/js/app.js +0 -1
  250. data/sandbox/itsi_sandbox_hanami/app/db/relation.rb +0 -10
  251. data/sandbox/itsi_sandbox_hanami/app/db/repo.rb +0 -10
  252. data/sandbox/itsi_sandbox_hanami/app/db/struct.rb +0 -10
  253. data/sandbox/itsi_sandbox_hanami/app/operation.rb +0 -9
  254. data/sandbox/itsi_sandbox_hanami/app/relations/.keep +0 -0
  255. data/sandbox/itsi_sandbox_hanami/app/repos/.keep +0 -0
  256. data/sandbox/itsi_sandbox_hanami/app/structs/.keep +0 -0
  257. data/sandbox/itsi_sandbox_hanami/app/templates/layouts/app.html.erb +0 -14
  258. data/sandbox/itsi_sandbox_hanami/app/view.rb +0 -9
  259. data/sandbox/itsi_sandbox_hanami/app/views/helpers.rb +0 -10
  260. data/sandbox/itsi_sandbox_hanami/bin/dev +0 -8
  261. data/sandbox/itsi_sandbox_hanami/config/app.rb +0 -8
  262. data/sandbox/itsi_sandbox_hanami/config/assets.js +0 -16
  263. data/sandbox/itsi_sandbox_hanami/config/db/migrate/.keep +0 -0
  264. data/sandbox/itsi_sandbox_hanami/config/db/seeds.rb +0 -15
  265. data/sandbox/itsi_sandbox_hanami/config/puma.rb +0 -47
  266. data/sandbox/itsi_sandbox_hanami/config/routes.rb +0 -7
  267. data/sandbox/itsi_sandbox_hanami/config/settings.rb +0 -9
  268. data/sandbox/itsi_sandbox_hanami/config.ru +0 -5
  269. data/sandbox/itsi_sandbox_hanami/db/.keep +0 -0
  270. data/sandbox/itsi_sandbox_hanami/lib/itsi_hanami/types.rb +0 -11
  271. data/sandbox/itsi_sandbox_hanami/lib/tasks/.keep +0 -0
  272. data/sandbox/itsi_sandbox_hanami/package-lock.json +0 -946
  273. data/sandbox/itsi_sandbox_hanami/package.json +0 -8
  274. data/sandbox/itsi_sandbox_hanami/spec/requests/root_spec.rb +0 -11
  275. data/sandbox/itsi_sandbox_hanami/spec/spec_helper.rb +0 -9
  276. data/sandbox/itsi_sandbox_hanami/spec/support/db/cleaning.rb +0 -42
  277. data/sandbox/itsi_sandbox_hanami/spec/support/db.rb +0 -10
  278. data/sandbox/itsi_sandbox_hanami/spec/support/features.rb +0 -5
  279. data/sandbox/itsi_sandbox_hanami/spec/support/operations.rb +0 -8
  280. data/sandbox/itsi_sandbox_hanami/spec/support/requests.rb +0 -13
  281. data/sandbox/itsi_sandbox_hanami/spec/support/rspec.rb +0 -61
  282. data/sandbox/itsi_sandbox_rack/Gemfile +0 -17
  283. data/sandbox/itsi_sandbox_rack/Gemfile.lock +0 -153
  284. data/sandbox/itsi_sandbox_rack/config.ru +0 -5
  285. data/sandbox/itsi_sandbox_rack_lint/Gemfile +0 -7
  286. data/sandbox/itsi_sandbox_rack_lint/Gemfile.lock +0 -27
  287. data/sandbox/itsi_sandbox_rack_lint/config.ru +0 -3
  288. data/sandbox/itsi_sandbox_rails/.dockerignore +0 -48
  289. data/sandbox/itsi_sandbox_rails/.gitattributes +0 -9
  290. data/sandbox/itsi_sandbox_rails/.github/dependabot.yml +0 -12
  291. data/sandbox/itsi_sandbox_rails/.github/workflows/ci.yml +0 -90
  292. data/sandbox/itsi_sandbox_rails/.gitignore +0 -35
  293. data/sandbox/itsi_sandbox_rails/.rubocop.yml +0 -8
  294. data/sandbox/itsi_sandbox_rails/.ruby-version +0 -1
  295. data/sandbox/itsi_sandbox_rails/Dockerfile +0 -69
  296. data/sandbox/itsi_sandbox_rails/Gemfile +0 -66
  297. data/sandbox/itsi_sandbox_rails/Gemfile.lock +0 -429
  298. data/sandbox/itsi_sandbox_rails/README.md +0 -24
  299. data/sandbox/itsi_sandbox_rails/Rakefile +0 -6
  300. data/sandbox/itsi_sandbox_rails/app/assets/config/manifest.js +0 -4
  301. data/sandbox/itsi_sandbox_rails/app/assets/images/.keep +0 -0
  302. data/sandbox/itsi_sandbox_rails/app/assets/stylesheets/application.css +0 -15
  303. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/channel.rb +0 -4
  304. data/sandbox/itsi_sandbox_rails/app/channels/application_cable/connection.rb +0 -4
  305. data/sandbox/itsi_sandbox_rails/app/controllers/application_controller.rb +0 -4
  306. data/sandbox/itsi_sandbox_rails/app/controllers/concerns/.keep +0 -0
  307. data/sandbox/itsi_sandbox_rails/app/controllers/home_controller.rb +0 -66
  308. data/sandbox/itsi_sandbox_rails/app/controllers/live_controller.rb +0 -40
  309. data/sandbox/itsi_sandbox_rails/app/controllers/uploads_controller.rb +0 -29
  310. data/sandbox/itsi_sandbox_rails/app/helpers/application_helper.rb +0 -2
  311. data/sandbox/itsi_sandbox_rails/app/javascript/application.js +0 -3
  312. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/application.js +0 -9
  313. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/hello_controller.js +0 -7
  314. data/sandbox/itsi_sandbox_rails/app/javascript/controllers/index.js +0 -4
  315. data/sandbox/itsi_sandbox_rails/app/jobs/application_job.rb +0 -7
  316. data/sandbox/itsi_sandbox_rails/app/mailers/application_mailer.rb +0 -4
  317. data/sandbox/itsi_sandbox_rails/app/models/application_record.rb +0 -3
  318. data/sandbox/itsi_sandbox_rails/app/models/concerns/.keep +0 -0
  319. data/sandbox/itsi_sandbox_rails/app/models/post.rb +0 -2
  320. data/sandbox/itsi_sandbox_rails/app/views/layouts/application.html.erb +0 -23
  321. data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.html.erb +0 -13
  322. data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.text.erb +0 -1
  323. data/sandbox/itsi_sandbox_rails/app/views/pwa/manifest.json.erb +0 -22
  324. data/sandbox/itsi_sandbox_rails/app/views/pwa/service-worker.js +0 -26
  325. data/sandbox/itsi_sandbox_rails/bin/brakeman +0 -7
  326. data/sandbox/itsi_sandbox_rails/bin/bundle +0 -109
  327. data/sandbox/itsi_sandbox_rails/bin/docker-entrypoint +0 -13
  328. data/sandbox/itsi_sandbox_rails/bin/importmap +0 -4
  329. data/sandbox/itsi_sandbox_rails/bin/rails +0 -4
  330. data/sandbox/itsi_sandbox_rails/bin/rake +0 -4
  331. data/sandbox/itsi_sandbox_rails/bin/rubocop +0 -8
  332. data/sandbox/itsi_sandbox_rails/bin/setup +0 -37
  333. data/sandbox/itsi_sandbox_rails/config/application.rb +0 -27
  334. data/sandbox/itsi_sandbox_rails/config/boot.rb +0 -4
  335. data/sandbox/itsi_sandbox_rails/config/cable.yml +0 -10
  336. data/sandbox/itsi_sandbox_rails/config/credentials.yml.enc +0 -1
  337. data/sandbox/itsi_sandbox_rails/config/database.yml +0 -30
  338. data/sandbox/itsi_sandbox_rails/config/environment.rb +0 -5
  339. data/sandbox/itsi_sandbox_rails/config/environments/development.rb +0 -82
  340. data/sandbox/itsi_sandbox_rails/config/environments/production.rb +0 -106
  341. data/sandbox/itsi_sandbox_rails/config/environments/test.rb +0 -67
  342. data/sandbox/itsi_sandbox_rails/config/importmap.rb +0 -7
  343. data/sandbox/itsi_sandbox_rails/config/initializers/assets.rb +0 -12
  344. data/sandbox/itsi_sandbox_rails/config/initializers/content_security_policy.rb +0 -25
  345. data/sandbox/itsi_sandbox_rails/config/initializers/filter_parameter_logging.rb +0 -8
  346. data/sandbox/itsi_sandbox_rails/config/initializers/inflections.rb +0 -16
  347. data/sandbox/itsi_sandbox_rails/config/initializers/permissions_policy.rb +0 -13
  348. data/sandbox/itsi_sandbox_rails/config/locales/en.yml +0 -31
  349. data/sandbox/itsi_sandbox_rails/config/puma.rb +0 -34
  350. data/sandbox/itsi_sandbox_rails/config/routes.rb +0 -23
  351. data/sandbox/itsi_sandbox_rails/config/storage.yml +0 -34
  352. data/sandbox/itsi_sandbox_rails/config.ru +0 -6
  353. data/sandbox/itsi_sandbox_rails/db/migrate/20250301041554_create_posts.rb +0 -10
  354. data/sandbox/itsi_sandbox_rails/db/schema.rb +0 -23
  355. data/sandbox/itsi_sandbox_rails/db/seeds.rb +0 -9
  356. data/sandbox/itsi_sandbox_rails/lib/assets/.keep +0 -0
  357. data/sandbox/itsi_sandbox_rails/lib/tasks/.keep +0 -0
  358. data/sandbox/itsi_sandbox_rails/log/.keep +0 -0
  359. data/sandbox/itsi_sandbox_rails/public/404.html +0 -67
  360. data/sandbox/itsi_sandbox_rails/public/406-unsupported-browser.html +0 -66
  361. data/sandbox/itsi_sandbox_rails/public/422.html +0 -67
  362. data/sandbox/itsi_sandbox_rails/public/500.html +0 -66
  363. data/sandbox/itsi_sandbox_rails/public/icon.png +0 -0
  364. data/sandbox/itsi_sandbox_rails/public/icon.svg +0 -3
  365. data/sandbox/itsi_sandbox_rails/public/robots.txt +0 -1
  366. data/sandbox/itsi_sandbox_rails/storage/.keep +0 -0
  367. data/sandbox/itsi_sandbox_rails/test/application_system_test_case.rb +0 -5
  368. data/sandbox/itsi_sandbox_rails/test/channels/application_cable/connection_test.rb +0 -13
  369. data/sandbox/itsi_sandbox_rails/test/controllers/.keep +0 -0
  370. data/sandbox/itsi_sandbox_rails/test/fixtures/files/.keep +0 -0
  371. data/sandbox/itsi_sandbox_rails/test/helpers/.keep +0 -0
  372. data/sandbox/itsi_sandbox_rails/test/integration/.keep +0 -0
  373. data/sandbox/itsi_sandbox_rails/test/mailers/.keep +0 -0
  374. data/sandbox/itsi_sandbox_rails/test/models/.keep +0 -0
  375. data/sandbox/itsi_sandbox_rails/test/system/.keep +0 -0
  376. data/sandbox/itsi_sandbox_rails/test/test_helper.rb +0 -15
  377. data/sandbox/itsi_sandbox_rails/tmp/.keep +0 -0
  378. data/sandbox/itsi_sandbox_rails/tmp/pids/.keep +0 -0
  379. data/sandbox/itsi_sandbox_rails/tmp/storage/.keep +0 -0
  380. data/sandbox/itsi_sandbox_rails/vendor/.keep +0 -0
  381. data/sandbox/itsi_sandbox_rails/vendor/javascript/.keep +0 -0
  382. data/sandbox/itsi_sandbox_roda/Gemfile +0 -5
  383. data/sandbox/itsi_sandbox_roda/Gemfile.lock +0 -37
  384. data/sandbox/itsi_sandbox_roda/config.ru +0 -39
  385. data/sandbox/itsi_sinatra/Gemfile +0 -9
  386. data/sandbox/itsi_sinatra/Gemfile.lock +0 -81
  387. data/sandbox/itsi_sinatra/app.rb +0 -8
  388. data/sandbox/pebble/docker-compose.yml +0 -11
  389. data/sandbox/static_files/.env +0 -1
  390. data/sandbox/static_files/404.html +0 -25
  391. data/sandbox/static_files/_DSC0102.NEF.jpg +0 -0
  392. data/sandbox/static_files/about.html +0 -68
  393. data/sandbox/static_files/tiny.html +0 -1
  394. data/sandbox/static_files/writebook.zip +0 -0
@@ -1,473 +0,0 @@
1
- workers 1
2
- threads 1
3
- fiber_scheduler true
4
-
5
- scheduler_threads 1
6
-
7
- request_timeout 2
8
-
9
- preload false
10
-
11
- bind 'http://localhost:3000'
12
-
13
- shutdown_timeout 10
14
-
15
- auto_reload_config!
16
-
17
- log_format :plain
18
-
19
- get "/root" do |req|
20
- req.ok "Got from root"
21
- end
22
-
23
-
24
- location "app" do
25
- location "/users" do
26
- get "/:id" do |req|
27
- req.ok "Got user #{req.url_params[:id]}"
28
- end
29
- end
30
-
31
- run(->(env){
32
- [200, {}, ["Fallback Rack app"]]
33
- })
34
- end
35
-
36
-
37
- static_assets \
38
- relative_path: true,
39
- root_dir: "public",
40
- not_found_behavior: "fallthrough",
41
- try_html_extension: true,
42
- auto_index: true,
43
- max_file_size_in_memory: 1024 * 1024,
44
- max_files_in_memory: 1000,
45
- file_check_interval: 5,
46
- serve_hidden_files: false
47
-
48
- run(->(env){
49
- [200, {}, ["Final Fallback Rack App"]]
50
- })
51
- # location %q{/foo/:id(\d+)/test/:name/bla} do
52
- # get "/" do |req|
53
- # req.respond json: req.url_params
54
- # end
55
- # end
56
-
57
- # location "blocking" do
58
- # run ->(env){
59
- # sleep 0.25
60
- # [200, {}, [:ok]]
61
- # }
62
- # end
63
-
64
- # location "nonblocking" do
65
- # run(->(env){
66
- # sleep 0.25
67
- # [200, {}, [:ok]]
68
- # }, nonblocking: true)
69
- # end
70
-
71
- # require_relative 'echo_service/echo_service_impl'
72
-
73
- # grpc EchoServiceImpl.new, nonblocking: false do
74
- # end
75
-
76
- # location "foo" do
77
- # static_response code: 200, headers: [["Headers","Foo"]], body: "This is my body"
78
- # end
79
-
80
- # location "/public" do
81
- # static_assets relative_path: true, root_dir: "public", not_found_behavior: {error: 'not_found'},
82
- # try_html_extension: true, auto_index: true, max_file_size_in_memory: 1024 * 1024,
83
- # # Maximum number of files to keep in memory cache
84
- # max_files_in_memory: 1000,
85
- # # Check for file modifications every 5 seconds
86
- # file_check_interval: 5,
87
- # serve_hidden_files: false
88
- # end
89
-
90
- # require 'debug'
91
- # require 'date'
92
-
93
- # UserSchema = {
94
- # id: Integer,
95
- # name: String
96
- # }
97
-
98
-
99
- # ResultSchema = {
100
- # status_code: Integer,
101
- # user: UserSchema
102
- # }
103
-
104
- # module UserController
105
-
106
- # def self.create(req)
107
- # req.ok \
108
- # json: {
109
- # status: :created,
110
- # user: user
111
- # }
112
- # end
113
-
114
- # def self.create(req, params: UserSchema, return_type: ResultSchema)
115
- # req.ok \
116
- # json: {
117
- # status_code: 5,
118
- # user: params
119
- # },
120
- # as: return_type
121
- # end
122
-
123
- # def self.create_no_type(req, params)
124
- # req.ok json: "foo"
125
- # end
126
-
127
- # end
128
-
129
- # controller UserController
130
- # post "/", :create
131
- # get "/" do |req, return_type: ResultSchema|
132
- # req.ok as: return_type, json: {
133
- # status_code: 5,
134
- # user: {
135
- # id: 3,
136
- # name: "Foo Bar"
137
- # }
138
- # }
139
- # end
140
-
141
- # post "/nt", :create_no_type
142
-
143
- # location "/rack" do
144
- # run(->(env){
145
- # sleep 5
146
- # [200, {}, [:ok]]
147
- # })
148
- # end
149
- # location '*' do
150
- # proxy to: 'http://{host}{path_and_query}', backends: ['127.0.0.1:8082','127.0.0.1:8080', '127.0.0.1:8081'], headers: {}, verify_ssl: false, timeout: 1, tls_sni: false, backend_priority: 'round_robin'
151
- # end
152
-
153
- # # require_relative 'echo_service/echo_service_impl'
154
-
155
- # # grpc EchoServiceImpl.new do
156
-
157
- # # end
158
-
159
- # location '/' do
160
- # # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
161
- # max_body max_size: 5
162
- # get '/' do |req|
163
- # req.respond('Foo')
164
- # end
165
- # etag type: 'weak', algorithm: 'md5', min_body_size: 0
166
- # post '/' do |req|
167
- # puts "Post to me!"
168
- # req.respond('Foo')
169
- # end
170
- # end
171
-
172
- # location '/' do
173
- # end
174
- # rate_limit requests: 5, seconds: 5, key: 'address', store_config: { redis: { connection_url: 'redis://localhost:6379/0' } }, error_response: { plaintext: 'no way', code: 429, default: 'plaintext' }
175
-
176
- #
177
-
178
- # static_assets\
179
- # relative_path: true,
180
- # root_dir: 'spa/dist',
181
- # # # Only allow certain file extensions
182
- # # allowed_extensions: %w[css js jpg jpeg png gif svg ico woff woff2 ttf
183
- # # otf html],
184
- # # Return a 404 error if file is not found
185
- # not_found_behavior: { index: 'index.html' },
186
- # # Enable auto-indexing of directories
187
- # auto_index: true,
188
- # # Try adding .html extension to extensionless URLs
189
- # try_html_extension: true,
190
- # # Files under this size are cached in memory
191
- # max_file_size_in_memory: 1024 * 1024, # 1MB
192
- # # Maximum number of files to keep in memory cache
193
- # max_files_in_memory: 1000,
194
- # # Check for file modifications every 5 seconds
195
- # file_check_interval: 5,
196
- # # Add custom headers to all responses
197
- # headers: {
198
- # 'Cache-Control' => 'public, max-age=86400',
199
- # 'X-Content-Type-Options' => 'nosniff'
200
- # }
201
-
202
- # run(lambda { |env|
203
- # [200, {}, ["I'm a fallback"]]
204
- # })
205
-
206
- # def user_serve(request)
207
- # response = request.response
208
- # response.status = 200
209
- # response.add_header('Content-Type', 'text/plain')
210
- # response << 'Hello, user!'
211
- # response.close
212
- # end
213
-
214
- # def user_create(request)
215
- # response = request.response
216
- # response.status = 201
217
- # response.add_header('Content-Type', 'text/plain')
218
- # response << 'User created!'
219
- # response.close
220
- # end
221
-
222
- # location "/etag-test" do
223
- # etag type: 'strong', algorithm: 'sha256', min_body_size: 0
224
-
225
- # get '/' do |req|
226
- # # Fixed content that will generate the same ETag each time
227
- # content = "This is a fixed response that will always have the same ETag."
228
-
229
- # # Add a timestamp as a comment to see the response is fresh
230
- # resp = req.response
231
- # req.respond("Content: #{content}.# Generated at: #{Time.now}")
232
- # end
233
- # end
234
-
235
- # location "/cached-with-etag" do
236
- # # Set up caching parameters
237
- # cache_control max_age: 3600, public: true, vary: ['Accept-Encoding']
238
-
239
- # # Add ETags for cache validation
240
- # etag type: 'weak', algorithm: 'md5', min_body_size: 0
241
-
242
- # get '/' do |req|
243
- # req.respond("This response will have both cache headers and an ETag.")
244
- # end
245
- # end
246
-
247
- # location "/" do
248
- # intrusion_protection banned_time_seconds: 5, banned_url_patterns: [/\/admin/, /\/secret/], store_config: { redis: { connection_url: 'redis://localhost:6379/0' } }, error_response: { plaintext: 'no way', code: 403, default: 'plaintext' }
249
-
250
- # # Example for API endpoints with ETags
251
- # location "/api" do
252
- # etag type: 'weak', algorithm: 'md5', min_body_size: 0
253
- # get '/users/id' do |req|
254
- # user_id = 5
255
- # req.respond("User data for #{user_id}")
256
- # end
257
- # end
258
-
259
- # location "/hey" do
260
- # location "/world*" do
261
- # request_headers additions: {"X-Custom-Req" => ["Foo", "Bar", "Baz"]}, removals: [""]
262
- # response_headers additions: {"X-Custom-Resp" => ["Foo", "Bar"]}, removals: []
263
- # rate_limit requests: 5, seconds: 30, key: 'address', store_config: { redis: { connection_url: 'redis://localhost:6379/0' } }, error_response: { plaintext: 'no way', code: 429, default: 'plaintext' }
264
- # post '/' do |req|
265
- # puts "I'm a post!"
266
- # req.respond("Post successful!")
267
- # end
268
- # get '/' do |req|
269
- # req.respond("Is this still fast?")
270
- # end
271
- # end
272
- # end
273
-
274
- # # Add a new location with cache_control middleware
275
- # location "/cached" do
276
- # cache_control max_age: 3600, public: true, vary: ['Accept-Encoding']
277
- # get '/' do |req|
278
- # req.respond("This content is cached for 1 hour.")
279
- # end
280
- # end
281
-
282
- # location "/etag" do
283
- # etag enabled: true, etag_type: 'strong', hash_algorithm: 'sha256', min_body_size: 0
284
- # get '/' do |req|
285
- # # Create a response large enough to be worth ETagging
286
- # content = "This content will have ETags. " * 20
287
- # req.respond(content)
288
- # end
289
- # end
290
-
291
- # location "/jwt" do
292
- # auth_jwt token_source: { header: { name: 'Authorization', prefix: 'Bearer ' } },
293
- # verifiers: {
294
- # 'hs256' => ["1V6nZzztO/F6Y3XAYXJ1I37AAXCJ/V7EVHJoVnD8lr4="],
295
- # 'rs256' => [%Q{
296
- # -----BEGIN PUBLIC KEY-----
297
- # MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs8XK+wP7nnKkOGXP6+il
298
- # +JDQMFRV8zoVg1BYYapGla6AzR0YCV6xq28lNB1FE8C6xhCEKYiOlnkXZwj+a4UW
299
- # q4Bex/U9qvfza0zGxHlTnQT9T+vjwXNsWYuefYC4EAZjEd6bGeP23De128QfhlLc
300
- # oQpcfW32/e8KjSYtn8rtWuKV6Anqf92o9zEbVn8y2OZwZbiW0LbfDnimazqP5ATy
301
- # SI6a5kQorBeG9cU4WW93ctuT5nkyAbBaEpiejWIpjbMkofD5fj2pUgg7H/Xvh+eR
302
- # S9A+//VGfy4A4SFjBooVewhJ04VhDkMnVC29fbVwVuNqm6Z+FZaxI5pqvisxvH8S
303
- # XwIDAQAB
304
- # -----END PUBLIC KEY-----
305
- # }]
306
- # }, error_response: { code: 401, plaintext: 'Unauthorized', default: 'plaintext' }
307
- # get "/" do |req|
308
- # req.respond('Hello, JWT user!')
309
- # end
310
- # end
311
-
312
- # end
313
-
314
- # # For an assets example
315
- # location "/assets" do
316
- # cache_control max_age: 604800, s_max_age: 2592000,
317
- # stale_while_revalidate: 86400,
318
- # public: true, immutable: true
319
-
320
- # get "/:file" do |req|
321
- # file_name = req.params["file"]
322
- # req.respond("Pretending to serve #{file_name} with long-lived caching")
323
- # end
324
- # end
325
-
326
- # # location '' do
327
-
328
- # location '/spa' do
329
- # # Serve static files from the "public/assets" directory
330
- # log_requests before: { format: "REQUEST_ID={request_id} METHOD={method} PATH={path} QUERY={query} HOST={host} PORT={port} START_TIME={start_time}" , level: 'INFO'}, after: { format: "REQUEST_ID={request_id} RESPONSE_TIME={response_time}", level: 'INFO' }
331
- # allow_list allowed_patterns: [/127.*/], error_response: { plaintext: 'no way', code: 401, default: 'plaintext' }
332
- # static_assets\
333
- # relative_path: true,
334
- # root_dir: 'spa/dist',
335
- # # # Only allow certain file extensions
336
- # # allowed_extensions: %w[css js jpg jpeg png gif svg ico woff woff2 ttf
337
- # # otf html],
338
- # # Return a 404 error if file is not found
339
- # not_found_behavior: { index: 'index.html' },
340
- # # Enable auto-indexing of directories
341
- # auto_index: true,
342
- # # Try adding .html extension to extensionless URLs
343
- # try_html_extension: true,
344
- # # Files under this size are cached in memory
345
- # max_file_size_in_memory: 1024 * 1024, # 1MB
346
- # # Maximum number of files to keep in memory cache
347
- # max_files_in_memory: 1000,
348
- # # Check for file modifications every 5 seconds
349
- # file_check_interval: 5,
350
- # # Add custom headers to all responses
351
- # headers: {
352
- # 'Cache-Control' => 'public, max-age=86400',
353
- # 'X-Content-Type-Options' => 'nosniff'
354
- # }
355
- # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
356
- # end
357
- # end
358
-
359
- # location "/cors_test" do
360
- # cors allowed_origins: ["http://127.0.0.1:8000"], allowed_methods: ["GET", "PATCH", "POST"], allowed_headers: ['Content-Type'], exposed_headers: ['X-Custom-Header'], allow_credentials: true
361
- # get "/user/:id" do |req|
362
- # req.respond("You've been CORSed!")
363
- # end
364
- # end
365
-
366
-
367
-
368
- # location '/proxy_as_foo_com' do
369
- # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
370
- # proxy to: 'http://foo.com/zstd', backends: ['http://127.0.0.1:3000'], headers: { 'Host' => { 'value' => 'foo.com' } },
371
- # verify_ssl: false, timeout: 100, tls_sni: true
372
- # end
373
-
374
- # location '/proxy_as_bar_com' do
375
- # proxy to: 'http://bar.com', backends: ['http://127.0.0.1:3000'], headers: { 'Host' => { 'value' => 'bar.com' } },
376
- # verify_ssl: false, timeout: 100, tls_sni: true
377
- # end
378
-
379
- # location '/', hosts: ['foo.com'] do
380
- # get '/' do |req|
381
- # req.respond('I am foo.com')
382
- # end
383
- # end
384
-
385
- # location '/', hosts: ['bar.com'] do
386
- # get '/' do |req|
387
- # req.respond('I am bar.com')
388
- # end
389
- # end
390
-
391
- # location '/admin*' do
392
- # auth_api_key valid_keys: %w[one two], token_source: { header: { name: 'Authorization', prefix: 'Bearer ' } },
393
- # error_response: { code: 401, plaintext: 'Unauthorized', default: 'plaintext' }
394
- # run lambda { |env|
395
- # [200, {}, 'Oh look, it also. Clusters!']
396
- # }
397
- # end
398
-
399
- # location '/br' do
400
- # compress algorithms: ['brotli'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
401
- # get '/' do |req|
402
- # req.respond("Hello world. I'm brotli'd!")
403
- # end
404
- # end
405
-
406
- # location '/zstd' do
407
- # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
408
- # get '/' do |req|
409
- # req.respond("Hello world. I'm zstd'd!")
410
- # end
411
- # end
412
-
413
- # location 'gzip' do
414
- # compress algorithms: ['gzip'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
415
- # get '/' do |req|
416
- # req.respond("Hello world. I'm gzip'd!")
417
- # end
418
- # end
419
-
420
- # location 'deflate' do
421
- # compress algorithms: ['deflate'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
422
- # get '/' do |req|
423
- # req.respond("Hello world. I'm deflated!")
424
- # end
425
- # end
426
-
427
- # get '/hey' do |req|
428
- # req.respond("This is a test")
429
- # end
430
-
431
- # location '*', protocols: :http do
432
- # location 'foo' do
433
- # redirect to: 'https://{host}:3001{path}'
434
- # end
435
- # end
436
-
437
- # location '*', hosts: ['127.0.0.1'], ports: [3001] do
438
- # proxy to: ['https://docs.rs{path}{query}'],
439
- # headers: { 'Host' => { value: 'docs.rs' }, 'Origin' => { value: 'https://docs.rs' } }, verify_ssl: false, timeout: 5
440
- # end
441
-
442
- # location '*', hosts: ['127.0.0.1'], ports: [3002] do
443
- # proxy to: ['https://httpbin.org{path}{query}'],
444
- # headers: { 'Host' => { value: 'docs.rs' }, 'Origin' => { value: 'https://docs.rs' } }, verify_ssl: false, timeout: 5
445
- # end
446
-
447
- # location '/app' do
448
- # location '/users' do
449
- # get '/:id', :user_serve
450
- # post '/:id', :user_create
451
- # end
452
-
453
- # include 'organisations_controller'
454
-
455
- # location '/admin*' do
456
- # auth_api_key valid_keys: %w[one two], token_source: { header: { name: 'Authorization', prefix: 'Bearer ' } },
457
- # error_response: { code: 401, plaintext: 'Unauthorized', default: 'plaintext' }
458
- # end
459
- # end
460
- # foo
461
- # foo
462
-
463
- # Example of using ETag middleware
464
- # location "/with-etag" do
465
- # etag
466
- # get '/' do |req|
467
- # req.respond("This response will have an ETag header based on content hash.")
468
- # end
469
- # end
470
-
471
- # Example with both caching and ETags
472
-
473
- # Simple ETag test endpoint with predictable content
@@ -1 +0,0 @@
1
- {"message": "Hello, World!"}
@@ -1,10 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'grpc', '~> 1.50'
4
- gem 'grpc-tools', '~> 1.50'
5
-
6
- # Ensure we use the same version of protocol buffers
7
- gem 'google-protobuf', '~> 3.21'
8
-
9
- # For pretty printing
10
- gem 'colorize', '~> 0.8.1'
@@ -1,27 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- colorize (0.8.1)
5
- google-protobuf (3.25.6)
6
- googleapis-common-protos-types (1.19.0)
7
- google-protobuf (>= 3.18, < 5.a)
8
- grpc (1.71.0)
9
- google-protobuf (>= 3.25, < 5.0)
10
- googleapis-common-protos-types (~> 1.0)
11
- grpc (1.71.0-arm64-darwin)
12
- google-protobuf (>= 3.25, < 5.0)
13
- googleapis-common-protos-types (~> 1.0)
14
- grpc-tools (1.71.0)
15
-
16
- PLATFORMS
17
- arm64-darwin-23
18
- ruby
19
-
20
- DEPENDENCIES
21
- colorize (~> 0.8.1)
22
- google-protobuf (~> 3.21)
23
- grpc (~> 1.50)
24
- grpc-tools (~> 1.50)
25
-
26
- BUNDLED WITH
27
- 2.6.3
@@ -1,95 +0,0 @@
1
- # Echo gRPC Client
2
-
3
- A simple Ruby gRPC client for the Echo service.
4
-
5
- ## Setup
6
-
7
- 1. Install dependencies:
8
-
9
- ```bash
10
- bundle install
11
- ```
12
-
13
- 2. Generate Ruby code from the proto file:
14
-
15
- ```bash
16
- ./gen_proto.sh
17
- ```
18
-
19
- ## Usage
20
-
21
- Run the client with optional compression:
22
-
23
- ```bash
24
- # Run without compression (default)
25
- ruby echo_client.rb
26
-
27
- # Run with gzip compression
28
- ruby echo_client.rb gzip
29
-
30
- # Run with deflate compression
31
- ruby echo_client.rb deflate
32
-
33
- # Show help
34
- ruby echo_client.rb help
35
- ```
36
-
37
- ## Client Details
38
-
39
- This client implements all four types of gRPC methods:
40
-
41
- 1. Unary RPC (`echo`)
42
- 2. Server streaming RPC (`echo_stream`)
43
- 3. Client streaming RPC (`echo_collect`)
44
- 4. Bidirectional streaming RPC (`echo_bidirectional`)
45
-
46
- ## Compression Options
47
-
48
- You can control compression by modifying the client initialization in `echo_client.rb`:
49
-
50
- ```ruby
51
- # No compression
52
- client = EchoClient.new('localhost', 50051, compression: nil)
53
-
54
- # Gzip compression
55
- client = EchoClient.new('localhost', 50051, compression: :gzip)
56
-
57
- # Deflate compression
58
- client = EchoClient.new('localhost', 50051, compression: :deflate)
59
- ```
60
-
61
- The compression settings are implemented using the gRPC channel arguments, which allows you to test different compression algorithms.
62
-
63
- ## Troubleshooting
64
-
65
- If you encounter any issues:
66
-
67
- 1. Make sure you have installed all dependencies with `bundle install`
68
- 2. Ensure the protocol buffer code has been generated with `./gen_proto.sh`
69
- 3. Check that the gRPC server is running on the specified host and port
70
- 4. If you see connectivity issues, try running with debugging enabled:
71
-
72
- ```bash
73
- GRPC_VERBOSITY=DEBUG GRPC_TRACE=all ruby echo_client.rb
74
- ```
75
-
76
- ## Example Server
77
-
78
- The client is designed to work with the EchoService server in the `../echo_service_nonitsi` directory. Make sure the server is running before starting the client.
79
-
80
- ## Compression Testing
81
-
82
- To test different compression algorithms with the same message payload:
83
-
84
- ```bash
85
- # Test without compression
86
- ./run_client.rb -m "Large message repeated many times" -c none
87
-
88
- # Test with gzip compression
89
- ./run_client.rb -m "Large message repeated many times" -c gzip
90
-
91
- # Test with deflate compression
92
- ./run_client.rb -m "Large message repeated many times" -c deflate
93
- ```
94
-
95
- This allows you to compare the performance and behavior with different compression settings.