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.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +124 -109
  3. data/Cargo.toml +6 -0
  4. data/crates/itsi_error/Cargo.toml +1 -0
  5. data/crates/itsi_error/src/lib.rs +100 -10
  6. data/crates/itsi_scheduler/src/itsi_scheduler.rs +1 -1
  7. data/crates/itsi_server/Cargo.toml +8 -10
  8. data/crates/itsi_server/src/default_responses/html/401.html +68 -0
  9. data/crates/itsi_server/src/default_responses/html/403.html +68 -0
  10. data/crates/itsi_server/src/default_responses/html/404.html +68 -0
  11. data/crates/itsi_server/src/default_responses/html/413.html +71 -0
  12. data/crates/itsi_server/src/default_responses/html/429.html +68 -0
  13. data/crates/itsi_server/src/default_responses/html/500.html +71 -0
  14. data/crates/itsi_server/src/default_responses/html/502.html +71 -0
  15. data/crates/itsi_server/src/default_responses/html/503.html +68 -0
  16. data/crates/itsi_server/src/default_responses/html/504.html +69 -0
  17. data/crates/itsi_server/src/default_responses/html/index.html +238 -0
  18. data/crates/itsi_server/src/default_responses/json/401.json +6 -0
  19. data/crates/itsi_server/src/default_responses/json/403.json +6 -0
  20. data/crates/itsi_server/src/default_responses/json/404.json +6 -0
  21. data/crates/itsi_server/src/default_responses/json/413.json +6 -0
  22. data/crates/itsi_server/src/default_responses/json/429.json +6 -0
  23. data/crates/itsi_server/src/default_responses/json/500.json +6 -0
  24. data/crates/itsi_server/src/default_responses/json/502.json +6 -0
  25. data/crates/itsi_server/src/default_responses/json/503.json +6 -0
  26. data/crates/itsi_server/src/default_responses/json/504.json +6 -0
  27. data/crates/itsi_server/src/default_responses/mod.rs +11 -0
  28. data/crates/itsi_server/src/lib.rs +58 -26
  29. data/crates/itsi_server/src/prelude.rs +2 -0
  30. data/crates/itsi_server/src/ruby_types/README.md +21 -0
  31. data/crates/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs +8 -6
  32. data/crates/itsi_server/src/ruby_types/itsi_grpc_call.rs +344 -0
  33. data/crates/itsi_server/src/ruby_types/{itsi_grpc_stream → itsi_grpc_response_stream}/mod.rs +121 -73
  34. data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +103 -40
  35. data/crates/itsi_server/src/ruby_types/itsi_http_response.rs +8 -5
  36. data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +4 -4
  37. data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +37 -17
  38. data/crates/itsi_server/src/ruby_types/itsi_server.rs +4 -3
  39. data/crates/itsi_server/src/ruby_types/mod.rs +6 -13
  40. data/crates/itsi_server/src/server/{bind.rs → binds/bind.rs} +23 -4
  41. data/crates/itsi_server/src/server/{listener.rs → binds/listener.rs} +24 -10
  42. data/crates/itsi_server/src/server/binds/mod.rs +4 -0
  43. data/crates/itsi_server/src/server/{tls.rs → binds/tls.rs} +9 -4
  44. data/crates/itsi_server/src/server/http_message_types.rs +97 -0
  45. data/crates/itsi_server/src/server/io_stream.rs +2 -1
  46. data/crates/itsi_server/src/server/middleware_stack/middleware.rs +28 -16
  47. data/crates/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +17 -8
  48. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +47 -18
  49. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +13 -9
  50. data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +50 -29
  51. data/crates/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +5 -2
  52. data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +37 -48
  53. data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +25 -20
  54. data/crates/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +14 -7
  55. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +190 -0
  56. data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +125 -95
  57. data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +9 -5
  58. data/crates/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +1 -4
  59. data/crates/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +25 -19
  60. data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +4 -4
  61. data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +47 -0
  62. data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +9 -4
  63. data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +260 -62
  64. data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +29 -22
  65. data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +6 -6
  66. data/crates/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +6 -5
  67. data/crates/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +4 -2
  68. data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +51 -18
  69. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +31 -13
  70. data/crates/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +55 -0
  71. data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +13 -8
  72. data/crates/itsi_server/src/server/middleware_stack/mod.rs +101 -69
  73. data/crates/itsi_server/src/server/mod.rs +3 -9
  74. data/crates/itsi_server/src/server/process_worker.rs +21 -3
  75. data/crates/itsi_server/src/server/request_job.rs +2 -2
  76. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +8 -3
  77. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +26 -26
  78. data/crates/itsi_server/src/server/signal.rs +24 -41
  79. data/crates/itsi_server/src/server/size_limited_incoming.rs +101 -0
  80. data/crates/itsi_server/src/server/thread_worker.rs +59 -28
  81. data/crates/itsi_server/src/services/itsi_http_service.rs +239 -0
  82. data/crates/itsi_server/src/services/mime_types.rs +1416 -0
  83. data/crates/itsi_server/src/services/mod.rs +6 -0
  84. data/crates/itsi_server/src/services/password_hasher.rs +83 -0
  85. data/crates/itsi_server/src/{server → services}/rate_limiter.rs +35 -31
  86. data/crates/itsi_server/src/{server → services}/static_file_server.rs +521 -181
  87. data/crates/itsi_tracing/src/lib.rs +145 -55
  88. data/{Itsi.rb → foo/Itsi.rb} +6 -9
  89. data/gems/scheduler/Cargo.lock +7 -0
  90. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  91. data/gems/scheduler/test/helpers/test_helper.rb +0 -1
  92. data/gems/scheduler/test/test_address_resolve.rb +0 -1
  93. data/gems/scheduler/test/test_network_io.rb +1 -1
  94. data/gems/scheduler/test/test_process_wait.rb +0 -1
  95. data/gems/server/Cargo.lock +124 -109
  96. data/gems/server/exe/itsi +65 -19
  97. data/gems/server/itsi-server.gemspec +4 -3
  98. data/gems/server/lib/itsi/http_request/response_status_shortcodes.rb +74 -0
  99. data/gems/server/lib/itsi/http_request.rb +116 -17
  100. data/gems/server/lib/itsi/http_response.rb +2 -0
  101. data/gems/server/lib/itsi/passfile.rb +109 -0
  102. data/gems/server/lib/itsi/server/config/dsl.rb +160 -101
  103. data/gems/server/lib/itsi/server/config.rb +58 -23
  104. data/gems/server/lib/itsi/server/default_app/default_app.rb +25 -29
  105. data/gems/server/lib/itsi/server/default_app/index.html +113 -89
  106. data/gems/server/lib/itsi/server/{Itsi.rb → default_config/Itsi-rackup.rb} +1 -1
  107. data/gems/server/lib/itsi/server/default_config/Itsi.rb +107 -0
  108. data/gems/server/lib/itsi/server/grpc/grpc_call.rb +246 -0
  109. data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +100 -0
  110. data/gems/server/lib/itsi/server/grpc/reflection/v1/reflection_pb.rb +26 -0
  111. data/gems/server/lib/itsi/server/grpc/reflection/v1/reflection_services_pb.rb +122 -0
  112. data/gems/server/lib/itsi/server/route_tester.rb +107 -0
  113. data/gems/server/lib/itsi/server/typed_handlers/param_parser.rb +200 -0
  114. data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +55 -0
  115. data/gems/server/lib/itsi/server/typed_handlers.rb +17 -0
  116. data/gems/server/lib/itsi/server/version.rb +1 -1
  117. data/gems/server/lib/itsi/server.rb +82 -12
  118. data/gems/server/lib/ruby_lsp/itsi/addon.rb +111 -0
  119. data/gems/server/lib/shell_completions/completions.rb +26 -0
  120. data/gems/server/test/helpers/test_helper.rb +2 -1
  121. data/lib/itsi/version.rb +1 -1
  122. data/sandbox/README.md +5 -0
  123. data/sandbox/itsi_file/Gemfile +4 -2
  124. data/sandbox/itsi_file/Gemfile.lock +48 -6
  125. data/sandbox/itsi_file/Itsi.rb +326 -129
  126. data/sandbox/itsi_file/call.json +1 -0
  127. data/sandbox/itsi_file/echo_client/Gemfile +10 -0
  128. data/sandbox/itsi_file/echo_client/Gemfile.lock +27 -0
  129. data/sandbox/itsi_file/echo_client/README.md +95 -0
  130. data/sandbox/itsi_file/echo_client/echo_client.rb +164 -0
  131. data/sandbox/itsi_file/echo_client/gen_proto.sh +17 -0
  132. data/sandbox/itsi_file/echo_client/lib/echo_pb.rb +16 -0
  133. data/sandbox/itsi_file/echo_client/lib/echo_services_pb.rb +29 -0
  134. data/sandbox/itsi_file/echo_client/run_client.rb +64 -0
  135. data/sandbox/itsi_file/echo_client/test_compressions.sh +20 -0
  136. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile +10 -0
  137. data/sandbox/itsi_file/echo_service_nonitsi/Gemfile.lock +79 -0
  138. data/sandbox/itsi_file/echo_service_nonitsi/echo.proto +26 -0
  139. data/sandbox/itsi_file/echo_service_nonitsi/echo_pb.rb +16 -0
  140. data/sandbox/itsi_file/echo_service_nonitsi/echo_services_pb.rb +29 -0
  141. data/sandbox/itsi_file/echo_service_nonitsi/server.rb +52 -0
  142. data/sandbox/itsi_sandbox_async/config.ru +0 -1
  143. data/sandbox/itsi_sandbox_rack/Gemfile.lock +2 -2
  144. data/sandbox/itsi_sandbox_rails/Gemfile +2 -2
  145. data/sandbox/itsi_sandbox_rails/Gemfile.lock +76 -2
  146. data/sandbox/itsi_sandbox_rails/app/controllers/home_controller.rb +15 -0
  147. data/sandbox/itsi_sandbox_rails/config/environments/development.rb +1 -0
  148. data/sandbox/itsi_sandbox_rails/config/environments/production.rb +1 -0
  149. data/sandbox/itsi_sandbox_rails/config/routes.rb +2 -0
  150. data/sandbox/itsi_sinatra/app.rb +0 -1
  151. data/sandbox/static_files/.env +1 -0
  152. data/sandbox/static_files/404.html +25 -0
  153. data/sandbox/static_files/_DSC0102.NEF.jpg +0 -0
  154. data/sandbox/static_files/about.html +68 -0
  155. data/sandbox/static_files/tiny.html +1 -0
  156. data/sandbox/static_files/writebook.zip +0 -0
  157. data/tasks.txt +28 -33
  158. metadata +87 -26
  159. data/crates/itsi_error/src/from.rs +0 -68
  160. data/crates/itsi_server/src/ruby_types/itsi_grpc_request.rs +0 -147
  161. data/crates/itsi_server/src/ruby_types/itsi_grpc_response.rs +0 -19
  162. data/crates/itsi_server/src/server/itsi_service.rs +0 -172
  163. data/crates/itsi_server/src/server/middleware_stack/middlewares/grpc_service.rs +0 -72
  164. data/crates/itsi_server/src/server/types.rs +0 -43
  165. data/gems/server/lib/itsi/server/grpc_interface.rb +0 -213
  166. data/sandbox/itsi_file/public/assets/index.html +0 -1
  167. /data/crates/itsi_server/src/server/{bind_protocol.rs → binds/bind_protocol.rs} +0 -0
  168. /data/crates/itsi_server/src/server/{tls → binds/tls}/locked_dir_cache.rs +0 -0
  169. /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: 9aead803dcb108b9dff6ccd4c8e260a9307c5a65dc11e6e2c35c8b368c6eeac0
4
- data.tar.gz: 5bdc928dbb64b12ee24b0e595eafa742418fd3f7feeb74fa12a0c8fe26f89ce6
3
+ metadata.gz: 8678869a775c7a2519f4da6901b7d8a768cf42fb2ad4535dea194061a11af3a3
4
+ data.tar.gz: 7a7ecf58fc503a973c5b0ad215458cb81bf736bb4dfb348319e265626676ce42
5
5
  SHA512:
6
- metadata.gz: 75ee4139e4e5beb6c4dd5d4c34f1c4e94368f1a1d2c01d3139efdb1f484df6e4f98a25b7b5643d090ffda81b63d8b0df84706fb0e975e34ebe39743ce550cba8
7
- data.tar.gz: 81ebc869bd9299531f1e3429b167d06b7d455a1c8e7ca42c2427051c255a7d04e7cde0b24cbc470985aa2734cb91e14c9c38b5e23bbdb00debe4d2efeb82a1ef
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 0.15.2",
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.0"
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
- "crossbeam",
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
@@ -11,3 +11,9 @@ members = [
11
11
  "./crates/itsi_rb_helpers",
12
12
  ]
13
13
  resolver = "2"
14
+
15
+
16
+ [profile.release]
17
+ opt-level = 3
18
+ codegen-units = 1
19
+ lto = "fat"
@@ -9,3 +9,4 @@ magnus = { version = "0.7.1" }
9
9
  rcgen = "0.13.2"
10
10
  nix = "0.29.0"
11
11
  httparse = "1.10.1"
12
+ anyhow = "1.0.97"
@@ -1,31 +1,121 @@
1
- pub mod from;
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, Clone)]
12
+ #[derive(Error, Debug)]
7
13
  pub enum ItsiError {
8
- #[error("Invalid input {0}")]
14
+ #[error("Invalid input: {0}")]
9
15
  InvalidInput(String),
10
- #[error("Internal server error {0}")]
16
+
17
+ #[error("Internal server error: {0}")]
11
18
  InternalServerError(String),
12
- #[error("Unsupported protocol {0}")]
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
- #[error("Jump")]
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 default(error: impl Send + Sync + 'static + std::fmt::Display) -> Self {
28
- ItsiError::InvalidInput(format!("{}", error))
117
+ pub fn new(error: impl Send + Sync + 'static + std::fmt::Display) -> Self {
118
+ ItsiError::InternalError(format!("{}", error))
29
119
  }
30
120
  }
31
121
 
@@ -65,7 +65,7 @@ impl ItsiScheduler {
65
65
  pub fn wake(&self) -> MagnusResult<()> {
66
66
  self.waker.lock().wake().map_err(|_| {
67
67
  magnus::Error::new(
68
- magnus::exception::exception(),
68
+ magnus::exception::standard_error(),
69
69
  "Failed to wake the scheduler",
70
70
  )
71
71
  })?;
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-server"
3
- version = "0.1.0"
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"