rest-client 1.6.7 → 1.6.8.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.
Potentially problematic release.
This version of rest-client might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.rspec +1 -0
- data/.travis.yml +3 -0
- data/AUTHORS +75 -0
- data/Gemfile +7 -0
- data/README.rdoc +39 -23
- data/Rakefile +15 -32
- data/history.md +10 -1
- data/lib/restclient.rb +2 -6
- data/lib/restclient/exceptions.rb +11 -6
- data/lib/restclient/net_http_ext.rb +5 -5
- data/lib/restclient/payload.rb +10 -5
- data/lib/restclient/platform.rb +29 -0
- data/lib/restclient/request.rb +57 -13
- data/lib/restclient/response.rb +3 -1
- data/lib/restclient/version.rb +7 -0
- data/rest-client.gemspec +26 -0
- data/spec/abstract_response_spec.rb +12 -12
- data/spec/base.rb +1 -4
- data/spec/exceptions_spec.rb +17 -17
- data/spec/integration/capath_digicert/244b5494.0 +19 -0
- data/spec/integration/capath_digicert/81b9768f.0 +19 -0
- data/spec/integration/capath_digicert/README +8 -0
- data/spec/integration/capath_digicert/digicert.crt +19 -0
- data/spec/integration/certs/digicert.crt +19 -0
- data/spec/integration/request_spec.rb +52 -2
- data/spec/integration_spec.rb +9 -9
- data/spec/master_shake.jpg +0 -0
- data/spec/payload_spec.rb +40 -30
- data/spec/raw_response_spec.rb +4 -4
- data/spec/request2_spec.rb +5 -10
- data/spec/request_spec.rb +129 -130
- data/spec/resource_spec.rb +20 -18
- data/spec/response_spec.rb +37 -37
- data/spec/restclient_spec.rb +1 -1
- metadata +123 -85
- data/VERSION +0 -1
- data/spec/integration/certs/equifax.crt +0 -19
data/lib/restclient/payload.rb
CHANGED
@@ -9,14 +9,14 @@ module RestClient
|
|
9
9
|
def generate(params)
|
10
10
|
if params.is_a?(String)
|
11
11
|
Base.new(params)
|
12
|
-
elsif params.
|
13
|
-
Streamed.new(params)
|
14
|
-
elsif params
|
12
|
+
elsif params.is_a?(Hash)
|
15
13
|
if params.delete(:multipart) == true || has_file?(params)
|
16
14
|
Multipart.new(params)
|
17
15
|
else
|
18
16
|
UrlEncoded.new(params)
|
19
17
|
end
|
18
|
+
elsif params.respond_to?(:read)
|
19
|
+
Streamed.new(params)
|
20
20
|
else
|
21
21
|
nil
|
22
22
|
end
|
@@ -44,7 +44,7 @@ module RestClient
|
|
44
44
|
has_file_array?(v)
|
45
45
|
else
|
46
46
|
v.respond_to?(:path) && v.respond_to?(:read)
|
47
|
-
|
47
|
+
end
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -147,12 +147,17 @@ module RestClient
|
|
147
147
|
|
148
148
|
# for UrlEncoded escape the keys
|
149
149
|
def handle_key key
|
150
|
-
|
150
|
+
parser.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
151
151
|
end
|
152
152
|
|
153
153
|
def headers
|
154
154
|
super.merge({'Content-Type' => 'application/x-www-form-urlencoded'})
|
155
155
|
end
|
156
|
+
|
157
|
+
private
|
158
|
+
def parser
|
159
|
+
URI.const_defined?(:Parser) ? URI::Parser.new : URI
|
160
|
+
end
|
156
161
|
end
|
157
162
|
|
158
163
|
class Multipart < Base
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module RestClient
|
2
|
+
module Platform
|
3
|
+
# Return true if we are running on a darwin-based Ruby platform. This will
|
4
|
+
# be false for jruby even on OS X.
|
5
|
+
#
|
6
|
+
# @return [Boolean]
|
7
|
+
def self.mac?
|
8
|
+
RUBY_PLATFORM.include?('darwin')
|
9
|
+
end
|
10
|
+
|
11
|
+
# Return true if we are running on Windows.
|
12
|
+
#
|
13
|
+
# @return [Boolean]
|
14
|
+
#
|
15
|
+
def self.windows?
|
16
|
+
# Ruby only sets File::ALT_SEPARATOR on Windows, and the Ruby standard
|
17
|
+
# library uses that to test what platform it's on.
|
18
|
+
!!File::ALT_SEPARATOR
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return true if we are running on jruby.
|
22
|
+
#
|
23
|
+
# @return [Boolean]
|
24
|
+
#
|
25
|
+
def self.jruby?
|
26
|
+
RUBY_PLATFORM == 'java'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/restclient/request.rb
CHANGED
@@ -22,12 +22,14 @@ module RestClient
|
|
22
22
|
# * :verify_ssl enable ssl verification, possible values are constants from OpenSSL::SSL
|
23
23
|
# * :timeout and :open_timeout passing in -1 will disable the timeout by setting the corresponding net timeout values to nil
|
24
24
|
# * :ssl_client_cert, :ssl_client_key, :ssl_ca_file
|
25
|
+
# * :ssl_verify_callback, :ssl_verify_callback_warnings
|
25
26
|
class Request
|
26
27
|
|
27
28
|
attr_reader :method, :url, :headers, :cookies,
|
28
29
|
:payload, :user, :password, :timeout, :max_redirects,
|
29
30
|
:open_timeout, :raw_response, :verify_ssl, :ssl_client_cert,
|
30
|
-
:ssl_client_key, :ssl_ca_file, :processed_headers, :args
|
31
|
+
:ssl_client_key, :ssl_ca_file, :processed_headers, :args,
|
32
|
+
:ssl_verify_callback, :ssl_verify_callback_warnings
|
31
33
|
|
32
34
|
def self.execute(args, & block)
|
33
35
|
new(args).execute(& block)
|
@@ -53,6 +55,8 @@ module RestClient
|
|
53
55
|
@ssl_client_cert = args[:ssl_client_cert] || nil
|
54
56
|
@ssl_client_key = args[:ssl_client_key] || nil
|
55
57
|
@ssl_ca_file = args[:ssl_ca_file] || nil
|
58
|
+
@ssl_verify_callback = args[:ssl_verify_callback] || nil
|
59
|
+
@ssl_verify_callback_warnings = args.fetch(:ssl_verify_callback, true)
|
56
60
|
@tf = nil # If you are a raw request, this is your tempfile
|
57
61
|
@max_redirects = args[:max_redirects] || 10
|
58
62
|
@processed_headers = make_headers headers
|
@@ -129,29 +133,40 @@ module RestClient
|
|
129
133
|
if p[k].is_a? Hash
|
130
134
|
process_payload(p[k], key)
|
131
135
|
else
|
132
|
-
value =
|
136
|
+
value = parser.escape(p[k].to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
133
137
|
"#{key}=#{value}"
|
134
138
|
end
|
135
139
|
end.join("&")
|
136
140
|
end
|
137
141
|
end
|
138
142
|
|
143
|
+
def print_verify_callback_warnings
|
144
|
+
warned = false
|
145
|
+
if RestClient::Platform.mac?
|
146
|
+
warn('warning: ssl_verify_callback return code is ignored on OS X')
|
147
|
+
warned = true
|
148
|
+
end
|
149
|
+
if RestClient::Platform.jruby?
|
150
|
+
warn('warning: SSL verify_callback may not work correctly in jruby')
|
151
|
+
warn('see https://github.com/jruby/jruby/issues/597')
|
152
|
+
warned = true
|
153
|
+
end
|
154
|
+
warned
|
155
|
+
end
|
156
|
+
|
139
157
|
def transmit uri, req, payload, & block
|
140
158
|
setup_credentials req
|
141
159
|
|
142
160
|
net = net_http_class.new(uri.host, uri.port)
|
143
161
|
net.use_ssl = uri.is_a?(URI::HTTPS)
|
144
|
-
if
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
if (!preverify_ok) || ssl_context.error != 0
|
150
|
-
err_msg = "SSL Verification failed -- Preverify: #{preverify_ok}, Error: #{ssl_context.error_string} (#{ssl_context.error})"
|
151
|
-
raise SSLCertificateNotVerified.new(err_msg)
|
152
|
-
end
|
153
|
-
true
|
162
|
+
if @verify_ssl
|
163
|
+
if @verify_ssl.is_a? Integer
|
164
|
+
net.verify_mode = @verify_ssl
|
165
|
+
else
|
166
|
+
net.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
154
167
|
end
|
168
|
+
else
|
169
|
+
net.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
155
170
|
end
|
156
171
|
net.cert = @ssl_client_cert if @ssl_client_cert
|
157
172
|
net.key = @ssl_client_key if @ssl_client_key
|
@@ -161,7 +176,26 @@ module RestClient
|
|
161
176
|
|
162
177
|
# disable the timeout if the timeout value is -1
|
163
178
|
net.read_timeout = nil if @timeout == -1
|
164
|
-
net.
|
179
|
+
net.open_timeout = nil if @open_timeout == -1
|
180
|
+
|
181
|
+
# verify_callback isn't well supported on all platforms, but do allow
|
182
|
+
# users to set one if they want.
|
183
|
+
if ssl_verify_callback
|
184
|
+
net.verify_callback = ssl_verify_callback
|
185
|
+
|
186
|
+
# Hilariously, jruby only calls the callback when cert_store is set to
|
187
|
+
# something, so make sure to set one.
|
188
|
+
# https://github.com/jruby/jruby/issues/597
|
189
|
+
if RestClient::Platform.jruby?
|
190
|
+
net.cert_store ||= OpenSSL::X509::Store.new
|
191
|
+
end
|
192
|
+
|
193
|
+
if ssl_verify_callback_warnings != false
|
194
|
+
if print_verify_callback_warnings
|
195
|
+
warn('pass :ssl_verify_callback_warnings => false to silence this')
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
165
199
|
|
166
200
|
RestClient.before_execution_procs.each do |before_proc|
|
167
201
|
before_proc.call(req, args)
|
@@ -182,6 +216,11 @@ module RestClient
|
|
182
216
|
raise RestClient::ServerBrokeConnection
|
183
217
|
rescue Timeout::Error
|
184
218
|
raise RestClient::RequestTimeout
|
219
|
+
rescue OpenSSL::SSL::SSLError => error
|
220
|
+
# UGH. Not sure if this is needed at all. SSLCertificateNotVerified is not being used internally.
|
221
|
+
# I think it would be better to leave SSLError processing to the client (they'd have to do that anyway...)
|
222
|
+
raise SSLCertificateNotVerified.new(error.message) if error.message.include?("certificate verify failed")
|
223
|
+
raise error
|
185
224
|
end
|
186
225
|
|
187
226
|
def setup_credentials(req)
|
@@ -295,6 +334,11 @@ module RestClient
|
|
295
334
|
{:accept => '*/*; q=0.5, application/xml', :accept_encoding => 'gzip, deflate'}
|
296
335
|
end
|
297
336
|
|
337
|
+
private
|
338
|
+
def parser
|
339
|
+
URI.const_defined?(:Parser) ? URI::Parser.new : URI
|
340
|
+
end
|
341
|
+
|
298
342
|
end
|
299
343
|
end
|
300
344
|
|
data/lib/restclient/response.rb
CHANGED
data/rest-client.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path("../lib/restclient/version", __FILE__)
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'rest-client'
|
7
|
+
s.version = RestClient::VERSION
|
8
|
+
s.authors = ['REST Client Team']
|
9
|
+
s.description = 'A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.'
|
10
|
+
s.license = 'MIT'
|
11
|
+
s.email = 'rest.client@librelist.com'
|
12
|
+
s.executables = ['restclient']
|
13
|
+
s.extra_rdoc_files = ["README.rdoc", "history.md"]
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
16
|
+
s.homepage = 'https://github.com/rest-client/rest-client'
|
17
|
+
s.summary = 'Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions.'
|
18
|
+
|
19
|
+
s.add_dependency(%q<mime-types>, ["~> 1.16"])
|
20
|
+
s.add_dependency(%q<rdoc>, [">= 2.4.2"])
|
21
|
+
s.add_development_dependency(%q<rake>, ["~> 10.0"])
|
22
|
+
s.add_development_dependency(%q<webmock>, ["~> 1.4"])
|
23
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.4"])
|
24
|
+
s.add_development_dependency(%q<pry>)
|
25
|
+
end
|
26
|
+
|
@@ -16,55 +16,55 @@ describe RestClient::AbstractResponse do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
before do
|
19
|
-
@net_http_res =
|
19
|
+
@net_http_res = double('net http response')
|
20
20
|
@response = MyAbstractResponse.new(@net_http_res, {})
|
21
21
|
end
|
22
22
|
|
23
23
|
it "fetches the numeric response code" do
|
24
24
|
@net_http_res.should_receive(:code).and_return('200')
|
25
|
-
@response.code.should
|
25
|
+
@response.code.should eq 200
|
26
26
|
end
|
27
27
|
|
28
28
|
it "has a nice description" do
|
29
29
|
@net_http_res.should_receive(:to_hash).and_return({'Content-Type' => ['application/pdf']})
|
30
30
|
@net_http_res.should_receive(:code).and_return('200')
|
31
|
-
@response.description
|
31
|
+
@response.description.should eq "200 OK | application/pdf bytes\n"
|
32
32
|
end
|
33
33
|
|
34
34
|
it "beautifies the headers by turning the keys to symbols" do
|
35
35
|
h = RestClient::AbstractResponse.beautify_headers('content-type' => [ 'x' ])
|
36
|
-
h.keys.first.should
|
36
|
+
h.keys.first.should eq :content_type
|
37
37
|
end
|
38
38
|
|
39
39
|
it "beautifies the headers by turning the values to strings instead of one-element arrays" do
|
40
40
|
h = RestClient::AbstractResponse.beautify_headers('x' => [ 'text/html' ] )
|
41
|
-
h.values.first.should
|
41
|
+
h.values.first.should eq 'text/html'
|
42
42
|
end
|
43
43
|
|
44
44
|
it "fetches the headers" do
|
45
45
|
@net_http_res.should_receive(:to_hash).and_return('content-type' => [ 'text/html' ])
|
46
|
-
@response.headers.should
|
46
|
+
@response.headers.should eq({ :content_type => 'text/html' })
|
47
47
|
end
|
48
48
|
|
49
49
|
it "extracts cookies from response headers" do
|
50
50
|
@net_http_res.should_receive(:to_hash).and_return('set-cookie' => ['session_id=1; path=/'])
|
51
|
-
@response.cookies.should
|
51
|
+
@response.cookies.should eq({ 'session_id' => '1' })
|
52
52
|
end
|
53
53
|
|
54
54
|
it "extract strange cookies" do
|
55
55
|
@net_http_res.should_receive(:to_hash).and_return('set-cookie' => ['session_id=ZJ/HQVH6YE+rVkTpn0zvTQ==; path=/'])
|
56
|
-
@response.cookies.should
|
56
|
+
@response.cookies.should eq({ 'session_id' => 'ZJ%2FHQVH6YE+rVkTpn0zvTQ%3D%3D' })
|
57
57
|
end
|
58
58
|
|
59
59
|
it "doesn't escape cookies" do
|
60
60
|
@net_http_res.should_receive(:to_hash).and_return('set-cookie' => ['session_id=BAh7BzoNYXBwX25hbWUiEGFwcGxpY2F0aW9uOgpsb2dpbiIKYWRtaW4%3D%0A--08114ba654f17c04d20dcc5228ec672508f738ca; path=/'])
|
61
|
-
@response.cookies.should
|
61
|
+
@response.cookies.should eq({ 'session_id' => 'BAh7BzoNYXBwX25hbWUiEGFwcGxpY2F0aW9uOgpsb2dpbiIKYWRtaW4%3D%0A--08114ba654f17c04d20dcc5228ec672508f738ca' })
|
62
62
|
end
|
63
63
|
|
64
64
|
it "can access the net http result directly" do
|
65
|
-
@response.net_http_res.should
|
65
|
+
@response.net_http_res.should eq @net_http_res
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
describe "#return!" do
|
69
69
|
it "should return the response itself on 200-codes" do
|
70
70
|
@net_http_res.should_receive(:code).and_return('200')
|
@@ -75,7 +75,7 @@ describe RestClient::AbstractResponse do
|
|
75
75
|
@net_http_res.should_receive(:code).and_return('1000')
|
76
76
|
lambda { @response.return! }.should raise_error RestClient::RequestFailed
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
it "should raise an error on a redirection after non-GET/HEAD requests" do
|
80
80
|
@net_http_res.should_receive(:code).and_return('301')
|
81
81
|
@response.args.merge(:method => :put)
|
data/spec/base.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
def is_ruby_19?
|
2
|
-
RUBY_VERSION
|
2
|
+
RUBY_VERSION > '1.9'
|
3
3
|
end
|
4
4
|
|
5
|
-
Encoding.default_internal = Encoding.default_external = "ASCII-8BIT" if is_ruby_19?
|
6
|
-
|
7
5
|
require 'rubygems'
|
8
|
-
require 'spec'
|
9
6
|
|
10
7
|
begin
|
11
8
|
require "ruby-debug"
|
data/spec/exceptions_spec.rb
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
|
2
2
|
|
3
3
|
require 'webmock/rspec'
|
4
|
-
include WebMock
|
4
|
+
include WebMock::API
|
5
5
|
|
6
6
|
describe RestClient::Exception do
|
7
7
|
it "returns a 'message' equal to the class name if the message is not set, because 'message' should not be nil" do
|
8
8
|
e = RestClient::Exception.new
|
9
|
-
e.message.should
|
9
|
+
e.message.should eq "RestClient::Exception"
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it "returns the 'message' that was set" do
|
13
13
|
e = RestClient::Exception.new
|
14
14
|
message = "An explicitly set message"
|
15
15
|
e.message = message
|
16
|
-
e.message.should
|
16
|
+
e.message.should eq message
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
it "sets the exception message to ErrorMessage" do
|
20
|
-
RestClient::ResourceNotFound.new.message.should
|
20
|
+
RestClient::ResourceNotFound.new.message.should eq 'Resource Not Found'
|
21
21
|
end
|
22
22
|
|
23
23
|
it "contains exceptions in RestClient" do
|
@@ -29,13 +29,13 @@ end
|
|
29
29
|
describe RestClient::ServerBrokeConnection do
|
30
30
|
it "should have a default message of 'Server broke connection'" do
|
31
31
|
e = RestClient::ServerBrokeConnection.new
|
32
|
-
e.message.should
|
32
|
+
e.message.should eq 'Server broke connection'
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
describe RestClient::RequestFailed do
|
37
37
|
before do
|
38
|
-
@response =
|
38
|
+
@response = double('HTTP Response', :code => '502')
|
39
39
|
end
|
40
40
|
|
41
41
|
it "stores the http response on the exception" do
|
@@ -43,17 +43,17 @@ describe RestClient::RequestFailed do
|
|
43
43
|
begin
|
44
44
|
raise RestClient::RequestFailed, response
|
45
45
|
rescue RestClient::RequestFailed => e
|
46
|
-
e.response.should
|
46
|
+
e.response.should eq response
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
it "http_code convenience method for fetching the code as an integer" do
|
51
|
-
RestClient::RequestFailed.new(@response).http_code.should
|
51
|
+
RestClient::RequestFailed.new(@response).http_code.should eq 502
|
52
52
|
end
|
53
53
|
|
54
54
|
it "http_body convenience method for fetching the body (decoding when necessary)" do
|
55
|
-
RestClient::RequestFailed.new(@response).http_code.should
|
56
|
-
RestClient::RequestFailed.new(@response).message.should
|
55
|
+
RestClient::RequestFailed.new(@response).http_code.should eq 502
|
56
|
+
RestClient::RequestFailed.new(@response).message.should eq 'HTTP status code 502'
|
57
57
|
end
|
58
58
|
|
59
59
|
it "shows the status code in the message" do
|
@@ -67,22 +67,22 @@ describe RestClient::ResourceNotFound do
|
|
67
67
|
begin
|
68
68
|
raise RestClient::ResourceNotFound, response
|
69
69
|
rescue RestClient::ResourceNotFound => e
|
70
|
-
e.response.should
|
70
|
+
e.response.should eq response
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
describe "backwards compatibility" do
|
76
76
|
it "alias RestClient::Request::Redirect to RestClient::Redirect" do
|
77
|
-
RestClient::Request::Redirect.should
|
77
|
+
RestClient::Request::Redirect.should eq RestClient::Redirect
|
78
78
|
end
|
79
79
|
|
80
80
|
it "alias RestClient::Request::Unauthorized to RestClient::Unauthorized" do
|
81
|
-
RestClient::Request::Unauthorized.should
|
81
|
+
RestClient::Request::Unauthorized.should eq RestClient::Unauthorized
|
82
82
|
end
|
83
83
|
|
84
84
|
it "alias RestClient::Request::RequestFailed to RestClient::RequestFailed" do
|
85
|
-
RestClient::Request::RequestFailed.should
|
85
|
+
RestClient::Request::RequestFailed.should eq RestClient::RequestFailed
|
86
86
|
end
|
87
87
|
|
88
88
|
it "make the exception's response act like an Net::HTTPResponse" do
|
@@ -92,7 +92,7 @@ describe "backwards compatibility" do
|
|
92
92
|
RestClient.get "www.example.com"
|
93
93
|
raise
|
94
94
|
rescue RestClient::ResourceNotFound => e
|
95
|
-
e.response.body.should
|
95
|
+
e.response.body.should eq body
|
96
96
|
end
|
97
97
|
end
|
98
98
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
|
3
|
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
|
4
|
+
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
|
5
|
+
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
|
6
|
+
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
|
7
|
+
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
|
8
|
+
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
|
9
|
+
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
|
10
|
+
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
|
11
|
+
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
|
12
|
+
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
|
13
|
+
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
|
14
|
+
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
|
15
|
+
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
|
16
|
+
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
|
17
|
+
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
18
|
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
|
19
|
+
-----END CERTIFICATE-----
|