rs-httpclient 3.0.0.beta1
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 +7 -0
- data/README.md +85 -0
- data/bin/httpclient +77 -0
- data/bin/jsonclient +85 -0
- data/lib/hexdump.rb +50 -0
- data/lib/http-access2/cookie.rb +1 -0
- data/lib/http-access2/http.rb +1 -0
- data/lib/http-access2.rb +55 -0
- data/lib/httpclient/auth.rb +924 -0
- data/lib/httpclient/cacert.pem +3252 -0
- data/lib/httpclient/cacert1024.pem +3866 -0
- data/lib/httpclient/connection.rb +88 -0
- data/lib/httpclient/cookie.rb +220 -0
- data/lib/httpclient/http.rb +1082 -0
- data/lib/httpclient/include_client.rb +85 -0
- data/lib/httpclient/jruby_ssl_socket.rb +594 -0
- data/lib/httpclient/session.rb +960 -0
- data/lib/httpclient/ssl_config.rb +452 -0
- data/lib/httpclient/ssl_socket.rb +150 -0
- data/lib/httpclient/timeout.rb +140 -0
- data/lib/httpclient/util.rb +222 -0
- data/lib/httpclient/version.rb +3 -0
- data/lib/httpclient/webagent-cookie.rb +459 -0
- data/lib/httpclient.rb +1331 -0
- data/lib/jsonclient.rb +66 -0
- data/lib/oauthclient.rb +111 -0
- data/sample/async.rb +8 -0
- data/sample/auth.rb +11 -0
- data/sample/cookie.rb +18 -0
- data/sample/dav.rb +103 -0
- data/sample/generate_test_keys.rb +99 -0
- data/sample/howto.rb +49 -0
- data/sample/jsonclient.rb +67 -0
- data/sample/oauth_buzz.rb +57 -0
- data/sample/oauth_friendfeed.rb +59 -0
- data/sample/oauth_twitter.rb +61 -0
- data/sample/ssl/0cert.pem +22 -0
- data/sample/ssl/0key.pem +30 -0
- data/sample/ssl/1000cert.pem +19 -0
- data/sample/ssl/1000key.pem +18 -0
- data/sample/ssl/htdocs/index.html +10 -0
- data/sample/ssl/ssl_client.rb +22 -0
- data/sample/ssl/webrick_httpsd.rb +29 -0
- data/sample/stream.rb +21 -0
- data/sample/thread.rb +27 -0
- data/sample/wcat.rb +21 -0
- data/test/ca-chain.pem +40 -0
- data/test/ca.cert +20 -0
- data/test/ca.key +27 -0
- data/test/ca.srl +1 -0
- data/test/client-pass.key +30 -0
- data/test/client.cert +20 -0
- data/test/client.key +27 -0
- data/test/fixtures/verify.alt.cert +20 -0
- data/test/fixtures/verify.foo.cert +20 -0
- data/test/fixtures/verify.key +27 -0
- data/test/fixtures/verify.localhost.cert +20 -0
- data/test/helper.rb +129 -0
- data/test/htdigest +1 -0
- data/test/htpasswd +2 -0
- data/test/jruby_ssl_socket/test_pemutils.rb +32 -0
- data/test/runner.rb +2 -0
- data/test/server.cert +20 -0
- data/test/server.key +27 -0
- data/test/sslsvr.rb +65 -0
- data/test/subca.cert +20 -0
- data/test/subca.key +27 -0
- data/test/subca.srl +1 -0
- data/test/test_auth.rb +496 -0
- data/test/test_cookie.rb +309 -0
- data/test/test_hexdump.rb +13 -0
- data/test/test_http-access2.rb +516 -0
- data/test/test_httpclient.rb +2144 -0
- data/test/test_include_client.rb +52 -0
- data/test/test_jsonclient.rb +98 -0
- data/test/test_ssl.rb +522 -0
- data/test/test_webagent-cookie.rb +465 -0
- metadata +130 -0
data/test/helper.rb
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
|
|
4
|
+
require 'httpclient'
|
|
5
|
+
require 'webrick'
|
|
6
|
+
require 'webrick/httpproxy.rb'
|
|
7
|
+
require 'logger'
|
|
8
|
+
require 'stringio'
|
|
9
|
+
require 'cgi'
|
|
10
|
+
require 'webrick/httputils'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Helper
|
|
14
|
+
Port = 17171
|
|
15
|
+
ProxyPort = 17172
|
|
16
|
+
|
|
17
|
+
def serverport
|
|
18
|
+
@serverport
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def proxyport
|
|
22
|
+
@proxyport
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def serverurl
|
|
26
|
+
"http://localhost:#{serverport}/"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def proxyurl
|
|
30
|
+
"http://localhost:#{proxyport}/"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def setup
|
|
34
|
+
@logger = Logger.new(STDERR)
|
|
35
|
+
@logger.level = Logger::Severity::FATAL
|
|
36
|
+
@proxyio = StringIO.new
|
|
37
|
+
@proxylogger = Logger.new(@proxyio)
|
|
38
|
+
@proxylogger.level = Logger::Severity::DEBUG
|
|
39
|
+
@server = @proxyserver = @client = nil
|
|
40
|
+
@server_thread = @proxyserver_thread = nil
|
|
41
|
+
@serverport = Port
|
|
42
|
+
@proxyport = ProxyPort
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def teardown
|
|
46
|
+
teardown_client if @client
|
|
47
|
+
teardown_proxyserver if @proxyserver
|
|
48
|
+
teardown_server if @server
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def setup_client
|
|
52
|
+
@client = HTTPClient.new
|
|
53
|
+
# Set more reasonable timeouts to make debug easier
|
|
54
|
+
@client.connect_timeout = 3
|
|
55
|
+
@client.send_timeout = 3
|
|
56
|
+
@client.receive_timeout = 3
|
|
57
|
+
@client
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def escape_noproxy
|
|
61
|
+
backup = HTTPClient::NO_PROXY_HOSTS.dup
|
|
62
|
+
HTTPClient::NO_PROXY_HOSTS.clear
|
|
63
|
+
yield
|
|
64
|
+
ensure
|
|
65
|
+
HTTPClient::NO_PROXY_HOSTS.replace(backup)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def setup_proxyserver
|
|
69
|
+
@proxyserver = WEBrick::HTTPProxyServer.new(
|
|
70
|
+
:BindAddress => "localhost",
|
|
71
|
+
:Logger => @proxylogger,
|
|
72
|
+
:Port => 0,
|
|
73
|
+
:AccessLog => []
|
|
74
|
+
)
|
|
75
|
+
@proxyport = @proxyserver.config[:Port]
|
|
76
|
+
@proxyserver_thread = start_server_thread(@proxyserver)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def teardown_client
|
|
80
|
+
@client.reset_all
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def teardown_server
|
|
84
|
+
@server.shutdown
|
|
85
|
+
#@server_thread.kill
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def teardown_proxyserver
|
|
89
|
+
@proxyserver.shutdown
|
|
90
|
+
#@proxyserver_thread.kill
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def start_server_thread(server)
|
|
94
|
+
t = Thread.new {
|
|
95
|
+
Thread.current.abort_on_exception = true
|
|
96
|
+
server.start
|
|
97
|
+
}
|
|
98
|
+
while server.status != :Running
|
|
99
|
+
Thread.pass
|
|
100
|
+
unless t.alive?
|
|
101
|
+
t.join
|
|
102
|
+
raise
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
t
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def params(str)
|
|
109
|
+
HTTP::Message.parse(str).inject({}) { |r, (k, v)| r[k] = v.first; r }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def silent
|
|
113
|
+
begin
|
|
114
|
+
back, $VERBOSE = $VERBOSE, nil
|
|
115
|
+
yield
|
|
116
|
+
ensure
|
|
117
|
+
$VERBOSE = back
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def escape_env
|
|
122
|
+
env = {}
|
|
123
|
+
env.update(ENV)
|
|
124
|
+
yield
|
|
125
|
+
ensure
|
|
126
|
+
ENV.clear
|
|
127
|
+
ENV.update(env)
|
|
128
|
+
end
|
|
129
|
+
end
|
data/test/htdigest
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
admin:auth:4302fe65caa32f27721949149ccd3083
|
data/test/htpasswd
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require File.expand_path('helper', File.join(File.dirname(__FILE__), ".."))
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PEMUtilsTest < Test::Unit::TestCase
|
|
5
|
+
include Helper
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
@raw_cert = "-----BEGIN CERTIFICATE-----\nMIIDOTCCAiGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRMwEQYKCZImiZPyLGQB\nGRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQDDAdSdWJ5\nIENBMB4XDTE2MDgxMDE3MjEzNFoXDTE3MDgxMDE3MjEzNFowSzETMBEGCgmSJomT\n8ixkARkWA29yZzEZMBcGCgmSJomT8ixkARkWCXJ1YnktbGFuZzEZMBcGA1UEAwwQ\nUnVieSBjZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\nAJCfsSXpSMpmZCVa+ZCM+QDgomnhDlvnrGDq6pasTaIspGTXgws+7r8Dt/cNe6EH\nHJpRH2cGRiO4yPcfcT9eS4X7k8OC4f33wHfACOmLu6LeoNE8ujmSk6L6WzLUI+sE\nnLZbFrXxoAo4XHsm8vEG9C+jEoXZ1p+47wrAGaDwDQTnzlMy4dT9pRQEJP2G/Rry\nUkuZn8SUWmh3/YS78iaSzsNF1cgE1ealHOrPPFDjiCGDaH/LHyUPYlbFSLZ/B7Qx\nLxi5sePLcywWq/EJrmWpgeVTDjtNijsdKv/A3qkY+fm/oD0pzt7XsfJaP9YKNyJO\nQFdxWZeiPcDF+Hwf+IwSr+kCAwEAAaMxMC8wDgYDVR0PAQH/BAQDAgeAMB0GA1Ud\nDgQWBBQNvzYzJyXemGhxbA8NMXLolDnPyjANBgkqhkiG9w0BAQsFAAOCAQEARIJV\noKejGlOTn71QutnNnu07UtTu0IHs6YqjYzzND+m4JXLN+wvYm72AFUG0b1L7dRg0\niK8XjQrlNQNVqP1Mc6tffchy20neOPOHeiO6qTdRU8P2S8D3Uwe+1qhgxjfE+cWc\nwZmWxYK4HA8c58PxWMqrkr2QqXDplG9KWLvOgrtPGiLLZcQSKhvvB63QzItHBDU6\nRayiJY3oPkK/HrIvFlySqFqzWmuyknkciOFywEHQMz/tcSFJ2QFpPj/tBz9VXohH\nZ8KscmfhZrTPBjo+ky1lz/WraWoz4LMiLnkC2ABczWLRSawu+v3Irx1NFJngt05e\npqwtqIUeg7j+JLiTaA==\n-----END CERTIFICATE-----"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_read_certificate
|
|
12
|
+
assert_nothing_raised do
|
|
13
|
+
binary = HTTPClient::JRubySSLSocket::PEMUtils.read_certificate(@raw_cert)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_read_certificate_works_with_random_ascii_text_outside_begin_end
|
|
18
|
+
raw_cert_with_ascii = "some text before begin\n" + @raw_cert + "\nsome text after end"
|
|
19
|
+
assert_nothing_raised do
|
|
20
|
+
binary = HTTPClient::JRubySSLSocket::PEMUtils.read_certificate(raw_cert_with_ascii)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_read_certificate_uses_all_content_if_missing_begin_end
|
|
25
|
+
cert = @raw_cert.sub(/-----BEGIN CERTIFICATE-----/, '').sub(/-----END CERTIFICATE-----/, '')
|
|
26
|
+
assert_nothing_raised do
|
|
27
|
+
binary = HTTPClient::JRubySSLSocket::PEMUtils.read_certificate(cert)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
end
|
data/test/runner.rb
ADDED
data/test/server.cert
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDQzCCAiugAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJKUDES
|
|
3
|
+
MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxDjAMBgNVBAMMBVN1YkNB
|
|
4
|
+
MB4XDTI1MDIxMjA4NDIzMVoXDTM0MDIxMDA4NDIzMVowQzELMAkGA1UEBhMCSlAx
|
|
5
|
+
EjAQBgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMRIwEAYDVQQDDAlsb2Nh
|
|
6
|
+
bGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4SI2h/EryUcj5
|
|
7
|
+
yaPn4pOgRSv7VRwSOJX+6bBVmIuGgeSaqZXd9MpnewBhY9g1doOE3PfIVnnZNrFB
|
|
8
|
+
FHyJBYD7h6p35g8xyNJQ0HDJNd+xOw+LISoyNmgclGnjbtWzdRlzqnBAOjI7BxOs
|
|
9
|
+
MbX0ehkKMcl9VgAJczdGRpQewtDN8JLh8FivHH10txsAch78g7TK4OSfWLSJQg4b
|
|
10
|
+
dYIFEGKATKGutBCXHsDpuM1c0CFXU0qiH0FwnjKLJyyUEZg0WgTSn9PftR1PhVZ3
|
|
11
|
+
xx07FO+Cgku2QLeClKrJH6/9YsFa3W+AZmujt6Hp77LkBSVWDyYoBHDc+HPcIm0Z
|
|
12
|
+
AKg/YuH3AgMBAAGjRjBEMB0GA1UdDgQWBBTZgo2CimpIxBjlzlRwEKfA/3I3GDAO
|
|
13
|
+
BgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEL
|
|
14
|
+
BQADggEBAJcQ7A7a3XuMbc+eeyAhcoqlWyMpq8ktbVlc4jG7k5dITnXfDYxtMtre
|
|
15
|
+
byTezZRc0EWNEVDxmUkTskDfBjl6r3NgZk7lNIONaoMh3KgcyUa4BIjb3t5ifeKj
|
|
16
|
+
v+PbXD3G6zOpEfV5TSjnAXL/FVtSbsuLsLfu4TQLpZxEW2yRIW0ftOAsVCa0Ewo5
|
|
17
|
+
B78aN2aDrnSgVaTSZ3O+yto/3aVkQFVinCj7uLzoUZVcIQ0maCXTnxYORbAEQlu6
|
|
18
|
+
nt0faBMid8RX++niVh41WxmCkpnx6CnLScGdHsgrCho8C4gnm2hxAiKoLBaM88L5
|
|
19
|
+
VWt9rVhXmSOX4xeYUgVFfH14y2QMOpc=
|
|
20
|
+
-----END CERTIFICATE-----
|
data/test/server.key
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
MIIEoAIBAAKCAQEAuEiNofxK8lHI+cmj5+KToEUr+1UcEjiV/umwVZiLhoHkmqmV
|
|
3
|
+
3fTKZ3sAYWPYNXaDhNz3yFZ52TaxQRR8iQWA+4eqd+YPMcjSUNBwyTXfsTsPiyEq
|
|
4
|
+
MjZoHJRp427Vs3UZc6pwQDoyOwcTrDG19HoZCjHJfVYACXM3RkaUHsLQzfCS4fBY
|
|
5
|
+
rxx9dLcbAHIe/IO0yuDkn1i0iUIOG3WCBRBigEyhrrQQlx7A6bjNXNAhV1NKoh9B
|
|
6
|
+
cJ4yiycslBGYNFoE0p/T37UdT4VWd8cdOxTvgoJLtkC3gpSqyR+v/WLBWt1vgGZr
|
|
7
|
+
o7eh6e+y5AUlVg8mKARw3Phz3CJtGQCoP2Lh9wIDAQABAoIBAACUABdZNBL88Eur
|
|
8
|
+
g99SXD9m3o1A5kzYVWaIIFl9/p7cmw799GgB2jC0HhT87zMbvN99CGBeHq7wkPww
|
|
9
|
+
4dy8LuKbH/Nh8WJCmWy14Rfm512Mkq8cQSAIzULQF5TzE0PA3LEtzU3zE/1DatH7
|
|
10
|
+
eSRCZ2aBlkdvLm8/jhWjJ9iadXU8u2i6Cyvy/9S6KXcelopsRgpsA4Gn2t/q6FbS
|
|
11
|
+
IX9U1WzZz2/nOinCz4E7/Q/3zPxy4m2VRcdqWAMWtje+hFL/gu+IikkjMNlpxv6z
|
|
12
|
+
csZn1wyU36+FEW5UW9/m/NfyVQ7Uz6jI/zTYWFI0PIKpIlUe+brFCGA4qzIXoZt1
|
|
13
|
+
nwOcaIECgYEA5DSXZ/6WycMRsIOjZFzN5u3XBYts1Kg1Vm8AxaRwA0IYuftBwgB7
|
|
14
|
+
GxVY1IpGCaKrzLsYd2YI+xXxbM6FhAPu0AEyljtucp0KXlNMl325eHPvO+/TkTxn
|
|
15
|
+
PXwn8WJ1W3Hfe5goxPOFB6oG2Rwdsci5Q38Vtk/KPt6xKu71v7QMQecCgYEAzrp6
|
|
16
|
+
7zRLNIhRAUvuh49BrZ62yRO4aaATXtwunKxqot+HOD6SmQ/ywaosTYu8s8i8z/9O
|
|
17
|
+
TqnOtS0WPTYwWgXKas0ZS32U4LspxrzUU541yzOGxpGwsnq8HUlnYE5B0AqGTo7F
|
|
18
|
+
IeeKzN2YxT1juXXK3X+kFp/NUG53m/M4o0ZUfXECf1PK+80zripndhdaPqSbbv9c
|
|
19
|
+
VZezmkJ7gRo7qAzqVDbeDjY8C+kwRAOt0vA31X+0O2DxUgqFbMbFR+Cr9FqFFytJ
|
|
20
|
+
RUnkiKmNAEGiVH1LrM6Nw0o+xXCOvVnWPNRlUrJBHc5EELRAtpgZ1mnh6QVerqga
|
|
21
|
+
Ad7vbVOocWVSWOoLMnUCgYAcJLL7wajDXBN7E7VDazNLyaGkujSO3KYGcf8+gRJ7
|
|
22
|
+
Xebwt0QJ5mvsBZjGbdGgwCFER8OHXgKwE5VFfA0VFFi8NXPOHSiZd6F2VtqpD47P
|
|
23
|
+
PRKKEed2RNM7QXT7XWwEQIqMQ09/ECCLR1e28maTJwAZK3lRQywWWRObfX8mazqx
|
|
24
|
+
YQKBgELCw5RGDgff66mkq0nErDyQPn0aqjXcBSWH022HJgH0x2+nJcPeUWoottA0
|
|
25
|
+
FMPuY+Hf4WmQtuFW6d4h9ZgGfOl1R4b6coGvmndbAIow8e7Vnq7f/fBcGe4aCg8A
|
|
26
|
+
UjaMsQcAaDATYywB83203IzoeLU/W8Sk+zN3I+DWbE+iMyAh
|
|
27
|
+
-----END RSA PRIVATE KEY-----
|
data/test/sslsvr.rb
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'webrick/https'
|
|
2
|
+
require 'logger'
|
|
3
|
+
require 'rbconfig'
|
|
4
|
+
|
|
5
|
+
PORT = 17171
|
|
6
|
+
DIR = File.dirname(File.expand_path(__FILE__))
|
|
7
|
+
|
|
8
|
+
def cert(filename)
|
|
9
|
+
OpenSSL::X509::Certificate.new(File.open(File.join(DIR, filename)) { |f|
|
|
10
|
+
f.read
|
|
11
|
+
})
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def key(filename)
|
|
15
|
+
OpenSSL::PKey::RSA.new(File.open(File.join(DIR, filename)) { |f|
|
|
16
|
+
f.read
|
|
17
|
+
})
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def do_hello(req, res)
|
|
21
|
+
res['content-type'] = 'text/html'
|
|
22
|
+
res.body = "hello"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
logger = Logger.new(STDERR)
|
|
26
|
+
logger.level = Logger::Severity::FATAL # avoid logging SSLError (ERROR level)
|
|
27
|
+
|
|
28
|
+
server = WEBrick::HTTPServer.new(
|
|
29
|
+
:BindAddress => "localhost",
|
|
30
|
+
:Logger => logger,
|
|
31
|
+
:Port => PORT,
|
|
32
|
+
:AccessLog => [],
|
|
33
|
+
:DocumentRoot => DIR,
|
|
34
|
+
:SSLEnable => true,
|
|
35
|
+
:SSLCACertificateFile => File.join(DIR, 'ca.cert'),
|
|
36
|
+
:SSLCertificate => cert('server.cert'),
|
|
37
|
+
:SSLPrivateKey => key('server.key'),
|
|
38
|
+
:SSLVerifyClient => nil, #OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT|OpenSSL::SSL::VERIFY_PEER,
|
|
39
|
+
:SSLClientCA => cert('ca.cert'),
|
|
40
|
+
:SSLCertName => nil
|
|
41
|
+
)
|
|
42
|
+
trap(:INT) do
|
|
43
|
+
server.shutdown
|
|
44
|
+
end
|
|
45
|
+
[:hello].each do |sym|
|
|
46
|
+
server.mount(
|
|
47
|
+
"/#{sym}",
|
|
48
|
+
WEBrick::HTTPServlet::ProcHandler.new(method("do_#{sym}").to_proc)
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
t = Thread.new {
|
|
53
|
+
Thread.current.abort_on_exception = true
|
|
54
|
+
server.start
|
|
55
|
+
}
|
|
56
|
+
while server.status != :Running
|
|
57
|
+
sleep 0.1
|
|
58
|
+
unless t.alive?
|
|
59
|
+
t.join
|
|
60
|
+
raise
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
STDOUT.sync = true
|
|
64
|
+
puts $$
|
|
65
|
+
t.join
|
data/test/subca.cert
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDODCCAiCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADA8MQswCQYDVQQGEwJKUDES
|
|
3
|
+
MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
|
|
4
|
+
DTI1MDIxMjA4NDIzMVoXDTM0MDIxMDA4NDIzMVowPzELMAkGA1UEBhMCSlAxEjAQ
|
|
5
|
+
BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQ4wDAYDVQQDDAVTdWJDQTCC
|
|
6
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALmNNo+I5XkgbBTJbvKgJxq5
|
|
7
|
+
oiJMEInr64KiCJOsA5Z35oE25a8OIWeRqxKW+jufonF96V/swWNM11gaUcTjYT72
|
|
8
|
+
g66ux42vWNN8uFxhhqhYRyiMjfSVA3HUZFaqmU9WP7H3YQGINJZ83BPOYoinZXEP
|
|
9
|
+
TrQVa8wIKT9Xc5gOq7+SqUuqLvs4jIkgrB744Fo0soCh5WT3V3Op/5K8MA0+N3P4
|
|
10
|
+
VrFm/SP8k7deT3EtT/aOHgkaKLo3hQ8zkDegVFEKfmWyoA/MwTSciioX/ePm7jjb
|
|
11
|
+
z4ffl5/ifg3Hgmuk6m85ZaGULJHCkciEgP8scZUNHkRvDK6ZBluwrUpepv5ARUsC
|
|
12
|
+
AwEAAaNCMEAwHQYDVR0OBBYEFErc4GxPO8mVXXhTgje5yLxWLh0bMA4GA1UdDwEB
|
|
13
|
+
/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCAcHOU
|
|
14
|
+
nvhuV6Vuh4gNZjeLJWapJBVYZdkAOd4EhiWtYpq0wWSqlgE+VzIXV9gccYaulVmf
|
|
15
|
+
NJoLuenzML764U8kOBk8mOWg+U5AYOXwRgsU+e56jgWG6/ijLSf7YfaVkVZNPe36
|
|
16
|
+
59+0KLag6AkkeDOdXbkfageukg6LhTk4Zg1piRMP3JSYbXVzTlgdm8hLKgPOJitQ
|
|
17
|
+
FdjMytGYCU5oGHrRrwhlar0xlIvynzVL5wlkuJ19hKUw4UYjoNFy3ZJtbtdqSaF2
|
|
18
|
+
ZGX/8KNDYFoHAyvGZCYTr22T1ywWeMFQ+4beiYEv2lifVcYIoI0bEA8Pe9i3Egiv
|
|
19
|
+
9u18A/unCSVLPua1
|
|
20
|
+
-----END CERTIFICATE-----
|
data/test/subca.key
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
MIIEowIBAAKCAQEAuY02j4jleSBsFMlu8qAnGrmiIkwQievrgqIIk6wDlnfmgTbl
|
|
3
|
+
rw4hZ5GrEpb6O5+icX3pX+zBY0zXWBpRxONhPvaDrq7Hja9Y03y4XGGGqFhHKIyN
|
|
4
|
+
9JUDcdRkVqqZT1Y/sfdhAYg0lnzcE85iiKdlcQ9OtBVrzAgpP1dzmA6rv5KpS6ou
|
|
5
|
+
+ziMiSCsHvjgWjSygKHlZPdXc6n/krwwDT43c/hWsWb9I/yTt15PcS1P9o4eCRoo
|
|
6
|
+
ujeFDzOQN6BUUQp+ZbKgD8zBNJyKKhf94+buONvPh9+Xn+J+DceCa6TqbzlloZQs
|
|
7
|
+
kcKRyISA/yxxlQ0eRG8MrpkGW7CtSl6m/kBFSwIDAQABAoIBAFXknjCkhOFk1lNr
|
|
8
|
+
CZ5r754p93lb774AxWUT39eIJaMGPuBqyrkV1/XLEz+IPy7Rj09tI1ah0MXIYNkq
|
|
9
|
+
WdbEERSl5cA7rSmT1ZEU53zwMncEYnBNXDsvrcgIMyiBUXXN7a9S3gdpBzrwcqoC
|
|
10
|
+
fE9Y+hbzqJGpZtysnHdzYpGtnOiRT92atZudOR6qXKQA28qeuidZ3kNoasKysatD
|
|
11
|
+
ohhIQ8qErEQ6umGAvdjG/hf19j9c5ZuwQDJpfsczlpTHF3fgKiNJoQAb5GExhGW0
|
|
12
|
+
E2QaQzH1z60Cb+4rP2M6B7cw/2qf6gZxWXerQoVrcrd69osB7OjmWw5Ue7JlNGEO
|
|
13
|
+
s0SeLl0CgYEA6f79uANVeEFSzNrZxuR7zRQfKNiZNa162rTiGpSXfTRaGJI9x2uF
|
|
14
|
+
spt62KkYaTKBq2jK6V83rjK28+pA+Q9D+YxPd+vShNCcd8AtOIElFSWwq8If1c03
|
|
15
|
+
2LmJg7JO8PYPLJKT41ANC75nv/qoRap5idw/9z4QrVuO/y3hlFckDycCgYEAywAD
|
|
16
|
+
r7wj7jp7/M5M4SehACOh2ztzSjBcWG4INq1XguyIsEb5MLB3y9GV5jgwhulJO+kw
|
|
17
|
+
Yo8hVGf5g21NS9TxvHEXNXERQYZQ34HZPmHrp0t8gYDmMLlFDAdiyojpB5TObKoz
|
|
18
|
+
hUqhegAnv4Do0xkhpBHzHMZzu3+v8Nkv+ylrrz0CgYEA0A90SEdmmvvyhMZf9/K3
|
|
19
|
+
hf1LS4V0jX8IiyllFl9jZ+fB6LE4D3aytcJ78+Q/GWLYW7JdIi8REmpztORpC0wg
|
|
20
|
+
k+bHzoi4cnIPfoc5blGeyHPv6Hk+11uXObSX6qsEeEtB6M8YgnlucC/IjrJxJyjS
|
|
21
|
+
0tstYUkliQ+tUYbZWo41OOcCgYA/duSwJ0iwbPZgZfrhFWufSISMrrxvgEkOmG/W
|
|
22
|
+
8ECAvQRK4BV95F2/iemsTPrW4s4zfcbTuV25LrxyG1TkFVHyEQUpfwzfCGf2SHkr
|
|
23
|
+
qJ9s8QuezTaqGvH8Pb7kBQOdjCcxD9EFpfxv0OacV2fyv1OmILp5z41VHClcSfpX
|
|
24
|
+
Mm7pHQKBgAFdYkZJBSg5xUJY18Fl2E6qRS8+LbOf85CHDrVQ5SrbuMLfgcDtHxJS
|
|
25
|
+
1Hcsek+VpQENeYnAtE2QObTWPjWiU1AWHtH24bFLNJgWfzd4uwz/sduOX+mGqUZh
|
|
26
|
+
zXTqd1n4UZgEmAuFECfY3R1aUG0bZx64k36g7QvW9WGRr+naKNqp
|
|
27
|
+
-----END RSA PRIVATE KEY-----
|
data/test/subca.srl
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1A196228872FBD912F1AED26DF7847E9BE54F0EA
|