itsi 0.2.22 → 0.2.23
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/CHANGELOG.md +3 -0
- data/Cargo.lock +2 -2
- data/Dockerfile +2 -2
- data/crates/itsi_scheduler/Cargo.toml +1 -1
- data/crates/itsi_server/Cargo.lock +2 -2
- data/crates/itsi_server/Cargo.toml +1 -1
- data/crates/itsi_server/src/server/middleware_stack/mod.rs +3 -9
- data/crates/itsi_server/src/services/itsi_http_service.rs +5 -8
- data/gems/scheduler/Cargo.lock +1 -1
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/server/Cargo.lock +1 -1
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/test/helpers/test_helper.rb +19 -0
- data/gems/server/test/options/unmatched_request.rb +29 -0
- data/lib/itsi/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6f500a7fdc96a95bb73c92215cef369ad5a208c0ef60f260c36257f74a592448
|
|
4
|
+
data.tar.gz: 42ccd29b510e972f40b291a0f058b618e4605f2c9379412c853542d7e5e4e8a8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3e1e1c6426657562728948fbfab3ca19a727e62ba144ef0c1d0c4ab46d6fa4a7152305ea47d4b23cfdb795a906b60e7bea6e8891c6af704ff9486210a7f05a1e
|
|
7
|
+
data.tar.gz: 499ba6cd3408cf9e780092e025cb3791af23460cc581dbf774f2774a573b45ddded6c8153358ca3ef6744d6bacc998ac829505c37f329e22dc1e856a7e65891d
|
data/CHANGELOG.md
CHANGED
data/Cargo.lock
CHANGED
|
@@ -1662,7 +1662,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
|
|
1662
1662
|
|
|
1663
1663
|
[[package]]
|
|
1664
1664
|
name = "itsi-scheduler"
|
|
1665
|
-
version = "0.2.
|
|
1665
|
+
version = "0.2.23"
|
|
1666
1666
|
dependencies = [
|
|
1667
1667
|
"bytes",
|
|
1668
1668
|
"derive_more",
|
|
@@ -1680,7 +1680,7 @@ dependencies = [
|
|
|
1680
1680
|
|
|
1681
1681
|
[[package]]
|
|
1682
1682
|
name = "itsi-server"
|
|
1683
|
-
version = "0.2.
|
|
1683
|
+
version = "0.2.23"
|
|
1684
1684
|
dependencies = [
|
|
1685
1685
|
"argon2",
|
|
1686
1686
|
"async-channel",
|
data/Dockerfile
CHANGED
|
@@ -3,7 +3,7 @@ FROM ruby:3.4
|
|
|
3
3
|
RUN apt-get update && apt-get install build-essential libclang-dev -y && apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
4
4
|
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
|
5
5
|
|
|
6
|
-
COPY pkg/itsi-server-0.2.
|
|
7
|
-
RUN gem install itsi-server-0.2.
|
|
6
|
+
COPY pkg/itsi-server-0.2.23.gem .
|
|
7
|
+
RUN gem install itsi-server-0.2.23.gem
|
|
8
8
|
|
|
9
9
|
CMD ["itsi", "serve"]
|
|
@@ -984,7 +984,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
|
|
|
984
984
|
|
|
985
985
|
[[package]]
|
|
986
986
|
name = "itsi-scheduler"
|
|
987
|
-
version = "0.
|
|
987
|
+
version = "0.2.23"
|
|
988
988
|
dependencies = [
|
|
989
989
|
"bytes",
|
|
990
990
|
"derive_more",
|
|
@@ -1002,7 +1002,7 @@ dependencies = [
|
|
|
1002
1002
|
|
|
1003
1003
|
[[package]]
|
|
1004
1004
|
name = "itsi-server"
|
|
1005
|
-
version = "0.
|
|
1005
|
+
version = "0.2.23"
|
|
1006
1006
|
dependencies = [
|
|
1007
1007
|
"async-channel",
|
|
1008
1008
|
"async-trait",
|
|
@@ -263,7 +263,7 @@ impl MiddlewareSet {
|
|
|
263
263
|
pub fn stack_for(
|
|
264
264
|
&self,
|
|
265
265
|
request: &HttpRequest,
|
|
266
|
-
) ->
|
|
266
|
+
) -> Option<(&Vec<Middleware>, Option<Arc<Regex>>)> {
|
|
267
267
|
let binding = self.route_set.matches(request.uri().path());
|
|
268
268
|
let matches = binding.iter();
|
|
269
269
|
|
|
@@ -276,7 +276,7 @@ impl MiddlewareSet {
|
|
|
276
276
|
let matching_pattern = self.patterns.get(index).cloned();
|
|
277
277
|
if let Some(stack) = self.stacks.get(&index) {
|
|
278
278
|
if stack.matches(request) {
|
|
279
|
-
return
|
|
279
|
+
return Some((&stack.layers, matching_pattern));
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
282
|
}
|
|
@@ -285,13 +285,7 @@ impl MiddlewareSet {
|
|
|
285
285
|
request.uri().path(),
|
|
286
286
|
self.route_set
|
|
287
287
|
);
|
|
288
|
-
|
|
289
|
-
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
290
|
-
format!(
|
|
291
|
-
"No matching middleware stack found for request: {:?}",
|
|
292
|
-
request
|
|
293
|
-
),
|
|
294
|
-
))
|
|
288
|
+
None
|
|
295
289
|
}
|
|
296
290
|
|
|
297
291
|
pub fn parse_middleware(middleware_type: String, parameters: Value) -> Result<Middleware> {
|
|
@@ -188,14 +188,11 @@ impl ItsiHttpService {
|
|
|
188
188
|
let token_preference = self.server_params.itsi_server_token_preference;
|
|
189
189
|
|
|
190
190
|
let service_future = async move {
|
|
191
|
-
let
|
|
192
|
-
.server_params
|
|
193
|
-
|
|
194
|
-
.
|
|
195
|
-
|
|
196
|
-
.stack_for(&req)
|
|
197
|
-
.unwrap();
|
|
198
|
-
let (stack, matching_pattern) = middleware_stack;
|
|
191
|
+
let Some((stack, matching_pattern)) =
|
|
192
|
+
self.server_params.middleware.get().unwrap().stack_for(&req)
|
|
193
|
+
else {
|
|
194
|
+
return Ok(NOT_FOUND_RESPONSE.to_http_response(accept).await);
|
|
195
|
+
};
|
|
199
196
|
let mut resp: Option<HttpResponse> = None;
|
|
200
197
|
|
|
201
198
|
let mut context =
|
data/gems/scheduler/Cargo.lock
CHANGED
data/gems/server/Cargo.lock
CHANGED
|
@@ -90,6 +90,25 @@ class RequestContext
|
|
|
90
90
|
client.request(request)
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
+
def raw_http(request)
|
|
94
|
+
socket = TCPSocket.new(@uri.host, @uri.port)
|
|
95
|
+
socket.write(request)
|
|
96
|
+
socket.flush
|
|
97
|
+
|
|
98
|
+
response = +""
|
|
99
|
+
loop do
|
|
100
|
+
ready = IO.select([socket], nil, nil, 1)
|
|
101
|
+
break unless ready
|
|
102
|
+
|
|
103
|
+
response << socket.readpartial(16 * 1024)
|
|
104
|
+
rescue EOFError
|
|
105
|
+
break
|
|
106
|
+
end
|
|
107
|
+
response
|
|
108
|
+
ensure
|
|
109
|
+
socket&.close
|
|
110
|
+
end
|
|
111
|
+
|
|
93
112
|
def head(path)
|
|
94
113
|
request = Net::HTTP::Head.new(uri_for(path))
|
|
95
114
|
client.request(request)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require_relative "../helpers/test_helper"
|
|
2
|
+
|
|
3
|
+
class TestUnmatchedRequest < Minitest::Test
|
|
4
|
+
def test_connect_request_without_matching_stack_does_not_stop_listener
|
|
5
|
+
server(
|
|
6
|
+
itsi_rb: lambda do
|
|
7
|
+
get("/ok") { |r| r.respond("ok") }
|
|
8
|
+
end
|
|
9
|
+
) do
|
|
10
|
+
response = raw_http("CONNECT google.com:443 HTTP/1.1\r\nHost: google.com:443\r\n\r\n")
|
|
11
|
+
|
|
12
|
+
assert_match(/\AHTTP\/\d(?:\.\d)? 404\b/, response)
|
|
13
|
+
assert_equal "ok", get("/ok")
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_origin_form_request_without_leading_slash_does_not_stop_listener
|
|
18
|
+
server(
|
|
19
|
+
itsi_rb: lambda do
|
|
20
|
+
get("/ok") { |r| r.respond("ok") }
|
|
21
|
+
end
|
|
22
|
+
) do
|
|
23
|
+
response = raw_http("GET default.asp HTTP/1.1\r\nHost: example.com\r\n\r\n")
|
|
24
|
+
|
|
25
|
+
assert_match(/\AHTTP\/\d(?:\.\d)? 404\b/, response)
|
|
26
|
+
assert_equal "ok", get("/ok")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/itsi/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: itsi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.23
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wouter Coppieters
|
|
@@ -15,28 +15,28 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.2.
|
|
18
|
+
version: 0.2.23
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.2.
|
|
25
|
+
version: 0.2.23
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: itsi-server
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
30
|
- - '='
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 0.2.
|
|
32
|
+
version: 0.2.23
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - '='
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 0.2.
|
|
39
|
+
version: 0.2.23
|
|
40
40
|
description: Wrapper Gem for both the Itsi server and the Itsi Fiber scheduler
|
|
41
41
|
email:
|
|
42
42
|
- wc@pico.net.nz
|
|
@@ -1139,6 +1139,7 @@ files:
|
|
|
1139
1139
|
- gems/server/test/options/test_request_timeout.rb
|
|
1140
1140
|
- gems/server/test/options/test_threads.rb
|
|
1141
1141
|
- gems/server/test/options/test_workers.rb
|
|
1142
|
+
- gems/server/test/options/unmatched_request.rb
|
|
1142
1143
|
- gems/server/test/rack/test_rack_server.rb
|
|
1143
1144
|
- gems/server/vendor/rb-sys-build/.cargo-ok
|
|
1144
1145
|
- gems/server/vendor/rb-sys-build/.cargo_vcs_info.json
|