httpi 1.1.1 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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(:curb).should == [:curb, HTTPI::Adapter::Curb]
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 == [:httpclient, HTTPI::Adapter::HTTPClient]
57
+ adapter.load(nil).should == HTTPI::Adapter::HTTPClient
45
58
  end
46
59
  end
47
60
 
@@ -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 }.to raise_error(ArgumentError)
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"
@@ -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)[1] }
7
- let(:curb) { HTTPI::Adapter.load(:curb)[1] }
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(:get).with(request)
18
+ request = HTTPI::Request.new("http://example.com")
19
+ httpclient.any_instance.expects(:request).with(:get)
13
20
 
14
- client.get request
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
- curb.any_instance.expects(:get).with(request)
27
+ request = HTTPI::Request.new("http://example.com")
28
+ net_http.any_instance.expects(:request).with(:get)
22
29
 
23
- client.get request, :curb
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
30
- httpclient.any_instance.expects(:get).with(instance_of(HTTPI::Request))
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
39
- curb.any_instance.expects(:get).with(instance_of(HTTPI::Request))
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(:post).with(request)
50
+ request = HTTPI::Request.new("http://example.com")
51
+ httpclient.any_instance.expects(:request).with(:post)
49
52
 
50
- client.post request
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
- curb.any_instance.expects(:post).with(request)
59
+ request = HTTPI::Request.new("http://example.com")
60
+ net_http.any_instance.expects(:request).with(:post, anything)
58
61
 
59
- client.post request, :curb
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
66
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
76
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
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(:head).with(request)
82
+ request = HTTPI::Request.new("http://example.com")
83
+ httpclient.any_instance.expects(:request).with(:head, anything)
87
84
 
88
- client.head request
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
- curb.any_instance.expects(:head).with(request)
91
+ request = HTTPI::Request.new("http://example.com")
92
+ net_http.any_instance.expects(:request).with(:head, anything)
96
93
 
97
- client.head request, :curb
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
104
- httpclient.any_instance.expects(:head).with(instance_of(HTTPI::Request))
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
113
- curb.any_instance.expects(:head).with(instance_of(HTTPI::Request))
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(:put).with(request)
114
+ request = HTTPI::Request.new("http://example.com")
115
+ httpclient.any_instance.expects(:request).with(:put, anything)
123
116
 
124
- client.put request
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
- curb.any_instance.expects(:put).with(request)
123
+ request = HTTPI::Request.new("http://example.com")
124
+ net_http.any_instance.expects(:request).with(:put, anything)
132
125
 
133
- client.put request, :curb
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
140
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
150
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
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(:delete).with(request)
146
+ request = HTTPI::Request.new("http://example.com")
147
+ httpclient.any_instance.expects(:request).with(:delete, anything)
161
148
 
162
- client.delete request
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
- curb.any_instance.expects(:delete).with(request)
155
+ request = HTTPI::Request.new("http://example.com")
156
+ net_http.any_instance.expects(:request).with(:delete, anything)
170
157
 
171
- client.delete request, :curb
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
178
- httpclient.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
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
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
187
- curb.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
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 "raises an ArgumentError in case of an invalid request method" do
195
- expect { client.request :invalid, HTTPI::Request.new }.to raise_error(ArgumentError)
196
- end
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
- describe ".adapter=" do
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 :url => "http://example.com" }
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
- client_class = {
227
- :httpclient => lambda { HTTPClient },
228
- :curb => lambda { Curl::Easy },
229
- :net_http => lambda { Net::HTTP }
230
- }
231
-
232
- context "using #{adapter}" do
233
- before { opts[:class].any_instance.expects(method) }
234
-
235
- it "logs that we're executing a request" do
236
- HTTPI.expects(:log).with("HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter")
237
- client.request method, request, adapter
238
- end
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 :warn" do
271
- HTTPI.log_level.should == :warn
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-----