itsi-server 0.1.19 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +950 -239
  3. data/README.md +2 -0
  4. data/exe/itsi +5 -5
  5. data/ext/itsi_acme/Cargo.toml +86 -0
  6. data/ext/itsi_acme/examples/high_level.rs +63 -0
  7. data/ext/itsi_acme/examples/high_level_warp.rs +52 -0
  8. data/ext/itsi_acme/examples/low_level.rs +87 -0
  9. data/ext/itsi_acme/examples/low_level_axum.rs +66 -0
  10. data/ext/itsi_acme/src/acceptor.rs +81 -0
  11. data/ext/itsi_acme/src/acme.rs +354 -0
  12. data/ext/itsi_acme/src/axum.rs +86 -0
  13. data/ext/itsi_acme/src/cache.rs +39 -0
  14. data/ext/itsi_acme/src/caches/boxed.rs +80 -0
  15. data/ext/itsi_acme/src/caches/composite.rs +69 -0
  16. data/ext/itsi_acme/src/caches/dir.rs +106 -0
  17. data/ext/itsi_acme/src/caches/mod.rs +11 -0
  18. data/ext/itsi_acme/src/caches/no.rs +78 -0
  19. data/ext/itsi_acme/src/caches/test.rs +136 -0
  20. data/ext/itsi_acme/src/config.rs +172 -0
  21. data/ext/itsi_acme/src/https_helper.rs +69 -0
  22. data/ext/itsi_acme/src/incoming.rs +142 -0
  23. data/ext/itsi_acme/src/jose.rs +161 -0
  24. data/ext/itsi_acme/src/lib.rs +142 -0
  25. data/ext/itsi_acme/src/resolver.rs +59 -0
  26. data/ext/itsi_acme/src/state.rs +424 -0
  27. data/ext/itsi_server/Cargo.toml +3 -3
  28. data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +2 -2
  29. data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +150 -19
  30. data/ext/itsi_server/src/ruby_types/itsi_server.rs +1 -0
  31. data/ext/itsi_server/src/server/binds/listener.rs +34 -29
  32. data/ext/itsi_server/src/server/binds/tls/locked_dir_cache.rs +2 -2
  33. data/ext/itsi_server/src/server/binds/tls.rs +1 -1
  34. data/ext/itsi_server/src/server/middleware_stack/middleware.rs +33 -28
  35. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +56 -3
  36. data/ext/itsi_server/src/server/middleware_stack/middlewares/csp.rs +179 -0
  37. data/ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs +25 -2
  38. data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +3 -3
  39. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +2 -1
  40. data/ext/itsi_server/src/server/middleware_stack/mod.rs +32 -34
  41. data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +10 -4
  42. data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +30 -7
  43. data/ext/itsi_server/src/server/thread_worker.rs +2 -2
  44. data/ext/itsi_server/src/services/static_file_server.rs +30 -28
  45. data/ext/itsi_tracing/src/lib.rs +39 -8
  46. data/lib/itsi/server/config/config_helpers.rb +93 -0
  47. data/lib/itsi/server/config/dsl.rb +81 -33
  48. data/lib/itsi/server/config/known_paths/KitchensinkDirectories.txt +2346 -0
  49. data/lib/itsi/server/config/known_paths/Randomfiles.txt +24 -0
  50. data/lib/itsi/server/config/known_paths/UnixDotfiles.txt +52 -0
  51. data/lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt +29 -0
  52. data/lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt +1668 -0
  53. data/lib/itsi/server/config/known_paths/backdoors/shells.txt +1167 -0
  54. data/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt +7 -0
  55. data/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt +6 -0
  56. data/lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt +79 -0
  57. data/lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt +3948 -0
  58. data/lib/itsi/server/config/known_paths/cms/README.md +5 -0
  59. data/lib/itsi/server/config/known_paths/cms/drupal_plugins.txt +6320 -0
  60. data/lib/itsi/server/config/known_paths/cms/drupal_themes.txt +828 -0
  61. data/lib/itsi/server/config/known_paths/cms/joomla_plugins.txt +224 -0
  62. data/lib/itsi/server/config/known_paths/cms/joomla_themes.txt +30 -0
  63. data/lib/itsi/server/config/known_paths/cms/php-nuke.txt +2142 -0
  64. data/lib/itsi/server/config/known_paths/cms/wordpress.txt +1566 -0
  65. data/lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt +46 -0
  66. data/lib/itsi/server/config/known_paths/cms/wp_plugins.txt +13366 -0
  67. data/lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt +68662 -0
  68. data/lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt +225 -0
  69. data/lib/itsi/server/config/known_paths/cms/wp_themes.readme +12 -0
  70. data/lib/itsi/server/config/known_paths/cms/wp_themes.txt +7336 -0
  71. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt +17576 -0
  72. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt +80 -0
  73. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt +14 -0
  74. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt +865 -0
  75. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt +186 -0
  76. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt +30 -0
  77. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt +93 -0
  78. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt +1918 -0
  79. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt +8 -0
  80. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt +56180 -0
  81. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt +62290 -0
  82. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt +2367 -0
  83. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt +2450 -0
  84. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt +35323 -0
  85. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt +37037 -0
  86. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt +107982 -0
  87. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt +119600 -0
  88. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt +26593 -0
  89. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt +30009 -0
  90. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt +1233 -0
  91. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt +1289 -0
  92. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt +16243 -0
  93. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt +17128 -0
  94. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt +56293 -0
  95. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt +63087 -0
  96. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt +17776 -0
  97. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt +20122 -0
  98. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt +914 -0
  99. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt +963 -0
  100. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt +10848 -0
  101. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt +11424 -0
  102. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt +38267 -0
  103. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt +43003 -0
  104. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt +445 -0
  105. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt +36 -0
  106. data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt +44 -0
  107. data/lib/itsi/server/config/known_paths/login-file-locations/Logins.txt +71 -0
  108. data/lib/itsi/server/config/known_paths/login-file-locations/cfm.txt +294 -0
  109. data/lib/itsi/server/config/known_paths/login-file-locations/html.txt +295 -0
  110. data/lib/itsi/server/config/known_paths/login-file-locations/jsp.txt +294 -0
  111. data/lib/itsi/server/config/known_paths/login-file-locations/php.txt +294 -0
  112. data/lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt +294 -0
  113. data/lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt +294 -0
  114. data/lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt +47 -0
  115. data/lib/itsi/server/config/known_paths/php/PHP.txt +30 -0
  116. data/lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt +5 -0
  117. data/lib/itsi/server/config/known_paths/proxy-conf.txt +31 -0
  118. data/lib/itsi/server/config/known_paths/tftp.txt +79 -0
  119. data/lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt +86 -0
  120. data/lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt +16 -0
  121. data/lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt +101 -0
  122. data/lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt +47 -0
  123. data/lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt +16 -0
  124. data/lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt +111 -0
  125. data/lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt +390 -0
  126. data/lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt +38 -0
  127. data/lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt +239 -0
  128. data/lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt +2 -0
  129. data/lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt +578 -0
  130. data/lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt +187 -0
  131. data/lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt +5 -0
  132. data/lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt +13 -0
  133. data/lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt +3 -0
  134. data/lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt +1937 -0
  135. data/lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt +206 -0
  136. data/lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt +18 -0
  137. data/lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt +60 -0
  138. data/lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt +192 -0
  139. data/lib/itsi/server/config/known_paths/webservers-appservers/README.md +6 -0
  140. data/lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt +121 -0
  141. data/lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt +463 -0
  142. data/lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt +1707 -0
  143. data/lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt +19 -0
  144. data/lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt +51 -0
  145. data/lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt +35 -0
  146. data/lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt +73 -0
  147. data/lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt +160 -0
  148. data/lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt +366 -0
  149. data/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt +30 -0
  150. data/lib/itsi/server/config/known_paths.rb +17 -0
  151. data/lib/itsi/server/config/middleware/_index.md +54 -0
  152. data/lib/itsi/server/config/middleware/log_requests.md +63 -0
  153. data/lib/itsi/server/config/middleware/log_requests.rb +33 -0
  154. data/lib/itsi/server/config/middleware.rb +9 -0
  155. data/lib/itsi/server/config/option.rb +9 -0
  156. data/lib/itsi/server/config/options/_index.md +36 -0
  157. data/lib/itsi/server/config/options/fiber_scheduler.md +35 -0
  158. data/lib/itsi/server/config/options/fiber_scheduler.rb +18 -0
  159. data/lib/itsi/server/config/options/threads.md +39 -0
  160. data/lib/itsi/server/config/options/threads.rb +17 -0
  161. data/lib/itsi/server/config/options/workers.md +43 -0
  162. data/lib/itsi/server/config/options/workers.rb +17 -0
  163. data/lib/itsi/server/config/typed_struct.rb +203 -0
  164. data/lib/itsi/server/config.rb +124 -30
  165. data/lib/itsi/server/signal_trap.rb +5 -1
  166. data/lib/itsi/server/typed_handlers/source_parser.rb +1 -1
  167. data/lib/itsi/server/version.rb +1 -1
  168. data/lib/itsi/server.rb +27 -6
  169. data/lib/ruby_lsp/itsi/addon.rb +64 -48
  170. metadata +141 -5
  171. data/CHANGELOG.md +0 -10
  172. data/CODE_OF_CONDUCT.md +0 -139
  173. data/LICENSE.txt +0 -21
  174. data/_index.md +0 -6
@@ -3,7 +3,9 @@
3
3
  module Itsi
4
4
  class Server
5
5
  module Config
6
+ require_relative "config/typed_struct"
6
7
  require_relative "config/dsl"
8
+ require_relative "config/known_paths"
7
9
  require_relative "default_app/default_app"
8
10
 
9
11
  ITSI_DEFAULT_CONFIG_FILE = "Itsi.rb"
@@ -33,7 +35,7 @@ module Itsi
33
35
  # 3. Default values.
34
36
  def self.build_config(args, config_file_path, builder_proc = nil)
35
37
  args.transform_keys!(&:to_sym)
36
- itsifile_config = \
38
+ itsifile_config, errors = \
37
39
  if builder_proc
38
40
  DSL.evaluate(&builder_proc)
39
41
  elsif args[:static]
@@ -87,33 +89,77 @@ module Itsi
87
89
  Bundler.require(preload)
88
90
  end
89
91
 
90
- {
91
- workers: args.fetch(:workers) { itsifile_config.fetch(:workers, 1) },
92
- worker_memory_limit: args.fetch(:worker_memory_limit) { itsifile_config.fetch(:worker_memory_limit, nil) },
93
- silence: args.fetch(:silence) { itsifile_config.fetch(:silence, false) },
94
- shutdown_timeout: args.fetch(:shutdown_timeout) { itsifile_config.fetch(:shutdown_timeout, 5) },
95
- hooks: itsifile_config.fetch(:hooks, nil),
96
- preload: !!preload,
97
- request_timeout: itsifile_config.fetch(:request_timeout, nil),
98
- notify_watchers: itsifile_config.fetch(:notify_watchers, nil),
99
- threads: args.fetch(:threads) { itsifile_config.fetch(:threads, 1) },
100
- scheduler_threads: args.fetch(:scheduler_threads) { itsifile_config.fetch(:scheduler_threads, nil) },
101
- streamable_body: args.fetch(:streamable_body) { itsifile_config.fetch(:streamable_body, false) },
102
- multithreaded_reactor: args.fetch(:multithreaded_reactor) do
103
- itsifile_config.fetch(:multithreaded_reactor, nil)
104
- end,
105
- pin_worker_cores: args.fetch(:pin_worker_cores) { itsifile_config.fetch(:pin_worker_cores, true) },
106
- scheduler_class: args.fetch(:scheduler_class) { itsifile_config.fetch(:scheduler_class, nil) },
107
- oob_gc_responses_threshold: args.fetch(:oob_gc_responses_threshold) do
108
- itsifile_config.fetch(:oob_gc_responses_threshold, nil)
109
- end,
110
- log_level: args.fetch(:log_level) { itsifile_config.fetch(:log_level, nil) },
111
- log_format: args.fetch(:log_format) { itsifile_config.fetch(:log_format, nil) },
112
- log_target: args.fetch(:log_target) { itsifile_config.fetch(:log_target, nil) },
113
- binds: args.fetch(:binds) { itsifile_config.fetch(:binds, ["http://0.0.0.0:3000"]) },
114
- middleware_loader: middleware_loader,
115
- listeners: args.fetch(:listeners) { nil }
116
- }.transform_keys(&:to_s)
92
+ [
93
+ {
94
+ workers: args.fetch(:workers) { itsifile_config.fetch(:workers, 1) },
95
+ worker_memory_limit: args.fetch(:worker_memory_limit) { itsifile_config.fetch(:worker_memory_limit, nil) },
96
+ silence: args.fetch(:silence) { itsifile_config.fetch(:silence, false) },
97
+ shutdown_timeout: args.fetch(:shutdown_timeout) { itsifile_config.fetch(:shutdown_timeout, 5) },
98
+ hooks: itsifile_config.fetch(:hooks, nil),
99
+ preload: !!preload,
100
+ request_timeout: itsifile_config.fetch(:request_timeout, nil),
101
+ header_read_timeout: args.fetch(:header_read_timeout) { itsifile_config.fetch(:header_read_timeout, nil) },
102
+ notify_watchers: itsifile_config.fetch(:notify_watchers, nil),
103
+ threads: args.fetch(:threads) { itsifile_config.fetch(:threads, 1) },
104
+ scheduler_threads: args.fetch(:scheduler_threads) { itsifile_config.fetch(:scheduler_threads, nil) },
105
+ streamable_body: args.fetch(:streamable_body) { itsifile_config.fetch(:streamable_body, false) },
106
+ multithreaded_reactor: args.fetch(:multithreaded_reactor) do
107
+ itsifile_config.fetch(:multithreaded_reactor, nil)
108
+ end,
109
+ pin_worker_cores: args.fetch(:pin_worker_cores) { itsifile_config.fetch(:pin_worker_cores, true) },
110
+ scheduler_class: args.fetch(:scheduler_class) { itsifile_config.fetch(:scheduler_class, nil) },
111
+ oob_gc_responses_threshold: args.fetch(:oob_gc_responses_threshold) do
112
+ itsifile_config.fetch(:oob_gc_responses_threshold, nil)
113
+ end,
114
+ log_level: args.fetch(:log_level) { itsifile_config.fetch(:log_level, nil) },
115
+ log_format: args.fetch(:log_format) { itsifile_config.fetch(:log_format, nil) },
116
+ log_target: args.fetch(:log_target) { itsifile_config.fetch(:log_target, nil) },
117
+ log_target_filters: args.fetch(:log_target_filters) { itsifile_config.fetch(:log_target_filters, nil) },
118
+ binds: args.fetch(:binds) { itsifile_config.fetch(:binds, ["http://0.0.0.0:3000"]) },
119
+ middleware_loader: middleware_loader,
120
+ listeners: args.fetch(:listeners) { nil },
121
+ reuse_address: itsifile_config.fetch(:reuse_address, true),
122
+ reuse_port: itsifile_config.fetch(:reuse_port, true),
123
+ listen_backlog: itsifile_config.fetch(:listen_backlog, 1024 ),
124
+ nodelay: itsifile_config.fetch(:nodelay, true),
125
+ recv_buffer_size: itsifile_config.fetch(:recv_buffer_size, 262_144)
126
+ }.transform_keys(&:to_s),
127
+
128
+ errors.flat_map do |(error, message)|
129
+ location = message[/(.*?)\:in/,1]
130
+ file, lineno = location.split(":")
131
+ lineno = lineno.to_i
132
+ err_message = error.kind_of?(NoMethodError) ? error.detailed_message : error.message
133
+ file_lines = IO.readlines(file)
134
+ info_lines = if error.kind_of?(SyntaxError)
135
+ []
136
+ else
137
+ ([lineno-2, 0].max...[file_lines.length, lineno.succ.succ].min).map do |currline|
138
+ [
139
+ " #{currline.succ.to_s.rjust(3)} | #{file_lines[currline].strip}",
140
+ if currline == lineno-1
141
+ " | ^^^ "
142
+ end
143
+ ].compact
144
+ end.flatten
145
+ end
146
+ [
147
+ err_message,
148
+ " --> #{File.expand_path(file)}:#{lineno}",
149
+ *info_lines
150
+ ]
151
+ end
152
+ ]
153
+ end
154
+
155
+ def self.test!(cli_params)
156
+ _, errors = build_config(cli_params, Itsi::Server::Config.config_file_path(cli_params[:config_file]))
157
+ if errors.any?
158
+ Itsi.log_error("Config file is invalid")
159
+ puts errors
160
+ else
161
+ Itsi.log_info("Config file is valid")
162
+ end
117
163
  end
118
164
 
119
165
  # Reloads the entire process
@@ -156,10 +202,58 @@ module Itsi
156
202
  return
157
203
  end
158
204
 
159
- puts "Writing default configuration..."
205
+ default_config = IO.read("#{__dir__}/default_config/Itsi.rb")
206
+
207
+ if File.exist?("./config.ru")
208
+ default_config << <<~RUBY
209
+ # You can mount several Ruby apps as either
210
+ # 1. rackup files
211
+ # 2. inline rack apps
212
+ # 3. inline Ruby endpoints
213
+ #
214
+ # 1. rackup_file
215
+ rackup_file "./config.ru"
216
+ #
217
+ # 2. inline rack app
218
+ # require 'rack'
219
+ # run(Rack::Builder.app do
220
+ # use Rack::CommonLogger
221
+ # run ->(env) { [200, { 'content-type' => 'text/plain' }, ['OK']] }
222
+ # end)
223
+ #
224
+ # 3. Endpoints
225
+ # endpoint "/" do |req|
226
+ # req.ok "Hello from Itsi"
227
+ # end
228
+ RUBY
229
+ else
230
+ default_config << <<~RUBY
231
+ # You can mount several Ruby apps as either
232
+ # 1. rackup files
233
+ # 2. inline rack apps
234
+ # 3. inline Ruby endpoints
235
+ #
236
+ # 1. rackup_file
237
+ # Use `rackup_file` to specify the Rack app file name.
238
+ #
239
+ # 2. inline rack app
240
+ # require 'rack'
241
+ # run(Rack::Builder.app do
242
+ # use Rack::CommonLogger
243
+ # run ->(env) { [200, { 'content-type' => 'text/plain' }, ['OK']] }
244
+ # end)
245
+ #
246
+ # 3. Endpoint
247
+ endpoint "/" do |req|
248
+ req.ok "Hello from Itsi"
249
+ end
250
+ RUBY
251
+ end
252
+
160
253
  File.open(ITSI_DEFAULT_CONFIG_FILE, "w") do |file|
161
- file.write(IO.read("#{__dir__}/default_config/Itsi.rb"))
254
+ file.write(default_config)
162
255
  end
256
+
163
257
  end
164
258
  end
165
259
  end
@@ -10,13 +10,17 @@ module Itsi
10
10
  INTERCEPTED_SIGNALS = ["INT"].freeze
11
11
 
12
12
  def trap(signal, *args, &block)
13
- unless INTERCEPTED_SIGNALS.include?(signal.to_s) && block.nil? && Itsi::Server.running?
13
+ unless INTERCEPTED_SIGNALS.include?(signal.to_s) && block.nil? && server_running?
14
14
  return super(signal, *args, &block)
15
15
  end
16
16
 
17
17
  Itsi::Server.reset_signal_handlers
18
18
  nil
19
19
  end
20
+
21
+ def server_running?
22
+ Itsi::Server.respond_to?(:running) && Itsi::Server.running?
23
+ end
20
24
  end
21
25
  end
22
26
 
@@ -10,7 +10,7 @@ module Itsi
10
10
 
11
11
  proc_line = source_location.last - 1
12
12
  first_line = source_lines[proc_line]
13
- binding.b
13
+
14
14
  until first_line =~ /(?:lambda|proc|->|def|.*?do\s*\|)/ || proc_line.zero?
15
15
  proc_line -= 1
16
16
  first_line = source_lines[proc_line]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Server
5
- VERSION = "0.1.19"
5
+ VERSION = "0.1.20"
6
6
  end
7
7
  end
data/lib/itsi/server.rb CHANGED
@@ -38,14 +38,22 @@ module Itsi
38
38
  server = new(cli_params, itsi_file, blk)
39
39
  previous_handler = Signal.trap(:INT, :DEFAULT)
40
40
  run = lambda do
41
- write_pid
42
41
  @running = server
42
+
43
+ if cli_params[:daemonize]
44
+ Itsi.log_info("Itsi is running in the background. Writing pid to #{Itsi::Server::Config.pid_file_path}")
45
+ Itsi.log_info("To stop Itsi, run 'itsi stop' from this directory.")
46
+ Process.daemon(true, false)
47
+ end
48
+ write_pid
49
+
43
50
  server.start
44
- @running = false
51
+ @running = nil
45
52
  Signal.trap(:INT, previous_handler)
46
53
  server
47
54
  end
48
55
  background ? Thread.new(&run) : run[]
56
+ rescue
49
57
  end
50
58
 
51
59
  def static(cli_params)
@@ -55,6 +63,15 @@ module Itsi
55
63
  def stop
56
64
  return unless pid = get_pid
57
65
  Process.kill(:INT, pid)
66
+ i = 0
67
+ while i < 10
68
+ sleep 0.25
69
+ unless get_pid(false)
70
+ puts "Itsi stopped"
71
+ break
72
+ end
73
+ i += 1
74
+ end
58
75
  end
59
76
 
60
77
  def stop_background_thread
@@ -66,19 +83,23 @@ module Itsi
66
83
  File.write(Itsi::Server::Config.pid_file_path, Process.pid)
67
84
  end
68
85
 
69
- def get_pid
86
+ def get_pid(warn=true)
70
87
  pid = File.read(Itsi::Server::Config.pid_file_path).to_i
71
88
  if Process.kill(0, pid)
72
89
  pid
73
90
  else
74
- puts "No server running"
91
+ warn ? puts("No server running") : nil
75
92
  nil
76
93
  end
77
94
  rescue StandardError
78
- puts "No server running"
95
+ warn ? puts("No server running") : nil
79
96
  nil
80
97
  end
81
98
 
99
+ def test
100
+ Itsi::Server::Config.test!(cli_params = {})
101
+ end
102
+
82
103
  def init
83
104
  Config.write_default
84
105
  end
@@ -134,7 +155,7 @@ module Itsi
134
155
 
135
156
  def status
136
157
  return unless pid = get_pid
137
-
158
+ Itsi.log_info("Itsi running on #{pid}")
138
159
  Process.kill(:USR2, pid)
139
160
  end
140
161
 
@@ -1,10 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "ruby_lsp/addon"
4
- puts "Here we go"
4
+ require "itsi/server"
5
+
5
6
  module RubyLsp
6
7
  module Itsi
7
8
  class Addon < ::RubyLsp::Addon
9
+ def activate(global_state, message_queue)
10
+ @message_queue = message_queue
11
+ end
12
+
13
+ def deactivate; end
8
14
 
9
15
  def name
10
16
  "Ruby LSP Itsi"
@@ -14,6 +20,7 @@ module RubyLsp
14
20
  "0.1.0"
15
21
  end
16
22
 
23
+
17
24
  def create_completion_listener(response_builder, node_context, dispatcher, uri)
18
25
  return unless uri.to_s.end_with?("Itsi.rb")
19
26
  @in_itsi_file = true
@@ -21,8 +28,7 @@ module RubyLsp
21
28
  end
22
29
 
23
30
  def create_hover_listener(response_builder, node_context, dispatcher)
24
- hl = dispatcher.listeners[:on_call_node_enter].find{|c| c.kind_of?(RubyLsp::Listeners::Hover)}
25
-
31
+ hl = dispatcher.listeners[:on_call_node_enter].find { |c| c.is_a?(RubyLsp::Listeners::Hover) }
26
32
  return unless hl.instance_variable_get("@path").to_s.end_with?("Itsi.rb")
27
33
  HoverListener.new(response_builder, node_context, dispatcher)
28
34
  end
@@ -34,29 +40,21 @@ module RubyLsp
34
40
  @node_context = node_context
35
41
  @dispatcher = dispatcher
36
42
 
37
- # Register for call nodes (you could also use other events if more appropriate)
43
+ @options_by_name = ::Itsi::Server::Config::Option.subclasses.group_by(&:option_name).map{|k,v| [k,v.first]}.to_h
44
+ @middlewares_by_name = ::Itsi::Server::Config::Middleware.subclasses.group_by(&:middleware_name).map{|k,v| [k,v.first]}.to_h
45
+ # Register for call nodes for hover events
38
46
  dispatcher.register(self, :on_call_node_enter)
39
47
  end
40
48
 
41
49
  def on_call_node_enter(node)
42
- # Check if this is the call for foo_bar; you might add additional logic if needed.
43
- case node.message
44
- when "log_level"
45
- # Push a simple hover response.
46
- @response_builder.push(
47
- "Method **log_level**: A method that takes a single parameter `a`.",
48
- category: :documentation
49
- )
50
- when "shutdown_timeout"
51
- # Push a simple hover response.
50
+ if (matched_class = @options_by_name[node.message.to_sym])
52
51
  @response_builder.push(
53
- "Method **shutdown_timeout**: Number of seconds to wait for a graceful shutdown before forcefully shutting down.",
52
+ matched_class.documentation,
54
53
  category: :documentation
55
54
  )
56
- when "log"
57
- # Push a simple hover response.
55
+ elsif (matched_class = @middlewares_by_name[node.message.to_sym])
58
56
  @response_builder.push(
59
- "Method **log**: A method that takes a single parameter `a`.",
57
+ matched_class.documentation,
60
58
  category: :documentation
61
59
  )
62
60
  end
@@ -70,42 +68,60 @@ module RubyLsp
70
68
  @uri = uri
71
69
  @dispatcher = dispatcher
72
70
 
73
- # Register for call nodes to handle method completions
71
+ # Register for method call completions
74
72
  dispatcher.register(self, :on_call_node_enter)
73
+ # Also register for completion item resolution requests
74
+ dispatcher.register(self, :completion_item_resolve)
75
75
  end
76
76
 
77
77
  def on_call_node_enter(node)
78
- # Only handle method calls that are being typed (no arguments yet)
78
+ # Only handle method calls that are being typed (i.e. no arguments yet)
79
79
  return unless node.arguments.nil?
80
- puts "Adding log level completion"
81
- # Add our completion item
82
- @response_builder << Interface::CompletionItem.new(
83
- label: "log_level",
84
- kind: Constant::CompletionItemKind::METHOD,
85
- detail: "log_level a ",
86
- documentation: "A method that takes a single parameter 'a'",
87
- insert_text: "log_level ${1|:info,:debug,:warn,:error|}",
88
- insert_text_format: Constant::InsertTextFormat::SNIPPET,
89
- )
90
-
91
- @response_builder << Interface::CompletionItem.new(
92
- label: "bind",
93
- kind: Constant::CompletionItemKind::METHOD,
94
- detail: "Bind to an interface",
95
- documentation: "A method that takes a single parameter 'a'",
96
- insert_text: "bind ${1|'https://0.0.0.0','http://0.0.0.0','http://0.0.0.0:3000','https://0.0.0.0:3000','http://127.0.0.1','https://127.0.0.1'|}",
97
- insert_text_format: Constant::InsertTextFormat::SNIPPET,
98
- )
99
-
100
- @response_builder << Interface::CompletionItem.new(
101
- label: "log_format",
102
- kind: Constant::CompletionItemKind::METHOD,
103
- detail: "log_format",
104
- documentation: "A method that takes a single parameter 'a'",
105
- insert_text: "log_format ${1|:plain,:json,:auto|}",
106
- insert_text_format: Constant::InsertTextFormat::SNIPPET,
107
- )
80
+
81
+ ::Itsi::Server::Config::Option.subclasses.each do |option|
82
+ completion_item = Interface::CompletionItem.new(
83
+ label: option.option_name,
84
+ kind: Constant::CompletionItemKind::METHOD,
85
+ label_details: Interface::CompletionItemLabelDetails.new(
86
+ detail: option.detail,
87
+ description: option.documentation
88
+ ),
89
+ documentation: Interface::MarkupContent.new(
90
+ kind: Constant::MarkupKind::MARKDOWN,
91
+ value: option.documentation
92
+ ),
93
+ insert_text: option.insert_text,
94
+ insert_text_format: Constant::InsertTextFormat::SNIPPET,
95
+ data: {
96
+ delegateCompletion: true
97
+ }
98
+ )
99
+ @response_builder << completion_item
100
+ end
101
+
102
+ ::Itsi::Server::Config::Middleware.subclasses.each do |middleware|
103
+ completion_item = Interface::CompletionItem.new(
104
+ label: middleware.middleware_name,
105
+ kind: Constant::CompletionItemKind::METHOD,
106
+ label_details: Interface::CompletionItemLabelDetails.new(
107
+ detail: middleware.detail,
108
+ description: middleware.documentation
109
+ ),
110
+ documentation: Interface::MarkupContent.new(
111
+ kind: Constant::MarkupKind::MARKDOWN,
112
+ value: middleware.documentation
113
+ ),
114
+ insert_text: middleware.insert_text,
115
+ insert_text_format: Constant::InsertTextFormat::SNIPPET,
116
+ data: {
117
+ delegateCompletion: true
118
+ }
119
+ )
120
+ @response_builder << completion_item
121
+ end
108
122
  end
123
+
124
+
109
125
  end
110
126
  end
111
127
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itsi-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.19
4
+ version: 0.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
@@ -75,15 +75,33 @@ extensions:
75
75
  extra_rdoc_files: []
76
76
  files:
77
77
  - ".rubocop.yml"
78
- - CHANGELOG.md
79
- - CODE_OF_CONDUCT.md
80
78
  - Cargo.lock
81
79
  - Cargo.toml
82
- - LICENSE.txt
83
80
  - README.md
84
81
  - Rakefile
85
- - _index.md
86
82
  - exe/itsi
83
+ - ext/itsi_acme/Cargo.toml
84
+ - ext/itsi_acme/examples/high_level.rs
85
+ - ext/itsi_acme/examples/high_level_warp.rs
86
+ - ext/itsi_acme/examples/low_level.rs
87
+ - ext/itsi_acme/examples/low_level_axum.rs
88
+ - ext/itsi_acme/src/acceptor.rs
89
+ - ext/itsi_acme/src/acme.rs
90
+ - ext/itsi_acme/src/axum.rs
91
+ - ext/itsi_acme/src/cache.rs
92
+ - ext/itsi_acme/src/caches/boxed.rs
93
+ - ext/itsi_acme/src/caches/composite.rs
94
+ - ext/itsi_acme/src/caches/dir.rs
95
+ - ext/itsi_acme/src/caches/mod.rs
96
+ - ext/itsi_acme/src/caches/no.rs
97
+ - ext/itsi_acme/src/caches/test.rs
98
+ - ext/itsi_acme/src/config.rs
99
+ - ext/itsi_acme/src/https_helper.rs
100
+ - ext/itsi_acme/src/incoming.rs
101
+ - ext/itsi_acme/src/jose.rs
102
+ - ext/itsi_acme/src/lib.rs
103
+ - ext/itsi_acme/src/resolver.rs
104
+ - ext/itsi_acme/src/state.rs
87
105
  - ext/itsi_error/Cargo.lock
88
106
  - ext/itsi_error/Cargo.toml
89
107
  - ext/itsi_error/src/lib.rs
@@ -177,6 +195,7 @@ files:
177
195
  - ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs
178
196
  - ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs
179
197
  - ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs
198
+ - ext/itsi_server/src/server/middleware_stack/middlewares/csp.rs
180
199
  - ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs
181
200
  - ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs
182
201
  - ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs
@@ -228,7 +247,124 @@ files:
228
247
  - lib/itsi/passfile.rb
229
248
  - lib/itsi/server.rb
230
249
  - lib/itsi/server/config.rb
250
+ - lib/itsi/server/config/config_helpers.rb
231
251
  - lib/itsi/server/config/dsl.rb
252
+ - lib/itsi/server/config/known_paths.rb
253
+ - lib/itsi/server/config/known_paths/KitchensinkDirectories.txt
254
+ - lib/itsi/server/config/known_paths/Randomfiles.txt
255
+ - lib/itsi/server/config/known_paths/UnixDotfiles.txt
256
+ - lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt
257
+ - lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt
258
+ - lib/itsi/server/config/known_paths/backdoors/shells.txt
259
+ - lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt
260
+ - lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt
261
+ - lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt
262
+ - lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt
263
+ - lib/itsi/server/config/known_paths/cms/README.md
264
+ - lib/itsi/server/config/known_paths/cms/drupal_plugins.txt
265
+ - lib/itsi/server/config/known_paths/cms/drupal_themes.txt
266
+ - lib/itsi/server/config/known_paths/cms/joomla_plugins.txt
267
+ - lib/itsi/server/config/known_paths/cms/joomla_themes.txt
268
+ - lib/itsi/server/config/known_paths/cms/php-nuke.txt
269
+ - lib/itsi/server/config/known_paths/cms/wordpress.txt
270
+ - lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt
271
+ - lib/itsi/server/config/known_paths/cms/wp_plugins.txt
272
+ - lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt
273
+ - lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt
274
+ - lib/itsi/server/config/known_paths/cms/wp_themes.readme
275
+ - lib/itsi/server/config/known_paths/cms/wp_themes.txt
276
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt
277
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt
278
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt
279
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt
280
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt
281
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt
282
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt
283
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt
284
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt
285
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt
286
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt
287
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt
288
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt
289
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt
290
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt
291
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt
292
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt
293
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt
294
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt
295
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt
296
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt
297
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt
298
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt
299
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt
300
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt
301
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt
302
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt
303
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt
304
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt
305
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt
306
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt
307
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt
308
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt
309
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt
310
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt
311
+ - lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt
312
+ - lib/itsi/server/config/known_paths/login-file-locations/Logins.txt
313
+ - lib/itsi/server/config/known_paths/login-file-locations/cfm.txt
314
+ - lib/itsi/server/config/known_paths/login-file-locations/html.txt
315
+ - lib/itsi/server/config/known_paths/login-file-locations/jsp.txt
316
+ - lib/itsi/server/config/known_paths/login-file-locations/php.txt
317
+ - lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt
318
+ - lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt
319
+ - lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt
320
+ - lib/itsi/server/config/known_paths/php/PHP.txt
321
+ - lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt
322
+ - lib/itsi/server/config/known_paths/proxy-conf.txt
323
+ - lib/itsi/server/config/known_paths/tftp.txt
324
+ - lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt
325
+ - lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt
326
+ - lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt
327
+ - lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt
328
+ - lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt
329
+ - lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt
330
+ - lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt
331
+ - lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt
332
+ - lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt
333
+ - lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt
334
+ - lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt
335
+ - lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt
336
+ - lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt
337
+ - lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt
338
+ - lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt
339
+ - lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt
340
+ - lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt
341
+ - lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt
342
+ - lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt
343
+ - lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt
344
+ - lib/itsi/server/config/known_paths/webservers-appservers/README.md
345
+ - lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt
346
+ - lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt
347
+ - lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt
348
+ - lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt
349
+ - lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt
350
+ - lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt
351
+ - lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt
352
+ - lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt
353
+ - lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt
354
+ - lib/itsi/server/config/known_paths/wellknown-rfc5785.txt
355
+ - lib/itsi/server/config/middleware.rb
356
+ - lib/itsi/server/config/middleware/_index.md
357
+ - lib/itsi/server/config/middleware/log_requests.md
358
+ - lib/itsi/server/config/middleware/log_requests.rb
359
+ - lib/itsi/server/config/option.rb
360
+ - lib/itsi/server/config/options/_index.md
361
+ - lib/itsi/server/config/options/fiber_scheduler.md
362
+ - lib/itsi/server/config/options/fiber_scheduler.rb
363
+ - lib/itsi/server/config/options/threads.md
364
+ - lib/itsi/server/config/options/threads.rb
365
+ - lib/itsi/server/config/options/workers.md
366
+ - lib/itsi/server/config/options/workers.rb
367
+ - lib/itsi/server/config/typed_struct.rb
232
368
  - lib/itsi/server/default_app/default_app.rb
233
369
  - lib/itsi/server/default_app/index.html
234
370
  - lib/itsi/server/default_config/Itsi-rackup.rb
data/CHANGELOG.md DELETED
@@ -1,10 +0,0 @@
1
- ---
2
- title: Changelog
3
- type: docs
4
- ---
5
-
6
- ## [Unreleased]
7
-
8
- ## [0.1.0] - 2025-02-28
9
-
10
- - Initial release