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.
@@ -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
- body_streamer = streaming_body?(body) ? body : headers.delete("rack.hijack")
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 body_streamer
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)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Server
5
- VERSION = "0.2.26"
5
+ VERSION = "0.2.27.rc1"
6
6
  end
7
7
  end
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.26
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-05-13 00:00:00.000000000 Z
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