itsi 0.1.19 → 0.2.2
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 +8 -0
- data/Cargo.lock +942 -242
- data/LICENSE.txt +698 -0
- data/README.md +77 -54
- data/Rakefile +9 -5
- data/crates/itsi_acme/.gitignore +4 -0
- data/crates/itsi_acme/Cargo.toml +86 -0
- data/crates/itsi_acme/LICENSE-APACHE +201 -0
- data/crates/itsi_acme/LICENSE-MIT +23 -0
- data/crates/itsi_acme/README.md +9 -0
- data/crates/itsi_acme/examples/high_level.rs +63 -0
- data/crates/itsi_acme/examples/high_level_warp.rs +52 -0
- data/crates/itsi_acme/examples/low_level.rs +87 -0
- data/crates/itsi_acme/examples/low_level_axum.rs +66 -0
- data/crates/itsi_acme/src/acceptor.rs +81 -0
- data/crates/itsi_acme/src/acme.rs +354 -0
- data/crates/itsi_acme/src/axum.rs +86 -0
- data/crates/itsi_acme/src/cache.rs +39 -0
- data/crates/itsi_acme/src/caches/boxed.rs +80 -0
- data/crates/itsi_acme/src/caches/composite.rs +69 -0
- data/crates/itsi_acme/src/caches/dir.rs +106 -0
- data/crates/itsi_acme/src/caches/mod.rs +11 -0
- data/crates/itsi_acme/src/caches/no.rs +78 -0
- data/crates/itsi_acme/src/caches/test.rs +136 -0
- data/crates/itsi_acme/src/config.rs +172 -0
- data/crates/itsi_acme/src/https_helper.rs +69 -0
- data/crates/itsi_acme/src/incoming.rs +142 -0
- data/crates/itsi_acme/src/jose.rs +161 -0
- data/crates/itsi_acme/src/lib.rs +142 -0
- data/crates/itsi_acme/src/resolver.rs +59 -0
- data/crates/itsi_acme/src/state.rs +424 -0
- data/crates/itsi_rb_helpers/src/lib.rs +4 -3
- data/crates/itsi_scheduler/Cargo.toml +1 -1
- data/crates/itsi_scheduler/src/itsi_scheduler.rs +8 -2
- data/crates/itsi_scheduler/src/lib.rs +1 -0
- data/crates/itsi_server/Cargo.toml +3 -3
- data/crates/itsi_server/src/lib.rs +2 -1
- data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +20 -3
- data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +11 -3
- data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +255 -65
- data/crates/itsi_server/src/ruby_types/itsi_server.rs +3 -0
- data/crates/itsi_server/src/server/binds/bind.rs +3 -0
- data/crates/itsi_server/src/server/binds/listener.rs +44 -32
- data/crates/itsi_server/src/server/binds/tls/locked_dir_cache.rs +2 -2
- data/crates/itsi_server/src/server/binds/tls.rs +14 -6
- data/crates/itsi_server/src/server/middleware_stack/middleware.rs +33 -28
- data/crates/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +12 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +8 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +9 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +95 -37
- data/crates/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +11 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +39 -12
- data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +36 -27
- data/crates/itsi_server/src/server/middleware_stack/middlewares/csp.rs +193 -0
- data/crates/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +12 -3
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +74 -72
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +15 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +11 -8
- data/crates/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +19 -11
- data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +5 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +2 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +31 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +17 -20
- data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +19 -8
- data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +16 -37
- data/crates/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +22 -12
- data/crates/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +26 -11
- 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 +9 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +14 -4
- data/crates/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +19 -0
- data/crates/itsi_server/src/server/middleware_stack/mod.rs +69 -35
- data/crates/itsi_server/src/server/mod.rs +1 -0
- data/crates/itsi_server/src/server/redirect_type.rs +26 -0
- data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +30 -18
- data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +77 -17
- data/crates/itsi_server/src/server/signal.rs +1 -0
- data/crates/itsi_server/src/server/size_limited_incoming.rs +6 -0
- data/crates/itsi_server/src/server/thread_worker.rs +6 -2
- data/crates/itsi_server/src/services/itsi_http_service.rs +20 -2
- data/crates/itsi_server/src/services/rate_limiter.rs +15 -4
- data/crates/itsi_server/src/services/static_file_server.rs +63 -47
- data/crates/itsi_tracing/src/lib.rs +80 -29
- data/docker/Dockerfile +12 -0
- data/docs/content/_index.md +17 -10
- data/docs/content/acknowledgements/_index.md +46 -0
- data/docs/content/configuration/_index.md +101 -0
- data/docs/content/contact/_index.md +14 -0
- data/docs/content/faqs/_index.md +29 -0
- data/docs/content/features/_index.md +291 -0
- data/docs/content/getting_started/_index.md +73 -0
- data/docs/content/getting_started/local_development.md +100 -0
- data/docs/content/getting_started/logging.md +23 -0
- data/docs/content/getting_started/running_itsi_in_production.md +26 -0
- data/docs/content/getting_started/signals.md +38 -0
- data/docs/content/itsi-server-100.png +0 -0
- data/docs/content/itsi_scheduler/_index.md +106 -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/content/utilities/_index.md +13 -0
- data/docs/content/utilities/config_file_testing.md +17 -0
- data/docs/content/utilities/passfile_generator.md +41 -0
- data/docs/content/utilities/route_testing.md +27 -0
- data/docs/content/utilities/secrets_management.md +30 -0
- data/docs/data/icons.yaml +949 -0
- data/docs/hugo.yaml +27 -28
- data/fairytale.txt +33 -0
- data/gems/scheduler/Cargo.lock +47 -47
- data/gems/scheduler/README.md +52 -24
- data/gems/scheduler/Rakefile +0 -4
- data/gems/scheduler/itsi-scheduler-100.png +0 -0
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/scheduler/lib/itsi/scheduler.rb +9 -4
- data/gems/scheduler/test/test_active_record.rb +12 -7
- data/gems/server/Cargo.lock +950 -239
- data/gems/server/README.md +2 -0
- data/gems/server/Rakefile +0 -4
- data/gems/server/exe/itsi +16 -5
- data/gems/server/lib/itsi/http_request/response_status_shortcodes.rb +2 -0
- data/gems/server/lib/itsi/http_request.rb +40 -9
- data/gems/server/lib/itsi/http_response.rb +2 -1
- data/gems/server/lib/itsi/passfile.rb +0 -1
- data/gems/server/lib/itsi/server/config/config_helpers.rb +105 -0
- data/gems/server/lib/itsi/server/config/dsl.rb +44 -411
- 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 +20 -0
- data/gems/server/lib/itsi/server/config/middleware/_index.md +56 -0
- data/gems/server/lib/itsi/server/config/middleware/allow_list.md +46 -0
- data/gems/server/lib/itsi/server/config/middleware/allow_list.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_api_key.md +90 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_api_key.rb +51 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_basic.md +45 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_basic.rb +44 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_jwt.md +82 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_jwt.rb +38 -0
- data/gems/server/lib/itsi/server/config/middleware/cache_control.md +78 -0
- data/gems/server/lib/itsi/server/config/middleware/cache_control.rb +45 -0
- data/gems/server/lib/itsi/server/config/middleware/cidr_to_regex.rb +50 -0
- data/gems/server/lib/itsi/server/config/middleware/compression.md +50 -0
- data/gems/server/lib/itsi/server/config/middleware/compression.rb +37 -0
- data/gems/server/lib/itsi/server/config/middleware/cors.md +93 -0
- data/gems/server/lib/itsi/server/config/middleware/cors.rb +32 -0
- data/gems/server/lib/itsi/server/config/middleware/csp.md +37 -0
- data/gems/server/lib/itsi/server/config/middleware/csp.rb +44 -0
- data/gems/server/lib/itsi/server/config/middleware/deny_list.md +45 -0
- data/gems/server/lib/itsi/server/config/middleware/deny_list.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/_index.md +159 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.md +186 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.rb +33 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/endpoint.rb +99 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/get.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/get.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/http_request.md +44 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/http_response.md +39 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/post.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/post.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/put.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/put.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/schemas.md +122 -0
- data/gems/server/lib/itsi/server/config/middleware/error_response.md +61 -0
- data/gems/server/lib/itsi/server/config/middleware/error_response.rb +36 -0
- data/gems/server/lib/itsi/server/config/middleware/etag.md +59 -0
- data/gems/server/lib/itsi/server/config/middleware/etag.rb +27 -0
- data/gems/server/lib/itsi/server/config/middleware/grpc.md +172 -0
- data/gems/server/lib/itsi/server/config/middleware/grpc.rb +54 -0
- data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.md +124 -0
- data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.rb +61 -0
- data/gems/server/lib/itsi/server/config/middleware/location.md +107 -0
- data/gems/server/lib/itsi/server/config/middleware/location.rb +99 -0
- data/gems/server/lib/itsi/server/config/middleware/log_requests.md +65 -0
- data/gems/server/lib/itsi/server/config/middleware/log_requests.rb +31 -0
- data/gems/server/lib/itsi/server/config/middleware/max_body.md +18 -0
- data/gems/server/lib/itsi/server/config/middleware/max_body.rb +21 -0
- data/gems/server/lib/itsi/server/config/middleware/proxy.md +62 -0
- data/gems/server/lib/itsi/server/config/middleware/proxy.rb +41 -0
- data/gems/server/lib/itsi/server/config/middleware/rackup_file.md +54 -0
- data/gems/server/lib/itsi/server/config/middleware/rackup_file.rb +44 -0
- data/gems/server/lib/itsi/server/config/middleware/rate_limit.md +126 -0
- data/gems/server/lib/itsi/server/config/middleware/rate_limit.rb +34 -0
- data/gems/server/lib/itsi/server/config/middleware/rate_limit_store.rb +25 -0
- data/gems/server/lib/itsi/server/config/middleware/redirect.md +55 -0
- data/gems/server/lib/itsi/server/config/middleware/redirect.rb +25 -0
- data/gems/server/lib/itsi/server/config/middleware/request_headers.md +34 -0
- data/gems/server/lib/itsi/server/config/middleware/request_headers.rb +24 -0
- data/gems/server/lib/itsi/server/config/middleware/response_headers.md +33 -0
- data/gems/server/lib/itsi/server/config/middleware/response_headers.rb +25 -0
- data/gems/server/lib/itsi/server/config/middleware/run.md +60 -0
- data/gems/server/lib/itsi/server/config/middleware/run.rb +43 -0
- data/gems/server/lib/itsi/server/config/middleware/static_assets.md +73 -0
- data/gems/server/lib/itsi/server/config/middleware/static_assets.rb +87 -0
- data/gems/server/lib/itsi/server/config/middleware/static_response.md +44 -0
- data/gems/server/lib/itsi/server/config/middleware/static_response.rb +29 -0
- data/gems/server/lib/itsi/server/config/middleware/string_rewrite.md +67 -0
- data/gems/server/lib/itsi/server/config/middleware/token_source.rb +32 -0
- data/gems/server/lib/itsi/server/config/middleware.rb +13 -0
- data/gems/server/lib/itsi/server/config/option.rb +14 -0
- data/gems/server/lib/itsi/server/config/options/_index.md +37 -0
- data/gems/server/lib/itsi/server/config/options/auto_reload_config.md +13 -0
- data/gems/server/lib/itsi/server/config/options/auto_reload_config.rb +41 -0
- data/gems/server/lib/itsi/server/config/options/bind.md +71 -0
- data/gems/server/lib/itsi/server/config/options/bind.rb +26 -0
- data/gems/server/lib/itsi/server/config/options/certificates.md +65 -0
- data/gems/server/lib/itsi/server/config/options/daemonize.md +14 -0
- data/gems/server/lib/itsi/server/config/options/daemonize.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/fiber_scheduler.md +34 -0
- data/gems/server/lib/itsi/server/config/options/fiber_scheduler.rb +21 -0
- data/gems/server/lib/itsi/server/config/options/header_read_timeout.md +17 -0
- data/gems/server/lib/itsi/server/config/options/header_read_timeout.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/hooks/_index.md +11 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_fork.md +13 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_fork.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.md +14 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_start.md +12 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_start.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_fork.md +13 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_fork.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_restart.md +12 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_restart.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.md +12 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/include.md +20 -0
- data/gems/server/lib/itsi/server/config/options/include.rb +36 -0
- data/gems/server/lib/itsi/server/config/options/listen_backlog.md +11 -0
- data/gems/server/lib/itsi/server/config/options/listen_backlog.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/log_format.md +18 -0
- data/gems/server/lib/itsi/server/config/options/log_format.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/log_level.md +34 -0
- data/gems/server/lib/itsi/server/config/options/log_level.rb +20 -0
- data/gems/server/lib/itsi/server/config/options/log_target.md +38 -0
- data/gems/server/lib/itsi/server/config/options/log_target.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/log_target_filters.md +17 -0
- data/gems/server/lib/itsi/server/config/options/log_target_filters.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.md +27 -0
- data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.rb +24 -0
- data/gems/server/lib/itsi/server/config/options/nodelay.md +16 -0
- data/gems/server/lib/itsi/server/config/options/nodelay.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.md +19 -0
- data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/pin_worker_cores.md +17 -0
- data/gems/server/lib/itsi/server/config/options/pin_worker_cores.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/preload.md +21 -0
- data/gems/server/lib/itsi/server/config/options/preload.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/recv_buffer_size.md +15 -0
- data/gems/server/lib/itsi/server/config/options/recv_buffer_size.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.md +21 -0
- data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.rb +30 -0
- data/gems/server/lib/itsi/server/config/options/request_timeout.md +23 -0
- data/gems/server/lib/itsi/server/config/options/request_timeout.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/reuse_address.md +16 -0
- data/gems/server/lib/itsi/server/config/options/reuse_address.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/reuse_port.md +16 -0
- data/gems/server/lib/itsi/server/config/options/reuse_port.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/scheduler_threads.md +34 -0
- data/gems/server/lib/itsi/server/config/options/scheduler_threads.rb +17 -0
- data/gems/server/lib/itsi/server/config/options/shutdown_timeout.md +17 -0
- data/gems/server/lib/itsi/server/config/options/shutdown_timeout.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/stream_body.md +32 -0
- data/gems/server/lib/itsi/server/config/options/stream_body.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/threads.md +44 -0
- data/gems/server/lib/itsi/server/config/options/threads.rb +17 -0
- data/gems/server/lib/itsi/server/config/options/watch.md +16 -0
- data/gems/server/lib/itsi/server/config/options/watch.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/worker_memory_limit.md +22 -0
- data/gems/server/lib/itsi/server/config/options/worker_memory_limit.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/workers.md +42 -0
- data/gems/server/lib/itsi/server/config/options/workers.rb +17 -0
- data/gems/server/lib/itsi/server/config/typed_struct.rb +242 -0
- data/gems/server/lib/itsi/server/config.rb +134 -11
- data/gems/server/lib/itsi/server/default_config/Itsi.rb +3 -3
- data/gems/server/lib/itsi/server/grpc/grpc_call.rb +1 -1
- data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +11 -4
- data/gems/server/lib/itsi/server/rack/handler/itsi.rb +3 -3
- data/gems/server/lib/itsi/server/route_tester.rb +58 -8
- data/gems/server/lib/itsi/server/signal_trap.rb +5 -1
- data/gems/server/lib/itsi/server/typed_handlers/param_parser.rb +14 -18
- data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +6 -5
- data/gems/server/lib/itsi/server/typed_handlers.rb +12 -4
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/lib/itsi/server.rb +122 -17
- data/gems/server/lib/ruby_lsp/itsi/addon.rb +66 -48
- data/gems/server/test/helpers/test_helper.rb +130 -11
- data/gems/server/test/middleware/allow_list.rb +128 -0
- data/gems/server/test/middleware/auth_api_key.rb +141 -0
- data/gems/server/test/middleware/auth_basic.rb +91 -0
- data/gems/server/test/middleware/auth_jwt.rb +214 -0
- data/gems/server/test/middleware/cache_control.rb +82 -0
- data/gems/server/test/middleware/cidr_to_regex.rb +46 -0
- data/gems/server/test/middleware/compression.rb +89 -0
- data/gems/server/test/middleware/cors.rb +113 -0
- data/gems/server/test/middleware/csp.rb +62 -0
- data/gems/server/test/middleware/deny_list.rb +131 -0
- data/gems/server/test/middleware/endpoint.rb +300 -0
- data/gems/server/test/middleware/etag.rb +75 -0
- data/gems/server/test/middleware/grpc/grpc.rb +158 -0
- data/gems/server/test/middleware/grpc/test_service.proto +32 -0
- data/gems/server/test/middleware/grpc/test_service_impl.rb +28 -0
- data/gems/server/test/middleware/grpc/test_service_pb.rb +18 -0
- data/gems/server/test/middleware/grpc/test_service_services_pb.rb +30 -0
- data/gems/server/test/middleware/header_interpolation.rb +35 -0
- data/gems/server/test/middleware/intrusion_protection.rb +259 -0
- data/gems/server/test/middleware/location.rb +220 -0
- data/gems/server/test/middleware/max_body.rb +20 -0
- data/gems/server/test/middleware/proxy.rb +415 -0
- data/gems/server/test/middleware/rate_limit.rb +211 -0
- data/gems/server/test/middleware/redirect.rb +85 -0
- data/gems/server/test/middleware/request_headers.rb +50 -0
- data/gems/server/test/middleware/response_headers.rb +50 -0
- data/gems/server/test/middleware/static_assets.rb +374 -0
- data/gems/server/test/middleware/static_response.rb +56 -0
- data/gems/server/test/middleware/string_rewrite.rb +112 -0
- data/gems/server/test/middleware/test_log_requests.rb +17 -0
- data/gems/server/test/options/bind.rb +47 -0
- data/gems/server/test/options/header_read_timeout.rb +23 -0
- data/gems/server/test/options/test_request_timeout.rb +16 -0
- data/gems/server/test/options/test_threads.rb +15 -0
- data/gems/server/test/options/test_workers.rb +16 -0
- data/gems/server/test/{test_itsi_server.rb → rack/test_rack_server.rb} +82 -95
- data/grpc_test/Itsi.rb +11 -0
- data/grpc_test/echo.proto +14 -0
- data/grpc_test/echo_pb.rb +16 -0
- data/grpc_test/echo_service_impl.rb +8 -0
- data/{sandbox/itsi_file/echo_service_nonitsi → grpc_test}/echo_services_pb.rb +0 -7
- data/itsi-scheduler-100.png +0 -0
- data/itsi-server-100.png +0 -0
- data/lib/itsi/version.rb +1 -1
- data/tasks.txt +17 -66
- metadata +352 -217
- 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/gems/server/lib/itsi/server/default_config/Itsi-rackup.rb +0 -119
- 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/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
@@ -0,0 +1,101 @@
|
|
1
|
+
---
|
2
|
+
title: Configuration
|
3
|
+
type: docs
|
4
|
+
weight: 3
|
5
|
+
next: options/
|
6
|
+
prev: getting_started/
|
7
|
+
---
|
8
|
+
|
9
|
+
## Itsi.rb
|
10
|
+
To realize the full power of all of Itsi's features, you'll typically create a configuration file
|
11
|
+
(usually named `Itsi.rb`) at the root of your project.<br/>
|
12
|
+
If you're ready to get stuck in and learn all about what Itsi has to offer, use
|
13
|
+
`itsi init` to generate a fresh configuration file and read through the following [options](/options/) and [middleware](/middleware/) sections.
|
14
|
+
|
15
|
+
|
16
|
+
## Out-of-the-box
|
17
|
+
If you prefer a more gradual introduction, Itsi provides several out-of-the box capabilities that you can take advantage of immediately, *without* needing to create a dedicated configuration file.
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
## Run Rack Applications
|
22
|
+
Itsi will automatically host your Rack application if you launch it in a directory with a `config.ru` file.
|
23
|
+
This means, it's a drop-in server replacement (and potentially a free performance boost) for your favorite `Rails`, `Hanami`, or `Sinatra` applications.
|
24
|
+
|
25
|
+
To get started just run
|
26
|
+
```ruby
|
27
|
+
itsi # or
|
28
|
+
bundle exec itsi
|
29
|
+
```
|
30
|
+
|
31
|
+
There's also a Rails adapter allowing you to add it to your Gemfile and launch it using the `rails server` command.
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
rails server -U itsi
|
35
|
+
```
|
36
|
+
{{< callout type="info" >}}
|
37
|
+
Note that `rails server -U itsi` runs Itsi with an intentionally minimal footprint, specifically for development purposes. To take full advantage of Itsi's concurrency features,
|
38
|
+
it's advised you tweak these inside a dedicated `Itsi.rb` file.
|
39
|
+
{{< /callout >}}
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
## Host static files
|
44
|
+
You can run Itsi as a fully fledged, static file server.
|
45
|
+
With a single command, Itsi will start an HTTP server to serve files from the current directory.
|
46
|
+
To get started just run.
|
47
|
+
```ruby
|
48
|
+
itsi static # or
|
49
|
+
bundle exec itsi static
|
50
|
+
```
|
51
|
+
|
52
|
+
> This starts a server with a minimal set of defaults. Look at the [`static_assets`](/middleware/static_assets) middleware page to learn more about how to configure Itsi for full control over static file server capabilities.
|
53
|
+
|
54
|
+
## Tweak your Itsi server
|
55
|
+
Several of the most common features of Itsi are configurable using command line flags.
|
56
|
+
Run `itsi --help` to see all available options. If you apply both command line flags and an `Itsi.rb` config file, the command line flags will take precedence.
|
57
|
+
|
58
|
+
```bash
|
59
|
+
❯ itsi --help
|
60
|
+
Usage: itsi [COMMAND] [options]
|
61
|
+
-C, --config CONFIG_FILE Itsi Configuration file to use (default: Itsi.rb)
|
62
|
+
-w, --workers WORKERS Number of workers
|
63
|
+
-d, --daemonize Run the process as a daemon
|
64
|
+
-t, --threads THREADS Number of threads (default: 1)
|
65
|
+
--[no-]multithreaded-reactor Use a multithreaded reactor
|
66
|
+
-r, --rackup_file FILE Rackup file to use (default: config.ru)
|
67
|
+
--worker-memory-limit MEMORY_LIMIT
|
68
|
+
Memory limit for each worker (default: None). If this limit is breached the worker is gracefully restarted
|
69
|
+
-f [CLASS_NAME], Scheduler class to use (default: nil). Provide blank or true to use Itsi::Scheduler, or a classname to use an alternative scheduler
|
70
|
+
--fiber_scheduler
|
71
|
+
--preload [true, false, :bundle_group_name]
|
72
|
+
Toggle preloading the application
|
73
|
+
-b, --bind BIND Bind address (default: http://0.0.0.0:3000). You can specify this flag multiple times to bind to multiple addresses.
|
74
|
+
-c, --cert_path CERT_PATH Path to the SSL certificate file (must follow a --bind option). You can specify this flag multiple times.
|
75
|
+
-k, --key_path KEY_PATH Path to the SSL key file (must follow a --bind option). You can specify this flag multiple times.
|
76
|
+
--shutdown_timeout SHUTDOWN_TIMEOUT
|
77
|
+
Graceful timeout period before forcing workers to shutdown
|
78
|
+
--stream-body Stream body frames (default: false for best compatibility)
|
79
|
+
-h, --help Show this help message
|
80
|
+
--reexec PARAMS Reexec the server with the given parameters
|
81
|
+
--listeners LISTENERS Listeners for reexec
|
82
|
+
--passfile PASSFILE Passfile
|
83
|
+
--algorithm ALGORITHM Algorithm for password hashing
|
84
|
+
COMMAND:
|
85
|
+
init - Initialize a new Itsi.rb server configuration file
|
86
|
+
status - Show the status of the server
|
87
|
+
start - Start the Itsi server
|
88
|
+
serve - Start the Itsi server
|
89
|
+
stop - Stop the server
|
90
|
+
reload - Reload the server
|
91
|
+
restart - Restart the server
|
92
|
+
add_worker - Add a new worker to the server cluster
|
93
|
+
remove_worker - Remove a worker from the server cluster
|
94
|
+
test - Test config file validity
|
95
|
+
routes - Print the routes of the server
|
96
|
+
passfile - Manage hashed users and passwords in a passfile (like .htpasswd). [add, echo, remove, list]
|
97
|
+
secret - Generate a new secret for use in a JWT verifier
|
98
|
+
test_route - Test which route a request will be routed to
|
99
|
+
static - Serve static assets in the given directory
|
100
|
+
|
101
|
+
```
|
@@ -0,0 +1,14 @@
|
|
1
|
+
---
|
2
|
+
title: Contact
|
3
|
+
type: docs
|
4
|
+
sidebar:
|
5
|
+
exclude: true
|
6
|
+
---
|
7
|
+
<img src="../itsi-server-100.png" alt="asd" width="80px" style="display: block; margin-left: auto; margin-right: auto;">
|
8
|
+
|
9
|
+
* GitHub: [@wouterken](https://github.com/wouterken/)
|
10
|
+
* Email: [wc@pico.net.nz](mailto:wc@pico.net.nz)
|
11
|
+
|
12
|
+
For general inquiries, please feel free to contact me via email at wc@pico.net.nz.
|
13
|
+
|
14
|
+
For issues and bugs, please open an issue on GitHub at https://github.com/wouterken/itsi/issues.
|
@@ -0,0 +1,29 @@
|
|
1
|
+
---
|
2
|
+
title: FAQs
|
3
|
+
type: docs
|
4
|
+
prev: middleware/
|
5
|
+
next: utilities/
|
6
|
+
---
|
7
|
+
|
8
|
+
{{% details title="Is it just for Ruby applications?" closed="true" %}}
|
9
|
+
**No!** While one of Itsi's goals is to be the most frictionless way to get Ruby onto the web, it stands alone as a powerful reverse Proxy, static File Server and API gateway.
|
10
|
+
|
11
|
+
You can have Itsi sit in front of *any* application that speaks HTTP and immediately benefit from security middleware, performance enhancements, and more.
|
12
|
+
You will need to write a little bit of Ruby, just to configure your Itsi server inside the `Itsi.rb` file. Who knows, maybe you'll learn to love it!
|
13
|
+
{{% /details %}}
|
14
|
+
|
15
|
+
{{% details title="What's it written in?" closed="true" %}}
|
16
|
+
The heart of Itsi is a Rust server, leaning *heavily* on [tokio](https://tokio.rs) and [hyper](https://hyper.rs) and many other fantastic and high performance Rust libraries.
|
17
|
+
Take a look at the [Cargo.toml](https://github.com/wouterken/itsi/blob/main/crates/itsi_server/Cargo.toml) to see them all.
|
18
|
+
|
19
|
+
This is exposed via a robust and ergonomic Ruby DSL.
|
20
|
+
{{% /details %}}
|
21
|
+
|
22
|
+
{{% details title="What license is it under?" closed="true" %}}
|
23
|
+
Itsi is an open source project licensed under the terms of the [LGPLv3](https://www.gnu.org/licenses/lgpl-3.0.en.html).
|
24
|
+
|
25
|
+
You can integrate and use Itsi in your projects—whether they are open source or proprietary—without any licensing fees or obligations, as long as you use Itsi in its unmodified form. However, if you modify Itsi’s source code and distribute the modified version, you are required to release your modifications under the same LGPLv3 license.
|
26
|
+
|
27
|
+
If these terms do not meet your project’s needs or if you require bespoke support and legal assurances, Itsi is also available under alternative commercial licensing options.
|
28
|
+
Please contact commercial@itsi.fyi for more information.
|
29
|
+
{{% /details %}}
|
@@ -0,0 +1,291 @@
|
|
1
|
+
---
|
2
|
+
title: Features
|
3
|
+
type: docs
|
4
|
+
weight: 1
|
5
|
+
next: /getting_started
|
6
|
+
---
|
7
|
+
|
8
|
+
Itsi bundles a slew of essential modern web features into a single, easy-to-use package.
|
9
|
+
Here's a list of the essentials.
|
10
|
+
Or jump straight in to <a target="_blank" href="tsi](/getting_started)">install</a> and <a target="_blank" href="t](/configuration)"> configure</a> for a deeper dive.
|
11
|
+
|
12
|
+
{{< callout >}}
|
13
|
+
You don't need to use all of the features listed below to benefit from Itsi. E.g.
|
14
|
+
* Use it *just* as fast, robust and memory efficient Rack server.
|
15
|
+
* Or as a reverse proxy that allows you to use plain-old Ruby for configuration.
|
16
|
+
|
17
|
+
Pick and choose **just** the features that make sense for you.
|
18
|
+
|
19
|
+
{{< /callout >}}
|
20
|
+
|
21
|
+
|
22
|
+
## Web Essentials
|
23
|
+
{{% details title="Compression" closed="true" %}}
|
24
|
+
* `zstd`, `br`, `gzip` and `deflate` compression.
|
25
|
+
* Conditional compression based on route, content-type and body size
|
26
|
+
* Streaming compression
|
27
|
+
* Serve static precompressed files from the file-system
|
28
|
+
* gRPC compression (`zlib` and `gzip`)
|
29
|
+
* See <a target="_blank" href="/middleware/compression">compression</a>
|
30
|
+
{{% /details %}}
|
31
|
+
|
32
|
+
{{% details title="CORS" closed="true" %}}
|
33
|
+
* Full control over CORS rules on a location-by-location basis.
|
34
|
+
* See <a target="_blank" href="/middleware/cors">cors</a>
|
35
|
+
{{% /details %}}
|
36
|
+
|
37
|
+
{{% details title="ETag and Cache Control" closed="true" %}}
|
38
|
+
* Weak and Strong eTag support.
|
39
|
+
* `If-None-Match` and `If-Modified-Since` support.
|
40
|
+
* Automated etag generation for dynamic content (or forwarding of existing `etags` if present)
|
41
|
+
* See <a target="_blank" href="/middleware/etag">etag</a> and <a target="_blank" href="/middleware/cache_control">cache_control</a>
|
42
|
+
{{% /details %}}
|
43
|
+
|
44
|
+
{{% details title="Configurable Middleware" closed="true" %}}
|
45
|
+
* Expressive controls to apply middleware selectively on a request-by-request basis.
|
46
|
+
* Expressive matching based on route, content-type and body size, hostnames etc.
|
47
|
+
* A single Itsi process can support simultaneous running of several apps, each with specialized configuration.
|
48
|
+
* See <a target="_blank" href="/middleware/location">location</a>
|
49
|
+
{{% /details %}}
|
50
|
+
|
51
|
+
{{% details title="Redirects" closed="true" %}}
|
52
|
+
* Simple redirect functionality (all of `permanent`, `temporary`, `found`, `moved_permanently`)
|
53
|
+
* HTTP to HTTPS Redirects
|
54
|
+
* Dynamic URL Rewriting
|
55
|
+
* See <a target="_blank" href="/middleware/redirect">redirect</a>
|
56
|
+
{{% /details %}}
|
57
|
+
|
58
|
+
{{% details title="Reverse Proxy" closed="true" %}}
|
59
|
+
* Seamlessly Proxy to downstream HTTP services
|
60
|
+
* Hostname and SNI overrides
|
61
|
+
* Header overrides
|
62
|
+
* Multiple backends per host, with load balancing and failover support
|
63
|
+
* Automatic retries for Idempotent requests
|
64
|
+
* Configurable error pages
|
65
|
+
* See <a target="_blank" href="/middleware/proxy">proxy</a>
|
66
|
+
{{% /details %}}
|
67
|
+
|
68
|
+
{{% details title="Range Requests" closed="true" %}}
|
69
|
+
* Partial content delivery support, so clients can resume downloads or stream large files efficiently.
|
70
|
+
* See <a target="_blank" href="/middleware/static_assets">static_assets</a>
|
71
|
+
{{% /details %}}
|
72
|
+
|
73
|
+
{{% details title="Static File Server" closed="true" %}}
|
74
|
+
Efficiently serves static assets with proper content types and caching headers.
|
75
|
+
* Auto index generation
|
76
|
+
* Configurable in-memory caching for faster serving of small and frequently accessed files.
|
77
|
+
* Auto try `.html` extension (for cleaner paths)
|
78
|
+
* Configurable fallback behaviour (e.g. route request misses to an index.html for SPAs)
|
79
|
+
* See <a target="_blank" href="/middleware/static_assets">static_assets</a>
|
80
|
+
{{% /details %}}
|
81
|
+
|
82
|
+
{{% details title="Multiple Binds" closed="true" %}}
|
83
|
+
* Itsi can listen on multiple IP addresses or ports simultaneously for flexible deployment.
|
84
|
+
* Unix socket binds (both plain-text and TLS) are supported.
|
85
|
+
* See <a target="_blank" href="/options/bind">bind</a>.
|
86
|
+
{{% /details %}}
|
87
|
+
|
88
|
+
## DevOps
|
89
|
+
{{% details title="File Watcher & Live Reloading" closed="true" %}}
|
90
|
+
* Monitors file changes and to automatically reloads configuration or content.
|
91
|
+
* Use custom watchers to e.g. trigger frontend builds on file changes.
|
92
|
+
* See <a target="_blank" href="/getting_started/local_development">local_development</a>, <a target="_blank" href="/options/auto_reload_config">auto_reload_config</a>, and <a target="_blank" href="/options/watch">watch</a>.
|
93
|
+
{{% /details %}}
|
94
|
+
|
95
|
+
{{% details title="LSP and shell completion support" closed="true" %}}
|
96
|
+
* The bundled RubyLSP addon provides rich inline documentation and hover support when editing `Itsi.rb` files.
|
97
|
+
* Shell completion support (add `eval "$(itsi --install-completions)"` to the bottom of your shell init file)
|
98
|
+
* See <a target="_blank" href="/getting_started/local_development">local_development</a>.
|
99
|
+
{{% /details %}}
|
100
|
+
|
101
|
+
{{% details title="Status Reporting" closed="true" %}}
|
102
|
+
* Send SIGUSR2 to trigger detailed status report across all Itsi processes.
|
103
|
+
* See <a target="_blank" href="/getting_started/signals">signals</a>.
|
104
|
+
{{% /details %}}
|
105
|
+
|
106
|
+
{{% details title="Granular Logging" closed="true" %}}
|
107
|
+
* Support logging using plain-text and structured `JSON` formats.
|
108
|
+
* Support `STDOUT`, file-system and combined log sinks.
|
109
|
+
* Apply selective log levels for specific log targets only.
|
110
|
+
* Configurable request logging middleware, with custom log templates.
|
111
|
+
* See <a target="_blank" href="/middleware/log_requests">Request Logs</a> & <a target="_blank" href="/getting_started/logging">Logging</a>.
|
112
|
+
{{% /details %}}
|
113
|
+
|
114
|
+
{{% details title="Hot Config Reloads & Config File Validation" closed="true" %}}
|
115
|
+
* Zero-downtime config file reloads.
|
116
|
+
* Phased restart support when running in `cluster` mode
|
117
|
+
* Config file testing and dry-run functionality
|
118
|
+
* See <a target="_blank" href="/getting_started/signals">signals</a> and <a target="_blank" href="/options/auto_reload_config">auto_reload_config</a>.
|
119
|
+
{{% /details %}}
|
120
|
+
|
121
|
+
{{% details title="Configurable Error Responses" closed="true" %}}
|
122
|
+
* Provide your own exception responses (HTML and JSON) for all common exception scenarios, or simply rely on the light-weight defaults.
|
123
|
+
* See <a target="_blank" href="/middleware/error_response">error_responses</a>.
|
124
|
+
{{% /details %}}
|
125
|
+
|
126
|
+
{{% details title="Management Signals" closed="true" %}}
|
127
|
+
* Use a full suite of Unix signals to control your live Itsi cluster.
|
128
|
+
* Add or remove workers on the fly, reload config, generate status reports etc.
|
129
|
+
* See <a target="_blank" href="/getting_started/signals">signals</a>.
|
130
|
+
{{% /details %}}
|
131
|
+
|
132
|
+
## Security
|
133
|
+
{{% details title="JWT/API Key/Basic Auth" closed="true" %}}
|
134
|
+
* Apply common authentication patterns at the middleware layer.
|
135
|
+
* API Key (`bcrypt`, `argon2`, `sha256`, `sha512`)
|
136
|
+
* JWT (`hs256`, `HS384`, `HS512`, `RS256`, `RS384`, `RS512`, `ES256`, `ES384`, `PS256`, `PS384`, `PS512`)
|
137
|
+
* Basic Auth (`bcrypt`, `argon2`, `sha256`, `sha512`)
|
138
|
+
|
139
|
+
Itsi also comes bundled with a passfile generator, to help you manage your password hashes effectively.
|
140
|
+
|
141
|
+
* See <a target="_blank" href="/middleware/auth_jwt">auth_jwt</a>, <a target="_blank" href="/middleware/auth_api_key">auth_api_key</a>, <a target="_blank" href="/middleware/auth_basic">auth_basic</a> and <a target="_blank" href="/utilities/passfile_generator">passfile</a>.
|
142
|
+
{{% /details %}}
|
143
|
+
|
144
|
+
{{% details title="Automatic Let's Encrypt Certificates" closed="true" %}}
|
145
|
+
* Automated provisioning of Let's Encrypt certificates.
|
146
|
+
* File system caching of certificate data to avoid excessive API calls.
|
147
|
+
* Supports usage of subject alternative names (SANs) for certificates that span multiple domains/sub-domains.
|
148
|
+
* See <a target="_blank" href="/options/certificates#production-certificates-lets-encrypt">certificates</a>.
|
149
|
+
{{% /details %}}
|
150
|
+
|
151
|
+
{{% details title="Automatic Development Certificates" closed="true" %}}
|
152
|
+
* Easily mirror your production SSL set-up in Development
|
153
|
+
* Custom local CA generation (add this CA cert to your trusted root certificates for warning-less SSL during local development)
|
154
|
+
* See <a target="_blank" href="/options/certificates#development">certificates</a>.
|
155
|
+
{{% /details %}}
|
156
|
+
|
157
|
+
{{% details title="(Distributed) Rate Limiting" closed="true" %}}
|
158
|
+
* Combine any number of configurable rate limits
|
159
|
+
* Support for a `Redis` backend for distributed rate limiting (falls back to in-memory backend)
|
160
|
+
* In-memory backend for simple setups and local development.
|
161
|
+
* See <a target="_blank" href="/middleware/rate_limit">rate_limit</a>.
|
162
|
+
{{% /details %}}
|
163
|
+
|
164
|
+
{{% details title="Allow & Deny Lists" closed="true" %}}
|
165
|
+
* IP Allow lists to limit access to a specific set of IP addresses or blocks.
|
166
|
+
* IP Deny lists to block access from specific IP addresses or blocks.
|
167
|
+
* See <a target="_blank" href="/middleware/allow_list">allow_list</a> & <a target="_blank" href="/middleware/deny_list">deny_list</a>.
|
168
|
+
{{% /details %}}
|
169
|
+
|
170
|
+
{{% details title="Intrusion Protection" closed="true" %}}
|
171
|
+
* Automatically scan request paths and headers for known malicious patterns
|
172
|
+
* Configurable ban rules to block offenders for a specified duration.
|
173
|
+
* See <a target="_blank" href="/middleware/intrusion_protection">intrusion_protection</a>
|
174
|
+
{{% /details %}}
|
175
|
+
|
176
|
+
{{% details title="Slowhttp attack prevention" closed="true" %}}
|
177
|
+
* Protections against several slowhttp attacks (e.g. Slowloris, Slowbody), through header and request timeouts and maximum request body sizes.
|
178
|
+
* See <a target="_blank" href="/options/max_body">max_body</a>, <a target="_blank" href="/options/request_timeout">request_timeout</a> and <a target="_blank" href="/options/header_read_timeout">header_read_timeout</a>
|
179
|
+
{{% /details %}}
|
180
|
+
|
181
|
+
{{% details title="CSP Reporting" closed="true" %}}
|
182
|
+
* Simple configuration for enabling CSP headers.
|
183
|
+
* Support for hosting a CSP reporting endpoint to track violations of CSPs running in reporting only mode.
|
184
|
+
* See <a target="_blank" href="/middleware/csp">CSP</a>
|
185
|
+
{{% /details %}}
|
186
|
+
|
187
|
+
## Protocols & Standards
|
188
|
+
{{% details title="HTTP2" closed="true" %}}
|
189
|
+
* Benefit from connection multiplexing by using http2 all the way from client to app/file server.
|
190
|
+
* `Itsi`'s underlying HTTP1 and 2 implementations are provided directly by <a target="_blank" href="https://github.com/hyperium/hyper">hyper</a>. Itsi simply exposes these existing capabilities. This means that once <a target="_blank" href="https://hyper.rs/contrib/roadmap/#http3">h3</a> lands in Hyper - we'll get it in Itsi too!
|
191
|
+
{{% /details %}}
|
192
|
+
|
193
|
+
{{% details title="Rack Server" closed="true" %}}
|
194
|
+
* Rack compliant. Itsi plays nicely with your existing Rack-based applications and middleware.
|
195
|
+
* See <a target="_blank" href="/middleware/run">run</a> and <a target="_blank" href="/middleware/rackup_file">rackup_file</a>
|
196
|
+
{{% /details %}}
|
197
|
+
|
198
|
+
{{% details title="gRPC Server" closed="true" %}}
|
199
|
+
* Itsi is compatible with ruby `grpc` service handlers and can
|
200
|
+
replace the <a target="_blank" href="https://github.com/grpc/grpc/blob/master/src/ruby/README.md">official</a> Ruby gRPC server implementation for a free performance boost!
|
201
|
+
* Consider enabling [non-blocking IO](/options/fiber_scheduler) to further enhance performance.
|
202
|
+
* Support for gRPC server reflection (use with tools like evans and Postman for easy service discovery)
|
203
|
+
* Support for gzip and zlib compression
|
204
|
+
* See <a target="_blank" href="/middleware/grpc">grpc</a>
|
205
|
+
{{% /details %}}
|
206
|
+
|
207
|
+
{{% details title="gRPC+REST compatibility mode" closed="true" %}}
|
208
|
+
* Itsi provides a `gRPC+REST` compatibility layer for easy reuse of gRPC endpoints by clients and environments that are not gRPC capable. Invoke unidirectional and streaming endpoints using plain-old JSON.
|
209
|
+
* See <a target="_blank" href="/middleware/grpc">grpc</a>
|
210
|
+
{{< callout type="warn" >}}
|
211
|
+
Note: This is not the same as <a target="_blank" href="https://grpc.io/blog/grpc-with-json/">gRPC with JSON</a> which swaps out protobuf for JSON but still relies on gRPC's underlying framing mechanics.
|
212
|
+
{{< /callout >}}
|
213
|
+
{{% /details %}}
|
214
|
+
|
215
|
+
{{% details title="WebSockets" closed="true" %}}
|
216
|
+
* WebSocket support for Rack apps (e.g. <a target="_blank" a href="https://guides.rubyonrails.org/action_cable_overview.html">ActionCable</a>)
|
217
|
+
{{% /details %}}
|
218
|
+
|
219
|
+
## Concurrency & Performance
|
220
|
+
{{% details title="Cluster Mode" closed="true" %}}
|
221
|
+
* Supports running in a clustered mode, to fully leverage multi-core systems.
|
222
|
+
* See <a target="_blank" href="/options/workers">workers</a>.
|
223
|
+
{{% /details %}}
|
224
|
+
|
225
|
+
{{% details title="Non-blocking(Fiber Scheduler) Mode" closed="true" %}}
|
226
|
+
* Support for Ruby’s fiber scheduler for non-blocking concurrency, boosting performance during I/O operations.
|
227
|
+
* Use Itsi's own high-performance built-in <a target="_blank" href="/itsi_scheduler">Fiber Scheduler</a> or if your prefer you can bring your own!
|
228
|
+
* See <a target="_blank" href="/options/fiber_scheduler">fiber_scheduler</a>.
|
229
|
+
{{% /details %}}
|
230
|
+
|
231
|
+
{{% details title="Hybrid Blocking/Non-Blocking Mode" closed="true" %}}
|
232
|
+
* `Itsi` allows you to split endpoints between using a Fiber scheduler versus running using the traditional blocking IO model. This allows you to dip your toes into the waters of Ruby's new non-blocking IO, without having to port an entire application at once!
|
233
|
+
* See <a target="_blank" href="/options/scheduler_threads">scheduler_threads</a>.
|
234
|
+
{{% /details %}}
|
235
|
+
|
236
|
+
{{% details title="Non-blocking by design" closed="true" %}}
|
237
|
+
* Itsi is underpinned by <a target="_blank" href="https://hyper.rs/">hyper</a> and <a target="_blank" href="https://tokio.rs/">tokio</a> and as such is fundamentally an evented, non-blocking server. Whether you're proxying, serving large files, or delegating to Ruby endpoints, `Itsi` remains responsive, even under heavy load.
|
238
|
+
{{% /details %}}
|
239
|
+
|
240
|
+
## Ruby
|
241
|
+
{{% details title="Preloading" closed="true" %}}
|
242
|
+
* Preload your Ruby application code before forking to benefit from reduced memory through CoW
|
243
|
+
* Alternatively, use groups in bundler to target specific gems or dependencies for preloading
|
244
|
+
* See <a target="_blank" href="/options/preload">preload</a>.
|
245
|
+
{{% /details %}}
|
246
|
+
|
247
|
+
{{% details title="Streaming Response Bodies" closed="true" %}}
|
248
|
+
* For both <a target="_blank" href="https://github.com/rack/rack/blob/main/SPEC.rdoc#the-body-">streaming</a> and <a target="_blank" href="https://github.com/rack/rack/blob/main/SPEC.rdoc#enumerable-body-">Enumerable</a> bodies, Itsi sends data to the client as soon as it is available. This means modules like <a target="_blank" href="https://api.rubyonrails.org/v7.1/classes/ActionController/Live.html">ActionController</a> behave as expected, and the minimal buffering keeps `Itsi`'s memory footprint consistently low.
|
249
|
+
{{% /details %}}
|
250
|
+
|
251
|
+
{{% details title="Streaming Request Bodies" closed="true" %}}
|
252
|
+
* Itsi supports streaming incoming request bodies too, for efficient processing of large simultaneous input streams (Disabled by default for maximum compatibility).
|
253
|
+
* See <a target="_blank" href="/options/stream_body">stream_body</a>.
|
254
|
+
{{% /details %}}
|
255
|
+
|
256
|
+
{{% details title="Full & Partial Rack Hijacking" closed="true" %}}
|
257
|
+
* Itsi supports both <a href="https://github.com/rack/rack/blob/main/SPEC.rdoc#hijacking-" target="_blank">full</a> and partial Rack hijacking. Even over HTTP2!
|
258
|
+
{{< callout type="warn" >}}
|
259
|
+
By design, Full hijacking assumes you are writing a raw HTTP1 response directly to a raw connection stream.
|
260
|
+
Itsi's support for full hijack over HTTP2 is similar to what you would see if running a dedicated reverse proxy in front of a Ruby app.
|
261
|
+
Itsi translates that request from HTTP1 to HTTP2, in real-time, allowing full hijacking endpoints to write HTTP1 and the client to receive HTTP2.
|
262
|
+
{{< /callout >}}
|
263
|
+
{{% /details %}}
|
264
|
+
|
265
|
+
{{% details title="Sendfile" closed="true" %}}
|
266
|
+
* Itsi allows Ruby apps to set a `X-Sendfile` header to enable efficient, streaming file transfers, outside of Ruby, via fast native code.
|
267
|
+
* See <a target="_blank" href="/middleware/run">run</a> and <a target="_blank" href="/middleware/rackup_file">rackup_file</a>.
|
268
|
+
|
269
|
+
{{< callout type="info" >}}
|
270
|
+
Note that despite the header being named `X-Sendfile`, Itsi does not use the Sendfile system call, instead delegating the efficient streaming to Tokio's native asynchronous file streaming capabilities.
|
271
|
+
{{< /callout >}}
|
272
|
+
|
273
|
+
{{% /details %}}
|
274
|
+
|
275
|
+
{{% details title="Graceful Memory Limits" closed="true" %}}
|
276
|
+
* Itsi allows you to specify memory limits for Ruby processes. When the limit is reached, Itsi gracefully terminates the process and also invokes a dedicated `after_memory_threshold_reached` callback,
|
277
|
+
so that you can log the event for further analysis.
|
278
|
+
* See <a target="_blank" href="/options/worker_memory_limit">worker_memory_limit</a> and <a target="_blank" href="/options/after_memory_threshold_reached">after_memory_threshold_reached</a>.
|
279
|
+
{{% /details %}}
|
280
|
+
|
281
|
+
{{% details title="OOB GC" closed="true" %}}
|
282
|
+
* Itsi can be configured to periodically trigger GC every N idle periods (where an idle period is defined as a time where no requests are currently queued).
|
283
|
+
* Periodic triggering of GC outside of the request flow can help reduce the impact of GC on latency.
|
284
|
+
* See <a target="_blank" href="/options/oob_gc">oob_gc_threshold</a>
|
285
|
+
{{% /details %}}
|
286
|
+
|
287
|
+
{{% details title="'Rackless' Ruby Apps" closed="true" %}}
|
288
|
+
* Itsi allows definition of ultra-light-weight Ruby web-apps, using plain old functions and procs.
|
289
|
+
* For simple endpoints this barebones option can provide a substantial increase in throughput over a Rack request (primarily by avoiding allocating the env hash and response array)
|
290
|
+
* See <a target="_blank" href="/middleware/endpoint">endpoint</a>
|
291
|
+
{{% /details %}}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
---
|
2
|
+
title: Getting Started
|
3
|
+
type: docs
|
4
|
+
weight: 2
|
5
|
+
prev: features/
|
6
|
+
next: getting_started/local_development/
|
7
|
+
---
|
8
|
+
|
9
|
+
{{% steps %}}
|
10
|
+
|
11
|
+
### Step 1 - Install Ruby
|
12
|
+
|
13
|
+
Install Ruby
|
14
|
+
|
15
|
+
[https://www.ruby-lang.org/en/documentation/installation/](https://www.ruby-lang.org/en/documentation/installation/)
|
16
|
+
|
17
|
+
### Step 2 - Install Itsi
|
18
|
+
|
19
|
+
{{< tabs items="Linux,Mac,Windows" >}}
|
20
|
+
{{< tab >}}
|
21
|
+
**Prerequisites**
|
22
|
+
|
23
|
+
You'll need at least `build-essential` and `libclang-dev` installed to build Itsi on Linux.
|
24
|
+
E.g.
|
25
|
+
```bash
|
26
|
+
apt-get install build-essential libclang-dev
|
27
|
+
```
|
28
|
+
|
29
|
+
Then use `gem` to install the Itsi package. This will in turn install both the
|
30
|
+
`itsi-server` gem, and the `itsi-scheduler` gem.
|
31
|
+
|
32
|
+
|
33
|
+
```bash
|
34
|
+
gem install itsi
|
35
|
+
```
|
36
|
+
|
37
|
+
{{< callout type="info" >}}
|
38
|
+
If you wish to use either the scheduler or server independently, these can be installed individually
|
39
|
+
by running `gem install itsi-server` or `gem install itsi-scheduler`.
|
40
|
+
{{< /callout >}}
|
41
|
+
|
42
|
+
{{< /tab >}}
|
43
|
+
{{< tab >}}
|
44
|
+
**Mac**:
|
45
|
+
```bash
|
46
|
+
gem install itsi
|
47
|
+
```
|
48
|
+
{{< callout type="info" >}}
|
49
|
+
If you wish to use either the scheduler or server independently, these can be installed individually
|
50
|
+
by running `gem install itsi-server` or `gem install itsi-scheduler`.
|
51
|
+
{{< /callout >}}
|
52
|
+
|
53
|
+
{{< /tab >}}
|
54
|
+
{{< tab >}}**Windows**: Itsi currently doesn't support native Windows builds, but it runs well on [https://learn.microsoft.com/en-us/windows/wsl/install](WSL).
|
55
|
+
|
56
|
+
Follow the linked instructions to Install a linux distribution like Ubuntu or Debian and then follow the instructions in the Linux tab.
|
57
|
+
{{< /tab >}}
|
58
|
+
|
59
|
+
{{< /tabs >}}
|
60
|
+
|
61
|
+
### Step 3 - Learn More
|
62
|
+
|
63
|
+
Great! You now have Itsi installed. Go to one of the following pages to learn how to use it:
|
64
|
+
|
65
|
+
|
66
|
+
{{< cards >}}
|
67
|
+
{{< card link="./local_development" title="Local Development" icon="star" >}}
|
68
|
+
{{< card link="../options" title="Options" icon="adjustments" >}}
|
69
|
+
{{< card link="../middleware" title="Middleware" icon="cog" >}}
|
70
|
+
{{< card link="https://github.com/wouterken/itsi" title="Source Code" icon="github" >}}
|
71
|
+
{{< /cards >}}
|
72
|
+
|
73
|
+
{{% /steps %}}
|
@@ -0,0 +1,100 @@
|
|
1
|
+
---
|
2
|
+
title: Local Development
|
3
|
+
type: docs
|
4
|
+
prev: getting_started
|
5
|
+
weight: 3
|
6
|
+
---
|
7
|
+
|
8
|
+
{{< callout>}}
|
9
|
+
This document is not required reading, but it can significantly improve your local development experience with Itsi.
|
10
|
+
{{< /callout >}}
|
11
|
+
|
12
|
+
## Ruby LSP Add-on
|
13
|
+
Itsi's [RubyLSP](https://shopify.github.io/ruby-lsp/) add-on allows you to see the full documentation of all of Itsi's [`options`](/options) and [`middleware`](/middleware) directly
|
14
|
+
inside your editor. It also gives you easy-to-use auto-completion and snippets for lightning fast changes to `Itsi.rb` configuration files.
|
15
|
+
You don't need to install the RubyLSP add-on to use Itsi, if both Itsi and RubyLSP are installed and activated in the same project, RubyLSP will automatically
|
16
|
+
discover and load the addon.
|
17
|
+
|
18
|
+
<img src="/ruby-lsp.png" alt="asd" width="700px" style="display: block; margin-left: auto; margin-right: auto;">
|
19
|
+
|
20
|
+
## Live Config Reloading
|
21
|
+
Add `auto_reload_config!` to your `Itsi.rb` configuration file and Itsi will automatically hot reload its config with every change you make.
|
22
|
+
Concerned about errors? Itsi will validate your config first before it tries to apply it. If there are errors, Itsi will provide detailed logs and safely continue with the existing config.
|
23
|
+
|
24
|
+
### File Watcher
|
25
|
+
You can have Itsi watch other files on the file-system and trigger automatic actions in response.
|
26
|
+
Use the `watch(glob, commands)` method to specify files or directories to watch, and command to execute with each change.
|
27
|
+
E.g.
|
28
|
+
```ruby
|
29
|
+
watch "**.js", [%w[npm run build]]
|
30
|
+
watch "**.md", [%w[rake docs:build]]
|
31
|
+
```
|
32
|
+
|
33
|
+
## Print Routes
|
34
|
+
Itsi comes with a built-in command to see all the routes that are configured in your application. To use it, simply run the following command:
|
35
|
+
```bash
|
36
|
+
itsi routes
|
37
|
+
```
|
38
|
+
|
39
|
+
E.g.
|
40
|
+
```bash
|
41
|
+
────────────────────────────────────────────────────────────────────────────
|
42
|
+
Route: /app/users/(?<id>[^/]+
|
43
|
+
Conditions: (none)
|
44
|
+
Middleware: • log_requests(before: I am th..., after: [{reque...)
|
45
|
+
• compress
|
46
|
+
• cors(*, GET POST PUT DELETE)
|
47
|
+
• app /Users/pico/Development/itsi/gems/server/lib/itsi/server/typed_handlers.rb:9
|
48
|
+
────────────────────────────────────────────────────────────────────────────
|
49
|
+
Route: /app/users/?
|
50
|
+
Conditions: (none)
|
51
|
+
Middleware: • log_requests(before: I am th..., after: [{reque...)
|
52
|
+
• compress
|
53
|
+
• cors(*, GET POST PUT DELETE)
|
54
|
+
• app /Users/pico/Development/itsi/gems/server/lib/itsi/server/rack_interface.rb:15
|
55
|
+
|
56
|
+
```
|
57
|
+
## Test Config
|
58
|
+
Itsi allows you to validate your configuration without having to run the application.
|
59
|
+
|
60
|
+
```bash
|
61
|
+
itsi test
|
62
|
+
```
|
63
|
+
|
64
|
+
You can optionally provide an explicit config file path using
|
65
|
+
```bash
|
66
|
+
itsi test -C /path/to/Itsi.rb
|
67
|
+
```
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
## Shell Completions
|
72
|
+
Itsi can also help you install shell completions, which are useful if you find yourself using the `itsi` executable a lot and forgetting the commands.
|
73
|
+
Add the following line to the bottom of your ~/.bashrc or ~/.zshrc file:
|
74
|
+
|
75
|
+
```bash
|
76
|
+
eval "$(itsi --install-completions)"
|
77
|
+
```
|
78
|
+
|
79
|
+
## macOS Fork Safety Considerations
|
80
|
+
|
81
|
+
On macOS, using fork() in multithreaded applications can lead to crashes due to the Objective-C runtime’s behavior. This is particularly relevant when working with tools like Itsi that may utilize fork() under the hood.
|
82
|
+
|
83
|
+
### Understanding the Issue
|
84
|
+
|
85
|
+
Apple’s Objective-C runtime is not fork-safe in multithreaded environments. When a process that uses Objective-C APIs forks, the child process may crash if it interacts with the Objective-C runtime before calling exec(). This behavior is by design to prevent potential deadlocks and inconsistent states.  
|
86
|
+
|
87
|
+
Common symptoms include errors like:
|
88
|
+
```
|
89
|
+
objc[51435]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
|
90
|
+
We cannot safely call it or ignore it in the fork() child process. Crashing instead.
|
91
|
+
```
|
92
|
+
|
93
|
+
### Workarounds:
|
94
|
+
To mitigate these issues, consider the following environment variables:
|
95
|
+
* `OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`: Disables the Objective-C runtime’s fork safety checks. Use with caution, as it may mask underlying issues .  
|
96
|
+
* `PGGSSENCMODE=disable`: Disables GSSAPI encryption in PostgreSQL, which can cause issues in forked processes .
|
97
|
+
|
98
|
+
Itsi includes a mechanism to automatically re-execute itself with the necessary environment variables set when running on macOS, effectively performing the above workarounds for you.
|
99
|
+
|
100
|
+
If you prefer to manage these settings yourself, you can disable this behavior by setting the `ITSI_DISABLE_AUTO_DISABLE_DARWIN_FORK_SAFETY_WARNINGS` environment variable:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
title: Logging
|
3
|
+
type: docs
|
4
|
+
weight: 4
|
5
|
+
next: /signals
|
6
|
+
---
|
7
|
+
|
8
|
+
Itsi has a very configurable logging system. You can configure logging use the `Itsi.rb` configuration file, environment variables or a combination of both.
|
9
|
+
|
10
|
+
## Basics
|
11
|
+
For basic logging needs, set a global log-level using the `ITSI_LOG` environment variable (to one of `trace`, `debug`, `info`, `warn`, `error`)
|
12
|
+
|
13
|
+
## Fine-grained control
|
14
|
+
|
15
|
+
For fine-grained, configuration-based control read through how to use the following options and middleware:
|
16
|
+
|
17
|
+
### Options
|
18
|
+
* [`log_level`](/options/log_level)
|
19
|
+
* [`log_target`](/options/log_target)
|
20
|
+
* [`log_format`](/options/log_format)
|
21
|
+
* [`log_target_filters`](/options/log_target_filters)
|
22
|
+
### Middleware
|
23
|
+
* [`log_requests`](/options/log_requests)
|