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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/Cargo.lock +941 -241
- data/README.md +67 -55
- data/crates/itsi_server/Cargo.toml +3 -3
- data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +2 -2
- data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +150 -19
- data/crates/itsi_server/src/ruby_types/itsi_server.rs +1 -0
- data/crates/itsi_server/src/server/binds/listener.rs +34 -29
- data/crates/itsi_server/src/server/binds/tls/locked_dir_cache.rs +2 -2
- data/crates/itsi_server/src/server/binds/tls.rs +1 -1
- data/crates/itsi_server/src/server/middleware_stack/middleware.rs +33 -28
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +56 -3
- data/crates/itsi_server/src/server/middleware_stack/middlewares/csp.rs +179 -0
- data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +25 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +3 -3
- data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +2 -1
- data/crates/itsi_server/src/server/middleware_stack/mod.rs +32 -34
- data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +10 -4
- data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +30 -7
- data/crates/itsi_server/src/server/thread_worker.rs +2 -2
- data/crates/itsi_server/src/services/static_file_server.rs +30 -28
- data/crates/itsi_tracing/src/lib.rs +39 -8
- data/docker/Dockerfile +12 -0
- data/docs/content/_index.md +18 -10
- data/docs/content/acknowledgements/_index.md +43 -0
- data/docs/content/configuration/_index.md +98 -0
- data/docs/content/contact/_index.md +7 -0
- data/docs/content/faqs/_index.md +27 -0
- data/docs/content/features/_index.md +285 -0
- data/docs/content/getting_started/_index.md +70 -0
- data/docs/content/getting_started/local_development.md +40 -0
- data/docs/content/getting_started/logging.md +16 -0
- data/docs/content/getting_started/running_itsi_in_production.md +24 -0
- data/docs/content/itsi-server-100.png +0 -0
- data/docs/content/itsi_scheduler/_index.md +105 -0
- data/docs/content/itsi_scheduler/itsi-scheduler-100.png +0 -0
- data/docs/content/ruby-lsp.png +0 -0
- data/docs/content/ruby.svg +948 -0
- data/docs/data/icons.yaml +949 -0
- data/docs/hugo.yaml +27 -28
- data/fairytale.txt +34 -0
- data/gems/scheduler/Cargo.lock +46 -46
- data/gems/scheduler/README.md +53 -24
- data/gems/scheduler/itsi-scheduler-100.png +0 -0
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/server/Cargo.lock +950 -239
- data/gems/server/README.md +2 -0
- data/gems/server/exe/itsi +5 -5
- data/gems/server/lib/itsi/server/config/config_helpers.rb +93 -0
- data/gems/server/lib/itsi/server/config/dsl.rb +81 -33
- data/gems/server/lib/itsi/server/config/known_paths/KitchensinkDirectories.txt +2346 -0
- data/gems/server/lib/itsi/server/config/known_paths/Randomfiles.txt +24 -0
- data/gems/server/lib/itsi/server/config/known_paths/UnixDotfiles.txt +52 -0
- data/gems/server/lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt +29 -0
- data/gems/server/lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt +1668 -0
- data/gems/server/lib/itsi/server/config/known_paths/backdoors/shells.txt +1167 -0
- data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt +7 -0
- data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt +6 -0
- data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt +79 -0
- data/gems/server/lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt +3948 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/README.md +5 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_plugins.txt +6320 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/drupal_themes.txt +828 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_plugins.txt +224 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/joomla_themes.txt +30 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/php-nuke.txt +2142 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/wordpress.txt +1566 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt +46 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins.txt +13366 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt +68662 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt +225 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.readme +12 -0
- data/gems/server/lib/itsi/server/config/known_paths/cms/wp_themes.txt +7336 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt +17576 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt +80 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt +14 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt +865 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt +186 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt +30 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt +93 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt +1918 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt +8 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt +56180 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt +62290 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt +2367 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt +2450 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt +35323 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt +37037 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt +107982 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt +119600 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt +26593 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt +30009 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt +1233 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt +1289 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt +16243 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt +17128 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt +56293 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt +63087 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt +17776 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt +20122 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt +914 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt +963 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt +10848 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt +11424 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt +38267 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt +43003 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt +445 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt +36 -0
- data/gems/server/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt +44 -0
- data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/Logins.txt +71 -0
- data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/cfm.txt +294 -0
- data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/html.txt +295 -0
- data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/jsp.txt +294 -0
- data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/php.txt +294 -0
- data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt +294 -0
- data/gems/server/lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt +294 -0
- data/gems/server/lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt +47 -0
- data/gems/server/lib/itsi/server/config/known_paths/php/PHP.txt +30 -0
- data/gems/server/lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt +5 -0
- data/gems/server/lib/itsi/server/config/known_paths/proxy-conf.txt +31 -0
- data/gems/server/lib/itsi/server/config/known_paths/tftp.txt +79 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt +86 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt +16 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt +101 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt +47 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt +16 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt +111 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt +390 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt +38 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt +239 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt +2 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt +578 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt +187 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt +5 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt +13 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt +3 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt +1937 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt +206 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt +18 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt +60 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt +192 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/README.md +6 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt +121 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt +463 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt +1707 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt +19 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt +51 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt +35 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt +73 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt +160 -0
- data/gems/server/lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt +366 -0
- data/gems/server/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt +30 -0
- data/gems/server/lib/itsi/server/config/known_paths.rb +17 -0
- data/gems/server/lib/itsi/server/config/middleware/_index.md +54 -0
- data/gems/server/lib/itsi/server/config/middleware/log_requests.md +63 -0
- data/gems/server/lib/itsi/server/config/middleware/log_requests.rb +33 -0
- data/gems/server/lib/itsi/server/config/middleware.rb +9 -0
- data/gems/server/lib/itsi/server/config/option.rb +9 -0
- data/gems/server/lib/itsi/server/config/options/_index.md +36 -0
- data/gems/server/lib/itsi/server/config/options/fiber_scheduler.md +35 -0
- data/gems/server/lib/itsi/server/config/options/fiber_scheduler.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/threads.md +39 -0
- data/gems/server/lib/itsi/server/config/options/threads.rb +17 -0
- data/gems/server/lib/itsi/server/config/options/workers.md +43 -0
- data/gems/server/lib/itsi/server/config/options/workers.rb +17 -0
- data/gems/server/lib/itsi/server/config/typed_struct.rb +203 -0
- data/gems/server/lib/itsi/server/config.rb +124 -30
- data/gems/server/lib/itsi/server/signal_trap.rb +5 -1
- data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +1 -1
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/lib/itsi/server.rb +27 -6
- data/gems/server/lib/ruby_lsp/itsi/addon.rb +64 -48
- data/gems/server/test/helpers/test_helper.rb +64 -5
- data/gems/server/test/middleware/test_log_requests.rb +17 -0
- data/gems/server/test/options/test_threads.rb +15 -0
- data/gems/server/test/options/test_workers.rb +18 -0
- data/gems/server/test/test_itsi_server.rb +81 -94
- data/itsi-scheduler-100.png +0 -0
- data/itsi-server-100.png +0 -0
- data/lib/itsi/version.rb +1 -1
- data/tasks.txt +36 -28
- metadata +147 -215
- data/crates/_index.md +0 -0
- data/crates/itsi_server/src/ruby_types/README.md +0 -21
- data/crates/itsi_server/test.md +0 -14
- data/docs/Itsi.rb +0 -17
- data/docs/content/about.md +0 -6
- data/docs/content/docs/_index.md +0 -18
- data/docs/content/docs/first-page.md +0 -9
- data/docs/content/docs/folder/_index.md +0 -10
- data/docs/content/docs/folder/leaf.md +0 -7
- data/foo/Itsi.rb +0 -122
- data/gems/_index.md +0 -18
- data/gems/scheduler/CHANGELOG.md +0 -5
- data/gems/scheduler/CODE_OF_CONDUCT.md +0 -139
- data/gems/scheduler/LICENSE.txt +0 -21
- data/gems/scheduler/_index.md +0 -7
- data/gems/server/CHANGELOG.md +0 -10
- data/gems/server/CODE_OF_CONDUCT.md +0 -139
- data/gems/server/LICENSE.txt +0 -21
- data/gems/server/_index.md +0 -6
- data/sandbox/README.md +0 -5
- data/sandbox/deploy/main.tf +0 -238
- data/sandbox/deploy/outputs.tf +0 -4
- data/sandbox/deploy/vars.tf +0 -11
- data/sandbox/falcon_benchmark/Gemfile +0 -10
- data/sandbox/falcon_benchmark/Gemfile.lock +0 -140
- data/sandbox/falcon_benchmark/config.ru +0 -54
- data/sandbox/itsi_file/Gemfile +0 -13
- data/sandbox/itsi_file/Gemfile.lock +0 -111
- data/sandbox/itsi_file/Itsi.rb +0 -474
- data/sandbox/itsi_file/call.json +0 -1
- data/sandbox/itsi_file/echo_client/Gemfile +0 -10
- data/sandbox/itsi_file/echo_client/Gemfile.lock +0 -27
- data/sandbox/itsi_file/echo_client/README.md +0 -95
- data/sandbox/itsi_file/echo_client/echo_client.rb +0 -164
- data/sandbox/itsi_file/echo_client/gen_proto.sh +0 -17
- data/sandbox/itsi_file/echo_client/lib/echo_pb.rb +0 -16
- data/sandbox/itsi_file/echo_client/lib/echo_services_pb.rb +0 -29
- data/sandbox/itsi_file/echo_client/run_client.rb +0 -64
- data/sandbox/itsi_file/echo_client/test_compressions.sh +0 -20
- data/sandbox/itsi_file/echo_service_nonitsi/Gemfile +0 -10
- data/sandbox/itsi_file/echo_service_nonitsi/Gemfile.lock +0 -79
- data/sandbox/itsi_file/echo_service_nonitsi/echo.proto +0 -26
- data/sandbox/itsi_file/echo_service_nonitsi/echo_pb.rb +0 -16
- data/sandbox/itsi_file/echo_service_nonitsi/echo_services_pb.rb +0 -29
- data/sandbox/itsi_file/echo_service_nonitsi/server.rb +0 -52
- data/sandbox/itsi_file/error.html +0 -2
- data/sandbox/itsi_file/organisations_controller.rb +0 -20
- data/sandbox/itsi_file/public/assets/image.png +0 -0
- data/sandbox/itsi_sandbox_async/Gemfile +0 -10
- data/sandbox/itsi_sandbox_async/Gemfile.lock +0 -69
- data/sandbox/itsi_sandbox_async/config.ru +0 -9
- data/sandbox/itsi_sandbox_hanami/.env +0 -2
- data/sandbox/itsi_sandbox_hanami/.gitignore +0 -6
- data/sandbox/itsi_sandbox_hanami/.rspec +0 -1
- data/sandbox/itsi_sandbox_hanami/Gemfile +0 -49
- data/sandbox/itsi_sandbox_hanami/Gemfile.lock +0 -440
- data/sandbox/itsi_sandbox_hanami/Guardfile +0 -9
- data/sandbox/itsi_sandbox_hanami/Procfile.dev +0 -2
- data/sandbox/itsi_sandbox_hanami/README.md +0 -1
- data/sandbox/itsi_sandbox_hanami/Rakefile +0 -3
- data/sandbox/itsi_sandbox_hanami/app/action.rb +0 -12
- data/sandbox/itsi_sandbox_hanami/app/actions/.keep +0 -0
- data/sandbox/itsi_sandbox_hanami/app/assets/css/app.css +0 -5
- data/sandbox/itsi_sandbox_hanami/app/assets/images/favicon.ico +0 -0
- data/sandbox/itsi_sandbox_hanami/app/assets/js/app.js +0 -1
- data/sandbox/itsi_sandbox_hanami/app/db/relation.rb +0 -10
- data/sandbox/itsi_sandbox_hanami/app/db/repo.rb +0 -10
- data/sandbox/itsi_sandbox_hanami/app/db/struct.rb +0 -10
- data/sandbox/itsi_sandbox_hanami/app/operation.rb +0 -9
- data/sandbox/itsi_sandbox_hanami/app/relations/.keep +0 -0
- data/sandbox/itsi_sandbox_hanami/app/repos/.keep +0 -0
- data/sandbox/itsi_sandbox_hanami/app/structs/.keep +0 -0
- data/sandbox/itsi_sandbox_hanami/app/templates/layouts/app.html.erb +0 -14
- data/sandbox/itsi_sandbox_hanami/app/view.rb +0 -9
- data/sandbox/itsi_sandbox_hanami/app/views/helpers.rb +0 -10
- data/sandbox/itsi_sandbox_hanami/bin/dev +0 -8
- data/sandbox/itsi_sandbox_hanami/config/app.rb +0 -8
- data/sandbox/itsi_sandbox_hanami/config/assets.js +0 -16
- data/sandbox/itsi_sandbox_hanami/config/db/migrate/.keep +0 -0
- data/sandbox/itsi_sandbox_hanami/config/db/seeds.rb +0 -15
- data/sandbox/itsi_sandbox_hanami/config/puma.rb +0 -47
- data/sandbox/itsi_sandbox_hanami/config/routes.rb +0 -7
- data/sandbox/itsi_sandbox_hanami/config/settings.rb +0 -9
- data/sandbox/itsi_sandbox_hanami/config.ru +0 -5
- data/sandbox/itsi_sandbox_hanami/db/.keep +0 -0
- data/sandbox/itsi_sandbox_hanami/lib/itsi_hanami/types.rb +0 -11
- data/sandbox/itsi_sandbox_hanami/lib/tasks/.keep +0 -0
- data/sandbox/itsi_sandbox_hanami/package-lock.json +0 -946
- data/sandbox/itsi_sandbox_hanami/package.json +0 -8
- data/sandbox/itsi_sandbox_hanami/spec/requests/root_spec.rb +0 -11
- data/sandbox/itsi_sandbox_hanami/spec/spec_helper.rb +0 -9
- data/sandbox/itsi_sandbox_hanami/spec/support/db/cleaning.rb +0 -42
- data/sandbox/itsi_sandbox_hanami/spec/support/db.rb +0 -10
- data/sandbox/itsi_sandbox_hanami/spec/support/features.rb +0 -5
- data/sandbox/itsi_sandbox_hanami/spec/support/operations.rb +0 -8
- data/sandbox/itsi_sandbox_hanami/spec/support/requests.rb +0 -13
- data/sandbox/itsi_sandbox_hanami/spec/support/rspec.rb +0 -61
- data/sandbox/itsi_sandbox_rack/Gemfile +0 -17
- data/sandbox/itsi_sandbox_rack/Gemfile.lock +0 -153
- data/sandbox/itsi_sandbox_rack/config.ru +0 -5
- data/sandbox/itsi_sandbox_rack_lint/Gemfile +0 -7
- data/sandbox/itsi_sandbox_rack_lint/Gemfile.lock +0 -27
- data/sandbox/itsi_sandbox_rack_lint/config.ru +0 -3
- data/sandbox/itsi_sandbox_rails/.dockerignore +0 -48
- data/sandbox/itsi_sandbox_rails/.gitattributes +0 -9
- data/sandbox/itsi_sandbox_rails/.github/dependabot.yml +0 -12
- data/sandbox/itsi_sandbox_rails/.github/workflows/ci.yml +0 -90
- data/sandbox/itsi_sandbox_rails/.gitignore +0 -35
- data/sandbox/itsi_sandbox_rails/.rubocop.yml +0 -8
- data/sandbox/itsi_sandbox_rails/.ruby-version +0 -1
- data/sandbox/itsi_sandbox_rails/Dockerfile +0 -69
- data/sandbox/itsi_sandbox_rails/Gemfile +0 -66
- data/sandbox/itsi_sandbox_rails/Gemfile.lock +0 -429
- data/sandbox/itsi_sandbox_rails/README.md +0 -24
- data/sandbox/itsi_sandbox_rails/Rakefile +0 -6
- data/sandbox/itsi_sandbox_rails/app/assets/config/manifest.js +0 -4
- data/sandbox/itsi_sandbox_rails/app/assets/images/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/app/assets/stylesheets/application.css +0 -15
- data/sandbox/itsi_sandbox_rails/app/channels/application_cable/channel.rb +0 -4
- data/sandbox/itsi_sandbox_rails/app/channels/application_cable/connection.rb +0 -4
- data/sandbox/itsi_sandbox_rails/app/controllers/application_controller.rb +0 -4
- data/sandbox/itsi_sandbox_rails/app/controllers/concerns/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/app/controllers/home_controller.rb +0 -66
- data/sandbox/itsi_sandbox_rails/app/controllers/live_controller.rb +0 -40
- data/sandbox/itsi_sandbox_rails/app/controllers/uploads_controller.rb +0 -29
- data/sandbox/itsi_sandbox_rails/app/helpers/application_helper.rb +0 -2
- data/sandbox/itsi_sandbox_rails/app/javascript/application.js +0 -3
- data/sandbox/itsi_sandbox_rails/app/javascript/controllers/application.js +0 -9
- data/sandbox/itsi_sandbox_rails/app/javascript/controllers/hello_controller.js +0 -7
- data/sandbox/itsi_sandbox_rails/app/javascript/controllers/index.js +0 -4
- data/sandbox/itsi_sandbox_rails/app/jobs/application_job.rb +0 -7
- data/sandbox/itsi_sandbox_rails/app/mailers/application_mailer.rb +0 -4
- data/sandbox/itsi_sandbox_rails/app/models/application_record.rb +0 -3
- data/sandbox/itsi_sandbox_rails/app/models/concerns/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/app/models/post.rb +0 -2
- data/sandbox/itsi_sandbox_rails/app/views/layouts/application.html.erb +0 -23
- data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.html.erb +0 -13
- data/sandbox/itsi_sandbox_rails/app/views/layouts/mailer.text.erb +0 -1
- data/sandbox/itsi_sandbox_rails/app/views/pwa/manifest.json.erb +0 -22
- data/sandbox/itsi_sandbox_rails/app/views/pwa/service-worker.js +0 -26
- data/sandbox/itsi_sandbox_rails/bin/brakeman +0 -7
- data/sandbox/itsi_sandbox_rails/bin/bundle +0 -109
- data/sandbox/itsi_sandbox_rails/bin/docker-entrypoint +0 -13
- data/sandbox/itsi_sandbox_rails/bin/importmap +0 -4
- data/sandbox/itsi_sandbox_rails/bin/rails +0 -4
- data/sandbox/itsi_sandbox_rails/bin/rake +0 -4
- data/sandbox/itsi_sandbox_rails/bin/rubocop +0 -8
- data/sandbox/itsi_sandbox_rails/bin/setup +0 -37
- data/sandbox/itsi_sandbox_rails/config/application.rb +0 -27
- data/sandbox/itsi_sandbox_rails/config/boot.rb +0 -4
- data/sandbox/itsi_sandbox_rails/config/cable.yml +0 -10
- data/sandbox/itsi_sandbox_rails/config/credentials.yml.enc +0 -1
- data/sandbox/itsi_sandbox_rails/config/database.yml +0 -30
- data/sandbox/itsi_sandbox_rails/config/environment.rb +0 -5
- data/sandbox/itsi_sandbox_rails/config/environments/development.rb +0 -82
- data/sandbox/itsi_sandbox_rails/config/environments/production.rb +0 -106
- data/sandbox/itsi_sandbox_rails/config/environments/test.rb +0 -67
- data/sandbox/itsi_sandbox_rails/config/importmap.rb +0 -7
- data/sandbox/itsi_sandbox_rails/config/initializers/assets.rb +0 -12
- data/sandbox/itsi_sandbox_rails/config/initializers/content_security_policy.rb +0 -25
- data/sandbox/itsi_sandbox_rails/config/initializers/filter_parameter_logging.rb +0 -8
- data/sandbox/itsi_sandbox_rails/config/initializers/inflections.rb +0 -16
- data/sandbox/itsi_sandbox_rails/config/initializers/permissions_policy.rb +0 -13
- data/sandbox/itsi_sandbox_rails/config/locales/en.yml +0 -31
- data/sandbox/itsi_sandbox_rails/config/puma.rb +0 -34
- data/sandbox/itsi_sandbox_rails/config/routes.rb +0 -23
- data/sandbox/itsi_sandbox_rails/config/storage.yml +0 -34
- data/sandbox/itsi_sandbox_rails/config.ru +0 -6
- data/sandbox/itsi_sandbox_rails/db/migrate/20250301041554_create_posts.rb +0 -10
- data/sandbox/itsi_sandbox_rails/db/schema.rb +0 -23
- data/sandbox/itsi_sandbox_rails/db/seeds.rb +0 -9
- data/sandbox/itsi_sandbox_rails/lib/assets/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/lib/tasks/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/log/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/public/404.html +0 -67
- data/sandbox/itsi_sandbox_rails/public/406-unsupported-browser.html +0 -66
- data/sandbox/itsi_sandbox_rails/public/422.html +0 -67
- data/sandbox/itsi_sandbox_rails/public/500.html +0 -66
- data/sandbox/itsi_sandbox_rails/public/icon.png +0 -0
- data/sandbox/itsi_sandbox_rails/public/icon.svg +0 -3
- data/sandbox/itsi_sandbox_rails/public/robots.txt +0 -1
- data/sandbox/itsi_sandbox_rails/storage/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/application_system_test_case.rb +0 -5
- data/sandbox/itsi_sandbox_rails/test/channels/application_cable/connection_test.rb +0 -13
- data/sandbox/itsi_sandbox_rails/test/controllers/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/fixtures/files/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/helpers/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/integration/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/mailers/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/models/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/system/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/test/test_helper.rb +0 -15
- data/sandbox/itsi_sandbox_rails/tmp/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/tmp/pids/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/tmp/storage/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/vendor/.keep +0 -0
- data/sandbox/itsi_sandbox_rails/vendor/javascript/.keep +0 -0
- data/sandbox/itsi_sandbox_roda/Gemfile +0 -5
- data/sandbox/itsi_sandbox_roda/Gemfile.lock +0 -37
- data/sandbox/itsi_sandbox_roda/config.ru +0 -39
- data/sandbox/itsi_sinatra/Gemfile +0 -9
- data/sandbox/itsi_sinatra/Gemfile.lock +0 -81
- data/sandbox/itsi_sinatra/app.rb +0 -8
- data/sandbox/pebble/docker-compose.yml +0 -11
- data/sandbox/static_files/.env +0 -1
- data/sandbox/static_files/404.html +0 -25
- data/sandbox/static_files/_DSC0102.NEF.jpg +0 -0
- data/sandbox/static_files/about.html +0 -68
- data/sandbox/static_files/tiny.html +0 -1
- data/sandbox/static_files/writebook.zip +0 -0
data/sandbox/itsi_file/Itsi.rb
DELETED
@@ -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
|
data/sandbox/itsi_file/call.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"message": "Hello, World!"}
|
@@ -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.
|