httpi 1.1.1 → 2.0.0.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.
- data/.gitignore +2 -0
- data/.rvmrc +1 -0
- data/CHANGELOG.md +51 -26
- data/Gemfile +6 -4
- data/README.md +19 -205
- data/httpi.gemspec +7 -10
- data/lib/httpi.rb +54 -56
- data/lib/httpi/adapter.rb +25 -18
- data/lib/httpi/adapter/base.rb +35 -0
- data/lib/httpi/adapter/curb.rb +59 -60
- data/lib/httpi/adapter/em_http.rb +126 -0
- data/lib/httpi/adapter/httpclient.rb +33 -63
- data/lib/httpi/adapter/net_http.rb +44 -62
- data/lib/httpi/auth/ssl.rb +26 -2
- data/lib/httpi/dime.rb +45 -29
- data/lib/httpi/request.rb +1 -1
- data/lib/httpi/response.rb +6 -4
- data/lib/httpi/version.rb +1 -1
- data/spec/httpi/adapter/base_spec.rb +23 -0
- data/spec/httpi/adapter/curb_spec.rb +107 -67
- data/spec/httpi/adapter/em_http_spec.rb +168 -0
- data/spec/httpi/adapter/httpclient_spec.rb +67 -56
- data/spec/httpi/adapter/net_http_spec.rb +62 -47
- data/spec/httpi/adapter_spec.rb +15 -2
- data/spec/httpi/auth/ssl_spec.rb +34 -1
- data/spec/httpi/httpi_spec.rb +80 -115
- data/spec/integration/fixtures/ca.pem +23 -0
- data/spec/integration/fixtures/ca_all.pem +44 -0
- data/spec/integration/fixtures/htdigest +1 -0
- data/spec/integration/fixtures/htpasswd +2 -0
- data/spec/integration/fixtures/server.cert +19 -0
- data/spec/integration/fixtures/server.key +15 -0
- data/spec/integration/fixtures/subca.pem +21 -0
- data/spec/integration/request_spec.rb +15 -2
- data/spec/integration/ssl_server.rb +70 -0
- data/spec/integration/ssl_spec.rb +102 -0
- data/spec/support/fixture.rb +1 -1
- metadata +60 -73
data/spec/httpi/adapter_spec.rb
CHANGED
@@ -4,6 +4,19 @@ require "httpi/adapter"
|
|
4
4
|
describe HTTPI::Adapter do
|
5
5
|
let(:adapter) { HTTPI::Adapter }
|
6
6
|
|
7
|
+
describe ".register" do
|
8
|
+
it "registers a new adapter" do
|
9
|
+
name = :custom
|
10
|
+
klass = Class.new
|
11
|
+
deps = %w(some_dependency)
|
12
|
+
|
13
|
+
adapter.register(name, klass, deps)
|
14
|
+
|
15
|
+
HTTPI::Adapter::ADAPTERS[:custom].should include(:class => klass, :deps => deps)
|
16
|
+
HTTPI::Adapter::ADAPTER_CLASS_MAP[klass].should be(name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
7
20
|
describe ".use" do
|
8
21
|
around do |example|
|
9
22
|
adapter.use = nil
|
@@ -35,13 +48,13 @@ describe HTTPI::Adapter do
|
|
35
48
|
describe ".load" do
|
36
49
|
context "called with a valid adapter" do
|
37
50
|
it "returns the adapter's name and class" do
|
38
|
-
adapter.load(:
|
51
|
+
adapter.load(:net_http).should == HTTPI::Adapter::NetHTTP
|
39
52
|
end
|
40
53
|
end
|
41
54
|
|
42
55
|
context "called with nil" do
|
43
56
|
it "returns the default adapter's name and class" do
|
44
|
-
adapter.load(nil).should ==
|
57
|
+
adapter.load(nil).should == HTTPI::Adapter::HTTPClient
|
45
58
|
end
|
46
59
|
end
|
47
60
|
|
data/spec/httpi/auth/ssl_spec.rb
CHANGED
@@ -53,7 +53,9 @@ describe HTTPI::Auth::SSL do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "raises an ArgumentError if the given mode is not supported" do
|
56
|
-
expect { ssl.verify_mode = :invalid }.
|
56
|
+
expect { ssl.verify_mode = :invalid }.
|
57
|
+
to raise_error(ArgumentError, "Invalid SSL verify mode :invalid\n" +
|
58
|
+
"Please specify one of [:none, :peer, :fail_if_no_peer_cert, :client_once]")
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
@@ -132,6 +134,37 @@ describe HTTPI::Auth::SSL do
|
|
132
134
|
end
|
133
135
|
end
|
134
136
|
|
137
|
+
describe "SSL_VERSIONS" do
|
138
|
+
it "contains the supported SSL versions" do
|
139
|
+
HTTPI::Auth::SSL::SSL_VERSIONS.should == [:TLSv1, :SSLv2, :SSLv3]
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "#ssl_version" do
|
144
|
+
subject { HTTPI::Auth::SSL.new }
|
145
|
+
|
146
|
+
it 'returns the SSL version for :TLSv1' do
|
147
|
+
subject.ssl_version = :TLSv1
|
148
|
+
subject.ssl_version.should eq(:TLSv1)
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'returns the SSL version for :SSLv2' do
|
152
|
+
subject.ssl_version = :SSLv2
|
153
|
+
subject.ssl_version.should eq(:SSLv2)
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'returns the SSL version for :SSLv3' do
|
157
|
+
subject.ssl_version = :SSLv3
|
158
|
+
subject.ssl_version.should eq(:SSLv3)
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'raises ArgumentError if the version is unsupported' do
|
162
|
+
expect { ssl.ssl_version = :ssl_fail }.
|
163
|
+
to raise_error(ArgumentError, "Invalid SSL version :ssl_fail\n" +
|
164
|
+
"Please specify one of [:TLSv1, :SSLv2, :SSLv3]")
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
135
168
|
def ssl
|
136
169
|
ssl = HTTPI::Auth::SSL.new
|
137
170
|
ssl.cert_key_file = "spec/fixtures/client_key.pem"
|
data/spec/httpi/httpi_spec.rb
CHANGED
@@ -3,243 +3,208 @@ require "httpi"
|
|
3
3
|
|
4
4
|
describe HTTPI do
|
5
5
|
let(:client) { HTTPI }
|
6
|
-
let(:httpclient) { HTTPI::Adapter.load(:httpclient)
|
7
|
-
let(:
|
6
|
+
let(:httpclient) { HTTPI::Adapter.load(:httpclient) }
|
7
|
+
let(:net_http) { HTTPI::Adapter.load(:net_http) }
|
8
|
+
|
9
|
+
describe ".adapter=" do
|
10
|
+
it "sets the default adapter to use" do
|
11
|
+
HTTPI::Adapter.expects(:use=).with(:net_http)
|
12
|
+
HTTPI.adapter = :net_http
|
13
|
+
end
|
14
|
+
end
|
8
15
|
|
9
16
|
describe ".get(request)" do
|
10
17
|
it "executes a GET request using the default adapter" do
|
11
|
-
request = HTTPI::Request.new
|
12
|
-
httpclient.any_instance.expects(:
|
18
|
+
request = HTTPI::Request.new("http://example.com")
|
19
|
+
httpclient.any_instance.expects(:request).with(:get)
|
13
20
|
|
14
|
-
client.get
|
21
|
+
client.get(request)
|
15
22
|
end
|
16
23
|
end
|
17
24
|
|
18
25
|
describe ".get(request, adapter)" do
|
19
26
|
it "executes a GET request using the given adapter" do
|
20
|
-
request = HTTPI::Request.new
|
21
|
-
|
27
|
+
request = HTTPI::Request.new("http://example.com")
|
28
|
+
net_http.any_instance.expects(:request).with(:get)
|
22
29
|
|
23
|
-
client.get
|
30
|
+
client.get(request, :net_http)
|
24
31
|
end
|
25
32
|
end
|
26
33
|
|
27
34
|
describe ".get(url)" do
|
28
35
|
it "executes a GET request using the default adapter" do
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
client.get "http://example.com"
|
36
|
+
httpclient.any_instance.expects(:request).with(:get)
|
37
|
+
client.get("http://example.com")
|
33
38
|
end
|
34
39
|
end
|
35
40
|
|
36
41
|
describe ".get(url, adapter)" do
|
37
42
|
it "executes a GET request using the given adapter" do
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
client.get "http://example.com", :curb
|
43
|
+
net_http.any_instance.expects(:request).with(:get)
|
44
|
+
client.get("http://example.com", :net_http)
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
45
48
|
describe ".post(request)" do
|
46
49
|
it "executes a POST request using the default adapter" do
|
47
|
-
request = HTTPI::Request.new
|
48
|
-
httpclient.any_instance.expects(:
|
50
|
+
request = HTTPI::Request.new("http://example.com")
|
51
|
+
httpclient.any_instance.expects(:request).with(:post)
|
49
52
|
|
50
|
-
client.post
|
53
|
+
client.post(request)
|
51
54
|
end
|
52
55
|
end
|
53
56
|
|
54
57
|
describe ".post(request, adapter)" do
|
55
58
|
it "executes a POST request using the given adapter" do
|
56
|
-
request = HTTPI::Request.new
|
57
|
-
|
59
|
+
request = HTTPI::Request.new("http://example.com")
|
60
|
+
net_http.any_instance.expects(:request).with(:post, anything)
|
58
61
|
|
59
|
-
client.post
|
62
|
+
client.post(request, :net_http)
|
60
63
|
end
|
61
64
|
end
|
62
65
|
|
63
66
|
describe ".post(url, body)" do
|
64
67
|
it "executes a POST request using the default adapter" do
|
65
|
-
|
66
|
-
|
67
|
-
httpclient.any_instance.expects(:post).with(instance_of(HTTPI::Request))
|
68
|
-
|
69
|
-
client.post "http://example.com", "<some>xml</some>"
|
68
|
+
httpclient.any_instance.expects(:request).with(:post)
|
69
|
+
client.post("http://example.com", "<some>xml</some>")
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
73
|
describe ".post(url, body, adapter)" do
|
74
74
|
it "executes a POST request using the given adapter" do
|
75
|
-
|
76
|
-
|
77
|
-
curb.any_instance.expects(:post).with(instance_of(HTTPI::Request))
|
78
|
-
|
79
|
-
client.post "http://example.com", "<some>xml</some>", :curb
|
75
|
+
net_http.any_instance.expects(:request).with(:post)
|
76
|
+
client.post("http://example.com", "<some>xml</some>", :net_http)
|
80
77
|
end
|
81
78
|
end
|
82
79
|
|
83
80
|
describe ".head(request)" do
|
84
81
|
it "executes a HEAD request using the default adapter" do
|
85
|
-
request = HTTPI::Request.new
|
86
|
-
httpclient.any_instance.expects(:
|
82
|
+
request = HTTPI::Request.new("http://example.com")
|
83
|
+
httpclient.any_instance.expects(:request).with(:head, anything)
|
87
84
|
|
88
|
-
client.head
|
85
|
+
client.head(request)
|
89
86
|
end
|
90
87
|
end
|
91
88
|
|
92
89
|
describe ".head(request, adapter)" do
|
93
90
|
it "executes a HEAD request using the given adapter" do
|
94
|
-
request = HTTPI::Request.new
|
95
|
-
|
91
|
+
request = HTTPI::Request.new("http://example.com")
|
92
|
+
net_http.any_instance.expects(:request).with(:head, anything)
|
96
93
|
|
97
|
-
client.head
|
94
|
+
client.head(request, :net_http)
|
98
95
|
end
|
99
96
|
end
|
100
97
|
|
101
98
|
describe ".head(url)" do
|
102
99
|
it "executes a HEAD request using the default adapter" do
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
client.head "http://example.com"
|
100
|
+
httpclient.any_instance.expects(:request).with(:head)
|
101
|
+
client.head("http://example.com")
|
107
102
|
end
|
108
103
|
end
|
109
104
|
|
110
105
|
describe ".head(url, adapter)" do
|
111
106
|
it "executes a HEAD request using the given adapter" do
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
client.head "http://example.com", :curb
|
107
|
+
net_http.any_instance.expects(:request).with(:head)
|
108
|
+
client.head("http://example.com", :net_http)
|
116
109
|
end
|
117
110
|
end
|
118
111
|
|
119
112
|
describe ".put(request)" do
|
120
113
|
it "executes a PUT request using the default adapter" do
|
121
|
-
request = HTTPI::Request.new
|
122
|
-
httpclient.any_instance.expects(:
|
114
|
+
request = HTTPI::Request.new("http://example.com")
|
115
|
+
httpclient.any_instance.expects(:request).with(:put, anything)
|
123
116
|
|
124
|
-
client.put
|
117
|
+
client.put(request)
|
125
118
|
end
|
126
119
|
end
|
127
120
|
|
128
121
|
describe ".put(request, adapter)" do
|
129
122
|
it "executes a PUT request using the given adapter" do
|
130
|
-
request = HTTPI::Request.new
|
131
|
-
|
123
|
+
request = HTTPI::Request.new("http://example.com")
|
124
|
+
net_http.any_instance.expects(:request).with(:put, anything)
|
132
125
|
|
133
|
-
client.put
|
126
|
+
client.put(request, :net_http)
|
134
127
|
end
|
135
128
|
end
|
136
129
|
|
137
130
|
describe ".put(url, body)" do
|
138
131
|
it "executes a PUT request using the default adapter" do
|
139
|
-
|
140
|
-
|
141
|
-
httpclient.any_instance.expects(:put).with(instance_of(HTTPI::Request))
|
142
|
-
|
143
|
-
client.put "http://example.com", "<some>xml</some>"
|
132
|
+
httpclient.any_instance.expects(:request).with(:put)
|
133
|
+
client.put("http://example.com", "<some>xml</some>")
|
144
134
|
end
|
145
135
|
end
|
146
136
|
|
147
137
|
describe ".put(url, body, adapter)" do
|
148
138
|
it "executes a PUT request using the given adapter" do
|
149
|
-
|
150
|
-
|
151
|
-
curb.any_instance.expects(:put).with(instance_of(HTTPI::Request))
|
152
|
-
|
153
|
-
client.put "http://example.com", "<some>xml</some>", :curb
|
139
|
+
net_http.any_instance.expects(:request).with(:put)
|
140
|
+
client.put("http://example.com", "<some>xml</some>", :net_http)
|
154
141
|
end
|
155
142
|
end
|
156
143
|
|
157
144
|
describe ".delete(request)" do
|
158
145
|
it "executes a DELETE request using the default adapter" do
|
159
|
-
request = HTTPI::Request.new
|
160
|
-
httpclient.any_instance.expects(:
|
146
|
+
request = HTTPI::Request.new("http://example.com")
|
147
|
+
httpclient.any_instance.expects(:request).with(:delete, anything)
|
161
148
|
|
162
|
-
client.delete
|
149
|
+
client.delete(request)
|
163
150
|
end
|
164
151
|
end
|
165
152
|
|
166
153
|
describe ".delete(request, adapter)" do
|
167
154
|
it "executes a DELETE request using the given adapter" do
|
168
|
-
request = HTTPI::Request.new
|
169
|
-
|
155
|
+
request = HTTPI::Request.new("http://example.com")
|
156
|
+
net_http.any_instance.expects(:request).with(:delete, anything)
|
170
157
|
|
171
|
-
client.delete
|
158
|
+
client.delete(request, :net_http)
|
172
159
|
end
|
173
160
|
end
|
174
161
|
|
175
162
|
describe ".delete(url)" do
|
176
163
|
it "executes a DELETE request using the default adapter" do
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
client.delete "http://example.com"
|
164
|
+
httpclient.any_instance.expects(:request).with(:delete)
|
165
|
+
client.delete("http://example.com")
|
181
166
|
end
|
182
167
|
end
|
183
168
|
|
184
169
|
describe ".delete(url, adapter)" do
|
185
170
|
it "executes a DELETE request using the given adapter" do
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
client.delete "http://example.com", :curb
|
171
|
+
net_http.any_instance.expects(:request).with(:delete)
|
172
|
+
client.delete("http://example.com", :net_http)
|
190
173
|
end
|
191
174
|
end
|
192
175
|
|
193
176
|
describe ".request" do
|
194
|
-
it "
|
195
|
-
|
196
|
-
|
197
|
-
end
|
177
|
+
it "allows custom HTTP methods" do
|
178
|
+
request = HTTPI::Request.new("http://example.com")
|
179
|
+
httpclient.any_instance.expects(:request).with(:custom)
|
198
180
|
|
199
|
-
|
200
|
-
it "sets the default adapter to use" do
|
201
|
-
HTTPI::Adapter.expects(:use=).with(:net_http)
|
202
|
-
HTTPI.adapter = :net_http
|
181
|
+
client.request(:custom, request, :httpclient)
|
203
182
|
end
|
204
183
|
end
|
205
184
|
|
206
185
|
HTTPI::REQUEST_METHODS.each do |method|
|
207
|
-
describe ".request(#{method}, request, adapter)" do
|
208
|
-
it "delegates to the .#{method} method" do
|
209
|
-
HTTPI.expects(method)
|
210
|
-
client.request method, HTTPI::Request.new
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
186
|
describe ".#{method}" do
|
215
|
-
let(:request) { HTTPI::Request.new
|
187
|
+
let(:request) { HTTPI::Request.new("http://example.com") }
|
216
188
|
|
217
189
|
it "raises an ArgumentError in case of an invalid adapter" do
|
218
190
|
expect { client.request method, request, :invalid }.to raise_error(ArgumentError)
|
219
191
|
end
|
220
192
|
|
221
|
-
it "raises an ArgumentError in case of an invalid request" do
|
222
|
-
expect { client.request method, "invalid" }.to raise_error(ArgumentError)
|
223
|
-
end
|
224
|
-
|
225
193
|
HTTPI::Adapter::ADAPTERS.each do |adapter, opts|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
client
|
238
|
-
|
239
|
-
|
240
|
-
it "yields the HTTP client instance used for the request" do
|
241
|
-
block = lambda { |http| http.be_a(client_class[adapter].call) }
|
242
|
-
client.request(method, request, adapter, &block)
|
194
|
+
unless (adapter == :em_http && RUBY_VERSION =~ /1\.8/) || (adapter == :curb && RUBY_PLATFORM =~ /java/)
|
195
|
+
client_class = {
|
196
|
+
:httpclient => lambda { HTTPClient },
|
197
|
+
:curb => lambda { Curl::Easy },
|
198
|
+
:net_http => lambda { Net::HTTP },
|
199
|
+
:em_http => lambda { EventMachine::WebMockHttpConnection } # in real life: EventMachine::HttpRequest
|
200
|
+
}
|
201
|
+
|
202
|
+
context "using #{adapter}" do
|
203
|
+
before { opts[:class].any_instance.expects(:request).with(method) }
|
204
|
+
|
205
|
+
it "yields the HTTP client instance used for the request" do
|
206
|
+
expect { |b| client.request(method, request, adapter, &b) }.to yield_with_args(client_class[adapter].call)
|
207
|
+
end
|
243
208
|
end
|
244
209
|
end
|
245
210
|
end
|
@@ -267,8 +232,8 @@ describe HTTPI do
|
|
267
232
|
end
|
268
233
|
|
269
234
|
describe ".log_level" do
|
270
|
-
it "defaults to :
|
271
|
-
HTTPI.log_level.should == :
|
235
|
+
it "defaults to :debug" do
|
236
|
+
HTTPI.log_level.should == :debug
|
272
237
|
end
|
273
238
|
end
|
274
239
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIID0DCCArigAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
|
3
|
+
MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
|
4
|
+
DTA0MDEzMDAwNDIzMloXDTM2MDEyMjAwNDIzMlowPDELMAkGA1UEBgwCSlAxEjAQ
|
5
|
+
BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQswCQYDVQQDDAJDQTCCASIw
|
6
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbv0x42BTKFEQOE+KJ2XmiSdZpR
|
7
|
+
wjzQLAkPLRnLB98tlzs4xo+y4RyY/rd5TT9UzBJTIhP8CJi5GbS1oXEerQXB3P0d
|
8
|
+
L5oSSMwGGyuIzgZe5+vZ1kgzQxMEKMMKlzA73rbMd4Jx3u5+jdbP0EDrPYfXSvLY
|
9
|
+
bS04n2aX7zrN3x5KdDrNBfwBio2/qeaaj4+9OxnwRvYP3WOvqdW0h329eMfHw0pi
|
10
|
+
JI0drIVdsEqClUV4pebT/F+CPUPkEh/weySgo9wANockkYu5ujw2GbLFcO5LXxxm
|
11
|
+
dEfcVr3r6t6zOA4bJwL0W/e6LBcrwiG/qPDFErhwtgTLYf6Er67SzLyA66UCAwEA
|
12
|
+
AaOB3DCB2TAPBgNVHRMBAf8EBTADAQH/MDEGCWCGSAGG+EIBDQQkFiJSdWJ5L09w
|
13
|
+
ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRJ7Xd380KzBV7f
|
14
|
+
USKIQ+O/vKbhDzAOBgNVHQ8BAf8EBAMCAQYwZAYDVR0jBF0wW4AUSe13d/NCswVe
|
15
|
+
31EiiEPjv7ym4Q+hQKQ+MDwxCzAJBgNVBAYMAkpQMRIwEAYDVQQKDAlKSU4uR1Iu
|
16
|
+
SlAxDDAKBgNVBAsMA1JSUjELMAkGA1UEAwwCQ0GCAQAwDQYJKoZIhvcNAQEFBQAD
|
17
|
+
ggEBAIu/mfiez5XN5tn2jScgShPgHEFJBR0BTJBZF6xCk0jyqNx/g9HMj2ELCuK+
|
18
|
+
r/Y7KFW5c5M3AQ+xWW0ZSc4kvzyTcV7yTVIwj2jZ9ddYMN3nupZFgBK1GB4Y05GY
|
19
|
+
MJJFRkSu6d/Ph5ypzBVw2YMT/nsOo5VwMUGLgS7YVjU+u/HNWz80J3oO17mNZllj
|
20
|
+
PvORJcnjwlroDnS58KoJ7GDgejv3ESWADvX1OHLE4cRkiQGeLoEU4pxdCxXRqX0U
|
21
|
+
PbwIkZN9mXVcrmPHq8MWi4eC/V7hnbZETMHuWhUoiNdOEfsAXr3iP4KjyyRdwc7a
|
22
|
+
d/xgcK06UVQRL/HbEYGiQL056mc=
|
23
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,44 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIID0DCCArigAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
|
3
|
+
MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
|
4
|
+
DTA0MDEzMDAwNDIzMloXDTM2MDEyMjAwNDIzMlowPDELMAkGA1UEBgwCSlAxEjAQ
|
5
|
+
BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQswCQYDVQQDDAJDQTCCASIw
|
6
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbv0x42BTKFEQOE+KJ2XmiSdZpR
|
7
|
+
wjzQLAkPLRnLB98tlzs4xo+y4RyY/rd5TT9UzBJTIhP8CJi5GbS1oXEerQXB3P0d
|
8
|
+
L5oSSMwGGyuIzgZe5+vZ1kgzQxMEKMMKlzA73rbMd4Jx3u5+jdbP0EDrPYfXSvLY
|
9
|
+
bS04n2aX7zrN3x5KdDrNBfwBio2/qeaaj4+9OxnwRvYP3WOvqdW0h329eMfHw0pi
|
10
|
+
JI0drIVdsEqClUV4pebT/F+CPUPkEh/weySgo9wANockkYu5ujw2GbLFcO5LXxxm
|
11
|
+
dEfcVr3r6t6zOA4bJwL0W/e6LBcrwiG/qPDFErhwtgTLYf6Er67SzLyA66UCAwEA
|
12
|
+
AaOB3DCB2TAPBgNVHRMBAf8EBTADAQH/MDEGCWCGSAGG+EIBDQQkFiJSdWJ5L09w
|
13
|
+
ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRJ7Xd380KzBV7f
|
14
|
+
USKIQ+O/vKbhDzAOBgNVHQ8BAf8EBAMCAQYwZAYDVR0jBF0wW4AUSe13d/NCswVe
|
15
|
+
31EiiEPjv7ym4Q+hQKQ+MDwxCzAJBgNVBAYMAkpQMRIwEAYDVQQKDAlKSU4uR1Iu
|
16
|
+
SlAxDDAKBgNVBAsMA1JSUjELMAkGA1UEAwwCQ0GCAQAwDQYJKoZIhvcNAQEFBQAD
|
17
|
+
ggEBAIu/mfiez5XN5tn2jScgShPgHEFJBR0BTJBZF6xCk0jyqNx/g9HMj2ELCuK+
|
18
|
+
r/Y7KFW5c5M3AQ+xWW0ZSc4kvzyTcV7yTVIwj2jZ9ddYMN3nupZFgBK1GB4Y05GY
|
19
|
+
MJJFRkSu6d/Ph5ypzBVw2YMT/nsOo5VwMUGLgS7YVjU+u/HNWz80J3oO17mNZllj
|
20
|
+
PvORJcnjwlroDnS58KoJ7GDgejv3ESWADvX1OHLE4cRkiQGeLoEU4pxdCxXRqX0U
|
21
|
+
PbwIkZN9mXVcrmPHq8MWi4eC/V7hnbZETMHuWhUoiNdOEfsAXr3iP4KjyyRdwc7a
|
22
|
+
d/xgcK06UVQRL/HbEYGiQL056mc=
|
23
|
+
-----END CERTIFICATE-----
|
24
|
+
-----BEGIN CERTIFICATE-----
|
25
|
+
MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
|
26
|
+
MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
|
27
|
+
DTA0MDEzMDAwNDMyN1oXDTM1MDEyMjAwNDMyN1owPzELMAkGA1UEBgwCSlAxEjAQ
|
28
|
+
BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQ4wDAYDVQQDDAVTdWJDQTCC
|
29
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ0Ou7AyRcRXnB/kVHv/6kwe
|
30
|
+
ANzgg/DyJfsAUqW90m7Lu1nqyug8gK0RBd77yU0w5HOAMHTVSdpjZK0g2sgx4Mb1
|
31
|
+
d/213eL9TTl5MRVEChTvQr8q5DVG/8fxPPE7fMI8eOAzd98/NOAChk+80r4Sx7fC
|
32
|
+
kGVEE1bKwY1MrUsUNjOY2d6t3M4HHV3HX1V8ShuKfsHxgCmLzdI8U+5CnQedFgkm
|
33
|
+
3e+8tr8IX5RR1wA1Ifw9VadF7OdI/bGMzog/Q8XCLf+WPFjnK7Gcx6JFtzF6Gi4x
|
34
|
+
4dp1Xl45JYiVvi9zQ132wu8A1pDHhiNgQviyzbP+UjcB/tsOpzBQF8abYzgEkWEC
|
35
|
+
AwEAAaNyMHAwDwYDVR0TAQH/BAUwAwEB/zAxBglghkgBhvhCAQ0EJBYiUnVieS9P
|
36
|
+
cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUlCjXWLsReYzH
|
37
|
+
LzsxwVnCXmKoB/owCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCJ/OyN
|
38
|
+
rT8Cq2Y+G2yA/L1EMRvvxwFBqxavqaqHl/6rwsIBFlB3zbqGA/0oec6MAVnYynq4
|
39
|
+
c4AcHTjx3bQ/S4r2sNTZq0DH4SYbQzIobx/YW8PjQUJt8KQdKMcwwi7arHP7A/Ha
|
40
|
+
LKu8eIC2nsUBnP4NhkYSGhbmpJK+PFD0FVtD0ZIRlY/wsnaZNjWWcnWF1/FNuQ4H
|
41
|
+
ySjIblqVQkPuzebv3Ror6ZnVDukn96Mg7kP4u6zgxOeqlJGRe1M949SS9Vudjl8X
|
42
|
+
SF4aZUUB9pQGhsqQJVqaz2OlhGOp9D0q54xko/rekjAIcuDjl1mdX4F2WRrzpUmZ
|
43
|
+
uY/bPeOBYiVsOYVe
|
44
|
+
-----END CERTIFICATE-----
|