braintree 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/braintree.rb +2 -0
- data/lib/braintree/advanced_search.rb +69 -0
- data/lib/braintree/configuration.rb +2 -2
- data/lib/braintree/credit_card.rb +2 -1
- data/lib/braintree/subscription.rb +50 -1
- data/lib/braintree/subscription_search.rb +10 -0
- data/lib/braintree/transparent_redirect.rb +8 -5
- data/lib/braintree/version.rb +2 -2
- data/lib/braintree/xml/generator.rb +7 -2
- data/lib/ssl/{valicert_ca.crt → sandbox_braintreegateway_com.ca.crt} +1 -0
- data/lib/ssl/www_braintreegateway_com.ca.crt +202 -0
- data/spec/integration/braintree/credit_card_spec.rb +27 -35
- data/spec/integration/braintree/customer_spec.rb +37 -36
- data/spec/integration/braintree/http_spec.rb +17 -0
- data/spec/integration/braintree/subscription_spec.rb +244 -3
- data/spec/integration/braintree/transaction_spec.rb +9 -18
- data/spec/integration/braintree/transparent_redirect_spec.rb +21 -0
- data/spec/integration/spec_helper.rb +0 -23
- data/spec/spec_helper.rb +34 -0
- data/spec/support/matchers/include_on_any_page.rb +24 -0
- data/spec/unit/braintree/configuration_spec.rb +3 -3
- data/spec/unit/braintree/credit_card_spec.rb +1 -1
- data/spec/unit/braintree/customer_spec.rb +1 -1
- data/spec/unit/braintree/paged_collection_spec.rb +50 -0
- data/spec/unit/braintree/subscription_search_spec.rb +35 -0
- data/spec/unit/braintree/subscription_spec.rb +10 -0
- data/spec/unit/braintree/transaction_spec.rb +1 -1
- data/spec/unit/braintree/transparent_redirect_spec.rb +8 -2
- data/spec/unit/braintree/xml_spec.rb +5 -0
- metadata +11 -5
data/lib/braintree.rb
CHANGED
@@ -23,6 +23,7 @@ require "braintree/exceptions"
|
|
23
23
|
require "braintree/base_module"
|
24
24
|
|
25
25
|
require "braintree/address.rb"
|
26
|
+
require "braintree/advanced_search.rb"
|
26
27
|
require "braintree/configuration.rb"
|
27
28
|
require "braintree/credit_card.rb"
|
28
29
|
require "braintree/credit_card_verification.rb"
|
@@ -35,6 +36,7 @@ require "braintree/http.rb"
|
|
35
36
|
require "braintree/paged_collection.rb"
|
36
37
|
require "braintree/ssl_expiration_check.rb"
|
37
38
|
require "braintree/subscription"
|
39
|
+
require "braintree/subscription_search"
|
38
40
|
require "braintree/successful_result.rb"
|
39
41
|
require "braintree/test/credit_card_numbers.rb"
|
40
42
|
require "braintree/test/transaction_amounts.rb"
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Braintree
|
2
|
+
class AdvancedSearch
|
3
|
+
class SearchNode
|
4
|
+
def self.operators(*operator_names)
|
5
|
+
operator_names.each do |operator|
|
6
|
+
define_method(operator) do |value|
|
7
|
+
@parent.add_criteria(@node_name, operator => value.to_s)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(name, parent)
|
13
|
+
@node_name, @parent = name, parent
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class TextNode < SearchNode
|
18
|
+
operators :is, :is_not, :ends_with, :starts_with, :contains
|
19
|
+
end
|
20
|
+
|
21
|
+
class MultipleValueNode < SearchNode
|
22
|
+
def in(*values)
|
23
|
+
values.flatten!
|
24
|
+
|
25
|
+
unless allowed_values.nil?
|
26
|
+
bad_values = values - allowed_values
|
27
|
+
raise ArgumentError.new("Invalid argument(s) for #{@node_name}: #{bad_values.join(", ")}") if bad_values.any?
|
28
|
+
end
|
29
|
+
|
30
|
+
@parent.add_criteria(@node_name, values)
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(name, parent, options)
|
34
|
+
super(name, parent)
|
35
|
+
@options = options
|
36
|
+
end
|
37
|
+
|
38
|
+
def allowed_values
|
39
|
+
@options[:allows]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.search_fields(*fields)
|
44
|
+
fields.each do |field|
|
45
|
+
define_method(field) do
|
46
|
+
TextNode.new(field, self)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.multiple_value_field(field, options={})
|
52
|
+
define_method(field) do
|
53
|
+
MultipleValueNode.new(field, self, options)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def initialize
|
58
|
+
@criteria = {}
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_criteria(key, value)
|
62
|
+
@criteria[key] = value
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_hash
|
66
|
+
@criteria
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -37,9 +37,9 @@ module Braintree
|
|
37
37
|
def self.ca_file # :nodoc:
|
38
38
|
case environment
|
39
39
|
when :qa, :sandbox
|
40
|
-
File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "
|
40
|
+
File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "sandbox_braintreegateway_com.ca.crt"))
|
41
41
|
when :production
|
42
|
-
File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "
|
42
|
+
File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "www_braintreegateway_com.ca.crt"))
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -3,7 +3,7 @@ module Braintree
|
|
3
3
|
include BaseModule # :nodoc:
|
4
4
|
|
5
5
|
attr_reader :billing_address, :bin, :card_type, :cardholder_name, :created_at, :customer_id, :expiration_month,
|
6
|
-
:expiration_year, :last_4, :token, :updated_at
|
6
|
+
:expiration_year, :last_4, :subscriptions, :token, :updated_at
|
7
7
|
|
8
8
|
def self.create(attributes)
|
9
9
|
if attributes.has_key?(:expiration_date) && (attributes.has_key?(:expiration_month) || attributes.has_key?(:expiration_year))
|
@@ -99,6 +99,7 @@ module Braintree
|
|
99
99
|
|
100
100
|
def initialize(attributes) # :nodoc:
|
101
101
|
_init attributes
|
102
|
+
@subscriptions = (@subscriptions || []).map { |subscription_hash| Subscription.new(subscription_hash) }
|
102
103
|
end
|
103
104
|
|
104
105
|
# Creates a credit transaction for this credit card.
|
@@ -1,4 +1,25 @@
|
|
1
1
|
module Braintree
|
2
|
+
# == Creating a Subscription
|
3
|
+
#
|
4
|
+
# At minimum, a plan_id and payment_method_token are required. Any other values not
|
5
|
+
# provided will be defaulted to the plan's values:
|
6
|
+
#
|
7
|
+
# Braintree::Subscription.create(
|
8
|
+
# :payment_method_token => "my_token",
|
9
|
+
# :plan_id => "my_plan"
|
10
|
+
# )
|
11
|
+
#
|
12
|
+
# Full example:
|
13
|
+
#
|
14
|
+
# Braintree::Subscription.create(
|
15
|
+
# :id => "my_id",
|
16
|
+
# :payment_method_token => "my_token",
|
17
|
+
# :plan_id => "my_plan",
|
18
|
+
# :price => "1.00",
|
19
|
+
# :trial_period => true,
|
20
|
+
# :trial_duration => "2",
|
21
|
+
# :trial_duration_unit => Subscription::TrialDurationUnit::Day
|
22
|
+
# )
|
2
23
|
class Subscription
|
3
24
|
include BaseModule
|
4
25
|
|
@@ -13,7 +34,7 @@ module Braintree
|
|
13
34
|
Month = "month"
|
14
35
|
end
|
15
36
|
|
16
|
-
attr_reader :price, :plan_id, :id, :status, :payment_method_token
|
37
|
+
attr_reader :price, :plan_id, :id, :status, :payment_method_token, :merchant_account_id
|
17
38
|
attr_reader :first_billing_date, :next_billing_date, :billing_period_start_date, :billing_period_end_date
|
18
39
|
attr_reader :trial_period, :trial_duration, :trial_duration_unit
|
19
40
|
attr_reader :failure_count
|
@@ -46,6 +67,32 @@ module Braintree
|
|
46
67
|
raise NotFoundError, "subscription with id #{id.inspect} not found"
|
47
68
|
end
|
48
69
|
|
70
|
+
# Allows searching on subscriptions. There are two types of fields that are searchable: text and
|
71
|
+
# multiple value fields. Searchable text fields are:
|
72
|
+
# - plan_id
|
73
|
+
# - days_past_due
|
74
|
+
#
|
75
|
+
# Searchable multiple value fields are:
|
76
|
+
# - status
|
77
|
+
#
|
78
|
+
# For text fields, you can search using the following operators: is, is_not, starts_with, ends_with
|
79
|
+
# and contains. For mutiple value fields, you can search using the in operator. An example:
|
80
|
+
#
|
81
|
+
# Subscription.search do |s|
|
82
|
+
# s.plan_id.starts_with "abc"
|
83
|
+
# s.days_past_due.is "30"
|
84
|
+
# s.status.in [Subscription::Status::PastDue]
|
85
|
+
# end
|
86
|
+
def self.search(page=1, &block)
|
87
|
+
search = SubscriptionSearch.new
|
88
|
+
block.call(search)
|
89
|
+
|
90
|
+
response = Http.post "/subscriptions/advanced_search?page=#{page}", {:search => search.to_hash}
|
91
|
+
attributes = response[:subscriptions]
|
92
|
+
attributes[:items] = Util.extract_attribute_as_array(attributes, :subscription).map { |attrs| new(attrs) }
|
93
|
+
PagedCollection.new(attributes) { |page_number| Subscription.search(page_number, &block) }
|
94
|
+
end
|
95
|
+
|
49
96
|
def self.update(subscription_id, attributes)
|
50
97
|
Util.verify_keys(_update_signature, attributes)
|
51
98
|
response = Http.put "/subscriptions/#{subscription_id}", :subscription => attributes
|
@@ -61,6 +108,7 @@ module Braintree
|
|
61
108
|
def self._create_signature # :nodoc:
|
62
109
|
[
|
63
110
|
:id,
|
111
|
+
:merchant_account_id,
|
64
112
|
:payment_method_token,
|
65
113
|
:plan_id,
|
66
114
|
:price,
|
@@ -100,6 +148,7 @@ module Braintree
|
|
100
148
|
def self._update_signature # :nodoc:
|
101
149
|
[
|
102
150
|
:id,
|
151
|
+
:merchant_account_id,
|
103
152
|
:plan_id,
|
104
153
|
:price
|
105
154
|
]
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Braintree
|
2
|
+
class SubscriptionSearch < AdvancedSearch
|
3
|
+
search_fields :plan_id, :days_past_due
|
4
|
+
multiple_value_field :status, :allows => [
|
5
|
+
Subscription::Status::Active,
|
6
|
+
Subscription::Status::Canceled,
|
7
|
+
Subscription::Status::PastDue
|
8
|
+
]
|
9
|
+
end
|
10
|
+
end
|
@@ -41,12 +41,15 @@ module Braintree
|
|
41
41
|
def self.parse_and_validate_query_string(query_string) # :nodoc:
|
42
42
|
params = Util.symbolize_keys(Util.parse_query_string(query_string))
|
43
43
|
query_string_without_hash = query_string[/(.*)&hash=.*/, 1]
|
44
|
+
|
45
|
+
if params[:http_status] == nil
|
46
|
+
raise UnexpectedError, "expected query string to have an http_status param"
|
47
|
+
elsif params[:http_status] != '200'
|
48
|
+
Util.raise_exception_for_status_code(params[:http_status])
|
49
|
+
end
|
50
|
+
|
44
51
|
if _hash(query_string_without_hash) == params[:hash]
|
45
|
-
|
46
|
-
params
|
47
|
-
else
|
48
|
-
Util.raise_exception_for_status_code(params[:http_status])
|
49
|
-
end
|
52
|
+
params
|
50
53
|
else
|
51
54
|
raise ForgedQueryString
|
52
55
|
end
|
data/lib/braintree/version.rb
CHANGED
@@ -62,7 +62,6 @@ module Braintree
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def self._array_to_xml(array, options = {})
|
65
|
-
raise "expected all elements to be hashes" unless array.all? { |e| e.is_a?(Hash) }
|
66
65
|
raise "expected options[:root]" unless options[:root]
|
67
66
|
raise "expected options[:builder]" unless options[:builder]
|
68
67
|
options[:indent] ||= 2
|
@@ -71,7 +70,13 @@ module Braintree
|
|
71
70
|
options[:builder].tag!(root, :type => "array")
|
72
71
|
else
|
73
72
|
options[:builder].tag!(root, :type => "array") do
|
74
|
-
array.each
|
73
|
+
array.each do |e|
|
74
|
+
if e.is_a?(Hash)
|
75
|
+
_convert_to_xml(e, options.merge(:root => "item", :skip_instruct => true))
|
76
|
+
else
|
77
|
+
options[:builder].tag!("item", e)
|
78
|
+
end
|
79
|
+
end
|
75
80
|
end
|
76
81
|
end
|
77
82
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com
|
1
2
|
-----BEGIN CERTIFICATE-----
|
2
3
|
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
|
3
4
|
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
|
@@ -0,0 +1,202 @@
|
|
1
|
+
Subject: O=Entrust.net, OU=www.entrust.net/GCCA_CPS incorp. by ref. (limits liab.), OU=(c) 2000 Entrust.net Limited, CN=Entrust.net Client Certification Authority
|
2
|
+
-----BEGIN CERTIFICATE-----
|
3
|
+
MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UE
|
4
|
+
ChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NB
|
5
|
+
X0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsT
|
6
|
+
HChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1
|
7
|
+
c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAy
|
8
|
+
MDcxNjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0
|
9
|
+
Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29y
|
10
|
+
cC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
|
11
|
+
RW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xp
|
12
|
+
ZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
13
|
+
A4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTU
|
14
|
+
rcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB
|
15
|
+
3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn5JVn1j+SgF7y
|
16
|
+
NH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNVHR8E
|
17
|
+
gdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAw
|
18
|
+
PgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
|
19
|
+
ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0
|
20
|
+
Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2Vy
|
21
|
+
dGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
22
|
+
IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQD
|
23
|
+
AgEGMB8GA1UdIwQYMBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQW
|
24
|
+
BBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
|
25
|
+
fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWA
|
26
|
+
O9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+L
|
27
|
+
a3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7l
|
28
|
+
TRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKdzmVml64mXg==
|
29
|
+
-----END CERTIFICATE-----
|
30
|
+
|
31
|
+
Subject: O=Entrust.net, OU=www.entrust.net/SSL_CPS incorp. by ref. (limits liab.), OU=(c) 2000 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
|
32
|
+
-----BEGIN CERTIFICATE-----
|
33
|
+
MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UE
|
34
|
+
ChMLRW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xf
|
35
|
+
Q1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
|
36
|
+
KGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVz
|
37
|
+
dC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
|
38
|
+
Fw0wMDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtF
|
39
|
+
bnRydXN0Lm5ldDE/MD0GA1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMg
|
40
|
+
aW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykg
|
41
|
+
MjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5l
|
42
|
+
dCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0G
|
43
|
+
CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUw
|
44
|
+
tZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxK
|
45
|
+
wz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2dWcTC5/oVzbI
|
46
|
+
XQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEBBAQD
|
47
|
+
AgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0Vu
|
48
|
+
dHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
|
49
|
+
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAy
|
50
|
+
MDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0
|
51
|
+
IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV
|
52
|
+
BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIw
|
53
|
+
NDE3NTAwMFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc
|
54
|
+
/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNV
|
55
|
+
HRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkq
|
56
|
+
hkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvv
|
57
|
+
yQbvH9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVp
|
58
|
+
bbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/
|
59
|
+
bIkz8OwVDw==
|
60
|
+
-----END CERTIFICATE-----
|
61
|
+
|
62
|
+
Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
|
63
|
+
-----BEGIN CERTIFICATE-----
|
64
|
+
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UE
|
65
|
+
ChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNf
|
66
|
+
MjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsT
|
67
|
+
HChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1
|
68
|
+
c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEy
|
69
|
+
MjQxNzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0
|
70
|
+
Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29y
|
71
|
+
cC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkg
|
72
|
+
RW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2Vy
|
73
|
+
dGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEF
|
74
|
+
AAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4
|
75
|
+
QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/EC
|
76
|
+
DNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuXMlBvPci6Zgzj
|
77
|
+
/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzWnLLP
|
78
|
+
KQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZd
|
79
|
+
enoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
|
80
|
+
4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB
|
81
|
+
0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJ
|
82
|
+
FrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
|
83
|
+
AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFh
|
84
|
+
fGPjK50xA3B20qMooPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVU
|
85
|
+
KcgF7bISKo30Axv/55IQh7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaoho
|
86
|
+
wXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2
|
87
|
+
+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof888
|
88
|
+
6ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
|
89
|
+
-----END CERTIFICATE-----
|
90
|
+
|
91
|
+
Subject: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority
|
92
|
+
-----BEGIN CERTIFICATE-----
|
93
|
+
MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UE
|
94
|
+
BhMCVVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50
|
95
|
+
cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBs
|
96
|
+
aW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExp
|
97
|
+
bWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0
|
98
|
+
aW9uIEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBa
|
99
|
+
MIHJMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNV
|
100
|
+
BAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3Jw
|
101
|
+
LiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50
|
102
|
+
cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50
|
103
|
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GL
|
104
|
+
ADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSv
|
105
|
+
x1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux5zDeg7K6PvHV
|
106
|
+
iTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTmT173
|
107
|
+
iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkw
|
108
|
+
ggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
|
109
|
+
cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0Ff
|
110
|
+
SW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UE
|
111
|
+
CxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
|
112
|
+
cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYD
|
113
|
+
VQQDEwRDUkwxMCygKqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9D
|
114
|
+
bGllbnQxLmNybDArBgNVHRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkx
|
115
|
+
MDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW
|
116
|
+
/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwG
|
117
|
+
A1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
|
118
|
+
hvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQ
|
119
|
+
OokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzzwy5E97BnRqqS5TvaHBkU
|
120
|
+
ODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYGJqibGapE
|
121
|
+
PHayXOw=
|
122
|
+
-----END CERTIFICATE-----
|
123
|
+
|
124
|
+
Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
|
125
|
+
-----BEGIN CERTIFICATE-----
|
126
|
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UE
|
127
|
+
BhMCVVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50
|
128
|
+
cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
129
|
+
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE
|
130
|
+
AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1
|
131
|
+
dGhvcml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQsw
|
132
|
+
CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3
|
133
|
+
dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh
|
134
|
+
Yi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVkMTow
|
135
|
+
OAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
|
136
|
+
b24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0
|
137
|
+
VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHIN
|
138
|
+
iC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3wkrYKZImZNHk
|
139
|
+
mGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcwggHT
|
140
|
+
MBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHY
|
141
|
+
pIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
|
142
|
+
BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChs
|
143
|
+
aW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBM
|
144
|
+
aW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
|
145
|
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNo
|
146
|
+
dHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAi
|
147
|
+
gA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMC
|
148
|
+
AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYE
|
149
|
+
FPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9
|
150
|
+
B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKn
|
151
|
+
CqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2Zcgx
|
152
|
+
xufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd2cNgQ4xYDiKWL2KjLB+6
|
153
|
+
rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
154
|
+
-----END CERTIFICATE-----
|
155
|
+
|
156
|
+
Subject: C=US, O=SecureTrust Corporation, CN=SecureTrust CA
|
157
|
+
-----BEGIN CERTIFICATE-----
|
158
|
+
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
|
159
|
+
MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
|
160
|
+
FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
|
161
|
+
MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
|
162
|
+
cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
|
163
|
+
AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
|
164
|
+
Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
|
165
|
+
0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
|
166
|
+
wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
|
167
|
+
7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
|
168
|
+
8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
|
169
|
+
BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
|
170
|
+
/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
|
171
|
+
JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
|
172
|
+
NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
|
173
|
+
6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
|
174
|
+
3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
|
175
|
+
D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
|
176
|
+
CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
|
177
|
+
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
|
178
|
+
-----END CERTIFICATE-----
|
179
|
+
|
180
|
+
Subject: C=US, O=SecureTrust Corporation, CN=Secure Global CA
|
181
|
+
-----BEGIN CERTIFICATE-----
|
182
|
+
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
|
183
|
+
MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
|
184
|
+
GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
|
185
|
+
MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
|
186
|
+
Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
|
187
|
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
|
188
|
+
iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
|
189
|
+
/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
|
190
|
+
jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
|
191
|
+
HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
|
192
|
+
sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
|
193
|
+
gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
|
194
|
+
MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
|
195
|
+
KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
|
196
|
+
AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
|
197
|
+
URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
|
198
|
+
H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
|
199
|
+
I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
|
200
|
+
iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
|
201
|
+
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
|
202
|
+
-----END CERTIFICATE-----
|