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
data/gems/server/Cargo.lock
CHANGED
@@ -56,12 +56,30 @@ dependencies = [
|
|
56
56
|
"libc",
|
57
57
|
]
|
58
58
|
|
59
|
+
[[package]]
|
60
|
+
name = "anyhow"
|
61
|
+
version = "1.0.97"
|
62
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
63
|
+
checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
|
64
|
+
|
59
65
|
[[package]]
|
60
66
|
name = "arc-swap"
|
61
67
|
version = "1.7.1"
|
62
68
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
63
69
|
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
|
64
70
|
|
71
|
+
[[package]]
|
72
|
+
name = "argon2"
|
73
|
+
version = "0.5.3"
|
74
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
75
|
+
checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072"
|
76
|
+
dependencies = [
|
77
|
+
"base64ct",
|
78
|
+
"blake2",
|
79
|
+
"cpufeatures",
|
80
|
+
"password-hash",
|
81
|
+
]
|
82
|
+
|
65
83
|
[[package]]
|
66
84
|
name = "asn1-rs"
|
67
85
|
version = "0.6.2"
|
@@ -122,6 +140,7 @@ dependencies = [
|
|
122
140
|
"brotli",
|
123
141
|
"flate2",
|
124
142
|
"futures-core",
|
143
|
+
"futures-io",
|
125
144
|
"memchr",
|
126
145
|
"pin-project-lite",
|
127
146
|
"tokio",
|
@@ -218,6 +237,25 @@ version = "0.22.1"
|
|
218
237
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
219
238
|
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
220
239
|
|
240
|
+
[[package]]
|
241
|
+
name = "base64ct"
|
242
|
+
version = "1.7.3"
|
243
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
244
|
+
checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3"
|
245
|
+
|
246
|
+
[[package]]
|
247
|
+
name = "bcrypt"
|
248
|
+
version = "0.17.0"
|
249
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
250
|
+
checksum = "92758ad6077e4c76a6cadbce5005f666df70d4f13b19976b1a8062eef880040f"
|
251
|
+
dependencies = [
|
252
|
+
"base64",
|
253
|
+
"blowfish",
|
254
|
+
"getrandom 0.3.1",
|
255
|
+
"subtle",
|
256
|
+
"zeroize",
|
257
|
+
]
|
258
|
+
|
221
259
|
[[package]]
|
222
260
|
name = "bindgen"
|
223
261
|
version = "0.69.5"
|
@@ -253,6 +291,15 @@ version = "2.8.0"
|
|
253
291
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
254
292
|
checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
|
255
293
|
|
294
|
+
[[package]]
|
295
|
+
name = "blake2"
|
296
|
+
version = "0.10.6"
|
297
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
298
|
+
checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
|
299
|
+
dependencies = [
|
300
|
+
"digest",
|
301
|
+
]
|
302
|
+
|
256
303
|
[[package]]
|
257
304
|
name = "block-buffer"
|
258
305
|
version = "0.10.4"
|
@@ -262,6 +309,16 @@ dependencies = [
|
|
262
309
|
"generic-array",
|
263
310
|
]
|
264
311
|
|
312
|
+
[[package]]
|
313
|
+
name = "blowfish"
|
314
|
+
version = "0.9.1"
|
315
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
316
|
+
checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
|
317
|
+
dependencies = [
|
318
|
+
"byteorder",
|
319
|
+
"cipher",
|
320
|
+
]
|
321
|
+
|
265
322
|
[[package]]
|
266
323
|
name = "brotli"
|
267
324
|
version = "7.0.0"
|
@@ -299,6 +356,12 @@ version = "3.17.0"
|
|
299
356
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
300
357
|
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
|
301
358
|
|
359
|
+
[[package]]
|
360
|
+
name = "byteorder"
|
361
|
+
version = "1.5.0"
|
362
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
363
|
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
364
|
+
|
302
365
|
[[package]]
|
303
366
|
name = "bytes"
|
304
367
|
version = "1.10.1"
|
@@ -351,6 +414,16 @@ dependencies = [
|
|
351
414
|
"windows-link",
|
352
415
|
]
|
353
416
|
|
417
|
+
[[package]]
|
418
|
+
name = "cipher"
|
419
|
+
version = "0.4.4"
|
420
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
421
|
+
checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
|
422
|
+
dependencies = [
|
423
|
+
"crypto-common",
|
424
|
+
"inout",
|
425
|
+
]
|
426
|
+
|
354
427
|
[[package]]
|
355
428
|
name = "clang-sys"
|
356
429
|
version = "1.8.1"
|
@@ -420,6 +493,17 @@ version = "0.8.7"
|
|
420
493
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
421
494
|
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
|
422
495
|
|
496
|
+
[[package]]
|
497
|
+
name = "core_affinity"
|
498
|
+
version = "0.8.3"
|
499
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
500
|
+
checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342"
|
501
|
+
dependencies = [
|
502
|
+
"libc",
|
503
|
+
"num_cpus",
|
504
|
+
"winapi",
|
505
|
+
]
|
506
|
+
|
423
507
|
[[package]]
|
424
508
|
name = "cpufeatures"
|
425
509
|
version = "0.2.17"
|
@@ -438,19 +522,6 @@ dependencies = [
|
|
438
522
|
"cfg-if",
|
439
523
|
]
|
440
524
|
|
441
|
-
[[package]]
|
442
|
-
name = "crossbeam"
|
443
|
-
version = "0.8.4"
|
444
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
445
|
-
checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8"
|
446
|
-
dependencies = [
|
447
|
-
"crossbeam-channel",
|
448
|
-
"crossbeam-deque",
|
449
|
-
"crossbeam-epoch",
|
450
|
-
"crossbeam-queue",
|
451
|
-
"crossbeam-utils",
|
452
|
-
]
|
453
|
-
|
454
525
|
[[package]]
|
455
526
|
name = "crossbeam-channel"
|
456
527
|
version = "0.5.14"
|
@@ -479,15 +550,6 @@ dependencies = [
|
|
479
550
|
"crossbeam-utils",
|
480
551
|
]
|
481
552
|
|
482
|
-
[[package]]
|
483
|
-
name = "crossbeam-queue"
|
484
|
-
version = "0.3.12"
|
485
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
486
|
-
checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
|
487
|
-
dependencies = [
|
488
|
-
"crossbeam-utils",
|
489
|
-
]
|
490
|
-
|
491
553
|
[[package]]
|
492
554
|
name = "crossbeam-utils"
|
493
555
|
version = "0.8.21"
|
@@ -504,20 +566,6 @@ dependencies = [
|
|
504
566
|
"typenum",
|
505
567
|
]
|
506
568
|
|
507
|
-
[[package]]
|
508
|
-
name = "dashmap"
|
509
|
-
version = "6.1.0"
|
510
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
511
|
-
checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"
|
512
|
-
dependencies = [
|
513
|
-
"cfg-if",
|
514
|
-
"crossbeam-utils",
|
515
|
-
"hashbrown 0.14.5",
|
516
|
-
"lock_api",
|
517
|
-
"once_cell",
|
518
|
-
"parking_lot_core",
|
519
|
-
]
|
520
|
-
|
521
569
|
[[package]]
|
522
570
|
name = "data-encoding"
|
523
571
|
version = "2.8.0"
|
@@ -933,12 +981,6 @@ dependencies = [
|
|
933
981
|
"tracing",
|
934
982
|
]
|
935
983
|
|
936
|
-
[[package]]
|
937
|
-
name = "hashbrown"
|
938
|
-
version = "0.14.5"
|
939
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
940
|
-
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
941
|
-
|
942
984
|
[[package]]
|
943
985
|
name = "hashbrown"
|
944
986
|
version = "0.15.2"
|
@@ -960,15 +1002,6 @@ version = "0.3.9"
|
|
960
1002
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
961
1003
|
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
|
962
1004
|
|
963
|
-
[[package]]
|
964
|
-
name = "hmac"
|
965
|
-
version = "0.12.1"
|
966
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
967
|
-
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
|
968
|
-
dependencies = [
|
969
|
-
"digest",
|
970
|
-
]
|
971
|
-
|
972
1005
|
[[package]]
|
973
1006
|
name = "home"
|
974
1007
|
version = "0.5.11"
|
@@ -1012,12 +1045,6 @@ dependencies = [
|
|
1012
1045
|
"pin-project-lite",
|
1013
1046
|
]
|
1014
1047
|
|
1015
|
-
[[package]]
|
1016
|
-
name = "http-range"
|
1017
|
-
version = "0.1.5"
|
1018
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1019
|
-
checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
|
1020
|
-
|
1021
1048
|
[[package]]
|
1022
1049
|
name = "httparse"
|
1023
1050
|
version = "1.10.1"
|
@@ -1069,25 +1096,6 @@ dependencies = [
|
|
1069
1096
|
"webpki-roots",
|
1070
1097
|
]
|
1071
1098
|
|
1072
|
-
[[package]]
|
1073
|
-
name = "hyper-staticfile"
|
1074
|
-
version = "0.10.1"
|
1075
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1076
|
-
checksum = "bc4bce64c32578957926e75f832032f81ebb30bcee74f86c5848b13a69e547eb"
|
1077
|
-
dependencies = [
|
1078
|
-
"futures-util",
|
1079
|
-
"http",
|
1080
|
-
"http-range",
|
1081
|
-
"httpdate",
|
1082
|
-
"hyper",
|
1083
|
-
"mime_guess",
|
1084
|
-
"percent-encoding",
|
1085
|
-
"rand 0.8.5",
|
1086
|
-
"tokio",
|
1087
|
-
"url",
|
1088
|
-
"winapi",
|
1089
|
-
]
|
1090
|
-
|
1091
1099
|
[[package]]
|
1092
1100
|
name = "hyper-tls"
|
1093
1101
|
version = "0.6.0"
|
@@ -1292,7 +1300,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1292
1300
|
checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
|
1293
1301
|
dependencies = [
|
1294
1302
|
"equivalent",
|
1295
|
-
"hashbrown
|
1303
|
+
"hashbrown",
|
1296
1304
|
]
|
1297
1305
|
|
1298
1306
|
[[package]]
|
@@ -1315,6 +1323,15 @@ dependencies = [
|
|
1315
1323
|
"libc",
|
1316
1324
|
]
|
1317
1325
|
|
1326
|
+
[[package]]
|
1327
|
+
name = "inout"
|
1328
|
+
version = "0.1.4"
|
1329
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1330
|
+
checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
|
1331
|
+
dependencies = [
|
1332
|
+
"generic-array",
|
1333
|
+
]
|
1334
|
+
|
1318
1335
|
[[package]]
|
1319
1336
|
name = "ipnet"
|
1320
1337
|
version = "2.11.0"
|
@@ -1338,30 +1355,28 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
|
|
1338
1355
|
|
1339
1356
|
[[package]]
|
1340
1357
|
name = "itsi-server"
|
1341
|
-
version = "0.1.
|
1358
|
+
version = "0.1.18"
|
1342
1359
|
dependencies = [
|
1360
|
+
"argon2",
|
1343
1361
|
"async-channel",
|
1344
1362
|
"async-compression",
|
1345
1363
|
"async-trait",
|
1346
1364
|
"base64",
|
1365
|
+
"bcrypt",
|
1347
1366
|
"bytes",
|
1348
1367
|
"chrono",
|
1349
|
-
"
|
1350
|
-
"dashmap",
|
1368
|
+
"core_affinity",
|
1351
1369
|
"derive_more",
|
1352
1370
|
"dirs",
|
1353
1371
|
"either",
|
1354
|
-
"fnv",
|
1355
1372
|
"fs2",
|
1356
1373
|
"futures",
|
1357
1374
|
"globset",
|
1358
|
-
"hmac",
|
1359
1375
|
"http",
|
1360
1376
|
"http-body-util",
|
1361
1377
|
"httparse",
|
1362
1378
|
"httpdate",
|
1363
1379
|
"hyper",
|
1364
|
-
"hyper-staticfile",
|
1365
1380
|
"hyper-util",
|
1366
1381
|
"itsi_error",
|
1367
1382
|
"itsi_rb_helpers",
|
@@ -1374,20 +1389,19 @@ dependencies = [
|
|
1374
1389
|
"notify",
|
1375
1390
|
"num_cpus",
|
1376
1391
|
"parking_lot",
|
1392
|
+
"percent-encoding",
|
1377
1393
|
"pin-project",
|
1378
1394
|
"rand 0.9.0",
|
1379
|
-
"rb-sys",
|
1380
1395
|
"rcgen",
|
1381
1396
|
"redis",
|
1382
1397
|
"regex",
|
1383
1398
|
"reqwest",
|
1384
|
-
"ring",
|
1385
|
-
"route-recognizer",
|
1386
1399
|
"rustls",
|
1387
1400
|
"rustls-pemfile",
|
1388
1401
|
"serde",
|
1389
1402
|
"serde_json",
|
1390
1403
|
"serde_magnus",
|
1404
|
+
"sha-crypt",
|
1391
1405
|
"sha2",
|
1392
1406
|
"socket2",
|
1393
1407
|
"sysinfo",
|
@@ -1399,13 +1413,13 @@ dependencies = [
|
|
1399
1413
|
"tokio-util",
|
1400
1414
|
"tracing",
|
1401
1415
|
"url",
|
1402
|
-
"uuid",
|
1403
1416
|
]
|
1404
1417
|
|
1405
1418
|
[[package]]
|
1406
1419
|
name = "itsi_error"
|
1407
1420
|
version = "0.1.0"
|
1408
1421
|
dependencies = [
|
1422
|
+
"anyhow",
|
1409
1423
|
"httparse",
|
1410
1424
|
"magnus",
|
1411
1425
|
"nix",
|
@@ -1635,16 +1649,6 @@ version = "0.3.17"
|
|
1635
1649
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1636
1650
|
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
1637
1651
|
|
1638
|
-
[[package]]
|
1639
|
-
name = "mime_guess"
|
1640
|
-
version = "2.0.5"
|
1641
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1642
|
-
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
|
1643
|
-
dependencies = [
|
1644
|
-
"mime",
|
1645
|
-
"unicase",
|
1646
|
-
]
|
1647
|
-
|
1648
1652
|
[[package]]
|
1649
1653
|
name = "minimal-lexical"
|
1650
1654
|
version = "0.2.1"
|
@@ -1928,6 +1932,17 @@ dependencies = [
|
|
1928
1932
|
"windows-targets 0.52.6",
|
1929
1933
|
]
|
1930
1934
|
|
1935
|
+
[[package]]
|
1936
|
+
name = "password-hash"
|
1937
|
+
version = "0.5.0"
|
1938
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1939
|
+
checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
|
1940
|
+
dependencies = [
|
1941
|
+
"base64ct",
|
1942
|
+
"rand_core 0.6.4",
|
1943
|
+
"subtle",
|
1944
|
+
]
|
1945
|
+
|
1931
1946
|
[[package]]
|
1932
1947
|
name = "paste"
|
1933
1948
|
version = "1.0.15"
|
@@ -2381,12 +2396,6 @@ dependencies = [
|
|
2381
2396
|
"windows-sys 0.52.0",
|
2382
2397
|
]
|
2383
2398
|
|
2384
|
-
[[package]]
|
2385
|
-
name = "route-recognizer"
|
2386
|
-
version = "0.3.1"
|
2387
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2388
|
-
checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746"
|
2389
|
-
|
2390
2399
|
[[package]]
|
2391
2400
|
name = "rustc-demangle"
|
2392
2401
|
version = "0.1.24"
|
@@ -2661,6 +2670,18 @@ dependencies = [
|
|
2661
2670
|
"serde",
|
2662
2671
|
]
|
2663
2672
|
|
2673
|
+
[[package]]
|
2674
|
+
name = "sha-crypt"
|
2675
|
+
version = "0.5.0"
|
2676
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2677
|
+
checksum = "88e79009728d8311d42d754f2f319a975f9e38f156fd5e422d2451486c78b286"
|
2678
|
+
dependencies = [
|
2679
|
+
"base64ct",
|
2680
|
+
"rand 0.8.5",
|
2681
|
+
"sha2",
|
2682
|
+
"subtle",
|
2683
|
+
]
|
2684
|
+
|
2664
2685
|
[[package]]
|
2665
2686
|
name = "sha1_smol"
|
2666
2687
|
version = "1.0.1"
|
@@ -3181,12 +3202,6 @@ version = "1.18.0"
|
|
3181
3202
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3182
3203
|
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
|
3183
3204
|
|
3184
|
-
[[package]]
|
3185
|
-
name = "unicase"
|
3186
|
-
version = "2.8.1"
|
3187
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3188
|
-
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
|
3189
|
-
|
3190
3205
|
[[package]]
|
3191
3206
|
name = "unicode-ident"
|
3192
3207
|
version = "1.0.17"
|
data/gems/server/exe/itsi
CHANGED
@@ -4,28 +4,48 @@
|
|
4
4
|
require "itsi/server"
|
5
5
|
require "optparse"
|
6
6
|
|
7
|
-
|
7
|
+
|
8
|
+
COMMANDS = {
|
9
|
+
"init" => "Initialize a new Itsi.rb server configuration file",
|
10
|
+
"status" => "Show the status of the server",
|
11
|
+
"start" => "Start the Isti server",
|
12
|
+
"serve" => "Start the Isti server",
|
13
|
+
"stop" => "Stop the server",
|
14
|
+
"reload" => "Reload the server",
|
15
|
+
"restart" => "Restart the server",
|
16
|
+
"add_worker" => "Add a new worker to the server cluster",
|
17
|
+
"remove_worker" => "Remove a worker from the server cluster",
|
18
|
+
"routes" => "Print the routes of the server",
|
19
|
+
"passfile" => "Manage hashed users and passwords in a passfile (like .htpasswd). [add, remove, list]",
|
20
|
+
"test_route" => "Test which route a request will be routed to",
|
21
|
+
"static" => "Serve static assets in the given directory"
|
22
|
+
}
|
23
|
+
|
24
|
+
Itsi::Server::Config.prep_reexec!
|
8
25
|
|
9
26
|
options = {}
|
10
27
|
|
11
|
-
OptionParser.new do |opts|
|
12
|
-
opts.banner = "Usage: itsi [options]"
|
28
|
+
parser = OptionParser.new do |opts|
|
29
|
+
opts.banner = "Usage: itsi [COMMAND] [options]"
|
13
30
|
|
14
31
|
opts.on("-C", "--config CONFIG_FILE", String, "Itsi Configuration file to use (default: Itsi.rb)") do |config_file|
|
15
32
|
options[:config_file] = config_file
|
16
33
|
end
|
17
34
|
|
18
|
-
opts.on("-w", "--workers WORKERS", Integer, "Number of workers
|
35
|
+
opts.on("-w", "--workers WORKERS", Integer, "Number of workers") do |w|
|
19
36
|
options[:workers] = w
|
20
37
|
end
|
21
38
|
|
39
|
+
opts.on("-d", "--daemonize", "Run the process as a daemon") do
|
40
|
+
Process.daemon(true)
|
41
|
+
end
|
42
|
+
|
22
43
|
opts.on("-t", "--threads THREADS", Integer, "Number of threads (default: 1)") do |t|
|
23
44
|
options[:threads] = t
|
24
45
|
end
|
25
46
|
|
26
|
-
opts.on("-
|
27
|
-
|
28
|
-
options[:multithreaded_reactor] = mtr.to_s == "true"
|
47
|
+
opts.on("--[no-]multithreaded-reactor", "Use a multithreaded reactor") do |mtr|
|
48
|
+
options[:multithreaded_reactor] = mtr
|
29
49
|
end
|
30
50
|
|
31
51
|
opts.on("-r", "--rackup_file FILE", String, "Rackup file to use (default: config.ru)") do |rf|
|
@@ -97,9 +117,6 @@ OptionParser.new do |opts|
|
|
97
117
|
options[:shutdown_timeout] = shutdown_timeout
|
98
118
|
end
|
99
119
|
|
100
|
-
opts.on("--script_name SCRIPT_NAME", String, "Script name to inject into Rack ENV") do |script_name|
|
101
|
-
options[:script_name] = script_name
|
102
|
-
end
|
103
120
|
|
104
121
|
opts.on("--stream-body", TrueClass, "Stream body frames (default: false for best compatibility)") do |stream_body|
|
105
122
|
options[:stream_body] = stream_body
|
@@ -107,6 +124,10 @@ OptionParser.new do |opts|
|
|
107
124
|
|
108
125
|
opts.on("-h", "--help", "Show this help message") do
|
109
126
|
puts opts
|
127
|
+
puts "COMMAND: "
|
128
|
+
COMMANDS.each do |command, description|
|
129
|
+
puts " #{command} - #{description}"
|
130
|
+
end
|
110
131
|
exit
|
111
132
|
end
|
112
133
|
|
@@ -117,17 +138,42 @@ OptionParser.new do |opts|
|
|
117
138
|
opts.on("--listeners LISTENERS", String, "Listeners for reexec") do |listeners|
|
118
139
|
options[:listeners] = listeners
|
119
140
|
end
|
120
|
-
end.parse!
|
121
141
|
|
142
|
+
opts.on("--passfile PASSFILE", String, "Passfile") do |passfile|
|
143
|
+
options[:passfile] = passfile
|
144
|
+
end
|
145
|
+
|
146
|
+
opts.on("--algorithm ALGORITHM", String, "Algorithm for password hashing") do |algorithm|
|
147
|
+
options[:algorithm] = algorithm
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
if ENV['COMP_LINE'] || ARGV.include?('--completion')
|
152
|
+
puts COMMANDS.keys
|
153
|
+
exit
|
154
|
+
end
|
122
155
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
when
|
156
|
+
parser.parse!
|
157
|
+
|
158
|
+
case (command = ARGV.shift)
|
159
|
+
when *COMMANDS.keys
|
160
|
+
required_arity = Itsi::Server.method(command).parameters&.select{|c| c.first == :req }&.length&.succ || 2
|
161
|
+
case required_arity
|
162
|
+
when 1 then Itsi::Server.send(command)
|
163
|
+
when 2 then Itsi::Server.send(command, options)
|
164
|
+
else
|
165
|
+
if ARGV.length != required_arity - 2
|
166
|
+
puts "Command #{command} requires #{required_arity - 2} subcommands. "
|
167
|
+
exit(0)
|
168
|
+
end
|
169
|
+
Itsi::Server.send(command, options, *ARGV)
|
170
|
+
end
|
171
|
+
when nil
|
130
172
|
Itsi::Server.start(options)
|
131
173
|
else
|
132
|
-
puts "Invalid command #{command}"
|
174
|
+
puts "Invalid command #{command}.\n"
|
175
|
+
puts "COMMAND: "
|
176
|
+
COMMANDS.each do |command, description|
|
177
|
+
puts " #{command} - #{description}"
|
178
|
+
end
|
133
179
|
end
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
(f == gemspec) ||
|
28
28
|
f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
|
29
29
|
end
|
30
|
-
end + Dir["../../crates/**/*.{toml,rs,lock}"].map do |ext_file|
|
30
|
+
end + Dir["../../crates/**/*.{toml,rs,lock,html,json}"].map do |ext_file|
|
31
31
|
"ext/#{ext_file[%r{.*crates/(.*?)$}, 1]}"
|
32
32
|
end.compact
|
33
33
|
|
@@ -36,10 +36,11 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.require_paths = ["lib"]
|
37
37
|
spec.extensions = ["ext/itsi_server/extconf.rb"]
|
38
38
|
|
39
|
-
# Uncomment to register a new dependency of your gem
|
40
|
-
# spec.add_dependency "example-gem", "~> 1.0"
|
41
39
|
spec.add_dependency "rack", ">= 1.6"
|
40
|
+
spec.add_dependency "json", '~> 2'
|
42
41
|
spec.add_dependency "rb_sys", "~> 0.9.91"
|
42
|
+
|
43
|
+
spec.add_development_dependency "ruby-lsp"
|
43
44
|
# For more information and examples about making a new gem, check out our
|
44
45
|
# guide at: https://bundler.io/guides/creating_gem.html
|
45
46
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Itsi
|
2
|
+
class HttpRequest
|
3
|
+
module ResponseStatusShortcodes
|
4
|
+
|
5
|
+
HTTP_STATUS_CODES = {
|
6
|
+
100 => :continue,
|
7
|
+
101 => :switching_protocols,
|
8
|
+
102 => :processing,
|
9
|
+
200 => :ok,
|
10
|
+
201 => :created,
|
11
|
+
202 => :accepted,
|
12
|
+
203 => :non_authoritative_information,
|
13
|
+
204 => :no_content,
|
14
|
+
205 => :reset_content,
|
15
|
+
206 => :partial_content,
|
16
|
+
207 => :multi_status,
|
17
|
+
208 => :already_reported,
|
18
|
+
226 => :im_used,
|
19
|
+
300 => :multiple_choices,
|
20
|
+
301 => :moved_permanently,
|
21
|
+
302 => :found,
|
22
|
+
303 => :see_other,
|
23
|
+
304 => :not_modified,
|
24
|
+
305 => :use_proxy,
|
25
|
+
307 => :temporary_redirect,
|
26
|
+
308 => :permanent_redirect,
|
27
|
+
400 => :bad_request,
|
28
|
+
401 => :unauthorized,
|
29
|
+
402 => :payment_required,
|
30
|
+
403 => :forbidden,
|
31
|
+
404 => :not_found,
|
32
|
+
405 => :method_not_allowed,
|
33
|
+
406 => :not_acceptable,
|
34
|
+
407 => :proxy_authentication_required,
|
35
|
+
408 => :request_timeout,
|
36
|
+
409 => :conflict,
|
37
|
+
410 => :gone,
|
38
|
+
411 => :length_required,
|
39
|
+
412 => :precondition_failed,
|
40
|
+
413 => :payload_too_large,
|
41
|
+
414 => :uri_too_long,
|
42
|
+
415 => :unsupported_media_type,
|
43
|
+
416 => :range_not_satisfiable,
|
44
|
+
417 => :expectation_failed,
|
45
|
+
418 => :im_a_teapot,
|
46
|
+
421 => :misdirected_request,
|
47
|
+
422 => :unprocessable_entity,
|
48
|
+
423 => :locked,
|
49
|
+
424 => :failed_dependency,
|
50
|
+
425 => :too_early,
|
51
|
+
426 => :upgrade_required,
|
52
|
+
428 => :precondition_required,
|
53
|
+
429 => :too_many_requests,
|
54
|
+
431 => :request_header_fields_too_large,
|
55
|
+
451 => :unavailable_for_legal_reasons,
|
56
|
+
500 => :internal_server_error,
|
57
|
+
501 => :not_implemented,
|
58
|
+
502 => :bad_gateway,
|
59
|
+
503 => :service_unavailable,
|
60
|
+
504 => :gateway_timeout,
|
61
|
+
505 => :http_version_not_supported,
|
62
|
+
506 => :variant_also_negotiates,
|
63
|
+
507 => :insufficient_storage,
|
64
|
+
508 => :loop_detected,
|
65
|
+
510 => :not_extended,
|
66
|
+
511 => :network_authentication_required
|
67
|
+
}.freeze
|
68
|
+
|
69
|
+
HTTP_STATUS_CODES.each do |code, name|
|
70
|
+
define_method(name) {|*args, **kwargs| respond(*args, **kwargs, status: code) }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|