itsi 0.1.14 → 0.1.18
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 +124 -109
- data/Cargo.toml +6 -0
- data/crates/itsi_error/Cargo.toml +1 -0
- data/crates/itsi_error/src/lib.rs +100 -10
- data/crates/itsi_scheduler/src/itsi_scheduler.rs +1 -1
- data/crates/itsi_server/Cargo.toml +8 -10
- data/crates/itsi_server/src/default_responses/html/401.html +68 -0
- data/crates/itsi_server/src/default_responses/html/403.html +68 -0
- data/crates/itsi_server/src/default_responses/html/404.html +68 -0
- data/crates/itsi_server/src/default_responses/html/413.html +71 -0
- data/crates/itsi_server/src/default_responses/html/429.html +68 -0
- data/crates/itsi_server/src/default_responses/html/500.html +71 -0
- data/crates/itsi_server/src/default_responses/html/502.html +71 -0
- data/crates/itsi_server/src/default_responses/html/503.html +68 -0
- data/crates/itsi_server/src/default_responses/html/504.html +69 -0
- data/crates/itsi_server/src/default_responses/html/index.html +238 -0
- data/crates/itsi_server/src/default_responses/json/401.json +6 -0
- data/crates/itsi_server/src/default_responses/json/403.json +6 -0
- data/crates/itsi_server/src/default_responses/json/404.json +6 -0
- data/crates/itsi_server/src/default_responses/json/413.json +6 -0
- data/crates/itsi_server/src/default_responses/json/429.json +6 -0
- data/crates/itsi_server/src/default_responses/json/500.json +6 -0
- data/crates/itsi_server/src/default_responses/json/502.json +6 -0
- data/crates/itsi_server/src/default_responses/json/503.json +6 -0
- data/crates/itsi_server/src/default_responses/json/504.json +6 -0
- data/crates/itsi_server/src/default_responses/mod.rs +11 -0
- data/crates/itsi_server/src/lib.rs +58 -26
- data/crates/itsi_server/src/prelude.rs +2 -0
- data/crates/itsi_server/src/ruby_types/README.md +21 -0
- data/crates/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs +8 -6
- data/crates/itsi_server/src/ruby_types/itsi_grpc_call.rs +344 -0
- data/crates/itsi_server/src/ruby_types/{itsi_grpc_stream → itsi_grpc_response_stream}/mod.rs +121 -73
- data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +103 -40
- data/crates/itsi_server/src/ruby_types/itsi_http_response.rs +8 -5
- data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +4 -4
- data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +37 -17
- data/crates/itsi_server/src/ruby_types/itsi_server.rs +4 -3
- data/crates/itsi_server/src/ruby_types/mod.rs +6 -13
- data/crates/itsi_server/src/server/{bind.rs → binds/bind.rs} +23 -4
- data/crates/itsi_server/src/server/{listener.rs → binds/listener.rs} +24 -10
- data/crates/itsi_server/src/server/binds/mod.rs +4 -0
- data/crates/itsi_server/src/server/{tls.rs → binds/tls.rs} +9 -4
- data/crates/itsi_server/src/server/http_message_types.rs +97 -0
- data/crates/itsi_server/src/server/io_stream.rs +2 -1
- data/crates/itsi_server/src/server/middleware_stack/middleware.rs +28 -16
- data/crates/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +17 -8
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +47 -18
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +13 -9
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +50 -29
- data/crates/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +5 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +37 -48
- data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +25 -20
- data/crates/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +14 -7
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +190 -0
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +125 -95
- data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +9 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +1 -4
- data/crates/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +25 -19
- data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +4 -4
- data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +47 -0
- data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +9 -4
- data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +260 -62
- data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +29 -22
- data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +6 -6
- data/crates/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +6 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +4 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +51 -18
- data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +31 -13
- data/crates/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +55 -0
- data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +13 -8
- data/crates/itsi_server/src/server/middleware_stack/mod.rs +101 -69
- data/crates/itsi_server/src/server/mod.rs +3 -9
- data/crates/itsi_server/src/server/process_worker.rs +21 -3
- data/crates/itsi_server/src/server/request_job.rs +2 -2
- data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +8 -3
- data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +26 -26
- data/crates/itsi_server/src/server/signal.rs +24 -41
- data/crates/itsi_server/src/server/size_limited_incoming.rs +101 -0
- data/crates/itsi_server/src/server/thread_worker.rs +59 -28
- data/crates/itsi_server/src/services/itsi_http_service.rs +239 -0
- data/crates/itsi_server/src/services/mime_types.rs +1416 -0
- data/crates/itsi_server/src/services/mod.rs +6 -0
- data/crates/itsi_server/src/services/password_hasher.rs +83 -0
- data/crates/itsi_server/src/{server → services}/rate_limiter.rs +35 -31
- data/crates/itsi_server/src/{server → services}/static_file_server.rs +521 -181
- data/crates/itsi_tracing/src/lib.rs +145 -55
- data/{Itsi.rb → foo/Itsi.rb} +6 -9
- data/gems/scheduler/Cargo.lock +7 -0
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/scheduler/test/helpers/test_helper.rb +0 -1
- data/gems/scheduler/test/test_address_resolve.rb +0 -1
- data/gems/scheduler/test/test_network_io.rb +1 -1
- data/gems/scheduler/test/test_process_wait.rb +0 -1
- data/gems/server/Cargo.lock +124 -109
- data/gems/server/exe/itsi +65 -19
- data/gems/server/itsi-server.gemspec +4 -3
- data/gems/server/lib/itsi/http_request/response_status_shortcodes.rb +74 -0
- data/gems/server/lib/itsi/http_request.rb +116 -17
- data/gems/server/lib/itsi/http_response.rb +2 -0
- data/gems/server/lib/itsi/passfile.rb +109 -0
- data/gems/server/lib/itsi/server/config/dsl.rb +160 -101
- data/gems/server/lib/itsi/server/config.rb +58 -23
- data/gems/server/lib/itsi/server/default_app/default_app.rb +25 -29
- data/gems/server/lib/itsi/server/default_app/index.html +113 -89
- data/gems/server/lib/itsi/server/{Itsi.rb → default_config/Itsi-rackup.rb} +1 -1
- data/gems/server/lib/itsi/server/default_config/Itsi.rb +107 -0
- data/gems/server/lib/itsi/server/grpc/grpc_call.rb +246 -0
- data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +100 -0
- data/gems/server/lib/itsi/server/grpc/reflection/v1/reflection_pb.rb +26 -0
- data/gems/server/lib/itsi/server/grpc/reflection/v1/reflection_services_pb.rb +122 -0
- data/gems/server/lib/itsi/server/route_tester.rb +107 -0
- data/gems/server/lib/itsi/server/typed_handlers/param_parser.rb +200 -0
- data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +55 -0
- data/gems/server/lib/itsi/server/typed_handlers.rb +17 -0
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/lib/itsi/server.rb +82 -12
- data/gems/server/lib/ruby_lsp/itsi/addon.rb +111 -0
- data/gems/server/lib/shell_completions/completions.rb +26 -0
- data/gems/server/test/helpers/test_helper.rb +2 -1
- data/lib/itsi/version.rb +1 -1
- data/sandbox/README.md +5 -0
- data/sandbox/itsi_file/Gemfile +4 -2
- data/sandbox/itsi_file/Gemfile.lock +48 -6
- data/sandbox/itsi_file/Itsi.rb +326 -129
- data/sandbox/itsi_file/call.json +1 -0
- data/sandbox/itsi_file/echo_client/Gemfile +10 -0
- data/sandbox/itsi_file/echo_client/Gemfile.lock +27 -0
- data/sandbox/itsi_file/echo_client/README.md +95 -0
- data/sandbox/itsi_file/echo_client/echo_client.rb +164 -0
- data/sandbox/itsi_file/echo_client/gen_proto.sh +17 -0
- data/sandbox/itsi_file/echo_client/lib/echo_pb.rb +16 -0
- data/sandbox/itsi_file/echo_client/lib/echo_services_pb.rb +29 -0
- data/sandbox/itsi_file/echo_client/run_client.rb +64 -0
- data/sandbox/itsi_file/echo_client/test_compressions.sh +20 -0
- data/sandbox/itsi_file/echo_service_nonitsi/Gemfile +10 -0
- data/sandbox/itsi_file/echo_service_nonitsi/Gemfile.lock +79 -0
- data/sandbox/itsi_file/echo_service_nonitsi/echo.proto +26 -0
- data/sandbox/itsi_file/echo_service_nonitsi/echo_pb.rb +16 -0
- data/sandbox/itsi_file/echo_service_nonitsi/echo_services_pb.rb +29 -0
- data/sandbox/itsi_file/echo_service_nonitsi/server.rb +52 -0
- data/sandbox/itsi_sandbox_async/config.ru +0 -1
- data/sandbox/itsi_sandbox_rack/Gemfile.lock +2 -2
- data/sandbox/itsi_sandbox_rails/Gemfile +2 -2
- data/sandbox/itsi_sandbox_rails/Gemfile.lock +76 -2
- data/sandbox/itsi_sandbox_rails/app/controllers/home_controller.rb +15 -0
- data/sandbox/itsi_sandbox_rails/config/environments/development.rb +1 -0
- data/sandbox/itsi_sandbox_rails/config/environments/production.rb +1 -0
- data/sandbox/itsi_sandbox_rails/config/routes.rb +2 -0
- data/sandbox/itsi_sinatra/app.rb +0 -1
- data/sandbox/static_files/.env +1 -0
- data/sandbox/static_files/404.html +25 -0
- data/sandbox/static_files/_DSC0102.NEF.jpg +0 -0
- data/sandbox/static_files/about.html +68 -0
- data/sandbox/static_files/tiny.html +1 -0
- data/sandbox/static_files/writebook.zip +0 -0
- data/tasks.txt +28 -33
- metadata +87 -26
- data/crates/itsi_error/src/from.rs +0 -68
- data/crates/itsi_server/src/ruby_types/itsi_grpc_request.rs +0 -147
- data/crates/itsi_server/src/ruby_types/itsi_grpc_response.rs +0 -19
- data/crates/itsi_server/src/server/itsi_service.rs +0 -172
- data/crates/itsi_server/src/server/middleware_stack/middlewares/grpc_service.rs +0 -72
- data/crates/itsi_server/src/server/types.rs +0 -43
- data/gems/server/lib/itsi/server/grpc_interface.rb +0 -213
- data/sandbox/itsi_file/public/assets/index.html +0 -1
- /data/crates/itsi_server/src/server/{bind_protocol.rs → binds/bind_protocol.rs} +0 -0
- /data/crates/itsi_server/src/server/{tls → binds/tls}/locked_dir_cache.rs +0 -0
- /data/crates/itsi_server/src/{server → services}/cache_store.rs +0 -0
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../../gems/scheduler
|
3
3
|
specs:
|
4
|
-
itsi-scheduler (0.1.
|
4
|
+
itsi-scheduler (0.1.17)
|
5
5
|
rb_sys (~> 0.9.91)
|
6
6
|
|
7
7
|
PATH
|
8
8
|
remote: ../../gems/server
|
9
9
|
specs:
|
10
|
-
itsi-server (0.1.
|
10
|
+
itsi-server (0.1.17)
|
11
11
|
rack (>= 1.6)
|
12
12
|
rb_sys (~> 0.9.91)
|
13
13
|
|
@@ -88,6 +88,36 @@ GEM
|
|
88
88
|
addressable (2.8.7)
|
89
89
|
public_suffix (>= 2.0.2, < 7.0)
|
90
90
|
ast (2.4.2)
|
91
|
+
async (2.23.1)
|
92
|
+
console (~> 1.29)
|
93
|
+
fiber-annotation
|
94
|
+
io-event (~> 1.9)
|
95
|
+
metrics (~> 0.12)
|
96
|
+
traces (~> 0.15)
|
97
|
+
async-container (0.24.0)
|
98
|
+
async (~> 2.22)
|
99
|
+
async-container-supervisor (0.5.1)
|
100
|
+
async-container (~> 0.22)
|
101
|
+
async-service
|
102
|
+
io-endpoint
|
103
|
+
memory-leak (~> 0.5)
|
104
|
+
async-http (0.87.0)
|
105
|
+
async (>= 2.10.2)
|
106
|
+
async-pool (~> 0.9)
|
107
|
+
io-endpoint (~> 0.14)
|
108
|
+
io-stream (~> 0.6)
|
109
|
+
metrics (~> 0.12)
|
110
|
+
protocol-http (~> 0.49)
|
111
|
+
protocol-http1 (~> 0.30)
|
112
|
+
protocol-http2 (~> 0.22)
|
113
|
+
traces (~> 0.10)
|
114
|
+
async-http-cache (0.4.5)
|
115
|
+
async-http (~> 0.56)
|
116
|
+
async-pool (0.10.3)
|
117
|
+
async (>= 1.25)
|
118
|
+
async-service (0.13.0)
|
119
|
+
async
|
120
|
+
async-container (~> 0.16)
|
91
121
|
base64 (0.2.0)
|
92
122
|
benchmark (0.4.0)
|
93
123
|
bigdecimal (3.1.9)
|
@@ -108,6 +138,10 @@ GEM
|
|
108
138
|
xpath (~> 3.2)
|
109
139
|
concurrent-ruby (1.3.5)
|
110
140
|
connection_pool (2.5.0)
|
141
|
+
console (1.30.2)
|
142
|
+
fiber-annotation
|
143
|
+
fiber-local (~> 1.1)
|
144
|
+
json
|
111
145
|
crass (1.0.6)
|
112
146
|
date (3.4.1)
|
113
147
|
debug (1.10.0)
|
@@ -115,6 +149,23 @@ GEM
|
|
115
149
|
reline (>= 0.3.8)
|
116
150
|
drb (2.2.1)
|
117
151
|
erubi (1.13.1)
|
152
|
+
falcon (0.51.1)
|
153
|
+
async
|
154
|
+
async-container (~> 0.20)
|
155
|
+
async-container-supervisor (~> 0.5.0)
|
156
|
+
async-http (~> 0.75)
|
157
|
+
async-http-cache (~> 0.4)
|
158
|
+
async-service (~> 0.10)
|
159
|
+
bundler
|
160
|
+
localhost (~> 1.1)
|
161
|
+
openssl (~> 3.0)
|
162
|
+
protocol-http (~> 0.31)
|
163
|
+
protocol-rack (~> 0.7)
|
164
|
+
samovar (~> 2.3)
|
165
|
+
fiber-annotation (0.2.0)
|
166
|
+
fiber-local (1.1.0)
|
167
|
+
fiber-storage
|
168
|
+
fiber-storage (1.0.0)
|
118
169
|
globalid (1.2.1)
|
119
170
|
activesupport (>= 6.1)
|
120
171
|
i18n (1.14.7)
|
@@ -124,6 +175,9 @@ GEM
|
|
124
175
|
activesupport (>= 6.0.0)
|
125
176
|
railties (>= 6.0.0)
|
126
177
|
io-console (0.8.0)
|
178
|
+
io-endpoint (0.15.2)
|
179
|
+
io-event (1.10.0)
|
180
|
+
io-stream (0.6.1)
|
127
181
|
iodine (0.7.58)
|
128
182
|
irb (1.15.1)
|
129
183
|
pp (>= 0.6.0)
|
@@ -135,6 +189,7 @@ GEM
|
|
135
189
|
json (2.10.2)
|
136
190
|
language_server-protocol (3.17.0.4)
|
137
191
|
lint_roller (1.1.0)
|
192
|
+
localhost (1.3.1)
|
138
193
|
logger (1.6.6)
|
139
194
|
loofah (2.24.0)
|
140
195
|
crass (~> 1.0.2)
|
@@ -144,8 +199,11 @@ GEM
|
|
144
199
|
net-imap
|
145
200
|
net-pop
|
146
201
|
net-smtp
|
202
|
+
mapping (1.1.1)
|
147
203
|
marcel (1.0.4)
|
148
204
|
matrix (0.4.2)
|
205
|
+
memory-leak (0.5.2)
|
206
|
+
metrics (0.12.2)
|
149
207
|
mini_mime (1.1.5)
|
150
208
|
minitest (5.25.5)
|
151
209
|
msgpack (1.8.0)
|
@@ -175,6 +233,7 @@ GEM
|
|
175
233
|
racc (~> 1.4)
|
176
234
|
nokogiri (1.18.4-x86_64-linux-musl)
|
177
235
|
racc (~> 1.4)
|
236
|
+
openssl (3.3.0)
|
178
237
|
parallel (1.26.3)
|
179
238
|
parser (3.3.7.1)
|
180
239
|
ast (~> 2.4.1)
|
@@ -183,6 +242,16 @@ GEM
|
|
183
242
|
pp (0.6.2)
|
184
243
|
prettyprint
|
185
244
|
prettyprint (0.2.0)
|
245
|
+
protocol-hpack (1.5.1)
|
246
|
+
protocol-http (0.49.0)
|
247
|
+
protocol-http1 (0.30.0)
|
248
|
+
protocol-http (~> 0.22)
|
249
|
+
protocol-http2 (0.22.1)
|
250
|
+
protocol-hpack (~> 1.4)
|
251
|
+
protocol-http (~> 0.47)
|
252
|
+
protocol-rack (0.11.2)
|
253
|
+
protocol-http (~> 0.43)
|
254
|
+
rack (>= 1.0)
|
186
255
|
psych (5.2.3)
|
187
256
|
date
|
188
257
|
stringio
|
@@ -267,6 +336,9 @@ GEM
|
|
267
336
|
rubocop-rails (>= 2.30)
|
268
337
|
ruby-progressbar (1.13.0)
|
269
338
|
rubyzip (2.4.1)
|
339
|
+
samovar (2.3.0)
|
340
|
+
console (~> 1.0)
|
341
|
+
mapping (~> 1.0)
|
270
342
|
securerandom (0.4.1)
|
271
343
|
selenium-webdriver (4.29.1)
|
272
344
|
base64 (~> 0.2)
|
@@ -294,6 +366,7 @@ GEM
|
|
294
366
|
stringio (3.1.5)
|
295
367
|
thor (1.3.2)
|
296
368
|
timeout (0.4.3)
|
369
|
+
traces (0.15.2)
|
297
370
|
turbo-rails (2.0.13)
|
298
371
|
actionpack (>= 7.1.0)
|
299
372
|
railties (>= 7.1.0)
|
@@ -334,6 +407,7 @@ DEPENDENCIES
|
|
334
407
|
brakeman
|
335
408
|
capybara
|
336
409
|
debug
|
410
|
+
falcon
|
337
411
|
importmap-rails
|
338
412
|
iodine
|
339
413
|
itsi-scheduler!
|
@@ -1,10 +1,25 @@
|
|
1
1
|
require "net/http"
|
2
|
+
require 'debug'
|
2
3
|
|
3
4
|
class HomeController < ApplicationController
|
4
5
|
def index
|
5
6
|
render json: { message: "Hello, World!" }
|
6
7
|
end
|
7
8
|
|
9
|
+
def do_send_file
|
10
|
+
file_path = Rails.root.join('app', 'controllers', 'home_controller.rb')
|
11
|
+
if File.exist?(file_path)
|
12
|
+
send_file file_path, type: 'text/plain', disposition: 'attachment'
|
13
|
+
else
|
14
|
+
render json: { error: 'File not found' }, status: :not_found
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def do_send_data
|
19
|
+
data = "This is some sample data to send."
|
20
|
+
send_data data, filename: 'sample.txt', type: 'text/plain', disposition: 'attachment'
|
21
|
+
end
|
22
|
+
|
8
23
|
def full_hijack
|
9
24
|
io = request.env['rack.hijack'].call
|
10
25
|
io.write("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n")
|
@@ -36,6 +36,7 @@ Rails.application.configure do
|
|
36
36
|
|
37
37
|
# Don't care if the mailer can't send.
|
38
38
|
config.action_mailer.raise_delivery_errors = false
|
39
|
+
config.action_dispatch.x_sendfile_header = "X-Sendfile"
|
39
40
|
|
40
41
|
# Disable caching for Action Mailer templates even if Action Controller
|
41
42
|
# caching is enabled.
|
@@ -35,6 +35,7 @@ Rails.application.configure do
|
|
35
35
|
# Specifies the header that your server uses for sending files.
|
36
36
|
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache
|
37
37
|
# config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX
|
38
|
+
config.action_dispatch.x_sendfile_header = "X-Sendfile"
|
38
39
|
|
39
40
|
# Store uploaded files on the local file system (see config/storage.yml for options).
|
40
41
|
config.active_storage.service = :local
|
@@ -13,6 +13,8 @@ Rails.application.routes.draw do
|
|
13
13
|
root "home#index"
|
14
14
|
get "io_party" => "home#io_party", as: :io_party
|
15
15
|
get "chunked" => "home#chunked_encoding", as: :chunked_encoding
|
16
|
+
get "send_data" => "home#do_send_data", as: :send_data
|
17
|
+
get "send_file" => "home#do_send_file", as: :send_file
|
16
18
|
get "full_hijack" => "home#full_hijack", as: :full_hijack
|
17
19
|
get "stream" => "live#stream", as: :live_stream
|
18
20
|
get "sse" => "live#sse", as: :sse
|
data/sandbox/itsi_sinatra/app.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
ALL MY SECRETS ARE HERE!!
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6
|
+
<title>Hello World</title>
|
7
|
+
<style>
|
8
|
+
body {
|
9
|
+
display: flex;
|
10
|
+
justify-content: center;
|
11
|
+
align-items: center;
|
12
|
+
height: 100vh;
|
13
|
+
margin: 0;
|
14
|
+
font-family: Arial, sans-serif;
|
15
|
+
background-color: #f0f0f0;
|
16
|
+
}
|
17
|
+
h1 {
|
18
|
+
color: #333;
|
19
|
+
}
|
20
|
+
</style>
|
21
|
+
</head>
|
22
|
+
<body>
|
23
|
+
Not here!
|
24
|
+
</body>
|
25
|
+
</html>
|
Binary file
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
6
|
+
<title>Error – Page Not Found</title>
|
7
|
+
<style>
|
8
|
+
:root {
|
9
|
+
--bg-color: #f0f2f5;
|
10
|
+
--text-color: #333;
|
11
|
+
--accent-color: #0052cc;
|
12
|
+
--link-color: #0052cc;
|
13
|
+
}
|
14
|
+
body {
|
15
|
+
margin: 0;
|
16
|
+
font-family: "Helvetica Neue", Arial, sans-serif;
|
17
|
+
background: var(--bg-color);
|
18
|
+
color: var(--text-color);
|
19
|
+
display: flex;
|
20
|
+
align-items: center;
|
21
|
+
justify-content: center;
|
22
|
+
min-height: 100vh;
|
23
|
+
padding: 2rem;
|
24
|
+
}
|
25
|
+
.error-container {
|
26
|
+
text-align: center;
|
27
|
+
max-width: 800px;
|
28
|
+
width: 100%;
|
29
|
+
}
|
30
|
+
h1 {
|
31
|
+
font-size: 5rem;
|
32
|
+
font-weight: 300;
|
33
|
+
margin-bottom: 0.5rem;
|
34
|
+
}
|
35
|
+
p {
|
36
|
+
font-size: 1.5rem;
|
37
|
+
line-height: 1.6;
|
38
|
+
margin-bottom: 2rem;
|
39
|
+
}
|
40
|
+
a {
|
41
|
+
font-size: 1rem;
|
42
|
+
text-decoration: none;
|
43
|
+
color: var(--link-color);
|
44
|
+
border-bottom: 1px solid transparent;
|
45
|
+
transition: border-color 0.2s ease-in-out;
|
46
|
+
}
|
47
|
+
a:hover {
|
48
|
+
border-color: var(--link-color);
|
49
|
+
}
|
50
|
+
@media (max-width: 480px) {
|
51
|
+
h1 {
|
52
|
+
font-size: 3.5rem;
|
53
|
+
}
|
54
|
+
p {
|
55
|
+
font-size: 1.2rem;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
</style>
|
59
|
+
</head>
|
60
|
+
<body>
|
61
|
+
<div class="error-container">
|
62
|
+
<h1>404</h1>
|
63
|
+
<p>We’re sorry, but we couldn’t find the page you were looking for.</p>
|
64
|
+
<p><a href="/">Return Home</a></p>
|
65
|
+
<p><a href="javascript:history.back()">Go Back</a></p>
|
66
|
+
</div>
|
67
|
+
</body>
|
68
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
Hello World
|
Binary file
|
data/tasks.txt
CHANGED
@@ -1,40 +1,30 @@
|
|
1
|
-
|
2
|
-
-
|
3
|
-
-
|
4
|
-
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
-
|
10
|
-
-
|
1
|
+
-- Stretch goals:
|
2
|
+
- Single acceptor
|
3
|
+
- H3
|
4
|
+
- OpenAPI gen
|
5
|
+
|
6
|
+
Feature complete. Polish and Release (At Lake):
|
7
|
+
- Establish pattern for separate files for dsl feature, accumulated errors, ruby-dsl and "Did you mean" function.
|
8
|
+
- Always do dry-run before reloading app.
|
9
|
+
- More elegant route printing (middleware)
|
10
|
+
- Fix default config (make sane choices)
|
11
11
|
|
12
|
-
Polish and Release (At Lake):
|
13
|
-
-- Autoreload sugar
|
14
|
-
-- Optimize gRPC and Hash creation for Rack
|
15
|
-
-- Print routes
|
16
|
-
-- Match routes
|
17
|
-
-- Offer password hash generation, and load from files for basic auth, api key, jwt.
|
18
|
-
-- Max body size (and potentially other safety timeouts)
|
19
|
-
-- Better internal errors (Make clear when specific middleware fails)
|
20
|
-
-- Fix server shutdown tests (Test on multi-thread)
|
21
12
|
-- Feature breakdown. For each feature make sure we have
|
22
|
-
---
|
23
|
-
---
|
13
|
+
--- Clean Code
|
14
|
+
--- Ultra robust config, with sane and safe defaults.
|
15
|
+
--- Complete Documentation (Readme + Blog)
|
24
16
|
--- Tests.
|
25
17
|
--- Debug Logging
|
26
18
|
--- Parameters for everything
|
27
19
|
--- No unwrap
|
28
|
-
|
29
|
-
-- Script name comes from location in hierarchy instead of params.
|
30
|
-
-- Request convenience functions (body JSON, body form-encoded)
|
31
|
-
-- Add notes on: PGGSSENCMODE="disable"
|
20
|
+
--- Beautiful LSP and did you mean integration
|
32
21
|
|
33
22
|
- Feature List:
|
34
23
|
-- HTTP
|
35
24
|
-- HTTP2
|
36
25
|
-- TLS
|
37
26
|
-- Websockets
|
27
|
+
-- Headers (Replace is equal to remove plus append)
|
38
28
|
-- Hijack
|
39
29
|
-- Callable
|
40
30
|
-- Streaming Bodies
|
@@ -54,7 +44,7 @@ Polish and Release (At Lake):
|
|
54
44
|
-- Rackup
|
55
45
|
-- Rack inline
|
56
46
|
-- Static assets
|
57
|
-
-- Redirect
|
47
|
+
-- Redirect (HTTP to HTTPS!)
|
58
48
|
-- Logging
|
59
49
|
-- Cluster
|
60
50
|
-- Single
|
@@ -62,16 +52,21 @@ Polish and Release (At Lake):
|
|
62
52
|
-- Stream body
|
63
53
|
-- Thread high/low
|
64
54
|
-- Unix Sockets
|
55
|
+
-- Uneven request distribution (Retry central acceptor, core affinity)
|
56
|
+
-- Mini apps, one-file sites.
|
57
|
+
-- Lsp and Did you mean
|
58
|
+
-- Author Final default Itsi-file
|
59
|
+
-- Add notes on: PGGSSENCMODE="disable" and OBJC_DISABLE_INITIALIZE_FORK_SAFETY=
|
65
60
|
|
66
61
|
Later:
|
62
|
+
- OTel
|
63
|
+
- Even faster Hash creation for Rack
|
64
|
+
- Image resizer
|
67
65
|
- First class Rackless Websockets
|
68
|
-
- Implement
|
69
|
-
- Print out warning if we can detect a location block will never be hit.
|
70
|
-
-
|
71
|
-
- Built in dashboard + Stats
|
72
|
-
- Support Request timeout in Fiber scheduler mode
|
66
|
+
- Implement better Request timeouts (non-fiber mode. Kill stuck threads. Default to nil)
|
67
|
+
- Print out warning if we can detect that a location block will never be hit.
|
68
|
+
- Built in obs Dashboard + Stats
|
73
69
|
- Support UDP
|
74
70
|
- Support unix socket proxy
|
75
|
-
-- Hunt down sporradic bad file desc during tests
|
76
71
|
-- WASM pluggable middleware
|
77
|
-
--
|
72
|
+
-- gRPC proxying
|