itsi-server 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/Cargo.lock +932 -382
- data/README.md +2 -0
- data/exe/itsi +5 -5
- data/ext/itsi_acme/Cargo.toml +86 -0
- data/ext/itsi_acme/examples/high_level.rs +63 -0
- data/ext/itsi_acme/examples/high_level_warp.rs +52 -0
- data/ext/itsi_acme/examples/low_level.rs +87 -0
- data/ext/itsi_acme/examples/low_level_axum.rs +66 -0
- data/ext/itsi_acme/src/acceptor.rs +81 -0
- data/ext/itsi_acme/src/acme.rs +354 -0
- data/ext/itsi_acme/src/axum.rs +86 -0
- data/ext/itsi_acme/src/cache.rs +39 -0
- data/ext/itsi_acme/src/caches/boxed.rs +80 -0
- data/ext/itsi_acme/src/caches/composite.rs +69 -0
- data/ext/itsi_acme/src/caches/dir.rs +106 -0
- data/ext/itsi_acme/src/caches/mod.rs +11 -0
- data/ext/itsi_acme/src/caches/no.rs +78 -0
- data/ext/itsi_acme/src/caches/test.rs +136 -0
- data/ext/itsi_acme/src/config.rs +172 -0
- data/ext/itsi_acme/src/https_helper.rs +69 -0
- data/ext/itsi_acme/src/incoming.rs +142 -0
- data/ext/itsi_acme/src/jose.rs +161 -0
- data/ext/itsi_acme/src/lib.rs +142 -0
- data/ext/itsi_acme/src/resolver.rs +59 -0
- data/ext/itsi_acme/src/state.rs +424 -0
- data/ext/itsi_server/Cargo.toml +7 -4
- data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +2 -2
- data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +150 -19
- data/ext/itsi_server/src/ruby_types/itsi_server.rs +1 -0
- data/ext/itsi_server/src/server/binds/listener.rs +34 -29
- data/ext/itsi_server/src/server/binds/tls/locked_dir_cache.rs +2 -2
- data/ext/itsi_server/src/server/binds/tls.rs +1 -1
- data/ext/itsi_server/src/server/middleware_stack/middleware.rs +33 -28
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +56 -3
- data/ext/itsi_server/src/server/middleware_stack/middlewares/csp.rs +179 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs +25 -2
- data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +3 -3
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +2 -1
- data/ext/itsi_server/src/server/middleware_stack/mod.rs +32 -34
- data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +10 -4
- data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +30 -7
- data/ext/itsi_server/src/server/thread_worker.rs +2 -2
- data/ext/itsi_server/src/services/static_file_server.rs +30 -28
- data/ext/itsi_tracing/src/lib.rs +39 -8
- data/lib/itsi/http_request.rb +1 -0
- data/lib/itsi/server/config/config_helpers.rb +93 -0
- data/lib/itsi/server/config/dsl.rb +98 -37
- data/lib/itsi/server/config/known_paths/KitchensinkDirectories.txt +2346 -0
- data/lib/itsi/server/config/known_paths/Randomfiles.txt +24 -0
- data/lib/itsi/server/config/known_paths/UnixDotfiles.txt +52 -0
- data/lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt +29 -0
- data/lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt +1668 -0
- data/lib/itsi/server/config/known_paths/backdoors/shells.txt +1167 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt +7 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt +6 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt +79 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt +3948 -0
- data/lib/itsi/server/config/known_paths/cms/README.md +5 -0
- data/lib/itsi/server/config/known_paths/cms/drupal_plugins.txt +6320 -0
- data/lib/itsi/server/config/known_paths/cms/drupal_themes.txt +828 -0
- data/lib/itsi/server/config/known_paths/cms/joomla_plugins.txt +224 -0
- data/lib/itsi/server/config/known_paths/cms/joomla_themes.txt +30 -0
- data/lib/itsi/server/config/known_paths/cms/php-nuke.txt +2142 -0
- data/lib/itsi/server/config/known_paths/cms/wordpress.txt +1566 -0
- data/lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt +46 -0
- data/lib/itsi/server/config/known_paths/cms/wp_plugins.txt +13366 -0
- data/lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt +68662 -0
- data/lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt +225 -0
- data/lib/itsi/server/config/known_paths/cms/wp_themes.readme +12 -0
- data/lib/itsi/server/config/known_paths/cms/wp_themes.txt +7336 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt +17576 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt +80 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt +14 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt +865 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt +186 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt +30 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt +93 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt +1918 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt +8 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt +56180 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt +62290 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt +2367 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt +2450 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt +35323 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt +37037 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt +107982 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt +119600 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt +26593 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt +30009 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt +1233 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt +1289 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt +16243 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt +17128 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt +56293 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt +63087 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt +17776 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt +20122 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt +914 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt +963 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt +10848 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt +11424 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt +38267 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt +43003 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt +445 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt +36 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt +44 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/Logins.txt +71 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/cfm.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/html.txt +295 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/jsp.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/php.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt +294 -0
- data/lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt +47 -0
- data/lib/itsi/server/config/known_paths/php/PHP.txt +30 -0
- data/lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt +5 -0
- data/lib/itsi/server/config/known_paths/proxy-conf.txt +31 -0
- data/lib/itsi/server/config/known_paths/tftp.txt +79 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt +86 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt +16 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt +101 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt +47 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt +16 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt +111 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt +390 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt +38 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt +239 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt +2 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt +578 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt +187 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt +5 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt +13 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt +3 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt +1937 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt +206 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt +18 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt +60 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt +192 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/README.md +6 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt +121 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt +463 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt +1707 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt +19 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt +51 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt +35 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt +73 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt +160 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt +366 -0
- data/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt +30 -0
- data/lib/itsi/server/config/known_paths.rb +17 -0
- data/lib/itsi/server/config/middleware/_index.md +54 -0
- data/lib/itsi/server/config/middleware/log_requests.md +63 -0
- data/lib/itsi/server/config/middleware/log_requests.rb +33 -0
- data/lib/itsi/server/config/middleware.rb +9 -0
- data/lib/itsi/server/config/option.rb +9 -0
- data/lib/itsi/server/config/options/_index.md +36 -0
- data/lib/itsi/server/config/options/fiber_scheduler.md +35 -0
- data/lib/itsi/server/config/options/fiber_scheduler.rb +18 -0
- data/lib/itsi/server/config/options/threads.md +39 -0
- data/lib/itsi/server/config/options/threads.rb +17 -0
- data/lib/itsi/server/config/options/workers.md +43 -0
- data/lib/itsi/server/config/options/workers.rb +17 -0
- data/lib/itsi/server/config/typed_struct.rb +203 -0
- data/lib/itsi/server/config.rb +124 -30
- data/lib/itsi/server/signal_trap.rb +5 -1
- data/lib/itsi/server/typed_handlers/source_parser.rb +1 -1
- data/lib/itsi/server/version.rb +1 -1
- data/lib/itsi/server.rb +27 -6
- data/lib/ruby_lsp/itsi/addon.rb +64 -48
- metadata +141 -5
- data/CHANGELOG.md +0 -10
- data/CODE_OF_CONDUCT.md +0 -139
- data/LICENSE.txt +0 -21
- data/_index.md +0 -6
@@ -2,18 +2,25 @@ module Itsi
|
|
2
2
|
class Server
|
3
3
|
module Config
|
4
4
|
class DSL
|
5
|
-
|
5
|
+
require_relative "config_helpers"
|
6
|
+
require_relative "option"
|
7
|
+
require_relative "middleware"
|
8
|
+
|
9
|
+
attr_reader :parent, :children, :middleware, :controller_class, :routes, :http_methods, :protocols,
|
6
10
|
:hosts, :ports, :extensions, :content_types, :accepts, :options
|
7
11
|
|
8
12
|
def self.evaluate(config = Itsi::Server::Config.config_file_path, &blk)
|
9
|
-
new(routes: ["/"]) do
|
13
|
+
config = new(routes: ["/"]) do
|
10
14
|
if blk
|
11
15
|
instance_exec(&blk)
|
12
16
|
else
|
13
17
|
code = IO.read(config)
|
14
18
|
instance_eval(code, config.to_s, 1)
|
15
19
|
end
|
16
|
-
end
|
20
|
+
end
|
21
|
+
[config.options, config.errors]
|
22
|
+
rescue Exception => e
|
23
|
+
[{}, [[e, e.backtrace[0]]]]
|
17
24
|
end
|
18
25
|
|
19
26
|
def initialize(
|
@@ -36,7 +43,7 @@ module Itsi
|
|
36
43
|
|
37
44
|
@controller = controller
|
38
45
|
@routes = Array(routes).flatten
|
39
|
-
@
|
46
|
+
@http_methods = methods.map { |s| s.is_a?(Regexp) ? s : s.to_s }
|
40
47
|
@protocols = protocols.map { |s| s.is_a?(Regexp) ? s : s.to_s }
|
41
48
|
@hosts = hosts.map { |s| s.is_a?(Regexp) ? s : s.to_s }
|
42
49
|
@ports = ports.map { |s| s.is_a?(Regexp) ? s : s.to_s }
|
@@ -54,19 +61,30 @@ module Itsi
|
|
54
61
|
end
|
55
62
|
}
|
56
63
|
|
64
|
+
@errors = []
|
57
65
|
instance_exec(&block)
|
58
66
|
end
|
59
67
|
|
60
|
-
def
|
61
|
-
|
62
|
-
|
63
|
-
@options[:workers] = [workers.to_i, 1].max
|
68
|
+
def errors
|
69
|
+
@children.map(&:errors).flatten + @errors
|
64
70
|
end
|
65
71
|
|
66
|
-
|
67
|
-
|
72
|
+
Option.subclasses.each do |option|
|
73
|
+
option_name = option.option_name
|
74
|
+
define_method(option_name) do |*args, **kwargs, &blk|
|
75
|
+
@options[option_name] = option.new(self, *args, **kwargs, &blk).build!
|
76
|
+
rescue => e
|
77
|
+
@errors << [e, caller[1]]
|
78
|
+
end
|
79
|
+
end
|
68
80
|
|
69
|
-
|
81
|
+
Middleware.subclasses.each do |middleware|
|
82
|
+
middleware_name = middleware.middleware_name
|
83
|
+
define_method(middleware_name) do |*args, **kwargs, &blk|
|
84
|
+
@middleware[middleware_name] = middleware.new(@parent, *args, **kwargs, &blk).build!
|
85
|
+
rescue => e
|
86
|
+
@errors << [e, caller[1]]
|
87
|
+
end
|
70
88
|
end
|
71
89
|
|
72
90
|
def oob_gc_responses_threshold(threshold)
|
@@ -81,18 +99,24 @@ module Itsi
|
|
81
99
|
@options[:log_level] = level.to_s
|
82
100
|
end
|
83
101
|
|
84
|
-
def log_format(format)
|
85
|
-
raise "Log format must be set at the root" unless @parent.nil?
|
86
|
-
|
87
|
-
@options[:log_format] = format.to_s
|
88
|
-
end
|
89
|
-
|
90
102
|
def log_target(target)
|
91
103
|
raise "Log target must be set at the root" unless @parent.nil?
|
92
104
|
|
93
105
|
@options[:log_target] = target.to_s
|
94
106
|
end
|
95
107
|
|
108
|
+
def log_target_filters(target_filters)
|
109
|
+
raise "Log target filters must be set at the root" unless @parent.nil?
|
110
|
+
|
111
|
+
@options[:log_target_filters] = target_filters
|
112
|
+
end
|
113
|
+
|
114
|
+
def log_format(target)
|
115
|
+
raise "Log format must be set at the root" unless @parent.nil?
|
116
|
+
|
117
|
+
@options[:log_format] = target.to_s
|
118
|
+
end
|
119
|
+
|
96
120
|
def get(route, app_proc = nil, nonblocking: false, &blk)
|
97
121
|
endpoint(route, [:get], app_proc, nonblocking: nonblocking, &blk)
|
98
122
|
end
|
@@ -113,7 +137,7 @@ module Itsi
|
|
113
137
|
endpoint(route, [:patch], app_proc, nonblocking: nonblocking, &blk)
|
114
138
|
end
|
115
139
|
|
116
|
-
def endpoint(route, methods=[], app_proc = nil, nonblocking: false, &blk)
|
140
|
+
def endpoint(route=nil, methods=[], app_proc = nil, nonblocking: false, &blk)
|
117
141
|
raise "You must provide either a block or an explicit handler for the endpoint" if app_proc.nil? && blk.nil?
|
118
142
|
|
119
143
|
app_proc = @controller.method(app_proc).to_proc if app_proc.is_a?(Symbol)
|
@@ -138,15 +162,18 @@ module Itsi
|
|
138
162
|
app_proc = Itsi::Server::TypedHandlers.handler_for(app_proc, params_schema)
|
139
163
|
end
|
140
164
|
|
141
|
-
|
142
|
-
if route && methods.any?
|
165
|
+
if route || http_methods.any?
|
143
166
|
# For endpoints, it's usually assumed trailing slash and non-trailing slash behaviour is the same
|
144
167
|
routes = route == "/" ? ["", "/"] : [route]
|
145
|
-
location(*routes, methods:
|
168
|
+
location(*routes, methods: http_methods) do
|
146
169
|
@middleware[:app] = { preloader: -> { app_proc }, nonblocking: nonblocking }
|
147
170
|
end
|
148
171
|
else
|
149
|
-
|
172
|
+
app = { preloader: -> { app_proc }, nonblocking: nonblocking }
|
173
|
+
@middleware[:app] = app
|
174
|
+
location("*") do
|
175
|
+
@middleware[:app] = app
|
176
|
+
end
|
150
177
|
end
|
151
178
|
end
|
152
179
|
|
@@ -178,12 +205,21 @@ module Itsi
|
|
178
205
|
end
|
179
206
|
|
180
207
|
def run(app, sendfile: true, nonblocking: false, path_info: "/")
|
181
|
-
|
208
|
+
app_args = { preloader: -> { Itsi::Server::RackInterface.for(app) }, sendfile: sendfile, base_path: "^(?<base_path>#{paths_from_parent.gsub(/\.\*\)$/, ')')}).*$", path_info: path_info, nonblocking: nonblocking }
|
209
|
+
base_path = "^(?<base_path>#{paths_from_parent.gsub(/\.\*\)$/, ')')}).*$"
|
210
|
+
@middleware[:app] = app_args
|
211
|
+
location("*") do
|
212
|
+
@middleware[:app] = app_args
|
213
|
+
end
|
182
214
|
end
|
183
215
|
|
184
216
|
def rackup_file(rackup_file, nonblocking: false, sendfile: true, path_info: "/")
|
185
217
|
raise "Rackup file #{rackup_file} doesn't exist" unless File.exist?(rackup_file)
|
186
|
-
|
218
|
+
app_args = { preloader: -> { Itsi::Server::RackInterface.for(rackup_file) }, sendfile: sendfile, base_path: "^(?<base_path>#{paths_from_parent.gsub(/\.\*\)$/, ')')}).*$", path_info: path_info, nonblocking: nonblocking }
|
219
|
+
@middleware[:app] = app_args
|
220
|
+
location("*") do
|
221
|
+
@middleware[:app] = app_args
|
222
|
+
end
|
187
223
|
end
|
188
224
|
|
189
225
|
def include(path)
|
@@ -191,6 +227,31 @@ module Itsi
|
|
191
227
|
instance_eval(code, "#{path}.rb", 1)
|
192
228
|
end
|
193
229
|
|
230
|
+
def reuse_address(reuse_address)
|
231
|
+
raise "reuse_address must be set at the root" unless @parent.nil?
|
232
|
+
@options[:reuse_address] = reuse_address
|
233
|
+
end
|
234
|
+
|
235
|
+
def reuse_port(reuse_port)
|
236
|
+
raise "reuse_port must be set at the root" unless @parent.nil?
|
237
|
+
@options[:reuse_port] = reuse_port
|
238
|
+
end
|
239
|
+
|
240
|
+
def listen_backlog(listen_backlog)
|
241
|
+
raise "listen_backlog must be set at the root" unless @parent.nil?
|
242
|
+
@options[:listen_backlog] = listen_backlog
|
243
|
+
end
|
244
|
+
|
245
|
+
def nodelay(nodelay)
|
246
|
+
raise "nodelay must be set at the root" unless @parent.nil?
|
247
|
+
@options[:nodelay] = nodelay
|
248
|
+
end
|
249
|
+
|
250
|
+
def recv_buffer_size(recv_buffer_size)
|
251
|
+
raise "recv_buffer_size must be set at the root" unless @parent.nil?
|
252
|
+
@options[:recv_buffer_size] = recv_buffer_size
|
253
|
+
end
|
254
|
+
|
194
255
|
def bind(bind_str)
|
195
256
|
raise "Bind must be set at the root" unless @parent.nil?
|
196
257
|
|
@@ -283,6 +344,11 @@ module Itsi
|
|
283
344
|
@options[:shutdown_timeout] = shutdown_timeout.to_f
|
284
345
|
end
|
285
346
|
|
347
|
+
def header_read_timeout(header_read_timeout)
|
348
|
+
raise "Header read timeout must be set at the root" unless @parent.nil?
|
349
|
+
|
350
|
+
@options[:header_read_timeout] = header_read_timeout.to_f
|
351
|
+
end
|
286
352
|
|
287
353
|
def stream_body(stream_body)
|
288
354
|
raise "Stream body must be set at the root" unless @parent.nil?
|
@@ -296,7 +362,7 @@ module Itsi
|
|
296
362
|
@children << DSL.new(
|
297
363
|
self,
|
298
364
|
routes: routes,
|
299
|
-
methods: Array(methods) | self.
|
365
|
+
methods: Array(methods) | self.http_methods,
|
300
366
|
protocols: Array(protocols) | self.protocols,
|
301
367
|
hosts: Array(hosts) | self.hosts,
|
302
368
|
ports: Array(ports) | self.ports,
|
@@ -314,9 +380,6 @@ module Itsi
|
|
314
380
|
end
|
315
381
|
end
|
316
382
|
|
317
|
-
def log_requests(**args)
|
318
|
-
@middleware[:log_requests] = args
|
319
|
-
end
|
320
383
|
|
321
384
|
def allow_list(**args)
|
322
385
|
args[:allowed_patterns] = Array(args[:allowed_patterns]).map do |pattern|
|
@@ -345,7 +408,6 @@ module Itsi
|
|
345
408
|
end
|
346
409
|
|
347
410
|
def auth_basic(**args)
|
348
|
-
|
349
411
|
if File.exist?(".itsi-credentials") && !args[:credential_file]
|
350
412
|
args[:credential_file] = ".itsi-credentials"
|
351
413
|
end
|
@@ -419,8 +481,12 @@ module Itsi
|
|
419
481
|
@middleware[:etag] = args
|
420
482
|
end
|
421
483
|
|
484
|
+
def csp(**args)
|
485
|
+
@middleware[:csp] = args
|
486
|
+
end
|
487
|
+
|
422
488
|
def intrusion_protection(**args)
|
423
|
-
args[:banned_url_patterns] = Array(args[:banned_url_patterns]).map do |pattern|
|
489
|
+
args[:banned_url_patterns] = Array(args[:banned_url_patterns]).flatten.map do |pattern|
|
424
490
|
if pattern.is_a?(Regexp)
|
425
491
|
pattern.source
|
426
492
|
else
|
@@ -472,7 +538,7 @@ module Itsi
|
|
472
538
|
result << deep_stringify_keys(
|
473
539
|
{
|
474
540
|
route: Regexp.new("^#{route_options}/?$"),
|
475
|
-
methods: @
|
541
|
+
methods: @http_methods.any? ? @http_methods : nil,
|
476
542
|
protocols: @protocols.any? ? @protocols : nil,
|
477
543
|
hosts: @hosts.any? ? @hosts : nil,
|
478
544
|
ports: @ports.any? ? @ports : nil,
|
@@ -522,11 +588,6 @@ module Itsi
|
|
522
588
|
end
|
523
589
|
|
524
590
|
def effective_middleware
|
525
|
-
merged = merge_ancestor_middleware
|
526
|
-
merged.map { |k, v| { type: k.to_s, parameters: v } }
|
527
|
-
end
|
528
|
-
|
529
|
-
def merge_ancestor_middleware
|
530
591
|
chain = []
|
531
592
|
node = self
|
532
593
|
while node
|
@@ -545,7 +606,7 @@ module Itsi
|
|
545
606
|
merged[k] = v
|
546
607
|
end
|
547
608
|
end
|
548
|
-
merged
|
609
|
+
deep_stringify_keys(merged)
|
549
610
|
end
|
550
611
|
|
551
612
|
def deep_stringify_keys(obj)
|