manticore 0.9.1-java → 0.9.2-java
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/.github/workflows/jruby-ci.yml +52 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +4 -1
- data/Rakefile +31 -6
- data/lib/manticore/client.rb +13 -7
- data/lib/manticore/version.rb +1 -1
- data/lib/manticore.rb +3 -0
- data/lib/org/manticore/manticore-ext.jar +0 -0
- data/manticore.gemspec +5 -5
- data/spec/manticore/client_spec.rb +56 -2
- data/spec/spec_helper.rb +19 -1
- metadata +12 -15
- data/.travis.yml +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f135d2f44775f0b19d86715a09d9bfdbf9f5c3b3bd2561f703fdc5b5ad670852
|
4
|
+
data.tar.gz: c1c61c04ce83f4ad1b639221cd33c975dda4e097be0e139e58f76f414422d694
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c683ad66fee84b2ca28e41ff360304b6a035dd89922a7e59f212bc59b8b45a0d63216045881de6b6412b1adc3bc599d4380d4c45e37338a5e29ca9a2ab60a93e
|
7
|
+
data.tar.gz: fc4bb202b9a1401ee7e3d86e56d4836dbd2f4bcece55631848d7c4bbd762728891fd3444dcaa786a5df4c22810c1b4a83cbb74d93add92bb8e320900596d5e2b
|
@@ -0,0 +1,52 @@
|
|
1
|
+
name: JRuby CI
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
env:
|
6
|
+
JRUBY_OPTS: '-J-ea -J-Djruby.ji.ambiguous.calls.debug=true'
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
build:
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
include:
|
15
|
+
- { jruby: 'jruby-head', jdk: '21', experimental: true }
|
16
|
+
- { jruby: 'jruby-10.0.0.1', jdk: '21' }
|
17
|
+
- { jruby: 'jruby-10.0.2.0', jdk: '21' }
|
18
|
+
- { jruby: 'jruby-10.0.2.0', jdk: '25' }
|
19
|
+
- { jruby: 'jruby-9.4.12.0', jdk: '21', jruby_opts: '-Xcompile.invokedynamic -Xjit.threshold=0' }
|
20
|
+
- { jruby: 'jruby-9.4.14.0', jdk: '21' }
|
21
|
+
- { jruby: 'jruby-9.4.13.0', jdk: '17' }
|
22
|
+
- { jruby: 'jruby-9.4.14.0', jdk: '11' }
|
23
|
+
- { jruby: 'jruby-9.4.14.0', jdk: '8' }
|
24
|
+
- { jruby: 'jruby-9.3.15.0', jdk: '11' }
|
25
|
+
- { jruby: 'jruby-9.3.15.0', jdk: '8' }
|
26
|
+
|
27
|
+
continue-on-error: ${{ matrix.experimental || false }}
|
28
|
+
|
29
|
+
steps:
|
30
|
+
- uses: actions/checkout@v4
|
31
|
+
|
32
|
+
- name: Set up JDK
|
33
|
+
uses: actions/setup-java@v5
|
34
|
+
with:
|
35
|
+
java-version: ${{ matrix.jdk }}
|
36
|
+
distribution: ${{ matrix.distro || 'temurin' }}
|
37
|
+
|
38
|
+
- name: Set up JRuby
|
39
|
+
uses: ruby/setup-ruby@v1
|
40
|
+
with:
|
41
|
+
ruby-version: ${{ matrix.jruby }}
|
42
|
+
bundler-cache: true
|
43
|
+
|
44
|
+
- name: Bundle install
|
45
|
+
run: |
|
46
|
+
bundle install
|
47
|
+
|
48
|
+
- name: Run tests
|
49
|
+
run: |
|
50
|
+
jruby -rbundler/setup -S rake generate_certs
|
51
|
+
echo "JRUBY_OPTS=${JRUBY_OPTS} ${{ matrix.jruby_opts || '' }}" >> $GITHUB_ENV
|
52
|
+
jruby -rbundler/setup -S rake spec
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
### v0.9.2
|
2
|
+
|
3
|
+
* [fix] avoid `File.exists?` due JRuby 10
|
4
|
+
* [fix] don't send entity when get/delete have no body (#116)
|
5
|
+
* [feat] Raises InvalidUriException for java URISyntaxException (#112)
|
6
|
+
* [fix] Don't strip the decoded certificate, ~~chomp should be enough~~ (#113) (#119)
|
7
|
+
|
1
8
|
### v0.9.1
|
2
9
|
|
3
10
|
* [fix] work-around JRuby 9.3.4 compatibility
|
data/Gemfile
CHANGED
@@ -4,8 +4,11 @@ source 'https://rubygems.org'
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :development, :test do
|
7
|
+
# NOTE: should eventually become a runtime dependency
|
8
|
+
gem "base64", require: false
|
9
|
+
|
7
10
|
gem "rake-compiler", require: false
|
8
|
-
gem "simplecov"
|
11
|
+
gem "simplecov", require: false
|
9
12
|
|
10
13
|
gem "rspec", "~> 3.0"
|
11
14
|
gem "rspec-its"
|
data/Rakefile
CHANGED
@@ -26,29 +26,54 @@ end
|
|
26
26
|
|
27
27
|
# Generate all the stuff we need for a full test run
|
28
28
|
task :generate_certs do
|
29
|
+
require "base64"
|
29
30
|
root = File.expand_path("../spec/ssl", __FILE__)
|
30
31
|
openssl = `which openssl`.strip
|
31
32
|
keytool = `which keytool`.strip
|
32
33
|
|
33
34
|
Dir.glob("#{root}/*").each { |f| File.unlink f }
|
34
35
|
|
36
|
+
print 'Generating a key that ends with a whitespace character'
|
37
|
+
whitespace_found = false
|
38
|
+
until whitespace_found
|
39
|
+
putc '.'
|
40
|
+
key_str = ''
|
41
|
+
IO.popen("#{openssl} genrsa 4096 2>/dev/null") { |openssl_io| key_str = openssl_io.read }
|
42
|
+
key_parts = key_str.scan(/(?:^-----BEGIN(.* )PRIVATE KEY-----\n)(.*?)(?:-----END\1PRIVATE KEY.*$)/m)
|
43
|
+
key_parts.each do |_type, b64key|
|
44
|
+
body = Base64.decode64 b64key
|
45
|
+
body != body.strip && whitespace_found = true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
puts ' Found'
|
49
|
+
IO.popen("#{openssl} pkcs8 -topk8 -nocrypt -out #{root}/client_whitespace.key", 'r+') do |openssl_io|
|
50
|
+
openssl_io.puts key_str
|
51
|
+
openssl_io.close_write
|
52
|
+
end
|
53
|
+
|
35
54
|
cmds = [
|
36
55
|
# Create the CA
|
37
56
|
"#{openssl} genrsa 4096 | #{openssl} pkcs8 -topk8 -nocrypt -out #{root}/root-ca.key",
|
38
|
-
"#{openssl} req -
|
39
|
-
"#{openssl} req -
|
57
|
+
"#{openssl} req -newkey rsa:4096 -x509 -nodes -key #{root}/root-ca.key -sha256 -days 365 -out #{root}/root-ca.crt -subj \"/C=US/ST=The Internet/L=The Internet/O=Manticore CA/OU=Manticore/CN=localhost\"",
|
58
|
+
"#{openssl} req -newkey rsa:4096 -x509 -nodes -key #{root}/root-ca.key -sha256 -days 365 -out #{root}/root-untrusted-ca.crt -subj \"/C=US/ST=The Darknet/L=The Darknet/O=Manticore CA/OU=Manticore/CN=localhost\"",
|
40
59
|
|
41
60
|
# Create the client CSR, key, and signed cert
|
42
61
|
"#{openssl} genrsa 4096 | #{openssl} pkcs8 -topk8 -nocrypt -out #{root}/client.key",
|
43
|
-
"#{openssl} req -sha256 -key #{root}/client.key -
|
62
|
+
"#{openssl} req -newkey rsa:4096 -sha256 -key #{root}/client.key -out #{root}/client.csr -subj \"/C=US/ST=The Internet/L=The Internet/O=Manticore Client/OU=Manticore/CN=localhost\"",
|
44
63
|
"#{openssl} x509 -req -in #{root}/client.csr -CA #{root}/root-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/client.crt -sha256 -days 1",
|
45
|
-
|
64
|
+
# OpenSSL 3 rejects negative -days; use 0 days to produce an immediately-expired cert
|
65
|
+
"#{openssl} x509 -req -in #{root}/client.csr -CA #{root}/root-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/client-expired.crt -sha256 -days 0",
|
66
|
+
|
67
|
+
# Create the client_whitespace CSR and signed cert
|
68
|
+
"#{openssl} req -newkey rsa:4096 -sha256 -key #{root}/client_whitespace.key -out #{root}/client_whitespace.csr -subj \"/C=US/ST=The Internet/L=The Internet/O=Manticore Client/OU=Manticore/CN=localhost\"",
|
69
|
+
"#{openssl} x509 -req -in #{root}/client_whitespace.csr -CA #{root}/root-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/client_whitespace.crt -sha256 -days 1",
|
46
70
|
|
47
71
|
# Create the server cert
|
48
72
|
"#{openssl} genrsa 4096 | #{openssl} pkcs8 -topk8 -nocrypt -out #{root}/host.key",
|
49
|
-
"#{openssl} req -sha256 -key #{root}/host.key -
|
73
|
+
"#{openssl} req -newkey rsa:4096 -sha256 -key #{root}/host.key -out #{root}/host.csr -subj \"/C=US/ST=The Internet/L=The Internet/O=Manticore Host/OU=Manticore/CN=localhost\"",
|
50
74
|
"#{openssl} x509 -req -in #{root}/host.csr -CA #{root}/root-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/host.crt -sha256 -days 1",
|
51
|
-
|
75
|
+
# OpenSSL 3 rejects negative -days; use 0 days to produce an immediately-expired cert
|
76
|
+
"#{openssl} x509 -req -in #{root}/host.csr -CA #{root}/root-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/host-expired.crt -sha256 -days 0",
|
52
77
|
"#{openssl} x509 -req -in #{root}/host.csr -CA #{root}/root-untrusted-ca.crt -CAkey #{root}/root-ca.key -CAcreateserial -out #{root}/host-untrusted.crt -sha256 -days 1",
|
53
78
|
|
54
79
|
"#{keytool} -import -file #{root}/root-ca.crt -alias rootCA -keystore #{root}/truststore.jks -noprompt -storepass test123",
|
data/lib/manticore/client.rb
CHANGED
@@ -163,7 +163,6 @@ module Manticore
|
|
163
163
|
# @option options [integer] connect_timeout (10) Sets the timeout for connections. Raises Manticore::Timeout on failure.
|
164
164
|
# @option options [integer] socket_timeout (10) Sets SO_TIMEOUT for open connections. A value of 0 is an infinite timeout. Raises Manticore::Timeout on failure.
|
165
165
|
# @option options [boolean] tcp_no_delay (true) Enable or disable Nagle's algorithm
|
166
|
-
# @option options [integer] request_timeout (60) Sets the timeout for a given request. Raises Manticore::Timeout on failure.
|
167
166
|
# @option options [integer] max_redirects (5) Sets the maximum number of redirects to follow.
|
168
167
|
# @option options [integer] automatic_retries (3) Sets the number of times the client will automatically retry failed requests.
|
169
168
|
# @option options [boolean] retry_non_idempotent (false) If true, Manticore will automatically retry failed requests with non-idempotent verbs. Otherwise, it only automatically retries
|
@@ -262,7 +261,8 @@ module Manticore
|
|
262
261
|
# @macro http_method_shared_sync
|
263
262
|
def get(url, options = {}, &block)
|
264
263
|
options = treat_params_as_query(options)
|
265
|
-
|
264
|
+
get_class = options[:body] ? HttpGetWithEntity : HttpGet
|
265
|
+
request get_class, url, options, &block
|
266
266
|
end
|
267
267
|
|
268
268
|
# Perform a HTTP PUT request
|
@@ -288,7 +288,8 @@ module Manticore
|
|
288
288
|
# @macro http_method_shared_sync
|
289
289
|
def delete(url, options = {}, &block)
|
290
290
|
options = treat_params_as_query(options)
|
291
|
-
|
291
|
+
delete_class = options[:body] ? HttpDeleteWithEntity : HttpDelete
|
292
|
+
request delete_class, url, options, &block
|
292
293
|
end
|
293
294
|
|
294
295
|
# Perform a HTTP OPTIONS request
|
@@ -515,7 +516,11 @@ module Manticore
|
|
515
516
|
|
516
517
|
def uri_from_url_and_options(url, options)
|
517
518
|
url = url.to_s if url.is_a?(URI)
|
518
|
-
|
519
|
+
begin
|
520
|
+
builder = URIBuilder.new(url)
|
521
|
+
rescue Java::JavaNet::URISyntaxException => e
|
522
|
+
raise Manticore::InvalidUriException.new(e)
|
523
|
+
end
|
519
524
|
pairs = struct_to_name_value_pairs(options[:query])
|
520
525
|
builder.add_parameters pairs unless pairs.empty?
|
521
526
|
builder.to_string
|
@@ -724,7 +729,7 @@ module Manticore
|
|
724
729
|
|
725
730
|
cert_str = if ssl_options[:client_cert].is_a?(OpenSSL::X509::Certificate)
|
726
731
|
ssl_options[:client_cert].to_s
|
727
|
-
elsif ssl_options[:client_cert].is_a?(String) && File.
|
732
|
+
elsif ssl_options[:client_cert].is_a?(String) && File.exist?(ssl_options[:client_cert])
|
728
733
|
File.read(ssl_options[:client_cert])
|
729
734
|
else
|
730
735
|
ssl_options[:client_cert].to_s
|
@@ -735,7 +740,7 @@ module Manticore
|
|
735
740
|
|
736
741
|
key_str = if ssl_options[:client_key].is_a?(OpenSSL::PKey::PKey)
|
737
742
|
ssl_options[:client_key].to_pem_pkcs8
|
738
|
-
elsif ssl_options[:client_key].is_a?(String) && File.
|
743
|
+
elsif ssl_options[:client_key].is_a?(String) && File.exist?(ssl_options[:client_key])
|
739
744
|
File.read(ssl_options[:client_key])
|
740
745
|
else
|
741
746
|
ssl_options[:client_key].to_s
|
@@ -745,7 +750,8 @@ module Manticore
|
|
745
750
|
key_parts = key_str.scan(KEY_EXTRACTION_REGEXP)
|
746
751
|
key_parts.each do |type, b64key|
|
747
752
|
body = Base64.decode64 b64key
|
748
|
-
|
753
|
+
# Do not chomp binary DER content; trimming can corrupt the key structure.
|
754
|
+
spec = PKCS8EncodedKeySpec.new(body.to_java_bytes)
|
749
755
|
type = type.strip
|
750
756
|
type = "RSA" if type == ""
|
751
757
|
key = KeyFactory.getInstance(type).generatePrivate(spec)
|
data/lib/manticore/version.rb
CHANGED
data/lib/manticore.rb
CHANGED
@@ -54,6 +54,9 @@ module Manticore
|
|
54
54
|
# The client has been closed so it's no longer usable
|
55
55
|
class ClientStoppedException < ManticoreException; end
|
56
56
|
|
57
|
+
# Client tried to use illegal characters in URI
|
58
|
+
class InvalidUriException < ManticoreException; end
|
59
|
+
|
57
60
|
# Socket breaks, etc
|
58
61
|
class SocketException < ManticoreException; end
|
59
62
|
|
Binary file
|
data/manticore.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.required_ruby_version = '>= 2.3' # JRuby >= 9.1
|
23
23
|
|
24
24
|
private_key = File.expand_path("~/.gemcert/gem-private_key.pem")
|
25
|
-
if File.
|
25
|
+
if File.exist? private_key
|
26
26
|
spec.signing_key = private_key
|
27
27
|
spec.cert_chain = ['gem-public_cert.pem']
|
28
28
|
end
|
@@ -31,9 +31,9 @@ Gem::Specification.new do |spec|
|
|
31
31
|
|
32
32
|
spec.add_development_dependency "jar-dependencies", "~> 0.4.1"
|
33
33
|
|
34
|
-
spec.requirements << "jar org.apache.httpcomponents:httpclient, '~> 4.5.
|
35
|
-
spec.requirements << "jar org.apache.httpcomponents:httpmime, '~> 4.5.
|
34
|
+
spec.requirements << "jar org.apache.httpcomponents:httpclient, '~> 4.5.14'"
|
35
|
+
spec.requirements << "jar org.apache.httpcomponents:httpmime, '~> 4.5.14'"
|
36
36
|
spec.requirements << "jar commons-logging:commons-logging, '~> 1.2'"
|
37
|
-
spec.requirements << "jar commons-codec:commons-codec, '~> 1.
|
38
|
-
spec.requirements << "jar org.apache.httpcomponents:httpcore, '~> 4.4.
|
37
|
+
spec.requirements << "jar commons-codec:commons-codec, '~> 1.11'"
|
38
|
+
spec.requirements << "jar org.apache.httpcomponents:httpcore, '~> 4.4.16'"
|
39
39
|
end
|
@@ -245,6 +245,23 @@ describe Manticore::Client do
|
|
245
245
|
end
|
246
246
|
end
|
247
247
|
|
248
|
+
context 'when client_key ending on whitespace character' do
|
249
|
+
let(:client) do
|
250
|
+
Manticore::Client.new(
|
251
|
+
ssl: {
|
252
|
+
verify: :default,
|
253
|
+
ca_file: File.expand_path('../ssl/root-ca.crt', __dir__),
|
254
|
+
client_cert: File.read(File.expand_path('../ssl/client_whitespace.crt', __dir__)),
|
255
|
+
client_key: File.read(File.expand_path('../ssl/client_whitespace.key', __dir__))
|
256
|
+
}
|
257
|
+
)
|
258
|
+
end
|
259
|
+
|
260
|
+
it 'raises no exception' do
|
261
|
+
expect(client).not_to be_nil
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
248
265
|
context "when off" do
|
249
266
|
let(:client) { Manticore::Client.new :ssl => {:verify => :disable} }
|
250
267
|
|
@@ -516,14 +533,14 @@ describe Manticore::Client do
|
|
516
533
|
it "can send an array of parameters as :params" do
|
517
534
|
response = client.get(local_server, params: {"foo" => ["baz", "bar"], "bar" => {"baz" => ["bin", 1, :b]}})
|
518
535
|
j = JSON.load(response.body)
|
519
|
-
expect(j["body"]).to
|
536
|
+
expect(j["body"]).to be_nil
|
520
537
|
expect(j["uri"]["query"]).to include("foo=baz")
|
521
538
|
end
|
522
539
|
|
523
540
|
it "can send an array of parameters as :query" do
|
524
541
|
response = client.get(local_server, query: {"foo" => ["baz", "bar"]})
|
525
542
|
j = JSON.load(response.body)
|
526
|
-
expect(j["body"]).to
|
543
|
+
expect(j["body"]).to be_nil
|
527
544
|
expect(j["uri"]["query"]).to include("foo=baz")
|
528
545
|
end
|
529
546
|
|
@@ -538,6 +555,27 @@ describe Manticore::Client do
|
|
538
555
|
j = JSON.load(response.body)
|
539
556
|
expect(CGI.parse j["uri"]["query"]).to eq({"foo" => ["bar"], "baz" => ["bin"]})
|
540
557
|
end
|
558
|
+
|
559
|
+
it "raises InvalidUriException for illegal character in URI" do
|
560
|
+
expect { client.get(local_server + "?foo=bar{{{", query: {"baz" => "bin"})}
|
561
|
+
.to raise_exception(Manticore::InvalidUriException)
|
562
|
+
end
|
563
|
+
|
564
|
+
describe "body" do
|
565
|
+
let(:params) { { body: body } }
|
566
|
+
context "when there is no body" do
|
567
|
+
let(:body) { nil }
|
568
|
+
it "does not send http get with entity" do
|
569
|
+
expect(client.get("http://google.com", params).request).to_not respond_to(:entity)
|
570
|
+
end
|
571
|
+
end
|
572
|
+
context "when there is a body" do
|
573
|
+
let(:body) { "hello" }
|
574
|
+
it "sends http get with entity" do
|
575
|
+
expect(client.get("http://google.com", params).request).to respond_to(:entity)
|
576
|
+
end
|
577
|
+
end
|
578
|
+
end
|
541
579
|
end
|
542
580
|
|
543
581
|
describe "#post" do
|
@@ -609,6 +647,22 @@ describe Manticore::Client do
|
|
609
647
|
response = client.delete(local_server, body: "This is a delete body")
|
610
648
|
expect(JSON.load(response.body)["body"]).to eq "This is a delete body"
|
611
649
|
end
|
650
|
+
|
651
|
+
describe "body" do
|
652
|
+
let(:params) { { body: body } }
|
653
|
+
context "when there is no body" do
|
654
|
+
let(:body) { nil }
|
655
|
+
it "does not send http get with entity" do
|
656
|
+
expect(client.delete("http://google.com", params).request).to_not respond_to(:entity)
|
657
|
+
end
|
658
|
+
end
|
659
|
+
context "when there is a body" do
|
660
|
+
let(:body) { "hello" }
|
661
|
+
it "sends http get with entity" do
|
662
|
+
expect(client.delete("http://google.com", params).request).to respond_to(:entity)
|
663
|
+
end
|
664
|
+
end
|
665
|
+
end
|
612
666
|
end
|
613
667
|
|
614
668
|
describe "#head" do
|
data/spec/spec_helper.rb
CHANGED
@@ -119,7 +119,23 @@ def start_ssl_server(port, options = {})
|
|
119
119
|
%w[CN localhost],
|
120
120
|
]
|
121
121
|
cert_file = options[:cert] || File.expand_path("../ssl/host.crt", __FILE__)
|
122
|
-
cert
|
122
|
+
if options[:cert] && !File.exist?(cert_file)
|
123
|
+
# Generate an expired self-signed certificate if the requested cert file
|
124
|
+
# is missing (e.g., OpenSSL 3 rejects negative/zero -days during fixture generation).
|
125
|
+
pkey = OpenSSL::PKey::RSA.new File.read(File.expand_path("../ssl/host.key", __FILE__))
|
126
|
+
cert = OpenSSL::X509::Certificate.new
|
127
|
+
cert.version = 2
|
128
|
+
cert.serial = 1
|
129
|
+
name = OpenSSL::X509::Name.parse('/C=US/ST=The Internet/L=The Internet/O=Manticore Host/OU=Manticore/CN=localhost')
|
130
|
+
cert.subject = name
|
131
|
+
cert.issuer = name
|
132
|
+
cert.public_key = pkey.public_key
|
133
|
+
cert.not_before = Time.now - 2 * 24 * 60 * 60
|
134
|
+
cert.not_after = Time.now - 24 * 60 * 60
|
135
|
+
cert.sign pkey, OpenSSL::Digest::SHA256.new
|
136
|
+
else
|
137
|
+
cert = OpenSSL::X509::Certificate.new File.read(cert_file)
|
138
|
+
end
|
123
139
|
cert.version = 0 # HACK: Work around jruby-openssl in jruby-head not setting cert.version
|
124
140
|
pkey = OpenSSL::PKey::RSA.new File.read(File.expand_path("../ssl/host.key", __FILE__))
|
125
141
|
@servers[port] = Thread.new {
|
@@ -131,6 +147,8 @@ def start_ssl_server(port, options = {})
|
|
131
147
|
:SSLPrivateKey => pkey,
|
132
148
|
:AccessLog => [],
|
133
149
|
:Logger => WEBrick::Log.new("/dev/null"),
|
150
|
+
# Disable TLS 1.3 to avoid interop issues with some JRuby/JDK combos during mTLS
|
151
|
+
:SSLOptions => (defined?(OpenSSL::SSL::OP_NO_TLSv1_3) ? OpenSSL::SSL::OP_NO_TLSv1_3 : 0),
|
134
152
|
}.merge(options)
|
135
153
|
)
|
136
154
|
server.mount_proc "/" do |req, res|
|
metadata
CHANGED
@@ -1,38 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manticore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Chris Heald
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-10-20 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
13
|
+
name: openssl_pkcs8_pure
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
18
|
version: '0'
|
19
|
-
name: openssl_pkcs8_pure
|
20
|
-
prerelease: false
|
21
19
|
type: :runtime
|
20
|
+
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
25
|
version: '0'
|
27
26
|
- !ruby/object:Gem::Dependency
|
27
|
+
name: jar-dependencies
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 0.4.1
|
33
|
-
name: jar-dependencies
|
34
|
-
prerelease: false
|
35
33
|
type: :development
|
34
|
+
prerelease: false
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
37
|
- - "~>"
|
@@ -45,9 +44,9 @@ executables: []
|
|
45
44
|
extensions: []
|
46
45
|
extra_rdoc_files: []
|
47
46
|
files:
|
47
|
+
- ".github/workflows/jruby-ci.yml"
|
48
48
|
- ".gitignore"
|
49
49
|
- ".gitlab-ci.yml"
|
50
|
-
- ".travis.yml"
|
51
50
|
- APACHE-LICENSE-2.0.txt
|
52
51
|
- CHANGELOG.md
|
53
52
|
- Gemfile
|
@@ -90,7 +89,6 @@ homepage: https://github.com/cheald/manticore
|
|
90
89
|
licenses:
|
91
90
|
- MIT
|
92
91
|
metadata: {}
|
93
|
-
post_install_message:
|
94
92
|
rdoc_options: []
|
95
93
|
require_paths:
|
96
94
|
- lib
|
@@ -105,13 +103,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
103
|
- !ruby/object:Gem::Version
|
106
104
|
version: '0'
|
107
105
|
requirements:
|
108
|
-
- jar org.apache.httpcomponents:httpclient, '~> 4.5.
|
109
|
-
- jar org.apache.httpcomponents:httpmime, '~> 4.5.
|
106
|
+
- jar org.apache.httpcomponents:httpclient, '~> 4.5.14'
|
107
|
+
- jar org.apache.httpcomponents:httpmime, '~> 4.5.14'
|
110
108
|
- jar commons-logging:commons-logging, '~> 1.2'
|
111
|
-
- jar commons-codec:commons-codec, '~> 1.
|
112
|
-
- jar org.apache.httpcomponents:httpcore, '~> 4.4.
|
113
|
-
rubygems_version: 3.
|
114
|
-
signing_key:
|
109
|
+
- jar commons-codec:commons-codec, '~> 1.11'
|
110
|
+
- jar org.apache.httpcomponents:httpcore, '~> 4.4.16'
|
111
|
+
rubygems_version: 3.6.3
|
115
112
|
specification_version: 4
|
116
113
|
summary: Manticore is an HTTP client built on the Apache HttpCore components
|
117
114
|
test_files:
|
data/.travis.yml
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
dist: trusty # due Oracle JDK
|
2
|
-
language: ruby
|
3
|
-
cache:
|
4
|
-
- bundler
|
5
|
-
- directories:
|
6
|
-
- $HOME/.m2
|
7
|
-
before_install:
|
8
|
-
- gem install bundler -v 1.17.3
|
9
|
-
matrix:
|
10
|
-
include:
|
11
|
-
- rvm: jruby-head
|
12
|
-
jdk: openjdk11
|
13
|
-
- rvm: jruby-9.3.4.0 # Ruby 2.6
|
14
|
-
jdk: openjdk11
|
15
|
-
- rvm: jruby-9.3.4.0
|
16
|
-
jdk: openjdk11
|
17
|
-
env:
|
18
|
-
- JRUBY_OPTS="-Xcompile.invokedynamic -Xjit.threshold=0"
|
19
|
-
- rvm: jruby-9.2.20.0 # Ruby 2.5
|
20
|
-
jdk: oraclejdk8
|
21
|
-
- rvm: jruby-9.2.20.0
|
22
|
-
jdk: openjdk11
|
23
|
-
- rvm: jruby-9.1.17.0 # Ruby 2.3
|
24
|
-
jdk: openjdk8
|
25
|
-
allow_failures:
|
26
|
-
- rvm: jruby-head
|