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,474 +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_level :debug
18
- log_format :plain
19
-
20
- get "/root" do |req|
21
- req.ok "Got from root"
22
- end
23
-
24
-
25
- location "app" do
26
- location "/users" do
27
- get "/:id" do |req|
28
- req.ok "Got user #{req.url_params[:id]}"
29
- end
30
- end
31
-
32
- run(->(env){
33
- [200, {}, ["Fallback Rack app"]]
34
- })
35
- end
36
-
37
-
38
- static_assets \
39
- relative_path: true,
40
- root_dir: "public",
41
- not_found_behavior: "fallthrough",
42
- try_html_extension: true,
43
- auto_index: true,
44
- max_file_size_in_memory: 1024 * 1024,
45
- max_files_in_memory: 1000,
46
- file_check_interval: 5,
47
- serve_hidden_files: false
48
-
49
- run(->(env){
50
- [200, {}, ["Final Fallback Rack App. SN: #{env['SCRIPT_NAME']} PI: #{env['PATH_INFO']}"]]
51
- })
52
- # location %q{/foo/:id(\d+)/test/:name/bla} do
53
- # get "/" do |req|
54
- # req.respond json: req.url_params
55
- # end
56
- # end
57
-
58
- # location "blocking" do
59
- # run ->(env){
60
- # sleep 0.25
61
- # [200, {}, [:ok]]
62
- # }
63
- # end
64
-
65
- # location "nonblocking" do
66
- # run(->(env){
67
- # sleep 0.25
68
- # [200, {}, [:ok]]
69
- # }, nonblocking: true)
70
- # end
71
-
72
- # require_relative 'echo_service/echo_service_impl'
73
-
74
- # grpc EchoServiceImpl.new, nonblocking: false do
75
- # end
76
-
77
- # location "foo" do
78
- # static_response code: 200, headers: [["Headers","Foo"]], body: "This is my body"
79
- # end
80
-
81
- # location "/public" do
82
- # static_assets relative_path: true, root_dir: "public", not_found_behavior: {error: 'not_found'},
83
- # try_html_extension: true, auto_index: true, max_file_size_in_memory: 1024 * 1024,
84
- # # Maximum number of files to keep in memory cache
85
- # max_files_in_memory: 1000,
86
- # # Check for file modifications every 5 seconds
87
- # file_check_interval: 5,
88
- # serve_hidden_files: false
89
- # end
90
-
91
- # require 'debug'
92
- # require 'date'
93
-
94
- # UserSchema = {
95
- # id: Integer,
96
- # name: String
97
- # }
98
-
99
-
100
- # ResultSchema = {
101
- # status_code: Integer,
102
- # user: UserSchema
103
- # }
104
-
105
- # module UserController
106
-
107
- # def self.create(req)
108
- # req.ok \
109
- # json: {
110
- # status: :created,
111
- # user: user
112
- # }
113
- # end
114
-
115
- # def self.create(req, params: UserSchema, return_type: ResultSchema)
116
- # req.ok \
117
- # json: {
118
- # status_code: 5,
119
- # user: params
120
- # },
121
- # as: return_type
122
- # end
123
-
124
- # def self.create_no_type(req, params)
125
- # req.ok json: "foo"
126
- # end
127
-
128
- # end
129
-
130
- # controller UserController
131
- # post "/", :create
132
- # get "/" do |req, return_type: ResultSchema|
133
- # req.ok as: return_type, json: {
134
- # status_code: 5,
135
- # user: {
136
- # id: 3,
137
- # name: "Foo Bar"
138
- # }
139
- # }
140
- # end
141
-
142
- # post "/nt", :create_no_type
143
-
144
- # location "/rack" do
145
- # run(->(env){
146
- # sleep 5
147
- # [200, {}, [:ok]]
148
- # })
149
- # end
150
- # location '*' do
151
- # 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'
152
- # end
153
-
154
- # # require_relative 'echo_service/echo_service_impl'
155
-
156
- # # grpc EchoServiceImpl.new do
157
-
158
- # # end
159
-
160
- # location '/' do
161
- # # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
162
- # max_body max_size: 5
163
- # get '/' do |req|
164
- # req.respond('Foo')
165
- # end
166
- # etag type: 'weak', algorithm: 'md5', min_body_size: 0
167
- # post '/' do |req|
168
- # puts "Post to me!"
169
- # req.respond('Foo')
170
- # end
171
- # end
172
-
173
- # location '/' do
174
- # end
175
- # 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' }
176
-
177
- #
178
-
179
- # static_assets\
180
- # relative_path: true,
181
- # root_dir: 'spa/dist',
182
- # # # Only allow certain file extensions
183
- # # allowed_extensions: %w[css js jpg jpeg png gif svg ico woff woff2 ttf
184
- # # otf html],
185
- # # Return a 404 error if file is not found
186
- # not_found_behavior: { index: 'index.html' },
187
- # # Enable auto-indexing of directories
188
- # auto_index: true,
189
- # # Try adding .html extension to extensionless URLs
190
- # try_html_extension: true,
191
- # # Files under this size are cached in memory
192
- # max_file_size_in_memory: 1024 * 1024, # 1MB
193
- # # Maximum number of files to keep in memory cache
194
- # max_files_in_memory: 1000,
195
- # # Check for file modifications every 5 seconds
196
- # file_check_interval: 5,
197
- # # Add custom headers to all responses
198
- # headers: {
199
- # 'Cache-Control' => 'public, max-age=86400',
200
- # 'X-Content-Type-Options' => 'nosniff'
201
- # }
202
-
203
- # run(lambda { |env|
204
- # [200, {}, ["I'm a fallback"]]
205
- # })
206
-
207
- # def user_serve(request)
208
- # response = request.response
209
- # response.status = 200
210
- # response.add_header('Content-Type', 'text/plain')
211
- # response << 'Hello, user!'
212
- # response.close
213
- # end
214
-
215
- # def user_create(request)
216
- # response = request.response
217
- # response.status = 201
218
- # response.add_header('Content-Type', 'text/plain')
219
- # response << 'User created!'
220
- # response.close
221
- # end
222
-
223
- # location "/etag-test" do
224
- # etag type: 'strong', algorithm: 'sha256', min_body_size: 0
225
-
226
- # get '/' do |req|
227
- # # Fixed content that will generate the same ETag each time
228
- # content = "This is a fixed response that will always have the same ETag."
229
-
230
- # # Add a timestamp as a comment to see the response is fresh
231
- # resp = req.response
232
- # req.respond("Content: #{content}.# Generated at: #{Time.now}")
233
- # end
234
- # end
235
-
236
- # location "/cached-with-etag" do
237
- # # Set up caching parameters
238
- # cache_control max_age: 3600, public: true, vary: ['Accept-Encoding']
239
-
240
- # # Add ETags for cache validation
241
- # etag type: 'weak', algorithm: 'md5', min_body_size: 0
242
-
243
- # get '/' do |req|
244
- # req.respond("This response will have both cache headers and an ETag.")
245
- # end
246
- # end
247
-
248
- # location "/" do
249
- # 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' }
250
-
251
- # # Example for API endpoints with ETags
252
- # location "/api" do
253
- # etag type: 'weak', algorithm: 'md5', min_body_size: 0
254
- # get '/users/id' do |req|
255
- # user_id = 5
256
- # req.respond("User data for #{user_id}")
257
- # end
258
- # end
259
-
260
- # location "/hey" do
261
- # location "/world*" do
262
- # request_headers additions: {"X-Custom-Req" => ["Foo", "Bar", "Baz"]}, removals: [""]
263
- # response_headers additions: {"X-Custom-Resp" => ["Foo", "Bar"]}, removals: []
264
- # 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' }
265
- # post '/' do |req|
266
- # puts "I'm a post!"
267
- # req.respond("Post successful!")
268
- # end
269
- # get '/' do |req|
270
- # req.respond("Is this still fast?")
271
- # end
272
- # end
273
- # end
274
-
275
- # # Add a new location with cache_control middleware
276
- # location "/cached" do
277
- # cache_control max_age: 3600, public: true, vary: ['Accept-Encoding']
278
- # get '/' do |req|
279
- # req.respond("This content is cached for 1 hour.")
280
- # end
281
- # end
282
-
283
- # location "/etag" do
284
- # etag enabled: true, etag_type: 'strong', hash_algorithm: 'sha256', min_body_size: 0
285
- # get '/' do |req|
286
- # # Create a response large enough to be worth ETagging
287
- # content = "This content will have ETags. " * 20
288
- # req.respond(content)
289
- # end
290
- # end
291
-
292
- # location "/jwt" do
293
- # auth_jwt token_source: { header: { name: 'Authorization', prefix: 'Bearer ' } },
294
- # verifiers: {
295
- # 'hs256' => ["1V6nZzztO/F6Y3XAYXJ1I37AAXCJ/V7EVHJoVnD8lr4="],
296
- # 'rs256' => [%Q{
297
- # -----BEGIN PUBLIC KEY-----
298
- # MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs8XK+wP7nnKkOGXP6+il
299
- # +JDQMFRV8zoVg1BYYapGla6AzR0YCV6xq28lNB1FE8C6xhCEKYiOlnkXZwj+a4UW
300
- # q4Bex/U9qvfza0zGxHlTnQT9T+vjwXNsWYuefYC4EAZjEd6bGeP23De128QfhlLc
301
- # oQpcfW32/e8KjSYtn8rtWuKV6Anqf92o9zEbVn8y2OZwZbiW0LbfDnimazqP5ATy
302
- # SI6a5kQorBeG9cU4WW93ctuT5nkyAbBaEpiejWIpjbMkofD5fj2pUgg7H/Xvh+eR
303
- # S9A+//VGfy4A4SFjBooVewhJ04VhDkMnVC29fbVwVuNqm6Z+FZaxI5pqvisxvH8S
304
- # XwIDAQAB
305
- # -----END PUBLIC KEY-----
306
- # }]
307
- # }, error_response: { code: 401, plaintext: 'Unauthorized', default: 'plaintext' }
308
- # get "/" do |req|
309
- # req.respond('Hello, JWT user!')
310
- # end
311
- # end
312
-
313
- # end
314
-
315
- # # For an assets example
316
- # location "/assets" do
317
- # cache_control max_age: 604800, s_max_age: 2592000,
318
- # stale_while_revalidate: 86400,
319
- # public: true, immutable: true
320
-
321
- # get "/:file" do |req|
322
- # file_name = req.params["file"]
323
- # req.respond("Pretending to serve #{file_name} with long-lived caching")
324
- # end
325
- # end
326
-
327
- # # location '' do
328
-
329
- # location '/spa' do
330
- # # Serve static files from the "public/assets" directory
331
- # 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' }
332
- # allow_list allowed_patterns: [/127.*/], error_response: { plaintext: 'no way', code: 401, default: 'plaintext' }
333
- # static_assets\
334
- # relative_path: true,
335
- # root_dir: 'spa/dist',
336
- # # # Only allow certain file extensions
337
- # # allowed_extensions: %w[css js jpg jpeg png gif svg ico woff woff2 ttf
338
- # # otf html],
339
- # # Return a 404 error if file is not found
340
- # not_found_behavior: { index: 'index.html' },
341
- # # Enable auto-indexing of directories
342
- # auto_index: true,
343
- # # Try adding .html extension to extensionless URLs
344
- # try_html_extension: true,
345
- # # Files under this size are cached in memory
346
- # max_file_size_in_memory: 1024 * 1024, # 1MB
347
- # # Maximum number of files to keep in memory cache
348
- # max_files_in_memory: 1000,
349
- # # Check for file modifications every 5 seconds
350
- # file_check_interval: 5,
351
- # # Add custom headers to all responses
352
- # headers: {
353
- # 'Cache-Control' => 'public, max-age=86400',
354
- # 'X-Content-Type-Options' => 'nosniff'
355
- # }
356
- # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
357
- # end
358
- # end
359
-
360
- # location "/cors_test" do
361
- # 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
362
- # get "/user/:id" do |req|
363
- # req.respond("You've been CORSed!")
364
- # end
365
- # end
366
-
367
-
368
-
369
- # location '/proxy_as_foo_com' do
370
- # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
371
- # proxy to: 'http://foo.com/zstd', backends: ['http://127.0.0.1:3000'], headers: { 'Host' => { 'value' => 'foo.com' } },
372
- # verify_ssl: false, timeout: 100, tls_sni: true
373
- # end
374
-
375
- # location '/proxy_as_bar_com' do
376
- # proxy to: 'http://bar.com', backends: ['http://127.0.0.1:3000'], headers: { 'Host' => { 'value' => 'bar.com' } },
377
- # verify_ssl: false, timeout: 100, tls_sni: true
378
- # end
379
-
380
- # location '/', hosts: ['foo.com'] do
381
- # get '/' do |req|
382
- # req.respond('I am foo.com')
383
- # end
384
- # end
385
-
386
- # location '/', hosts: ['bar.com'] do
387
- # get '/' do |req|
388
- # req.respond('I am bar.com')
389
- # end
390
- # end
391
-
392
- # location '/admin*' do
393
- # auth_api_key valid_keys: %w[one two], token_source: { header: { name: 'Authorization', prefix: 'Bearer ' } },
394
- # error_response: { code: 401, plaintext: 'Unauthorized', default: 'plaintext' }
395
- # run lambda { |env|
396
- # [200, {}, 'Oh look, it also. Clusters!']
397
- # }
398
- # end
399
-
400
- # location '/br' do
401
- # compress algorithms: ['brotli'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
402
- # get '/' do |req|
403
- # req.respond("Hello world. I'm brotli'd!")
404
- # end
405
- # end
406
-
407
- # location '/zstd' do
408
- # compress algorithms: ['zstd'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
409
- # get '/' do |req|
410
- # req.respond("Hello world. I'm zstd'd!")
411
- # end
412
- # end
413
-
414
- # location 'gzip' do
415
- # compress algorithms: ['gzip'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
416
- # get '/' do |req|
417
- # req.respond("Hello world. I'm gzip'd!")
418
- # end
419
- # end
420
-
421
- # location 'deflate' do
422
- # compress algorithms: ['deflate'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
423
- # get '/' do |req|
424
- # req.respond("Hello world. I'm deflated!")
425
- # end
426
- # end
427
-
428
- # get '/hey' do |req|
429
- # req.respond("This is a test")
430
- # end
431
-
432
- # location '*', protocols: :http do
433
- # location 'foo' do
434
- # redirect to: 'https://{host}:3001{path}'
435
- # end
436
- # end
437
-
438
- # location '*', hosts: ['127.0.0.1'], ports: [3001] do
439
- # proxy to: ['https://docs.rs{path}{query}'],
440
- # headers: { 'Host' => { value: 'docs.rs' }, 'Origin' => { value: 'https://docs.rs' } }, verify_ssl: false, timeout: 5
441
- # end
442
-
443
- # location '*', hosts: ['127.0.0.1'], ports: [3002] do
444
- # proxy to: ['https://httpbin.org{path}{query}'],
445
- # headers: { 'Host' => { value: 'docs.rs' }, 'Origin' => { value: 'https://docs.rs' } }, verify_ssl: false, timeout: 5
446
- # end
447
-
448
- # location '/app' do
449
- # location '/users' do
450
- # get '/:id', :user_serve
451
- # post '/:id', :user_create
452
- # end
453
-
454
- # include 'organisations_controller'
455
-
456
- # location '/admin*' do
457
- # auth_api_key valid_keys: %w[one two], token_source: { header: { name: 'Authorization', prefix: 'Bearer ' } },
458
- # error_response: { code: 401, plaintext: 'Unauthorized', default: 'plaintext' }
459
- # end
460
- # end
461
- # foo
462
- # foo
463
-
464
- # Example of using ETag middleware
465
- # location "/with-etag" do
466
- # etag
467
- # get '/' do |req|
468
- # req.respond("This response will have an ETag header based on content hash.")
469
- # end
470
- # end
471
-
472
- # Example with both caching and ETags
473
-
474
- # 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.