itsi-server 0.2.26 → 0.2.27.rc1
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 +5 -3
- data/Rakefile +18 -5
- data/ext/itsi_acme/Cargo.toml +2 -1
- data/ext/itsi_acme/src/acceptor.rs +1 -1
- data/ext/itsi_acme/src/acme.rs +31 -3
- data/ext/itsi_acme/src/http_challenge.rs +81 -0
- data/ext/itsi_acme/src/https_helper.rs +3 -1
- data/ext/itsi_acme/src/jose.rs +6 -2
- data/ext/itsi_acme/src/lib.rs +2 -0
- data/ext/itsi_acme/src/resolver.rs +27 -4
- data/ext/itsi_acme/src/state.rs +183 -22
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_scheduler/src/itsi_scheduler.rs +115 -64
- data/ext/itsi_scheduler/src/lib.rs +2 -1
- data/ext/itsi_server/Cargo.lock +2 -2
- data/ext/itsi_server/Cargo.toml +2 -1
- data/ext/itsi_server/src/lib.rs +15 -0
- data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +9 -0
- data/ext/itsi_server/src/ruby_types/itsi_http_response.rs +95 -0
- data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +22 -1
- data/ext/itsi_server/src/ruby_types/itsi_server.rs +100 -0
- data/ext/itsi_server/src/server/binds/listener.rs +9 -24
- data/ext/itsi_server/src/server/binds/tls.rs +372 -67
- data/ext/itsi_server/src/server/middleware_stack/mod.rs +3 -9
- data/ext/itsi_server/src/services/itsi_http_service.rs +51 -10
- data/lib/itsi/http_request.rb +10 -0
- data/lib/itsi/server/rack_interface.rb +45 -2
- data/lib/itsi/server/version.rb +1 -1
- data/lib/itsi/server.rb +24 -0
- metadata +3 -2
|
@@ -1,6 +1,45 @@
|
|
|
1
1
|
module Itsi
|
|
2
2
|
class Server
|
|
3
3
|
module RackInterface
|
|
4
|
+
class PartialHijackStream
|
|
5
|
+
def initialize(response)
|
|
6
|
+
@response = response
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def write(chunk)
|
|
10
|
+
@response.write(chunk.to_s)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def read(*)
|
|
14
|
+
nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def <<(chunk)
|
|
18
|
+
write(chunk)
|
|
19
|
+
self
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def flush
|
|
23
|
+
self
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def close_write
|
|
27
|
+
@response.close_write
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def close_read
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def close
|
|
35
|
+
@response.close_write
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def closed?
|
|
39
|
+
@response.closed?
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
4
43
|
# Builds a handler proc that is compatible with Rack applications.
|
|
5
44
|
def self.for(app)
|
|
6
45
|
require "rack"
|
|
@@ -38,7 +77,8 @@ module Itsi
|
|
|
38
77
|
response.status = status
|
|
39
78
|
|
|
40
79
|
# 2. Set Headers
|
|
41
|
-
|
|
80
|
+
hijack_callback = headers.delete("rack.hijack")
|
|
81
|
+
body_streamer = streaming_body?(body) ? body : hijack_callback
|
|
42
82
|
|
|
43
83
|
response.reserve_headers(headers.size)
|
|
44
84
|
|
|
@@ -57,7 +97,10 @@ module Itsi
|
|
|
57
97
|
# the server will begin to stream it to the client.
|
|
58
98
|
|
|
59
99
|
|
|
60
|
-
if
|
|
100
|
+
if hijack_callback
|
|
101
|
+
stream = status == 101 ? request.partial_hijack : PartialHijackStream.new(response)
|
|
102
|
+
body_streamer.call(stream)
|
|
103
|
+
elsif body_streamer
|
|
61
104
|
# If we're partially hijacked or returned a streaming body,
|
|
62
105
|
# stream this response.
|
|
63
106
|
body_streamer.call(response)
|
data/lib/itsi/server/version.rb
CHANGED
data/lib/itsi/server.rb
CHANGED
|
@@ -32,6 +32,30 @@ module Itsi
|
|
|
32
32
|
@running && !@running.empty?
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
def current_server
|
|
36
|
+
@running&.last || raise("No running Itsi::Server instance")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def tls_bindings
|
|
40
|
+
current_server.tls_bindings
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def tls_domains(listener_id = nil)
|
|
44
|
+
current_server.tls_domains(listener_id)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def tls_domain_statuses(listener_id = nil)
|
|
48
|
+
current_server.tls_domain_statuses(listener_id)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def register_tls_domain(domain, listener_id = nil)
|
|
52
|
+
current_server.register_tls_domain(domain, listener_id)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def unregister_tls_domain(domain, listener_id = nil)
|
|
56
|
+
current_server.unregister_tls_domain(domain, listener_id)
|
|
57
|
+
end
|
|
58
|
+
|
|
35
59
|
def start_in_background_thread(cli_params = {}, &blk)
|
|
36
60
|
@background_threads ||= []
|
|
37
61
|
server, background_thread = start(cli_params, background: true, &blk)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: itsi-server
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.27.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wouter Coppieters
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: json
|
|
@@ -110,6 +110,7 @@ files:
|
|
|
110
110
|
- ext/itsi_acme/src/caches/no.rs
|
|
111
111
|
- ext/itsi_acme/src/caches/test.rs
|
|
112
112
|
- ext/itsi_acme/src/config.rs
|
|
113
|
+
- ext/itsi_acme/src/http_challenge.rs
|
|
113
114
|
- ext/itsi_acme/src/https_helper.rs
|
|
114
115
|
- ext/itsi_acme/src/incoming.rs
|
|
115
116
|
- ext/itsi_acme/src/jose.rs
|