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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8678869a775c7a2519f4da6901b7d8a768cf42fb2ad4535dea194061a11af3a3
|
4
|
+
data.tar.gz: 7a7ecf58fc503a973c5b0ad215458cb81bf736bb4dfb348319e265626676ce42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 793ab013b0ad9fd28c11122789ad63c2c7d5fc873f46af91bf85ce9fe5049fa5b61abd9d56c49a6fd27333da62cb1c18622af8b3361a530e51cae65ad4ad8907
|
7
|
+
data.tar.gz: 575f044fe2790b0428ef033b1c4b3b335860c8d025f70448f31a6d3e43c2ed60d0e9e228bcc613e12a69f1f04983cd3d38d849d9ef60c906fed257f78199d4f3
|
data/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"
|
@@ -1356,30 +1373,28 @@ dependencies = [
|
|
1356
1373
|
|
1357
1374
|
[[package]]
|
1358
1375
|
name = "itsi-server"
|
1359
|
-
version = "0.1.
|
1376
|
+
version = "0.1.18"
|
1360
1377
|
dependencies = [
|
1378
|
+
"argon2",
|
1361
1379
|
"async-channel",
|
1362
1380
|
"async-compression",
|
1363
1381
|
"async-trait",
|
1364
1382
|
"base64",
|
1383
|
+
"bcrypt",
|
1365
1384
|
"bytes",
|
1366
1385
|
"chrono",
|
1367
|
-
"
|
1368
|
-
"dashmap",
|
1386
|
+
"core_affinity",
|
1369
1387
|
"derive_more",
|
1370
1388
|
"dirs",
|
1371
1389
|
"either",
|
1372
|
-
"fnv",
|
1373
1390
|
"fs2",
|
1374
1391
|
"futures",
|
1375
1392
|
"globset",
|
1376
|
-
"hmac",
|
1377
1393
|
"http",
|
1378
1394
|
"http-body-util",
|
1379
1395
|
"httparse",
|
1380
1396
|
"httpdate",
|
1381
1397
|
"hyper",
|
1382
|
-
"hyper-staticfile",
|
1383
1398
|
"hyper-util",
|
1384
1399
|
"itsi_error",
|
1385
1400
|
"itsi_rb_helpers",
|
@@ -1392,20 +1407,19 @@ dependencies = [
|
|
1392
1407
|
"notify",
|
1393
1408
|
"num_cpus",
|
1394
1409
|
"parking_lot",
|
1410
|
+
"percent-encoding",
|
1395
1411
|
"pin-project",
|
1396
1412
|
"rand 0.9.0",
|
1397
|
-
"rb-sys",
|
1398
1413
|
"rcgen",
|
1399
1414
|
"redis",
|
1400
1415
|
"regex",
|
1401
1416
|
"reqwest",
|
1402
|
-
"ring",
|
1403
|
-
"route-recognizer",
|
1404
1417
|
"rustls",
|
1405
1418
|
"rustls-pemfile",
|
1406
1419
|
"serde",
|
1407
1420
|
"serde_json",
|
1408
1421
|
"serde_magnus",
|
1422
|
+
"sha-crypt",
|
1409
1423
|
"sha2",
|
1410
1424
|
"socket2",
|
1411
1425
|
"sysinfo",
|
@@ -1417,13 +1431,13 @@ dependencies = [
|
|
1417
1431
|
"tokio-util",
|
1418
1432
|
"tracing",
|
1419
1433
|
"url",
|
1420
|
-
"uuid",
|
1421
1434
|
]
|
1422
1435
|
|
1423
1436
|
[[package]]
|
1424
1437
|
name = "itsi_error"
|
1425
1438
|
version = "0.1.0"
|
1426
1439
|
dependencies = [
|
1440
|
+
"anyhow",
|
1427
1441
|
"httparse",
|
1428
1442
|
"magnus",
|
1429
1443
|
"nix",
|
@@ -1662,16 +1676,6 @@ version = "0.3.17"
|
|
1662
1676
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1663
1677
|
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
1664
1678
|
|
1665
|
-
[[package]]
|
1666
|
-
name = "mime_guess"
|
1667
|
-
version = "2.0.5"
|
1668
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1669
|
-
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
|
1670
|
-
dependencies = [
|
1671
|
-
"mime",
|
1672
|
-
"unicase",
|
1673
|
-
]
|
1674
|
-
|
1675
1679
|
[[package]]
|
1676
1680
|
name = "minimal-lexical"
|
1677
1681
|
version = "0.2.1"
|
@@ -1955,6 +1959,17 @@ dependencies = [
|
|
1955
1959
|
"windows-targets 0.52.6",
|
1956
1960
|
]
|
1957
1961
|
|
1962
|
+
[[package]]
|
1963
|
+
name = "password-hash"
|
1964
|
+
version = "0.5.0"
|
1965
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1966
|
+
checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
|
1967
|
+
dependencies = [
|
1968
|
+
"base64ct",
|
1969
|
+
"rand_core 0.6.4",
|
1970
|
+
"subtle",
|
1971
|
+
]
|
1972
|
+
|
1958
1973
|
[[package]]
|
1959
1974
|
name = "paste"
|
1960
1975
|
version = "1.0.15"
|
@@ -2408,12 +2423,6 @@ dependencies = [
|
|
2408
2423
|
"windows-sys 0.52.0",
|
2409
2424
|
]
|
2410
2425
|
|
2411
|
-
[[package]]
|
2412
|
-
name = "route-recognizer"
|
2413
|
-
version = "0.3.1"
|
2414
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2415
|
-
checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746"
|
2416
|
-
|
2417
2426
|
[[package]]
|
2418
2427
|
name = "rustc-demangle"
|
2419
2428
|
version = "0.1.24"
|
@@ -2688,6 +2697,18 @@ dependencies = [
|
|
2688
2697
|
"serde",
|
2689
2698
|
]
|
2690
2699
|
|
2700
|
+
[[package]]
|
2701
|
+
name = "sha-crypt"
|
2702
|
+
version = "0.5.0"
|
2703
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
2704
|
+
checksum = "88e79009728d8311d42d754f2f319a975f9e38f156fd5e422d2451486c78b286"
|
2705
|
+
dependencies = [
|
2706
|
+
"base64ct",
|
2707
|
+
"rand 0.8.5",
|
2708
|
+
"sha2",
|
2709
|
+
"subtle",
|
2710
|
+
]
|
2711
|
+
|
2691
2712
|
[[package]]
|
2692
2713
|
name = "sha1_smol"
|
2693
2714
|
version = "1.0.1"
|
@@ -3219,12 +3240,6 @@ version = "1.18.0"
|
|
3219
3240
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3220
3241
|
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
|
3221
3242
|
|
3222
|
-
[[package]]
|
3223
|
-
name = "unicase"
|
3224
|
-
version = "2.8.1"
|
3225
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
3226
|
-
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
|
3227
|
-
|
3228
3243
|
[[package]]
|
3229
3244
|
name = "unicode-ident"
|
3230
3245
|
version = "1.0.17"
|
data/Cargo.toml
CHANGED
@@ -1,31 +1,121 @@
|
|
1
|
-
pub
|
1
|
+
pub use anyhow::Context;
|
2
|
+
use magnus::Error as MagnusError;
|
3
|
+
use magnus::{
|
4
|
+
error::ErrorType,
|
5
|
+
exception::{self, arg_error, standard_error},
|
6
|
+
};
|
2
7
|
use thiserror::Error;
|
3
8
|
|
9
|
+
pub static CLIENT_CONNECTION_CLOSED: &str = "Client disconnected";
|
4
10
|
pub type Result<T> = std::result::Result<T, ItsiError>;
|
5
11
|
|
6
|
-
#[derive(Error, Debug
|
12
|
+
#[derive(Error, Debug)]
|
7
13
|
pub enum ItsiError {
|
8
|
-
#[error("Invalid input {0}")]
|
14
|
+
#[error("Invalid input: {0}")]
|
9
15
|
InvalidInput(String),
|
10
|
-
|
16
|
+
|
17
|
+
#[error("Internal server error: {0}")]
|
11
18
|
InternalServerError(String),
|
12
|
-
|
19
|
+
|
20
|
+
#[error("Unsupported protocol: {0}")]
|
13
21
|
UnsupportedProtocol(String),
|
22
|
+
|
14
23
|
#[error("Argument error: {0}")]
|
15
24
|
ArgumentError(String),
|
25
|
+
|
16
26
|
#[error("Client Connection Closed")]
|
17
27
|
ClientConnectionClosed,
|
18
|
-
|
28
|
+
|
29
|
+
#[error("Internal Error")]
|
30
|
+
InternalError(String),
|
31
|
+
|
32
|
+
#[error(transparent)]
|
33
|
+
Io(#[from] std::io::Error),
|
34
|
+
|
35
|
+
#[error(transparent)]
|
36
|
+
Rcgen(#[from] rcgen::Error),
|
37
|
+
|
38
|
+
#[error(transparent)]
|
39
|
+
HttpParse(#[from] httparse::Error),
|
40
|
+
|
41
|
+
#[error(transparent)]
|
42
|
+
NixErrno(#[from] nix::errno::Errno),
|
43
|
+
|
44
|
+
#[error(transparent)]
|
45
|
+
Nul(#[from] std::ffi::NulError),
|
46
|
+
|
47
|
+
#[error("Jump: {0}")]
|
19
48
|
Jump(String),
|
49
|
+
|
20
50
|
#[error("Break")]
|
21
|
-
Break
|
51
|
+
Break,
|
52
|
+
|
22
53
|
#[error("Pass")]
|
23
|
-
Pass
|
54
|
+
Pass,
|
55
|
+
|
56
|
+
#[error(transparent)]
|
57
|
+
Anyhow(#[from] anyhow::Error),
|
58
|
+
}
|
59
|
+
|
60
|
+
impl From<magnus::Error> for ItsiError {
|
61
|
+
fn from(err: magnus::Error) -> Self {
|
62
|
+
match err.error_type() {
|
63
|
+
ErrorType::Jump(tag) => ItsiError::Jump(tag.to_string()),
|
64
|
+
ErrorType::Error(_exception_class, cow) => ItsiError::ArgumentError(cow.to_string()),
|
65
|
+
ErrorType::Exception(exception) => ItsiError::ArgumentError(exception.to_string()),
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
pub trait IntoMagnusError {
|
71
|
+
fn into_magnus_error(self) -> MagnusError;
|
72
|
+
}
|
73
|
+
|
74
|
+
impl<T: std::error::Error> IntoMagnusError for T {
|
75
|
+
fn into_magnus_error(self) -> MagnusError {
|
76
|
+
MagnusError::new(standard_error(), self.to_string())
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
impl From<&str> for ItsiError {
|
81
|
+
fn from(s: &str) -> Self {
|
82
|
+
ItsiError::InternalError(s.to_owned())
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
impl From<String> for ItsiError {
|
87
|
+
fn from(s: String) -> Self {
|
88
|
+
ItsiError::InternalError(s)
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
impl From<ItsiError> for magnus::Error {
|
93
|
+
fn from(err: ItsiError) -> Self {
|
94
|
+
match err {
|
95
|
+
ItsiError::InvalidInput(msg) => magnus::Error::new(arg_error(), msg),
|
96
|
+
ItsiError::InternalServerError(msg) => magnus::Error::new(standard_error(), msg),
|
97
|
+
ItsiError::InternalError(msg) => magnus::Error::new(standard_error(), msg),
|
98
|
+
ItsiError::UnsupportedProtocol(msg) => magnus::Error::new(arg_error(), msg),
|
99
|
+
ItsiError::ArgumentError(msg) => magnus::Error::new(arg_error(), msg),
|
100
|
+
ItsiError::Jump(msg) => magnus::Error::new(exception::local_jump_error(), msg),
|
101
|
+
ItsiError::ClientConnectionClosed => {
|
102
|
+
magnus::Error::new(exception::eof_error(), CLIENT_CONNECTION_CLOSED)
|
103
|
+
}
|
104
|
+
ItsiError::Break => magnus::Error::new(exception::interrupt(), "Break"),
|
105
|
+
ItsiError::Pass => magnus::Error::new(exception::interrupt(), "Pass"),
|
106
|
+
ItsiError::Io(err) => err.into_magnus_error(),
|
107
|
+
ItsiError::Rcgen(err) => err.into_magnus_error(),
|
108
|
+
ItsiError::HttpParse(err) => err.into_magnus_error(),
|
109
|
+
ItsiError::NixErrno(err) => err.into_magnus_error(),
|
110
|
+
ItsiError::Nul(err) => err.into_magnus_error(),
|
111
|
+
ItsiError::Anyhow(err) => err.into_magnus_error(),
|
112
|
+
}
|
113
|
+
}
|
24
114
|
}
|
25
115
|
|
26
116
|
impl ItsiError {
|
27
|
-
pub fn
|
28
|
-
ItsiError::
|
117
|
+
pub fn new(error: impl Send + Sync + 'static + std::fmt::Display) -> Self {
|
118
|
+
ItsiError::InternalError(format!("{}", error))
|
29
119
|
}
|
30
120
|
}
|
31
121
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[package]
|
2
2
|
name = "itsi-server"
|
3
|
-
version = "0.1.
|
3
|
+
version = "0.1.18"
|
4
4
|
edition = "2021"
|
5
5
|
authors = ["Wouter Coppieters <wc@pico.net.nz>"]
|
6
6
|
license = "MIT"
|
@@ -11,33 +11,31 @@ crate-type = ["cdylib"]
|
|
11
11
|
|
12
12
|
[dependencies]
|
13
13
|
async-compression = { version = "0.4.21", features = [
|
14
|
+
"futures-io",
|
14
15
|
"tokio",
|
15
16
|
"zstd",
|
16
17
|
"brotli",
|
17
18
|
"deflate",
|
18
19
|
"gzip",
|
20
|
+
"zlib",
|
19
21
|
] }
|
20
22
|
async-channel = "2.3.1"
|
21
23
|
async-trait = "0.1.87"
|
24
|
+
bcrypt = "0.17.0"
|
22
25
|
base64 = "0.22.1"
|
23
26
|
bytes = "1.3"
|
24
27
|
chrono = "0.4.35"
|
25
|
-
crossbeam = "0.8.4"
|
26
|
-
dashmap = "6.1.0"
|
27
28
|
derive_more = { version = "2.0.1", features = ["debug"] }
|
28
29
|
dirs = "6.0.0"
|
29
30
|
either = "1.15.0"
|
30
|
-
fnv = "1.0.7"
|
31
31
|
fs2 = "0.4.3"
|
32
32
|
futures = "0.3.31"
|
33
33
|
globset = "0.4.16"
|
34
|
-
hmac = "0.12.1"
|
35
34
|
http = "1.3.1"
|
36
35
|
http-body-util = "0.1.2"
|
37
36
|
httpdate = "1.0.3"
|
38
37
|
httparse = "1.10.1"
|
39
38
|
hyper = { version = "1.5.0", features = ["full", "server", "http1", "http2"] }
|
40
|
-
hyper-staticfile = "0.10.1"
|
41
39
|
hyper-util = { version = "0.1.10", features = ["full"] }
|
42
40
|
itsi_error = { path = "../itsi_error" }
|
43
41
|
itsi_rb_helpers = { path = "../itsi_rb_helpers" }
|
@@ -57,12 +55,9 @@ num_cpus = "1.16.0"
|
|
57
55
|
parking_lot = "0.12.3"
|
58
56
|
pin-project = "1.1.9"
|
59
57
|
rand = "0.9.0"
|
60
|
-
rb-sys = "0.9.111"
|
61
58
|
rcgen = { version = "0.13.2", features = ["x509-parser", "pem"] }
|
62
59
|
regex = "1.11.1"
|
63
60
|
reqwest = { version = "0.12.15", features = ["stream"] }
|
64
|
-
ring = "0.17.14"
|
65
|
-
route-recognizer = "0.3.1"
|
66
61
|
redis = { version = "0.29.2", features = [
|
67
62
|
"tokio-comp",
|
68
63
|
"r2d2",
|
@@ -85,5 +80,8 @@ tokio-stream = "0.1.17"
|
|
85
80
|
tokio-util = "0.7.13"
|
86
81
|
tracing = "0.1.41"
|
87
82
|
url = "2.5.4"
|
88
|
-
uuid = "1.16.0"
|
89
83
|
md5 = "0.7.0"
|
84
|
+
percent-encoding = "2.3.1"
|
85
|
+
sha-crypt = "0.5.0"
|
86
|
+
argon2 = "0.5.3"
|
87
|
+
core_affinity = "0.8.3"
|