itsi 0.1.18 → 0.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/Cargo.lock +924 -385
- data/README.md +67 -55
- data/crates/itsi_server/Cargo.toml +7 -4
- 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 +932 -382
- data/gems/server/README.md +2 -0
- data/gems/server/exe/itsi +5 -5
- data/gems/server/lib/itsi/http_request.rb +1 -0
- data/gems/server/lib/itsi/server/config/config_helpers.rb +93 -0
- data/gems/server/lib/itsi/server/config/dsl.rb +98 -37
- 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 -473
- 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
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
require "net/http"
|
3
|
-
require "minitest/autorun"
|
1
|
+
require_relative "helpers/test_helper"
|
4
2
|
|
5
3
|
class TestItsiServer < Minitest::Test
|
6
4
|
def test_that_it_has_a_version_number
|
@@ -8,25 +6,25 @@ class TestItsiServer < Minitest::Test
|
|
8
6
|
end
|
9
7
|
|
10
8
|
def test_hello_world
|
11
|
-
|
9
|
+
server(app: lambda do |env|
|
12
10
|
[200, { "Content-Type" => "text/plain" }, ["Hello, World!"]]
|
13
|
-
end) do
|
14
|
-
assert_equal "Hello, World!",
|
11
|
+
end) do
|
12
|
+
assert_equal "Hello, World!", get("/")
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
18
16
|
def test_post
|
19
|
-
|
17
|
+
server(app: lambda do |env|
|
20
18
|
assert_equal env["REQUEST_METHOD"], "POST"
|
21
19
|
assert_equal "data", env["rack.input"].read
|
22
20
|
[200, { "Content-Type" => "text/plain" }, ["Hello, World!"]]
|
23
|
-
end) do
|
24
|
-
assert_equal "Hello, World!",
|
21
|
+
end) do
|
22
|
+
assert_equal "Hello, World!", post("/", "data").body
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
26
|
def test_full_hijack
|
29
|
-
|
27
|
+
server(app: lambda do |env|
|
30
28
|
io = env["rack.hijack"].call
|
31
29
|
io.write("HTTP/1.1 200 Ok\r\n")
|
32
30
|
io.write("Content-Type: text/plain\r\n")
|
@@ -38,99 +36,95 @@ class TestItsiServer < Minitest::Test
|
|
38
36
|
io.write("World!\r\n")
|
39
37
|
io.write("0\r\n\r\n")
|
40
38
|
io.close
|
41
|
-
end) do
|
42
|
-
assert_equal "Hello, World!",
|
39
|
+
end) do
|
40
|
+
assert_equal "Hello, World!", get("/")
|
43
41
|
end
|
44
42
|
end
|
45
43
|
|
46
44
|
def test_streaming_body
|
47
|
-
|
45
|
+
server(app: lambda do |env|
|
48
46
|
[200, { "Content-Type" => "text/plain" }, lambda { |stream|
|
49
47
|
stream.write("Hello")
|
50
48
|
stream.write(", World!")
|
51
49
|
stream.close
|
52
50
|
}]
|
53
|
-
end) do
|
54
|
-
assert_equal "Hello, World!",
|
51
|
+
end) do
|
52
|
+
assert_equal "Hello, World!", get("/")
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
56
|
def test_partial_hijack
|
59
|
-
|
57
|
+
server(app: lambda do |env|
|
60
58
|
[200, { "Content-Type" => "text/plain", "rack.hijack" => lambda { |stream|
|
61
59
|
stream.write("Hello")
|
62
60
|
stream.write(", World!")
|
63
61
|
stream.close
|
64
62
|
} }, []]
|
65
|
-
end) do
|
66
|
-
assert_equal "Hello, World!",
|
63
|
+
end) do
|
64
|
+
assert_equal "Hello, World!", get("/")
|
67
65
|
end
|
68
66
|
end
|
69
67
|
|
70
68
|
def test_enumerable_body
|
71
|
-
|
69
|
+
server(app: lambda do |env|
|
72
70
|
[200, { "Content-Type" => "application/json" },
|
73
71
|
%W[one\n two\n three\n]]
|
74
|
-
end) do
|
75
|
-
assert_equal "one\ntwo\nthree\n",
|
72
|
+
end) do
|
73
|
+
assert_equal "one\ntwo\nthree\n", get("/")
|
76
74
|
end
|
77
75
|
end
|
78
76
|
|
79
77
|
def test_scheduler_non_blocking
|
80
|
-
|
81
|
-
lambda do
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
78
|
+
server(
|
79
|
+
itsi_rb: lambda do
|
80
|
+
fiber_scheduler "Itsi::Scheduler"
|
81
|
+
run(lambda do |env|
|
82
|
+
sleep 0.25
|
83
|
+
[200, { "Content-Type" => "text/plain" }, "Response: #{env["PATH_INFO"][1..-1]}"]
|
84
|
+
end)
|
85
|
+
end
|
86
|
+
) do
|
87
87
|
start_time = Time.now
|
88
88
|
20.times.map do
|
89
89
|
Thread.new do
|
90
90
|
payload = SecureRandom.hex(16)
|
91
|
-
|
92
|
-
local_uri.path = "/#{payload}"
|
93
|
-
response = Net::HTTP.start(local_uri.hostname, local_uri.port) do |http|
|
94
|
-
http.request(Net::HTTP::Get.new(local_uri))
|
95
|
-
end
|
91
|
+
response = get_resp("/#{payload}")
|
96
92
|
assert_equal "Response: #{payload}", response.body
|
97
93
|
end
|
98
94
|
end.each(&:join)
|
95
|
+
|
99
96
|
assert_in_delta 0.25, Time.now - start_time, 0.5
|
100
97
|
end
|
101
98
|
end
|
102
99
|
|
103
100
|
def test_query_params
|
104
|
-
|
101
|
+
server(app: lambda do |env|
|
105
102
|
[200, { "Content-Type" => "text/plain" }, [env["QUERY_STRING"]]]
|
106
|
-
end) do
|
107
|
-
|
108
|
-
assert_equal "foo=bar&baz=qux", Net::HTTP.get(uri)
|
103
|
+
end) do
|
104
|
+
assert_equal "foo=bar&baz=qux", get("/?foo=bar&baz=qux")
|
109
105
|
end
|
110
106
|
end
|
111
107
|
|
112
108
|
def test_put_request
|
113
|
-
|
109
|
+
server(app: lambda do |env|
|
114
110
|
body = env["rack.input"].read
|
115
111
|
[200, { "Content-Type" => "text/plain" }, [body]]
|
116
112
|
end) do |uri|
|
117
|
-
|
118
|
-
req = Net::HTTP::Put.new(uri_obj)
|
113
|
+
req = Net::HTTP::Put.new(uri)
|
119
114
|
req.body = "put data"
|
120
|
-
response = Net::HTTP.start(
|
115
|
+
response = Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) }
|
121
116
|
assert_equal "put data", response.body
|
122
117
|
end
|
123
118
|
end
|
124
119
|
|
125
120
|
def test_custom_headers
|
126
|
-
|
121
|
+
server(app: lambda do |env|
|
127
122
|
header = env["HTTP_X_CUSTOM"] || ""
|
128
123
|
[200, { "Content-Type" => "text/plain" }, [header]]
|
129
124
|
end) do |uri|
|
130
|
-
|
131
|
-
req = Net::HTTP::Get.new(uri_obj)
|
125
|
+
req = Net::HTTP::Get.new(uri)
|
132
126
|
req["X-Custom"] = "custom-value"
|
133
|
-
response = Net::HTTP.start(
|
127
|
+
response = Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) }
|
134
128
|
assert_equal "custom-value", response.body
|
135
129
|
end
|
136
130
|
end
|
@@ -138,48 +132,44 @@ class TestItsiServer < Minitest::Test
|
|
138
132
|
def test_error_response
|
139
133
|
response = nil
|
140
134
|
capture_subprocess_io do
|
141
|
-
|
135
|
+
server(app: lambda do |env|
|
142
136
|
raise "Intentional error for testing"
|
143
|
-
end) do
|
144
|
-
response =
|
137
|
+
end) do
|
138
|
+
response = get_resp("/")
|
145
139
|
end
|
146
140
|
end
|
147
141
|
assert_equal "500", response.code
|
148
142
|
end
|
149
143
|
|
150
144
|
def test_redirect
|
151
|
-
|
145
|
+
server(app: lambda do |env|
|
152
146
|
[302, { "Location" => "http://example.com" }, []]
|
153
|
-
end) do
|
154
|
-
response =
|
147
|
+
end) do
|
148
|
+
response = get_resp("/")
|
155
149
|
assert_equal "302", response.code
|
156
150
|
assert_equal "http://example.com", response["location"]
|
157
151
|
end
|
158
152
|
end
|
159
153
|
|
160
154
|
def test_not_found
|
161
|
-
|
155
|
+
server(app: lambda do |env|
|
162
156
|
if env["PATH_INFO"] == "/"
|
163
157
|
[200, { "Content-Type" => "text/plain" }, ["Home"]]
|
164
158
|
else
|
165
159
|
[404, { "Content-Type" => "text/plain" }, ["Not Found"]]
|
166
160
|
end
|
167
|
-
end) do
|
168
|
-
|
169
|
-
response = Net::HTTP.get_response(uri)
|
161
|
+
end) do
|
162
|
+
response = get_resp("/nonexistent")
|
170
163
|
assert_equal "404", response.code
|
171
164
|
assert_equal "Not Found", response.body
|
172
165
|
end
|
173
166
|
end
|
174
167
|
|
175
168
|
def test_head_request
|
176
|
-
|
169
|
+
server(app: lambda do |env|
|
177
170
|
[200, { "Content-Type" => "text/plain", "Content-Length" => "13" }, ["Hello, World!"]]
|
178
|
-
end) do
|
179
|
-
|
180
|
-
response = Net::HTTP.start(uri_obj.hostname, uri_obj.port) do |http|
|
181
|
-
http.head("/")
|
182
|
-
end
|
171
|
+
end) do
|
172
|
+
response = head("/")
|
183
173
|
assert_equal "200", response.code
|
184
174
|
assert_empty response.body.to_s
|
185
175
|
assert_equal "13", response["content-length"]
|
@@ -187,12 +177,10 @@ class TestItsiServer < Minitest::Test
|
|
187
177
|
end
|
188
178
|
|
189
179
|
def test_options_request
|
190
|
-
|
180
|
+
server(app: lambda do |env|
|
191
181
|
[200, { "Allow" => "GET,POST,OPTIONS", "Content-Type" => "text/plain" }, ["Options Response"]]
|
192
|
-
end) do
|
193
|
-
|
194
|
-
req = Net::HTTP::Options.new(uri_obj)
|
195
|
-
response = Net::HTTP.start(uri_obj.hostname, uri_obj.port) { |http| http.request(req) }
|
182
|
+
end) do
|
183
|
+
response = options("/")
|
196
184
|
assert_equal "200", response.code
|
197
185
|
assert_equal "GET,POST,OPTIONS", response["allow"]
|
198
186
|
assert_equal "Options Response", response.body
|
@@ -200,10 +188,10 @@ class TestItsiServer < Minitest::Test
|
|
200
188
|
end
|
201
189
|
|
202
190
|
def test_cookie_handling
|
203
|
-
|
191
|
+
server(app: lambda do |env|
|
204
192
|
[200, { "Content-Type" => "text/plain", "Set-Cookie" => "session=abc123; Path=/" }, ["Cookie Test"]]
|
205
|
-
end) do
|
206
|
-
response =
|
193
|
+
end) do
|
194
|
+
response = get_resp('/')
|
207
195
|
assert_equal "200", response.code
|
208
196
|
assert_match(/session=abc123/, response["set-cookie"])
|
209
197
|
assert_equal "Cookie Test", response.body
|
@@ -211,10 +199,10 @@ class TestItsiServer < Minitest::Test
|
|
211
199
|
end
|
212
200
|
|
213
201
|
def test_multiple_headers
|
214
|
-
|
202
|
+
server(app: lambda do |env|
|
215
203
|
[200, { "Content-Type" => "text/plain", "X-Example" => "one, two, three" }, ["Multiple Headers"]]
|
216
|
-
end) do
|
217
|
-
response =
|
204
|
+
end) do
|
205
|
+
response = get_resp("/")
|
218
206
|
assert_equal "200", response.code
|
219
207
|
assert_equal "one, two, three", response["x-example"]
|
220
208
|
assert_equal "Multiple Headers", response.body
|
@@ -223,30 +211,30 @@ class TestItsiServer < Minitest::Test
|
|
223
211
|
|
224
212
|
def test_large_body
|
225
213
|
large_text = "A" * 10_000
|
226
|
-
|
214
|
+
server(app: lambda do |env|
|
227
215
|
[200, { "Content-Type" => "text/plain", "Content-Length" => large_text.bytesize.to_s }, [large_text]]
|
228
|
-
end) do
|
229
|
-
response =
|
216
|
+
end) do
|
217
|
+
response = get_resp("/")
|
230
218
|
assert_equal "200", response.code
|
231
219
|
assert_equal large_text, response.body
|
232
220
|
end
|
233
221
|
end
|
234
222
|
|
235
223
|
def test_custom_status_code
|
236
|
-
|
224
|
+
server(app: lambda do |env|
|
237
225
|
[201, { "Content-Type" => "text/plain" }, ["Created"]]
|
238
|
-
end) do
|
239
|
-
response =
|
226
|
+
end) do
|
227
|
+
response = get_resp("/")
|
240
228
|
assert_equal "201", response.code
|
241
229
|
assert_equal "Created", response.body
|
242
230
|
end
|
243
231
|
end
|
244
232
|
|
245
233
|
def test_empty_body
|
246
|
-
|
234
|
+
server(app: lambda do |env|
|
247
235
|
[204, { "Content-Type" => "text/plain" }, []]
|
248
|
-
end) do
|
249
|
-
response =
|
236
|
+
end) do
|
237
|
+
response = get_resp("/")
|
250
238
|
assert_equal "204", response.code
|
251
239
|
assert_nil response.body
|
252
240
|
end
|
@@ -254,44 +242,43 @@ class TestItsiServer < Minitest::Test
|
|
254
242
|
|
255
243
|
def test_utf8_response
|
256
244
|
utf8_text = "こんにちは世界"
|
257
|
-
|
245
|
+
server(app: lambda do |env|
|
258
246
|
[200, { "Content-Type" => "text/plain; charset=utf-8" }, [utf8_text]]
|
259
|
-
end) do
|
260
|
-
response =
|
247
|
+
end) do
|
248
|
+
response = get_resp("/")
|
261
249
|
assert_equal "200", response.code
|
262
250
|
assert_equal utf8_text, response.body.force_encoding("UTF-8")
|
263
251
|
end
|
264
252
|
end
|
265
253
|
|
266
254
|
def test_custom_request_header
|
267
|
-
|
255
|
+
server(app: lambda do |env|
|
268
256
|
header_value = env["HTTP_X_MY_HEADER"] || ""
|
269
257
|
[200, { "Content-Type" => "text/plain" }, [header_value]]
|
270
258
|
end) do |uri|
|
271
|
-
|
272
|
-
req = Net::HTTP::Get.new(
|
259
|
+
|
260
|
+
req = Net::HTTP::Get.new(uri)
|
273
261
|
req["X-My-Header"] = "test-header"
|
274
|
-
response = Net::HTTP.start(
|
262
|
+
response = Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) }
|
275
263
|
assert_equal "test-header", response.body
|
276
264
|
end
|
277
265
|
end
|
278
266
|
|
279
267
|
def test_url_encoded_query_params
|
280
|
-
|
268
|
+
server(app: lambda do |env|
|
281
269
|
[200, { "Content-Type" => "text/plain" }, [env["QUERY_STRING"]]]
|
282
|
-
end) do
|
283
|
-
|
284
|
-
assert_equal "param=%C3%A9", Net::HTTP.get(uri)
|
270
|
+
end) do
|
271
|
+
assert_equal "param=%C3%A9", get("/?param=%C3%A9")
|
285
272
|
end
|
286
273
|
end
|
287
274
|
|
288
275
|
def test_https
|
289
|
-
|
276
|
+
server(app: lambda do |env|
|
290
277
|
[200, { "Content-Type" => "text/plain" }, ["Hello, HTTPS!"]]
|
291
278
|
end, protocol: "https") do |uri|
|
292
279
|
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true,
|
293
280
|
verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
|
294
|
-
http.request(Net::HTTP::Get.new(
|
281
|
+
http.request(Net::HTTP::Get.new("/"))
|
295
282
|
end
|
296
283
|
assert_equal "200", response.code
|
297
284
|
assert_equal "Hello, HTTPS!", response.body
|
Binary file
|
data/itsi-server-100.png
ADDED
Binary file
|
data/lib/itsi/version.rb
CHANGED
data/tasks.txt
CHANGED
@@ -1,23 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
- H3
|
4
|
-
- OpenAPI gen
|
5
|
-
|
6
|
-
Feature complete. Polish and Release (At Lake):
|
7
|
-
- Establish pattern for separate files for dsl feature, accumulated errors, ruby-dsl and "Did you mean" function.
|
8
|
-
- Always do dry-run before reloading app.
|
9
|
-
- More elegant route printing (middleware)
|
10
|
-
- Fix default config (make sane choices)
|
11
|
-
|
12
|
-
-- Feature breakdown. For each feature make sure we have
|
1
|
+
Feature complete! Polish and Release (At Lake):
|
2
|
+
-- Feature breakdown. Per feature make sure we have
|
13
3
|
--- Clean Code
|
4
|
+
--- Debug logging
|
14
5
|
--- Ultra robust config, with sane and safe defaults.
|
15
6
|
--- Complete Documentation (Readme + Blog)
|
7
|
+
--- Nice middleware printing
|
16
8
|
--- Tests.
|
17
|
-
--- Debug Logging
|
18
|
-
---
|
19
|
-
|
20
|
-
|
9
|
+
--- Targetable Debug Logging
|
10
|
+
--- Good default config value
|
11
|
+
|
12
|
+
- Go on unwrap hunt
|
13
|
+
|
14
|
+
|
15
|
+
Fill in Changelog.md date
|
16
|
+
Retest in live environment
|
17
|
+
- Add examples
|
18
|
+
*maybe* leave service running on live server to verify let's encrypt renewals.
|
21
19
|
|
22
20
|
- Feature List:
|
23
21
|
-- HTTP
|
@@ -30,12 +28,13 @@ Feature complete. Polish and Release (At Lake):
|
|
30
28
|
-- Streaming Bodies
|
31
29
|
-- Rate Limiter
|
32
30
|
-- Auth JWT/Basic/API
|
33
|
-
-- gRPC
|
34
|
-
-- File Watcher
|
35
|
-
-- Allow/Deny
|
31
|
+
-- gRPC Server (Plug in existing Ruby gRPC handlers)
|
32
|
+
-- File Watcher and auto-reloading
|
33
|
+
-- Allow/Deny lists
|
36
34
|
-- Cache control
|
37
35
|
-- compression
|
38
36
|
-- CORS
|
37
|
+
-- CSP Reporting
|
39
38
|
-- etag
|
40
39
|
-- Intrusion Protection
|
41
40
|
-- Proxy
|
@@ -48,13 +47,11 @@ Feature complete. Polish and Release (At Lake):
|
|
48
47
|
-- Logging
|
49
48
|
-- Cluster
|
50
49
|
-- Single
|
51
|
-
-- Restart
|
52
|
-
--
|
53
|
-
-- Thread high/low
|
50
|
+
-- Graceful and Hot Restart
|
51
|
+
-- Streaming body
|
54
52
|
-- Unix Sockets
|
55
|
-
--
|
56
|
-
--
|
57
|
-
-- Lsp and Did you mean
|
53
|
+
-- Support for running high-performance mini-apps, written and served directly from the singular Itsi.rb configuration file.
|
54
|
+
-- Well documented complete with LSP support.
|
58
55
|
-- Author Final default Itsi-file
|
59
56
|
-- Add notes on: PGGSSENCMODE="disable" and OBJC_DISABLE_INITIALIZE_FORK_SAFETY=
|
60
57
|
|
@@ -63,10 +60,21 @@ Later:
|
|
63
60
|
- Even faster Hash creation for Rack
|
64
61
|
- Image resizer
|
65
62
|
- First class Rackless Websockets
|
66
|
-
- Implement better Request timeouts (non-fiber mode. Kill stuck threads. Default to nil)
|
67
63
|
- Print out warning if we can detect that a location block will never be hit.
|
68
64
|
- Built in obs Dashboard + Stats
|
69
65
|
- Support UDP
|
70
66
|
- Support unix socket proxy
|
71
|
-
|
72
|
-
|
67
|
+
- WASM pluggable middleware
|
68
|
+
- gRPC proxying
|
69
|
+
|
70
|
+
-- Stretch goals:
|
71
|
+
- HTTP-01 Autocert
|
72
|
+
- H3
|
73
|
+
- OpenAPI gen
|
74
|
+
- Finish Single acceptor mode (Optional)
|
75
|
+
- Introduce Option
|
76
|
+
- Finish Unix implementation
|
77
|
+
- Kill a single worker (impact)
|
78
|
+
- Clean shutdown and restart while in single acceptor mode
|
79
|
+
- Fix Hang
|
80
|
+
- Introduce Socket Options
|