braintree 1.1.3 → 1.2.0
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/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-----
|