From fa26fa57ff980eee12ab6b770df601e6dd7bef34 Mon Sep 17 00:00:00 2001 From: pakrym-stripe <99349468+pakrym-stripe@users.noreply.github.com> Date: Mon, 1 Aug 2022 09:14:14 -0700 Subject: [PATCH 01/10] Next major release changes (#845) --- stripe/api_resources/__init__.py | 7 - stripe/api_resources/abstract/api_resource.py | 68 +- .../abstract/createable_api_resource.py | 18 +- .../api_resources/abstract/custom_method.py | 4 +- .../abstract/deletable_api_resource.py | 7 +- .../abstract/listable_api_resource.py | 20 +- .../abstract/nested_resource_class_methods.py | 18 +- .../abstract/searchable_api_resource.py | 19 +- .../abstract/updateable_api_resource.py | 13 +- stripe/api_resources/abstract/verify_mixin.py | 8 +- stripe/api_resources/account.py | 73 +- stripe/api_resources/alipay_account.py | 45 - stripe/api_resources/application_fee.py | 33 +- .../api_resources/application_fee_refund.py | 2 +- stripe/api_resources/apps/secret.py | 32 +- stripe/api_resources/bitcoin_receiver.py | 28 - stripe/api_resources/bitcoin_transaction.py | 8 - stripe/api_resources/card.py | 20 +- stripe/api_resources/charge.py | 66 +- stripe/api_resources/checkout/session.py | 68 +- stripe/api_resources/credit_note.py | 47 +- stripe/api_resources/customer.py | 226 +- stripe/api_resources/dispute.py | 35 +- .../financial_connections/account.py | 105 +- .../identity/verification_session.py | 69 +- stripe/api_resources/invoice.py | 185 +- stripe/api_resources/issuer_fraud_record.py | 8 - stripe/api_resources/issuing/__init__.py | 1 - stripe/api_resources/issuing/authorization.py | 69 +- stripe/api_resources/issuing/card.py | 136 +- stripe/api_resources/issuing/card_details.py | 8 - stripe/api_resources/issuing/dispute.py | 35 +- stripe/api_resources/line_item.py | 4 +- stripe/api_resources/list_object.py | 36 +- stripe/api_resources/order.py | 131 +- stripe/api_resources/payment_intent.py | 205 +- stripe/api_resources/payment_link.py | 37 +- stripe/api_resources/payment_method.py | 69 +- stripe/api_resources/payout.py | 69 +- stripe/api_resources/quote.py | 175 +- stripe/api_resources/recipient.py | 16 - stripe/api_resources/refund.py | 69 +- stripe/api_resources/review.py | 35 +- stripe/api_resources/search_result_object.py | 32 +- stripe/api_resources/setup_intent.py | 103 +- stripe/api_resources/source.py | 74 +- stripe/api_resources/subscription.py | 80 +- stripe/api_resources/subscription_item.py | 6 - stripe/api_resources/subscription_schedule.py | 69 +- stripe/api_resources/terminal/reader.py | 171 +- .../api_resources/test_helpers/test_clock.py | 35 +- stripe/api_resources/three_d_secure.py | 12 - stripe/api_resources/topup.py | 33 +- stripe/api_resources/transfer.py | 11 - .../treasury/financial_account.py | 71 +- .../treasury/inbound_transfer.py | 131 +- .../treasury/outbound_payment.py | 131 +- .../treasury/outbound_transfer.py | 135 +- .../api_resources/treasury/received_credit.py | 17 +- .../api_resources/treasury/received_debit.py | 17 +- stripe/data/ca-certificates.crt | 1823 +++++++++-------- stripe/object_classes.py | 8 - stripe/stripe_object.py | 41 +- stripe/util.py | 11 +- .../abstract/test_updateable_api_resource.py | 1 + tests/api_resources/issuing/test_card.py | 31 - tests/api_resources/test_alipay_account.py | 56 - tests/api_resources/test_application_fee.py | 9 - tests/api_resources/test_bitcoin_receiver.py | 44 - tests/api_resources/test_card.py | 7 - tests/api_resources/test_charge.py | 24 - .../api_resources/test_issuer_fraud_record.py | 21 - tests/api_resources/test_recipient.py | 58 - .../api_resources/test_source_transaction.py | 2 +- tests/api_resources/test_three_d_secure.py | 22 - tests/api_resources/test_transfer.py | 36 - .../test_usage_record_summary.py | 5 +- tests/test_generated_examples.py | 21 +- 78 files changed, 3320 insertions(+), 2355 deletions(-) delete mode 100644 stripe/api_resources/alipay_account.py delete mode 100644 stripe/api_resources/bitcoin_receiver.py delete mode 100644 stripe/api_resources/bitcoin_transaction.py delete mode 100644 stripe/api_resources/issuer_fraud_record.py delete mode 100644 stripe/api_resources/issuing/card_details.py delete mode 100644 stripe/api_resources/recipient.py delete mode 100644 stripe/api_resources/three_d_secure.py delete mode 100644 tests/api_resources/test_alipay_account.py delete mode 100644 tests/api_resources/test_bitcoin_receiver.py delete mode 100644 tests/api_resources/test_issuer_fraud_record.py delete mode 100644 tests/api_resources/test_recipient.py delete mode 100644 tests/api_resources/test_three_d_secure.py diff --git a/stripe/api_resources/__init__.py b/stripe/api_resources/__init__.py index 4fe8250a6..815130bba 100644 --- a/stripe/api_resources/__init__.py +++ b/stripe/api_resources/__init__.py @@ -22,15 +22,12 @@ from stripe.api_resources.account import Account from stripe.api_resources.account_link import AccountLink -from stripe.api_resources.alipay_account import AlipayAccount from stripe.api_resources.apple_pay_domain import ApplePayDomain from stripe.api_resources.application_fee import ApplicationFee from stripe.api_resources.application_fee_refund import ApplicationFeeRefund from stripe.api_resources.balance import Balance from stripe.api_resources.balance_transaction import BalanceTransaction from stripe.api_resources.bank_account import BankAccount -from stripe.api_resources.bitcoin_receiver import BitcoinReceiver -from stripe.api_resources.bitcoin_transaction import BitcoinTransaction from stripe.api_resources.capability import Capability from stripe.api_resources.card import Card from stripe.api_resources.cash_balance import CashBalance @@ -54,7 +51,6 @@ from stripe.api_resources.invoice import Invoice from stripe.api_resources.invoice_item import InvoiceItem from stripe.api_resources.invoice_line_item import InvoiceLineItem -from stripe.api_resources.issuer_fraud_record import IssuerFraudRecord from stripe.api_resources.line_item import LineItem from stripe.api_resources.login_link import LoginLink from stripe.api_resources.mandate import Mandate @@ -69,8 +65,6 @@ from stripe.api_resources.product import Product from stripe.api_resources.promotion_code import PromotionCode from stripe.api_resources.quote import Quote -from stripe.api_resources.recipient import Recipient -from stripe.api_resources.recipient_transfer import RecipientTransfer from stripe.api_resources.refund import Refund from stripe.api_resources.reversal import Reversal from stripe.api_resources.review import Review @@ -86,7 +80,6 @@ from stripe.api_resources.tax_code import TaxCode from stripe.api_resources.tax_id import TaxId from stripe.api_resources.tax_rate import TaxRate -from stripe.api_resources.three_d_secure import ThreeDSecure from stripe.api_resources.token import Token from stripe.api_resources.topup import Topup from stripe.api_resources.transfer import Transfer diff --git a/stripe/api_resources/abstract/api_resource.py b/stripe/api_resources/abstract/api_resource.py index 52b3ed9ee..664ea1c93 100644 --- a/stripe/api_resources/abstract/api_resource.py +++ b/stripe/api_resources/abstract/api_resource.py @@ -13,8 +13,7 @@ def retrieve(cls, id, api_key=None, **params): return instance def refresh(self): - self.refresh_from(self.request("get", self.instance_url())) - return self + return self._request_and_refresh("get", self.instance_url()) @classmethod def class_url(cls): @@ -44,6 +43,65 @@ def instance_url(self): extn = quote_plus(id) return "%s/%s" % (base, extn) + # The `method_` and `url_` arguments are suffixed with an underscore to + # avoid conflicting with actual request parameters in `params`. + def _request( + self, + method_, + url_, + api_key=None, + idempotency_key=None, + stripe_version=None, + stripe_account=None, + headers=None, + params=None, + ): + obj = StripeObject._request( + self, + method_, + url_, + api_key, + idempotency_key, + stripe_version, + stripe_account, + headers, + params, + ) + + if type(self) is type(obj): + self.refresh_from(obj) + return self + else: + return obj + + # The `method_` and `url_` arguments are suffixed with an underscore to + # avoid conflicting with actual request parameters in `params`. + def _request_and_refresh( + self, + method_, + url_, + api_key=None, + idempotency_key=None, + stripe_version=None, + stripe_account=None, + headers=None, + params=None, + ): + obj = StripeObject._request( + self, + method_, + url_, + api_key, + idempotency_key, + stripe_version, + stripe_account, + headers, + params, + ) + + self.refresh_from(obj) + return self + # The `method_` and `url_` arguments are suffixed with an underscore to # avoid conflicting with actual request parameters in `params`. @classmethod @@ -55,7 +113,7 @@ def _static_request( idempotency_key=None, stripe_version=None, stripe_account=None, - **params + params=None, ): requestor = api_requestor.APIRequestor( api_key, api_version=stripe_version, account=stripe_account @@ -63,7 +121,7 @@ def _static_request( headers = util.populate_headers(idempotency_key) response, api_key = requestor.request(method_, url_, params, headers) return util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + response, api_key, stripe_version, stripe_account, params ) # The `method_` and `url_` arguments are suffixed with an underscore to @@ -77,7 +135,7 @@ def _static_request_stream( idempotency_key=None, stripe_version=None, stripe_account=None, - **params + params=None, ): requestor = api_requestor.APIRequestor( api_key, api_version=stripe_version, account=stripe_account diff --git a/stripe/api_resources/abstract/createable_api_resource.py b/stripe/api_resources/abstract/createable_api_resource.py index cbfe83738..112c79bee 100644 --- a/stripe/api_resources/abstract/createable_api_resource.py +++ b/stripe/api_resources/abstract/createable_api_resource.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, division, print_function from stripe.api_resources.abstract.api_resource import APIResource -from stripe import api_requestor, util class CreateableAPIResource(APIResource): @@ -14,13 +13,12 @@ def create( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = cls.class_url() - headers = util.populate_headers(idempotency_key) - response, api_key = requestor.request("post", url, params, headers) - - return util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + cls.class_url(), + api_key, + idempotency_key, + stripe_version, + stripe_account, + params, ) diff --git a/stripe/api_resources/abstract/custom_method.py b/stripe/api_resources/abstract/custom_method.py index ca0cf93d0..67be6e2f7 100644 --- a/stripe/api_resources/abstract/custom_method.py +++ b/stripe/api_resources/abstract/custom_method.py @@ -20,7 +20,7 @@ def custom_method_request(cls, sid, **params): quote_plus(util.utf8(sid)), http_path, ) - obj = cls._static_request(http_verb, url, **params) + obj = cls._static_request(http_verb, url, params=params) # For list objects, we have to attach the parameters so that they # can be referenced in auto-pagination and ensure consistency. @@ -35,7 +35,7 @@ def custom_method_request_stream(cls, sid, **params): quote_plus(util.utf8(sid)), http_path, ) - return cls._static_request_stream(http_verb, url, **params) + return cls._static_request_stream(http_verb, url, params=params) if is_streaming: class_method_impl = classmethod(custom_method_request_stream) diff --git a/stripe/api_resources/abstract/deletable_api_resource.py b/stripe/api_resources/abstract/deletable_api_resource.py index fd5100f1a..fe9473df1 100644 --- a/stripe/api_resources/abstract/deletable_api_resource.py +++ b/stripe/api_resources/abstract/deletable_api_resource.py @@ -9,9 +9,10 @@ class DeletableAPIResource(APIResource): @classmethod def _cls_delete(cls, sid, **params): url = "%s/%s" % (cls.class_url(), quote_plus(util.utf8(sid))) - return cls._static_request("delete", url, **params) + return cls._static_request("delete", url, params=params) @util.class_method_variant("_cls_delete") def delete(self, **params): - self.refresh_from(self.request("delete", self.instance_url(), params)) - return self + return self._request_and_refresh( + "delete", self.instance_url(), params=params + ) diff --git a/stripe/api_resources/abstract/listable_api_resource.py b/stripe/api_resources/abstract/listable_api_resource.py index df7f971c9..dc94cd9a5 100644 --- a/stripe/api_resources/abstract/listable_api_resource.py +++ b/stripe/api_resources/abstract/listable_api_resource.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, division, print_function -from stripe import api_requestor, util from stripe.api_resources.abstract.api_resource import APIResource @@ -13,16 +12,11 @@ def auto_paging_iter(cls, *args, **params): def list( cls, api_key=None, stripe_version=None, stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, - api_base=cls.api_base(), - api_version=stripe_version, - account=stripe_account, + return cls._static_request( + "get", + cls.class_url(), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = cls.class_url() - response, api_key = requestor.request("get", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - stripe_object._retrieve_params = params - return stripe_object diff --git a/stripe/api_resources/abstract/nested_resource_class_methods.py b/stripe/api_resources/abstract/nested_resource_class_methods.py index e1bcf9fab..2065c1ce5 100644 --- a/stripe/api_resources/abstract/nested_resource_class_methods.py +++ b/stripe/api_resources/abstract/nested_resource_class_methods.py @@ -1,8 +1,9 @@ from __future__ import absolute_import, division, print_function -from stripe import api_requestor, util from stripe.six.moves.urllib.parse import quote_plus +from stripe.api_resources.abstract import APIResource + def nested_resource_class_methods( resource, path=None, operations=None, resource_plural=None @@ -38,13 +39,14 @@ def nested_resource_request( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - headers = util.populate_headers(idempotency_key) - response, api_key = requestor.request(method, url, params, headers) - return util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return APIResource._static_request( + method, + url, + api_key=api_key, + idempotency_key=idempotency_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) resource_request_method = "%ss_request" % resource diff --git a/stripe/api_resources/abstract/searchable_api_resource.py b/stripe/api_resources/abstract/searchable_api_resource.py index 10f17d792..7b625ef4e 100644 --- a/stripe/api_resources/abstract/searchable_api_resource.py +++ b/stripe/api_resources/abstract/searchable_api_resource.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, division, print_function -from stripe import api_requestor, util from stripe.api_resources.abstract.api_resource import APIResource @@ -14,15 +13,11 @@ def _search( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, - api_base=cls.api_base(), - api_version=stripe_version, - account=stripe_account, + return cls._static_request( + "get", + search_url, + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - response, api_key = requestor.request("get", search_url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - stripe_object._retrieve_params = params - return stripe_object diff --git a/stripe/api_resources/abstract/updateable_api_resource.py b/stripe/api_resources/abstract/updateable_api_resource.py index e253faad0..981b6ecdb 100644 --- a/stripe/api_resources/abstract/updateable_api_resource.py +++ b/stripe/api_resources/abstract/updateable_api_resource.py @@ -9,17 +9,16 @@ class UpdateableAPIResource(APIResource): @classmethod def modify(cls, sid, **params): url = "%s/%s" % (cls.class_url(), quote_plus(util.utf8(sid))) - return cls._static_request("post", url, **params) + return cls._static_request("post", url, params=params) def save(self, idempotency_key=None): updated_params = self.serialize(None) - headers = util.populate_headers(idempotency_key) - if updated_params: - self.refresh_from( - self.request( - "post", self.instance_url(), updated_params, headers - ) + self._request_and_refresh( + "post", + self.instance_url(), + idempotency_key=idempotency_key, + params=updated_params, ) else: util.logger.debug("Trying to save already saved object %r", self) diff --git a/stripe/api_resources/abstract/verify_mixin.py b/stripe/api_resources/abstract/verify_mixin.py index 9a0be204f..ba58236eb 100644 --- a/stripe/api_resources/abstract/verify_mixin.py +++ b/stripe/api_resources/abstract/verify_mixin.py @@ -1,11 +1,9 @@ from __future__ import absolute_import, division, print_function -from stripe import util - class VerifyMixin(object): def verify(self, idempotency_key=None, **params): url = self.instance_url() + "/verify" - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + return self._request( + "post", url, idempotency_key=idempotency_key, params=params + ) diff --git a/stripe/api_resources/account.py b/stripe/api_resources/account.py index 40e8057f0..fd5ff77e0 100644 --- a/stripe/api_resources/account.py +++ b/stripe/api_resources/account.py @@ -8,13 +8,10 @@ from stripe.api_resources.abstract import DeletableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import nested_resource_class_methods from stripe.six.moves.urllib.parse import quote_plus -@custom_method("persons", http_verb="get") -@custom_method("reject", http_verb="post") @nested_resource_class_methods( "capability", operations=["retrieve", "update", "list"], @@ -37,23 +34,67 @@ class Account( ): OBJECT_NAME = "account" + @classmethod + def _cls_persons( + cls, + account, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/accounts/{account}/persons".format( + account=util.sanitize_id(account) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_persons") def persons(self, idempotency_key=None, **params): - url = "/v1/accounts/{account}/persons".format( - account=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/accounts/{account}/persons".format( + account=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_reject( + cls, + account, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/accounts/{account}/reject".format( + account=util.sanitize_id(account) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object + @util.class_method_variant("_cls_reject") def reject(self, idempotency_key=None, **params): - url = "/v1/accounts/{account}/reject".format( - account=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/accounts/{account}/reject".format( + account=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self # We are not adding a helper for capabilities here as the Account object already has a # capabilities property which is a hash and not the sub-list of capabilities. @@ -67,7 +108,7 @@ def retrieve(cls, id=None, api_key=None, **params): @classmethod def modify(cls, id=None, **params): url = cls._build_instance_url(id) - return cls._static_request("post", url, **params) + return cls._static_request("post", url, params=params) @classmethod def _build_instance_url(cls, sid): diff --git a/stripe/api_resources/alipay_account.py b/stripe/api_resources/alipay_account.py deleted file mode 100644 index a11da90c9..000000000 --- a/stripe/api_resources/alipay_account.py +++ /dev/null @@ -1,45 +0,0 @@ -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - -from stripe import util -from stripe.api_resources.abstract import DeletableAPIResource -from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.customer import Customer -from stripe.six.moves.urllib.parse import quote_plus - - -class AlipayAccount(DeletableAPIResource, UpdateableAPIResource): - OBJECT_NAME = "alipay_account" - - @classmethod - def _build_instance_url(cls, customer, sid): - token = util.utf8(sid) - extn = quote_plus(token) - customer = util.utf8(customer) - - base = Customer.class_url() - owner_extn = quote_plus(customer) - - return "%s/%s/sources/%s" % (base, owner_extn, extn) - - def instance_url(self): - return self._build_instance_url(self.customer, self.id) - - @classmethod - def modify(cls, customer, id, **params): - url = cls._build_instance_url(customer, id) - return cls._static_request("post", url, **params) - - @classmethod - def retrieve( - cls, - id, - api_key=None, - stripe_version=None, - stripe_account=None, - **params - ): - raise NotImplementedError( - "Can't retrieve an Alipay account without a customer ID. " - "Use customer.sources.retrieve('alipay_account_id') instead." - ) diff --git a/stripe/api_resources/application_fee.py b/stripe/api_resources/application_fee.py index 9c44605dd..472068614 100644 --- a/stripe/api_resources/application_fee.py +++ b/stripe/api_resources/application_fee.py @@ -13,8 +13,33 @@ class ApplicationFee(ListableAPIResource): OBJECT_NAME = "application_fee" + @classmethod + def _cls_refund( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/application_fees/{id}/refunds".format( + id=util.sanitize_id(id) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_refund") def refund(self, idempotency_key=None, **params): - headers = util.populate_headers(idempotency_key) - url = self.instance_url() + "/refund" - self.refresh_from(self.request("post", url, params, headers)) - return self + return self._request( + "post", + "/v1/application_fees/{id}/refunds".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) diff --git a/stripe/api_resources/application_fee_refund.py b/stripe/api_resources/application_fee_refund.py index fbda378bb..271140c8e 100644 --- a/stripe/api_resources/application_fee_refund.py +++ b/stripe/api_resources/application_fee_refund.py @@ -22,7 +22,7 @@ def _build_instance_url(cls, fee, sid): @classmethod def modify(cls, fee, sid, **params): url = cls._build_instance_url(fee, sid) - return cls._static_request("post", url, **params) + return cls._static_request("post", url, params=params) def instance_url(self): return self._build_instance_url(self.fee, self.id) diff --git a/stripe/api_resources/apps/secret.py b/stripe/api_resources/apps/secret.py index f0b9dd2cf..7e7df6a98 100644 --- a/stripe/api_resources/apps/secret.py +++ b/stripe/api_resources/apps/secret.py @@ -1,8 +1,6 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor -from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource @@ -14,26 +12,24 @@ class Secret(CreateableAPIResource, ListableAPIResource): def delete_where( cls, api_key=None, stripe_version=None, stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "post", + "/v1/apps/secrets/delete", + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/apps/secrets/delete" - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @classmethod def find( cls, api_key=None, stripe_version=None, stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/apps/secrets/find" - response, api_key = requestor.request("get", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "get", + "/v1/apps/secrets/find", + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object diff --git a/stripe/api_resources/bitcoin_receiver.py b/stripe/api_resources/bitcoin_receiver.py deleted file mode 100644 index e7edf7d27..000000000 --- a/stripe/api_resources/bitcoin_receiver.py +++ /dev/null @@ -1,28 +0,0 @@ -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - -from stripe import util -from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.customer import Customer -from stripe.six.moves.urllib.parse import quote_plus - - -class BitcoinReceiver(ListableAPIResource): - OBJECT_NAME = "bitcoin_receiver" - - @classmethod - def class_url(cls): - return "/v1/bitcoin/receivers" - - def instance_url(self): - token = util.utf8(self.id) - extn = quote_plus(token) - - if hasattr(self, "customer"): - customer = util.utf8(self.customer) - base = Customer.class_url() - cust_extn = quote_plus(customer) - return "%s/%s/sources/%s" % (base, cust_extn, extn) - else: - base = BitcoinReceiver.class_url() - return "%s/%s" % (base, extn) diff --git a/stripe/api_resources/bitcoin_transaction.py b/stripe/api_resources/bitcoin_transaction.py deleted file mode 100644 index 96f5a9c85..000000000 --- a/stripe/api_resources/bitcoin_transaction.py +++ /dev/null @@ -1,8 +0,0 @@ -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - -from stripe.stripe_object import StripeObject - - -class BitcoinTransaction(StripeObject): - OBJECT_NAME = "bitcoin_transaction" diff --git a/stripe/api_resources/card.py b/stripe/api_resources/card.py index 53503691d..6945f60d8 100644 --- a/stripe/api_resources/card.py +++ b/stripe/api_resources/card.py @@ -7,7 +7,6 @@ from stripe.api_resources.abstract import UpdateableAPIResource from stripe.api_resources.account import Account from stripe.api_resources.customer import Customer -from stripe.api_resources.recipient import Recipient from stripe.six.moves.urllib.parse import quote_plus @@ -24,13 +23,6 @@ def instance_url(self): owner_extn = quote_plus(customer) class_base = "sources" - elif hasattr(self, "recipient"): - recipient = util.utf8(self.recipient) - - base = Recipient.class_url() - owner_extn = quote_plus(recipient) - class_base = "cards" - elif hasattr(self, "account"): account = util.utf8(self.account) @@ -41,7 +33,7 @@ def instance_url(self): else: raise error.InvalidRequestError( "Could not determine whether card_id %s is " - "attached to a customer, recipient, or " + "attached to a customer, or " "account." % token, "id", ) @@ -51,9 +43,8 @@ def instance_url(self): @classmethod def modify(cls, sid, **params): raise NotImplementedError( - "Can't modify a card without a customer, recipient or account " - "ID. Call save on customer.sources.retrieve('card_id'), " - "recipient.cards.retrieve('card_id'), or " + "Can't modify a card without a customer or account " + "ID. Call save on customer.sources.retrieve('card_id'), or " "account.external_accounts.retrieve('card_id') instead." ) @@ -67,8 +58,7 @@ def retrieve( **params ): raise NotImplementedError( - "Can't retrieve a card without a customer, recipient or account " - "ID. Use customer.sources.retrieve('card_id'), " - "recipient.cards.retrieve('card_id'), or " + "Can't retrieve a card without a customer, or account " + "ID. Use customer.sources.retrieve('card_id'), or" "account.external_accounts.retrieve('card_id') instead." ) diff --git a/stripe/api_resources/charge.py b/stripe/api_resources/charge.py index bd8dc9925..77a5a1684 100644 --- a/stripe/api_resources/charge.py +++ b/stripe/api_resources/charge.py @@ -1,16 +1,13 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import SearchableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("capture", http_verb="post") class Charge( CreateableAPIResource, ListableAPIResource, @@ -19,13 +16,36 @@ class Charge( ): OBJECT_NAME = "charge" + @classmethod + def _cls_capture( + cls, + charge, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/charges/{charge}/capture".format( + charge=util.sanitize_id(charge) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_capture") def capture(self, idempotency_key=None, **params): - url = "/v1/charges/{charge}/capture".format( - charge=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/charges/{charge}/capture".format( + charge=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self @classmethod def search(cls, *args, **kwargs): @@ -35,36 +55,6 @@ def search(cls, *args, **kwargs): def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() - def refund(self, idempotency_key=None, **params): - url = self.instance_url() + "/refund" - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self - - def update_dispute(self, idempotency_key=None, **params): - requestor = api_requestor.APIRequestor( - self.api_key, - api_version=self.stripe_version, - account=self.stripe_account, - ) - url = self.instance_url() + "/dispute" - headers = util.populate_headers(idempotency_key) - response, api_key = requestor.request("post", url, params, headers) - self.refresh_from({"dispute": response}, api_key, True) - return self.dispute - - def close_dispute(self, idempotency_key=None, **params): - requestor = api_requestor.APIRequestor( - self.api_key, - api_version=self.stripe_version, - account=self.stripe_account, - ) - url = self.instance_url() + "/dispute/close" - headers = util.populate_headers(idempotency_key) - response, api_key = requestor.request("post", url, params, headers) - self.refresh_from({"dispute": response}, api_key, True) - return self.dispute - def mark_as_fraudulent(self, idempotency_key=None): params = {"fraud_details": {"user_report": "fraudulent"}} url = self.instance_url() diff --git a/stripe/api_resources/checkout/session.py b/stripe/api_resources/checkout/session.py index bd3a36327..d484fd252 100644 --- a/stripe/api_resources/checkout/session.py +++ b/stripe/api_resources/checkout/session.py @@ -4,19 +4,69 @@ from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method -from stripe.api_resources.abstract import nested_resource_class_methods -@custom_method("expire", http_verb="post") -@nested_resource_class_methods("line_item", operations=["list"]) class Session(CreateableAPIResource, ListableAPIResource): OBJECT_NAME = "checkout.session" + @classmethod + def _cls_expire( + cls, + session, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=util.sanitize_id(session) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_expire") def expire(self, idempotency_key=None, **params): - url = "/v1/checkout/sessions/{session}/expire".format( - session=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/checkout/sessions/{session}/expire".format( + session=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_list_line_items( + cls, + session, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=util.sanitize_id(session) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_list_line_items") + def list_line_items(self, idempotency_key=None, **params): + return self._request( + "get", + "/v1/checkout/sessions/{session}/line_items".format( + session=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/credit_note.py b/stripe/api_resources/credit_note.py index 01d2b0a15..0eabc74da 100644 --- a/stripe/api_resources/credit_note.py +++ b/stripe/api_resources/credit_note.py @@ -1,15 +1,12 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("void_credit_note", http_verb="post", http_path="void") class CreditNote( CreateableAPIResource, ListableAPIResource, @@ -21,20 +18,40 @@ class CreditNote( def preview( cls, api_key=None, stripe_version=None, stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "get", + "/v1/credit_notes/preview", + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/credit_notes/preview" - response, api_key = requestor.request("get", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + + @classmethod + def _cls_void_credit_note( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/credit_notes/{id}/void".format(id=util.sanitize_id(id)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object + @util.class_method_variant("_cls_void_credit_note") def void_credit_note(self, idempotency_key=None, **params): - url = "/v1/credit_notes/{id}/void".format( - id=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/credit_notes/{id}/void".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/customer.py b/stripe/api_resources/customer.py index a37fb967a..934cf8ff1 100644 --- a/stripe/api_resources/customer.py +++ b/stripe/api_resources/customer.py @@ -1,7 +1,6 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import CreateableAPIResource @@ -9,23 +8,11 @@ from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import SearchableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import nested_resource_class_methods from stripe.api_resources.abstract import test_helpers -@custom_method("delete_discount", http_verb="delete", http_path="discount") @test_helpers -@custom_method( - "create_funding_instructions", - http_verb="post", - http_path="funding_instructions", -) -@custom_method( - "list_payment_methods", - http_verb="get", - http_path="payment_methods", -) @nested_resource_class_methods( "balance_transaction", operations=["create", "retrieve", "update", "list"], @@ -47,24 +34,98 @@ class Customer( ): OBJECT_NAME = "customer" + @classmethod + def _cls_create_funding_instructions( + cls, + customer, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=util.sanitize_id(customer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_create_funding_instructions") def create_funding_instructions(self, idempotency_key=None, **params): - url = "/v1/customers/{customer}/funding_instructions".format( - customer=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/customers/{customer}/funding_instructions".format( + customer=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("post", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - return stripe_object + @classmethod + def _cls_delete_discount( + cls, + customer, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "delete", + "/v1/customers/{customer}/discount".format( + customer=util.sanitize_id(customer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_delete_discount") + def delete_discount(self, idempotency_key=None, **params): + return self._request( + "delete", + "/v1/customers/{customer}/discount".format( + customer=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_list_payment_methods( + cls, + customer, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=util.sanitize_id(customer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_list_payment_methods") def list_payment_methods(self, idempotency_key=None, **params): - url = "/v1/customers/{customer}/payment_methods".format( - customer=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/customers/{customer}/payment_methods".format( + customer=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object @classmethod def _cls_retrieve_payment_method( @@ -76,35 +137,31 @@ def _cls_retrieve_payment_method( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = ( + return cls._static_request( + "get", "/v1/customers/{customer}/payment_methods/{payment_method}".format( customer=util.sanitize_id(customer), payment_method=util.sanitize_id(payment_method), - ) - ) - response, api_key = requestor.request("get", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_retrieve_payment_method") def retrieve_payment_method( self, payment_method, idempotency_key=None, **params ): - url = ( + return self._request( + "get", "/v1/customers/{customer}/payment_methods/{payment_method}".format( customer=util.sanitize_id(self.get("id")), payment_method=util.sanitize_id(payment_method), - ) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - return stripe_object @classmethod def search(cls, *args, **kwargs): @@ -114,61 +171,45 @@ def search(cls, *args, **kwargs): def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() - def delete_discount(self, **params): - requestor = api_requestor.APIRequestor( - self.api_key, - api_version=self.stripe_version, - account=self.stripe_account, - ) - url = self.instance_url() + "/discount" - _, api_key = requestor.request("delete", url, params) - self.refresh_from({"discount": None}, api_key, True) - @classmethod def retrieve_cash_balance( cls, customer, - nested_id=None, api_key=None, stripe_version=None, stripe_account=None, **params ): - # The nested_id parameter is required for backwards compatibility purposes and is ignored. - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/customers/{customer}/cash_balance".format( - customer=util.sanitize_id(customer) - ) - response, api_key = requestor.request("get", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "get", + "/v1/customers/{customer}/cash_balance".format( + customer=util.sanitize_id(customer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @classmethod def modify_cash_balance( cls, customer, - nested_id=None, api_key=None, stripe_version=None, stripe_account=None, **params ): - # The nested_id parameter is required for backwards compatibility purposes and is ignored. - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/customers/{customer}/cash_balance".format( - customer=util.sanitize_id(customer) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/customers/{customer}/cash_balance".format( + customer=util.sanitize_id(customer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object class TestHelpers(APIResourceTestHelpers): @classmethod @@ -180,25 +221,24 @@ def _cls_fund_cash_balance( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( - customer=util.sanitize_id(customer) + return cls._static_request( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=util.sanitize_id(customer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @util.class_method_variant("_cls_fund_cash_balance") def fund_cash_balance(self, idempotency_key=None, **params): - url = "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( - customer=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + return self.resource._request( + "post", + "/v1/test_helpers/customers/{customer}/fund_cash_balance".format( + customer=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource diff --git a/stripe/api_resources/dispute.py b/stripe/api_resources/dispute.py index 8f8b43973..7acb3dc02 100644 --- a/stripe/api_resources/dispute.py +++ b/stripe/api_resources/dispute.py @@ -4,17 +4,38 @@ from stripe import util from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("close", http_verb="post") class Dispute(ListableAPIResource, UpdateableAPIResource): OBJECT_NAME = "dispute" + @classmethod + def _cls_close( + cls, + dispute, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=util.sanitize_id(dispute) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_close") def close(self, idempotency_key=None, **params): - url = "/v1/disputes/{dispute}/close".format( - dispute=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/disputes/{dispute}/close".format( + dispute=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/financial_connections/account.py b/stripe/api_resources/financial_connections/account.py index c009769fe..0ad616727 100644 --- a/stripe/api_resources/financial_connections/account.py +++ b/stripe/api_resources/financial_connections/account.py @@ -3,37 +3,100 @@ from stripe import util from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("disconnect", http_verb="post") -@custom_method("list_owners", http_verb="get", http_path="owners") -@custom_method("refresh_account", http_verb="post", http_path="refresh") class Account(ListableAPIResource): OBJECT_NAME = "financial_connections.account" + @classmethod + def _cls_disconnect( + cls, + account, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=util.sanitize_id(account) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_disconnect") def disconnect(self, idempotency_key=None, **params): - url = "/v1/financial_connections/accounts/{account}/disconnect".format( - account=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/financial_connections/accounts/{account}/disconnect".format( + account=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_list_owners( + cls, + account, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=util.sanitize_id(account) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_list_owners") def list_owners(self, idempotency_key=None, **params): - url = "/v1/financial_connections/accounts/{account}/owners".format( - account=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/financial_connections/accounts/{account}/owners".format( + account=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_refresh_account( + cls, + account, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=util.sanitize_id(account) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object + @util.class_method_variant("_cls_refresh_account") def refresh_account(self, idempotency_key=None, **params): - url = "/v1/financial_connections/accounts/{account}/refresh".format( - account=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/financial_connections/accounts/{account}/refresh".format( + account=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/identity/verification_session.py b/stripe/api_resources/identity/verification_session.py index 4fdcc8b7a..74ecc880a 100644 --- a/stripe/api_resources/identity/verification_session.py +++ b/stripe/api_resources/identity/verification_session.py @@ -5,11 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("cancel", http_verb="post") -@custom_method("redact", http_verb="post") class VerificationSession( CreateableAPIResource, ListableAPIResource, @@ -17,18 +14,64 @@ class VerificationSession( ): OBJECT_NAME = "identity.verification_session" + @classmethod + def _cls_cancel( + cls, + session, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=util.sanitize_id(session) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/identity/verification_sessions/{session}/cancel".format( - session=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/identity/verification_sessions/{session}/cancel".format( + session=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_redact( + cls, + session, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=util.sanitize_id(session) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_redact") def redact(self, idempotency_key=None, **params): - url = "/v1/identity/verification_sessions/{session}/redact".format( - session=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/identity/verification_sessions/{session}/redact".format( + session=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/invoice.py b/stripe/api_resources/invoice.py index 5864e4a68..65ee6116a 100644 --- a/stripe/api_resources/invoice.py +++ b/stripe/api_resources/invoice.py @@ -1,21 +1,14 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import DeletableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import SearchableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("finalize_invoice", http_verb="post", http_path="finalize") -@custom_method("mark_uncollectible", http_verb="post") -@custom_method("pay", http_verb="post") -@custom_method("send_invoice", http_verb="post", http_path="send") -@custom_method("void_invoice", http_verb="post", http_path="void") class Invoice( CreateableAPIResource, DeletableAPIResource, @@ -25,59 +18,173 @@ class Invoice( ): OBJECT_NAME = "invoice" + @classmethod + def _cls_finalize_invoice( + cls, + invoice, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=util.sanitize_id(invoice) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_finalize_invoice") def finalize_invoice(self, idempotency_key=None, **params): - url = "/v1/invoices/{invoice}/finalize".format( - invoice=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/invoices/{invoice}/finalize".format( + invoice=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_mark_uncollectible( + cls, + invoice, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=util.sanitize_id(invoice) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_mark_uncollectible") def mark_uncollectible(self, idempotency_key=None, **params): - url = "/v1/invoices/{invoice}/mark_uncollectible".format( - invoice=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/invoices/{invoice}/mark_uncollectible".format( + invoice=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_pay( + cls, + invoice, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=util.sanitize_id(invoice) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_pay") def pay(self, idempotency_key=None, **params): - url = "/v1/invoices/{invoice}/pay".format( - invoice=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/invoices/{invoice}/pay".format( + invoice=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_send_invoice( + cls, + invoice, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=util.sanitize_id(invoice) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_send_invoice") def send_invoice(self, idempotency_key=None, **params): - url = "/v1/invoices/{invoice}/send".format( - invoice=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/invoices/{invoice}/send".format( + invoice=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self @classmethod def upcoming( cls, api_key=None, stripe_version=None, stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "get", + "/v1/invoices/upcoming", + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/invoices/upcoming" - response, api_key = requestor.request("get", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + + @classmethod + def _cls_void_invoice( + cls, + invoice, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=util.sanitize_id(invoice) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object + @util.class_method_variant("_cls_void_invoice") def void_invoice(self, idempotency_key=None, **params): - url = "/v1/invoices/{invoice}/void".format( - invoice=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/invoices/{invoice}/void".format( + invoice=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self @classmethod def search(cls, *args, **kwargs): diff --git a/stripe/api_resources/issuer_fraud_record.py b/stripe/api_resources/issuer_fraud_record.py deleted file mode 100644 index a626f919e..000000000 --- a/stripe/api_resources/issuer_fraud_record.py +++ /dev/null @@ -1,8 +0,0 @@ -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - -from stripe.api_resources.abstract import ListableAPIResource - - -class IssuerFraudRecord(ListableAPIResource): - OBJECT_NAME = "issuer_fraud_record" diff --git a/stripe/api_resources/issuing/__init__.py b/stripe/api_resources/issuing/__init__.py index 1dad47db2..98a991cff 100644 --- a/stripe/api_resources/issuing/__init__.py +++ b/stripe/api_resources/issuing/__init__.py @@ -5,7 +5,6 @@ from stripe.api_resources.issuing.authorization import Authorization from stripe.api_resources.issuing.card import Card -from stripe.api_resources.issuing.card_details import CardDetails from stripe.api_resources.issuing.cardholder import Cardholder from stripe.api_resources.issuing.dispute import Dispute from stripe.api_resources.issuing.transaction import Transaction diff --git a/stripe/api_resources/issuing/authorization.py b/stripe/api_resources/issuing/authorization.py index e1e95ddb3..c7419fbd2 100644 --- a/stripe/api_resources/issuing/authorization.py +++ b/stripe/api_resources/issuing/authorization.py @@ -4,26 +4,69 @@ from stripe import util from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("approve", http_verb="post") -@custom_method("decline", http_verb="post") class Authorization(ListableAPIResource, UpdateableAPIResource): OBJECT_NAME = "issuing.authorization" + @classmethod + def _cls_approve( + cls, + authorization, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=util.sanitize_id(authorization) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_approve") def approve(self, idempotency_key=None, **params): - url = "/v1/issuing/authorizations/{authorization}/approve".format( - authorization=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/issuing/authorizations/{authorization}/approve".format( + authorization=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_decline( + cls, + authorization, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=util.sanitize_id(authorization) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_decline") def decline(self, idempotency_key=None, **params): - url = "/v1/issuing/authorizations/{authorization}/decline".format( - authorization=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/issuing/authorizations/{authorization}/decline".format( + authorization=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/issuing/card.py b/stripe/api_resources/issuing/card.py index f51e29e31..ad9db4b82 100644 --- a/stripe/api_resources/issuing/card.py +++ b/stripe/api_resources/issuing/card.py @@ -1,24 +1,18 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import test_helpers -@custom_method("details", http_verb="get") @test_helpers class Card(CreateableAPIResource, ListableAPIResource, UpdateableAPIResource): OBJECT_NAME = "issuing.card" - def details(self, idempotency_key=None, **params): - return self.request("get", self.instance_url() + "/details", params) - class TestHelpers(APIResourceTestHelpers): @classmethod def _cls_deliver_card( @@ -29,28 +23,27 @@ def _cls_deliver_card( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( - card=util.sanitize_id(card) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=util.sanitize_id(card) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_deliver_card") def deliver_card(self, idempotency_key=None, **params): - url = "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( - card=util.sanitize_id(self.get("id")) + return self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/deliver".format( + card=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) - ) - return self.resource @classmethod def _cls_fail_card( @@ -61,28 +54,27 @@ def _cls_fail_card( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( - card=util.sanitize_id(card) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=util.sanitize_id(card) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_fail_card") def fail_card(self, idempotency_key=None, **params): - url = "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( - card=util.sanitize_id(self.get("id")) + return self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/fail".format( + card=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) - ) - return self.resource @classmethod def _cls_return_card( @@ -93,32 +85,27 @@ def _cls_return_card( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = ( + return cls._static_request( + "post", "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( card=util.sanitize_id(card) - ) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @util.class_method_variant("_cls_return_card") def return_card(self, idempotency_key=None, **params): - url = ( + return self.resource._request( + "post", "/v1/test_helpers/issuing/cards/{card}/shipping/return".format( - card=util.sanitize_id(self.get("id")) - ) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + card=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource @classmethod def _cls_ship_card( @@ -129,25 +116,24 @@ def _cls_ship_card( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( - card=util.sanitize_id(card) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=util.sanitize_id(card) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_ship_card") def ship_card(self, idempotency_key=None, **params): - url = "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( - card=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + return self.resource._request( + "post", + "/v1/test_helpers/issuing/cards/{card}/shipping/ship".format( + card=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource diff --git a/stripe/api_resources/issuing/card_details.py b/stripe/api_resources/issuing/card_details.py deleted file mode 100644 index 70e29c468..000000000 --- a/stripe/api_resources/issuing/card_details.py +++ /dev/null @@ -1,8 +0,0 @@ -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - -from stripe.stripe_object import StripeObject - - -class CardDetails(StripeObject): - OBJECT_NAME = "issuing.card_details" diff --git a/stripe/api_resources/issuing/dispute.py b/stripe/api_resources/issuing/dispute.py index 33ba913c1..ad601be90 100644 --- a/stripe/api_resources/issuing/dispute.py +++ b/stripe/api_resources/issuing/dispute.py @@ -5,10 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("submit", http_verb="post") class Dispute( CreateableAPIResource, ListableAPIResource, @@ -16,10 +14,33 @@ class Dispute( ): OBJECT_NAME = "issuing.dispute" + @classmethod + def _cls_submit( + cls, + dispute, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=util.sanitize_id(dispute) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_submit") def submit(self, idempotency_key=None, **params): - url = "/v1/issuing/disputes/{dispute}/submit".format( - dispute=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/issuing/disputes/{dispute}/submit".format( + dispute=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/line_item.py b/stripe/api_resources/line_item.py index 1629c5338..9c847f8e4 100644 --- a/stripe/api_resources/line_item.py +++ b/stripe/api_resources/line_item.py @@ -1,8 +1,8 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe.api_resources.abstract import APIResource +from stripe.stripe_object import StripeObject -class LineItem(APIResource): +class LineItem(StripeObject): OBJECT_NAME = "item" diff --git a/stripe/api_resources/list_object.py b/stripe/api_resources/list_object.py index af2af033f..b452d34d4 100644 --- a/stripe/api_resources/list_object.py +++ b/stripe/api_resources/list_object.py @@ -1,6 +1,6 @@ from __future__ import absolute_import, division, print_function -from stripe import api_requestor, six, util +from stripe import six, util from stripe.stripe_object import StripeObject from stripe.six.moves.urllib.parse import quote_plus @@ -12,16 +12,14 @@ class ListObject(StripeObject): def list( self, api_key=None, stripe_version=None, stripe_account=None, **params ): - stripe_object = self._request( + return self._request( "get", self.get("url"), api_key=api_key, stripe_version=stripe_version, stripe_account=stripe_account, - **params + params=params, ) - stripe_object._retrieve_params = params - return stripe_object def create( self, @@ -38,7 +36,7 @@ def create( idempotency_key=idempotency_key, stripe_version=stripe_version, stripe_account=stripe_account, - **params + params=params, ) def retrieve( @@ -56,32 +54,8 @@ def retrieve( api_key=api_key, stripe_version=stripe_version, stripe_account=stripe_account, - **params - ) - - def _request( - self, - method_, - url_, - api_key=None, - idempotency_key=None, - stripe_version=None, - stripe_account=None, - **params - ): - api_key = api_key or self.api_key - stripe_version = stripe_version or self.stripe_version - stripe_account = stripe_account or self.stripe_account - - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - headers = util.populate_headers(idempotency_key) - response, api_key = requestor.request(method_, url_, params, headers) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + params=params, ) - return stripe_object def __getitem__(self, k): if isinstance(k, six.string_types): diff --git a/stripe/api_resources/order.py b/stripe/api_resources/order.py index 1a0bb3088..83100ae9c 100644 --- a/stripe/api_resources/order.py +++ b/stripe/api_resources/order.py @@ -5,46 +5,123 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("cancel", http_verb="post") -@custom_method("list_line_items", http_verb="get", http_path="line_items") -@custom_method("reopen", http_verb="post") -@custom_method("submit", http_verb="post") class Order(CreateableAPIResource, ListableAPIResource, UpdateableAPIResource): OBJECT_NAME = "order" + @classmethod + def _cls_cancel( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/orders/{id}/cancel".format(id=util.sanitize_id(id)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/orders/{id}/cancel".format( - id=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/orders/{id}/cancel".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_list_line_items( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/orders/{id}/line_items".format(id=util.sanitize_id(id)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_list_line_items") def list_line_items(self, idempotency_key=None, **params): - url = "/v1/orders/{id}/line_items".format( - id=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/orders/{id}/line_items".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object + @classmethod + def _cls_reopen( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/orders/{id}/reopen".format(id=util.sanitize_id(id)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_reopen") def reopen(self, idempotency_key=None, **params): - url = "/v1/orders/{id}/reopen".format( - id=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/orders/{id}/reopen".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_submit( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/orders/{id}/submit".format(id=util.sanitize_id(id)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_submit") def submit(self, idempotency_key=None, **params): - url = "/v1/orders/{id}/submit".format( - id=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/orders/{id}/submit".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/payment_intent.py b/stripe/api_resources/payment_intent.py index 65f864c2b..e4656d259 100644 --- a/stripe/api_resources/payment_intent.py +++ b/stripe/api_resources/payment_intent.py @@ -6,15 +6,8 @@ from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import SearchableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("apply_customer_balance", http_verb="post") -@custom_method("cancel", http_verb="post") -@custom_method("capture", http_verb="post") -@custom_method("confirm", http_verb="post") -@custom_method("increment_authorization", http_verb="post") -@custom_method("verify_microdeposits", http_verb="post") class PaymentIntent( CreateableAPIResource, ListableAPIResource, @@ -23,53 +16,191 @@ class PaymentIntent( ): OBJECT_NAME = "payment_intent" + @classmethod + def _cls_apply_customer_balance( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_apply_customer_balance") def apply_customer_balance(self, idempotency_key=None, **params): - url = "/v1/payment_intents/{intent}/apply_customer_balance".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_intents/{intent}/apply_customer_balance".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_cancel( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/payment_intents/{intent}/cancel".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_intents/{intent}/cancel".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_capture( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_capture") def capture(self, idempotency_key=None, **params): - url = "/v1/payment_intents/{intent}/capture".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_intents/{intent}/capture".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_confirm( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_confirm") def confirm(self, idempotency_key=None, **params): - url = "/v1/payment_intents/{intent}/confirm".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_intents/{intent}/confirm".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_increment_authorization( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_increment_authorization") def increment_authorization(self, idempotency_key=None, **params): - url = "/v1/payment_intents/{intent}/increment_authorization".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_intents/{intent}/increment_authorization".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_verify_microdeposits( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_verify_microdeposits") def verify_microdeposits(self, idempotency_key=None, **params): - url = "/v1/payment_intents/{intent}/verify_microdeposits".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_intents/{intent}/verify_microdeposits".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self @classmethod def search(cls, *args, **kwargs): diff --git a/stripe/api_resources/payment_link.py b/stripe/api_resources/payment_link.py index 424e47e1f..b9cb485ad 100644 --- a/stripe/api_resources/payment_link.py +++ b/stripe/api_resources/payment_link.py @@ -5,10 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("list_line_items", http_verb="get", http_path="line_items") class PaymentLink( CreateableAPIResource, ListableAPIResource, @@ -16,12 +14,33 @@ class PaymentLink( ): OBJECT_NAME = "payment_link" + @classmethod + def _cls_list_line_items( + cls, + payment_link, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=util.sanitize_id(payment_link) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_list_line_items") def list_line_items(self, idempotency_key=None, **params): - url = "/v1/payment_links/{payment_link}/line_items".format( - payment_link=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/payment_links/{payment_link}/line_items".format( + payment_link=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object diff --git a/stripe/api_resources/payment_method.py b/stripe/api_resources/payment_method.py index a2a612960..057018cbd 100644 --- a/stripe/api_resources/payment_method.py +++ b/stripe/api_resources/payment_method.py @@ -5,11 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("attach", http_verb="post") -@custom_method("detach", http_verb="post") class PaymentMethod( CreateableAPIResource, ListableAPIResource, @@ -17,18 +14,64 @@ class PaymentMethod( ): OBJECT_NAME = "payment_method" + @classmethod + def _cls_attach( + cls, + payment_method, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=util.sanitize_id(payment_method) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_attach") def attach(self, idempotency_key=None, **params): - url = "/v1/payment_methods/{payment_method}/attach".format( - payment_method=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_methods/{payment_method}/attach".format( + payment_method=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_detach( + cls, + payment_method, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=util.sanitize_id(payment_method) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_detach") def detach(self, idempotency_key=None, **params): - url = "/v1/payment_methods/{payment_method}/detach".format( - payment_method=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payment_methods/{payment_method}/detach".format( + payment_method=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/payout.py b/stripe/api_resources/payout.py index e87a36ed9..6b0a9a236 100644 --- a/stripe/api_resources/payout.py +++ b/stripe/api_resources/payout.py @@ -5,28 +5,71 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("cancel", http_verb="post") -@custom_method("reverse", http_verb="post") class Payout( CreateableAPIResource, ListableAPIResource, UpdateableAPIResource ): OBJECT_NAME = "payout" + @classmethod + def _cls_cancel( + cls, + payout, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=util.sanitize_id(payout) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/payouts/{payout}/cancel".format( - payout=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payouts/{payout}/cancel".format( + payout=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_reverse( + cls, + payout, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=util.sanitize_id(payout) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_reverse") def reverse(self, idempotency_key=None, **params): - url = "/v1/payouts/{payout}/reverse".format( - payout=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/payouts/{payout}/reverse".format( + payout=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/quote.py b/stripe/api_resources/quote.py index 81f266cbe..608f5b7ab 100644 --- a/stripe/api_resources/quote.py +++ b/stripe/api_resources/quote.py @@ -7,65 +7,162 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.six.moves.urllib.parse import quote_plus -@custom_method("accept", http_verb="post") -@custom_method("cancel", http_verb="post") -@custom_method("finalize_quote", http_verb="post", http_path="finalize") -@custom_method( - "list_computed_upfront_line_items", - http_verb="get", - http_path="computed_upfront_line_items", -) -@custom_method("list_line_items", http_verb="get", http_path="line_items") class Quote(CreateableAPIResource, ListableAPIResource, UpdateableAPIResource): OBJECT_NAME = "quote" + @classmethod + def _cls_accept( + cls, + quote, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/quotes/{quote}/accept".format(quote=util.sanitize_id(quote)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_accept") def accept(self, idempotency_key=None, **params): - url = "/v1/quotes/{quote}/accept".format( - quote=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/quotes/{quote}/accept".format( + quote=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_cancel( + cls, + quote, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/quotes/{quote}/cancel".format(quote=util.sanitize_id(quote)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/quotes/{quote}/cancel".format( - quote=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/quotes/{quote}/cancel".format( + quote=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_finalize_quote( + cls, + quote, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/quotes/{quote}/finalize".format( + quote=util.sanitize_id(quote) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_finalize_quote") def finalize_quote(self, idempotency_key=None, **params): - url = "/v1/quotes/{quote}/finalize".format( - quote=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/quotes/{quote}/finalize".format( + quote=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_list_computed_upfront_line_items( + cls, + quote, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=util.sanitize_id(quote) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_list_computed_upfront_line_items") def list_computed_upfront_line_items(self, idempotency_key=None, **params): - url = "/v1/quotes/{quote}/computed_upfront_line_items".format( - quote=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/quotes/{quote}/computed_upfront_line_items".format( + quote=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_list_line_items( + cls, + quote, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=util.sanitize_id(quote) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object + @util.class_method_variant("_cls_list_line_items") def list_line_items(self, idempotency_key=None, **params): - url = "/v1/quotes/{quote}/line_items".format( - quote=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/quotes/{quote}/line_items".format( + quote=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object @classmethod def _cls_pdf( diff --git a/stripe/api_resources/recipient.py b/stripe/api_resources/recipient.py deleted file mode 100644 index 856f69af5..000000000 --- a/stripe/api_resources/recipient.py +++ /dev/null @@ -1,16 +0,0 @@ -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - -from stripe.api_resources.abstract import CreateableAPIResource -from stripe.api_resources.abstract import DeletableAPIResource -from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import UpdateableAPIResource - - -class Recipient( - CreateableAPIResource, - DeletableAPIResource, - ListableAPIResource, - UpdateableAPIResource, -): - OBJECT_NAME = "recipient" diff --git a/stripe/api_resources/refund.py b/stripe/api_resources/refund.py index 8877072b6..332b1f1bc 100644 --- a/stripe/api_resources/refund.py +++ b/stripe/api_resources/refund.py @@ -1,30 +1,50 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import test_helpers @test_helpers -@custom_method("cancel", http_verb="post") class Refund( CreateableAPIResource, ListableAPIResource, UpdateableAPIResource ): OBJECT_NAME = "refund" + @classmethod + def _cls_cancel( + cls, + refund, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=util.sanitize_id(refund) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/refunds/{refund}/cancel".format( - refund=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/refunds/{refund}/cancel".format( + refund=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self class TestHelpers(APIResourceTestHelpers): @classmethod @@ -36,25 +56,24 @@ def _cls_expire( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=util.sanitize_id(refund) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/test_helpers/refunds/{refund}/expire".format( - refund=util.sanitize_id(refund) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @util.class_method_variant("_cls_expire") def expire(self, idempotency_key=None, **params): - url = "/v1/test_helpers/refunds/{refund}/expire".format( - refund=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + return self.resource._request( + "post", + "/v1/test_helpers/refunds/{refund}/expire".format( + refund=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource diff --git a/stripe/api_resources/review.py b/stripe/api_resources/review.py index b3e3b87f2..a05e5c907 100644 --- a/stripe/api_resources/review.py +++ b/stripe/api_resources/review.py @@ -3,17 +3,38 @@ from stripe import util from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("approve", http_verb="post") class Review(ListableAPIResource): OBJECT_NAME = "review" + @classmethod + def _cls_approve( + cls, + review, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/reviews/{review}/approve".format( + review=util.sanitize_id(review) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_approve") def approve(self, idempotency_key=None, **params): - url = "/v1/reviews/{review}/approve".format( - review=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/reviews/{review}/approve".format( + review=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/search_result_object.py b/stripe/api_resources/search_result_object.py index c2f781942..4a3563e25 100644 --- a/stripe/api_resources/search_result_object.py +++ b/stripe/api_resources/search_result_object.py @@ -1,6 +1,6 @@ from __future__ import absolute_import, division, print_function -from stripe import api_requestor, six, util +from stripe import six from stripe.stripe_object import StripeObject @@ -10,40 +10,14 @@ class SearchResultObject(StripeObject): def search( self, api_key=None, stripe_version=None, stripe_account=None, **params ): - stripe_object = self._request( + return self._request( "get", self.get("url"), api_key=api_key, stripe_version=stripe_version, stripe_account=stripe_account, - **params + params=params, ) - stripe_object._retrieve_params = params - return stripe_object - - def _request( - self, - method_, - url_, - api_key=None, - idempotency_key=None, - stripe_version=None, - stripe_account=None, - **params - ): - api_key = api_key or self.api_key - stripe_version = stripe_version or self.stripe_version - stripe_account = stripe_account or self.stripe_account - - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - headers = util.populate_headers(idempotency_key) - response, api_key = requestor.request(method_, url_, params, headers) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object def __getitem__(self, k): if isinstance(k, six.string_types): diff --git a/stripe/api_resources/setup_intent.py b/stripe/api_resources/setup_intent.py index 83c1010c6..d07004ca2 100644 --- a/stripe/api_resources/setup_intent.py +++ b/stripe/api_resources/setup_intent.py @@ -5,12 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("cancel", http_verb="post") -@custom_method("confirm", http_verb="post") -@custom_method("verify_microdeposits", http_verb="post") class SetupIntent( CreateableAPIResource, ListableAPIResource, @@ -18,26 +14,95 @@ class SetupIntent( ): OBJECT_NAME = "setup_intent" + @classmethod + def _cls_cancel( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/setup_intents/{intent}/cancel".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/setup_intents/{intent}/cancel".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_confirm( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_confirm") def confirm(self, idempotency_key=None, **params): - url = "/v1/setup_intents/{intent}/confirm".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/setup_intents/{intent}/confirm".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_verify_microdeposits( + cls, + intent, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=util.sanitize_id(intent) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_verify_microdeposits") def verify_microdeposits(self, idempotency_key=None, **params): - url = "/v1/setup_intents/{intent}/verify_microdeposits".format( - intent=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/setup_intents/{intent}/verify_microdeposits".format( + intent=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/source.py b/stripe/api_resources/source.py index d0bed0803..11c5db7fe 100644 --- a/stripe/api_resources/source.py +++ b/stripe/api_resources/source.py @@ -6,23 +6,73 @@ from stripe.api_resources import Customer from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -from stripe.api_resources.abstract import nested_resource_class_methods from stripe.six.moves.urllib.parse import quote_plus -@custom_method("verify", http_verb="post") -@nested_resource_class_methods("source_transaction", operations=["list"]) class Source(CreateableAPIResource, UpdateableAPIResource): OBJECT_NAME = "source" + @classmethod + def _cls_list_source_transactions( + cls, + source, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/sources/{source}/source_transactions".format( + source=util.sanitize_id(source) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_list_source_transactions") + def list_source_transactions(self, idempotency_key=None, **params): + return self._request( + "get", + "/v1/sources/{source}/source_transactions".format( + source=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_verify( + cls, + source, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/sources/{source}/verify".format( + source=util.sanitize_id(source) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_verify") def verify(self, idempotency_key=None, **params): - url = "/v1/sources/{source}/verify".format( - source=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/sources/{source}/verify".format( + source=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self def detach(self, idempotency_key=None, **params): token = util.utf8(self.id) @@ -44,9 +94,3 @@ def detach(self, idempotency_key=None, **params): "to a customer object." % token, "id", ) - - def source_transactions(self, **params): - """source_transactions is deprecated, use Source.list_source_transactions instead.""" - return self.request( - "get", self.instance_url() + "/source_transactions", params - ) diff --git a/stripe/api_resources/subscription.py b/stripe/api_resources/subscription.py index 6e93c99df..18a85a5b7 100644 --- a/stripe/api_resources/subscription.py +++ b/stripe/api_resources/subscription.py @@ -1,16 +1,14 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor +from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import DeletableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import SearchableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("delete_discount", http_verb="delete", http_path="discount") class Subscription( CreateableAPIResource, DeletableAPIResource, @@ -20,6 +18,72 @@ class Subscription( ): OBJECT_NAME = "subscription" + @classmethod + def _cls_cancel( + cls, + subscription_exposed_id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=util.sanitize_id( + subscription_exposed_id + ) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") + def cancel(self, idempotency_key=None, **params): + return self._request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}".format( + subscription_exposed_id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_delete_discount( + cls, + subscription_exposed_id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=util.sanitize_id( + subscription_exposed_id + ) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_delete_discount") + def delete_discount(self, idempotency_key=None, **params): + return self._request( + "delete", + "/v1/subscriptions/{subscription_exposed_id}/discount".format( + subscription_exposed_id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + @classmethod def search(cls, *args, **kwargs): return cls._search( @@ -29,13 +93,3 @@ def search(cls, *args, **kwargs): @classmethod def search_auto_paging_iter(cls, *args, **kwargs): return cls.search(*args, **kwargs).auto_paging_iter() - - def delete_discount(self, **params): - requestor = api_requestor.APIRequestor( - self.api_key, - api_version=self.stripe_version, - account=self.stripe_account, - ) - url = self.instance_url() + "/discount" - _, api_key = requestor.request("delete", url, params) - self.refresh_from({"discount": None}, api_key, True) diff --git a/stripe/api_resources/subscription_item.py b/stripe/api_resources/subscription_item.py index e3b794af0..619e61879 100644 --- a/stripe/api_resources/subscription_item.py +++ b/stripe/api_resources/subscription_item.py @@ -21,9 +21,3 @@ class SubscriptionItem( UpdateableAPIResource, ): OBJECT_NAME = "subscription_item" - - def usage_record_summaries(self, **params): - """usage_record_summaries is deprecated, use SubscriptionItem.list_usage_record_summaries instead.""" - return self.request( - "get", self.instance_url() + "/usage_record_summaries", params - ) diff --git a/stripe/api_resources/subscription_schedule.py b/stripe/api_resources/subscription_schedule.py index 36ab50087..1247b352e 100644 --- a/stripe/api_resources/subscription_schedule.py +++ b/stripe/api_resources/subscription_schedule.py @@ -5,11 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("cancel", http_verb="post") -@custom_method("release", http_verb="post") class SubscriptionSchedule( CreateableAPIResource, ListableAPIResource, @@ -17,18 +14,64 @@ class SubscriptionSchedule( ): OBJECT_NAME = "subscription_schedule" + @classmethod + def _cls_cancel( + cls, + schedule, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=util.sanitize_id(schedule) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/subscription_schedules/{schedule}/cancel".format( - schedule=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_release( + cls, + schedule, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=util.sanitize_id(schedule) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_release") def release(self, idempotency_key=None, **params): - url = "/v1/subscription_schedules/{schedule}/release".format( - schedule=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/terminal/reader.py b/stripe/api_resources/terminal/reader.py index 2e0769635..018466a6b 100644 --- a/stripe/api_resources/terminal/reader.py +++ b/stripe/api_resources/terminal/reader.py @@ -1,22 +1,16 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import DeletableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import test_helpers @test_helpers -@custom_method("cancel_action", http_verb="post") -@custom_method("process_payment_intent", http_verb="post") -@custom_method("process_setup_intent", http_verb="post") -@custom_method("set_reader_display", http_verb="post") class Reader( CreateableAPIResource, DeletableAPIResource, @@ -25,37 +19,129 @@ class Reader( ): OBJECT_NAME = "terminal.reader" + @classmethod + def _cls_cancel_action( + cls, + reader, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=util.sanitize_id(reader) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel_action") def cancel_action(self, idempotency_key=None, **params): - url = "/v1/terminal/readers/{reader}/cancel_action".format( - reader=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/terminal/readers/{reader}/cancel_action".format( + reader=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_process_payment_intent( + cls, + reader, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=util.sanitize_id(reader) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_process_payment_intent") def process_payment_intent(self, idempotency_key=None, **params): - url = "/v1/terminal/readers/{reader}/process_payment_intent".format( - reader=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/terminal/readers/{reader}/process_payment_intent".format( + reader=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_process_setup_intent( + cls, + reader, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=util.sanitize_id(reader) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_process_setup_intent") def process_setup_intent(self, idempotency_key=None, **params): - url = "/v1/terminal/readers/{reader}/process_setup_intent".format( - reader=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/terminal/readers/{reader}/process_setup_intent".format( + reader=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @classmethod + def _cls_set_reader_display( + cls, + reader, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=util.sanitize_id(reader) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_set_reader_display") def set_reader_display(self, idempotency_key=None, **params): - url = "/v1/terminal/readers/{reader}/set_reader_display".format( - reader=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/terminal/readers/{reader}/set_reader_display".format( + reader=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self class TestHelpers(APIResourceTestHelpers): @classmethod @@ -67,25 +153,24 @@ def _cls_present_payment_method( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=util.sanitize_id(reader) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( - reader=util.sanitize_id(reader) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @util.class_method_variant("_cls_present_payment_method") def present_payment_method(self, idempotency_key=None, **params): - url = "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( - reader=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + return self.resource._request( + "post", + "/v1/test_helpers/terminal/readers/{reader}/present_payment_method".format( + reader=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource diff --git a/stripe/api_resources/test_helpers/test_clock.py b/stripe/api_resources/test_helpers/test_clock.py index c22abe9c6..f3ae02d46 100644 --- a/stripe/api_resources/test_helpers/test_clock.py +++ b/stripe/api_resources/test_helpers/test_clock.py @@ -5,10 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import DeletableAPIResource from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("advance", http_verb="post") class TestClock( CreateableAPIResource, DeletableAPIResource, @@ -16,10 +14,33 @@ class TestClock( ): OBJECT_NAME = "test_helpers.test_clock" + @classmethod + def _cls_advance( + cls, + test_clock, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=util.sanitize_id(test_clock) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_advance") def advance(self, idempotency_key=None, **params): - url = "/v1/test_helpers/test_clocks/{test_clock}/advance".format( - test_clock=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/test_helpers/test_clocks/{test_clock}/advance".format( + test_clock=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/three_d_secure.py b/stripe/api_resources/three_d_secure.py deleted file mode 100644 index 27edc6606..000000000 --- a/stripe/api_resources/three_d_secure.py +++ /dev/null @@ -1,12 +0,0 @@ -# File generated from our OpenAPI spec -from __future__ import absolute_import, division, print_function - -from stripe.api_resources.abstract import CreateableAPIResource - - -class ThreeDSecure(CreateableAPIResource): - OBJECT_NAME = "three_d_secure" - - @classmethod - def class_url(cls): - return "/v1/3d_secure" diff --git a/stripe/api_resources/topup.py b/stripe/api_resources/topup.py index 5b748fa86..3f6dca70a 100644 --- a/stripe/api_resources/topup.py +++ b/stripe/api_resources/topup.py @@ -5,17 +5,36 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("cancel", http_verb="post") class Topup(CreateableAPIResource, ListableAPIResource, UpdateableAPIResource): OBJECT_NAME = "topup" + @classmethod + def _cls_cancel( + cls, + topup, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/topups/{topup}/cancel".format(topup=util.sanitize_id(topup)), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/topups/{topup}/cancel".format( - topup=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/topups/{topup}/cancel".format( + topup=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/transfer.py b/stripe/api_resources/transfer.py index 843c2c553..baa7ea95a 100644 --- a/stripe/api_resources/transfer.py +++ b/stripe/api_resources/transfer.py @@ -1,15 +1,12 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import util from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import nested_resource_class_methods -@custom_method("cancel", http_verb="post") @nested_resource_class_methods( "reversal", operations=["create", "retrieve", "update", "list"], @@ -20,11 +17,3 @@ class Transfer( UpdateableAPIResource, ): OBJECT_NAME = "transfer" - - def cancel(self, idempotency_key=None, **params): - url = "/v1/transfers/{transfer}/cancel".format( - transfer=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_resources/treasury/financial_account.py b/stripe/api_resources/treasury/financial_account.py index 9ab775c26..3cb1bda58 100644 --- a/stripe/api_resources/treasury/financial_account.py +++ b/stripe/api_resources/treasury/financial_account.py @@ -5,11 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("retrieve_features", http_verb="get", http_path="features") -@custom_method("update_features", http_verb="post", http_path="features") class FinancialAccount( CreateableAPIResource, ListableAPIResource, @@ -17,20 +14,64 @@ class FinancialAccount( ): OBJECT_NAME = "treasury.financial_account" + @classmethod + def _cls_retrieve_features( + cls, + financial_account, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=util.sanitize_id(financial_account) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_retrieve_features") def retrieve_features(self, idempotency_key=None, **params): - url = "/v1/treasury/financial_accounts/{financial_account}/features".format( - financial_account=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_update_features( + cls, + financial_account, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=util.sanitize_id(financial_account) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - return stripe_object + @util.class_method_variant("_cls_update_features") def update_features(self, idempotency_key=None, **params): - url = "/v1/treasury/financial_accounts/{financial_account}/features".format( - financial_account=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/treasury/financial_accounts/{financial_account}/features".format( + financial_account=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("post", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - return stripe_object diff --git a/stripe/api_resources/treasury/inbound_transfer.py b/stripe/api_resources/treasury/inbound_transfer.py index 23c62a70b..3297ce431 100644 --- a/stripe/api_resources/treasury/inbound_transfer.py +++ b/stripe/api_resources/treasury/inbound_transfer.py @@ -1,29 +1,47 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import test_helpers @test_helpers -@custom_method("cancel", http_verb="post") class InboundTransfer(CreateableAPIResource, ListableAPIResource): OBJECT_NAME = "treasury.inbound_transfer" + @classmethod + def _cls_cancel( + cls, + inbound_transfer, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( + inbound_transfer=util.sanitize_id(inbound_transfer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = ( + return self._request( + "post", "/v1/treasury/inbound_transfers/{inbound_transfer}/cancel".format( inbound_transfer=util.sanitize_id(self.get("id")) - ) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self class TestHelpers(APIResourceTestHelpers): @classmethod @@ -35,32 +53,27 @@ def _cls_fail( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = ( + return cls._static_request( + "post", "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( id=util.sanitize_id(id) - ) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_fail") def fail(self, idempotency_key=None, **params): - url = ( + return self.resource._request( + "post", "/v1/test_helpers/treasury/inbound_transfers/{id}/fail".format( - id=util.sanitize_id(self.get("id")) - ) + id=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) - ) - return self.resource @classmethod def _cls_return_inbound_transfer( @@ -71,28 +84,27 @@ def _cls_return_inbound_transfer( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( - id=util.sanitize_id(id) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=util.sanitize_id(id) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_return_inbound_transfer") def return_inbound_transfer(self, idempotency_key=None, **params): - url = "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( - id=util.sanitize_id(self.get("id")) + return self.resource._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/return".format( + id=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) - ) - return self.resource @classmethod def _cls_succeed( @@ -103,25 +115,24 @@ def _cls_succeed( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( - id=util.sanitize_id(id) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=util.sanitize_id(id) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_succeed") def succeed(self, idempotency_key=None, **params): - url = "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( - id=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + return self.resource._request( + "post", + "/v1/test_helpers/treasury/inbound_transfers/{id}/succeed".format( + id=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource diff --git a/stripe/api_resources/treasury/outbound_payment.py b/stripe/api_resources/treasury/outbound_payment.py index fe65f21e8..7669bed9b 100644 --- a/stripe/api_resources/treasury/outbound_payment.py +++ b/stripe/api_resources/treasury/outbound_payment.py @@ -1,27 +1,47 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import test_helpers @test_helpers -@custom_method("cancel", http_verb="post") class OutboundPayment(CreateableAPIResource, ListableAPIResource): OBJECT_NAME = "treasury.outbound_payment" + @classmethod + def _cls_cancel( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=util.sanitize_id(id) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/treasury/outbound_payments/{id}/cancel".format( - id=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/treasury/outbound_payments/{id}/cancel".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self class TestHelpers(APIResourceTestHelpers): @classmethod @@ -33,32 +53,27 @@ def _cls_fail( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = ( + return cls._static_request( + "post", "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( id=util.sanitize_id(id) - ) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_fail") def fail(self, idempotency_key=None, **params): - url = ( + return self.resource._request( + "post", "/v1/test_helpers/treasury/outbound_payments/{id}/fail".format( - id=util.sanitize_id(self.get("id")) - ) + id=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) - ) - return self.resource @classmethod def _cls_post( @@ -69,32 +84,27 @@ def _cls_post( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = ( + return cls._static_request( + "post", "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( id=util.sanitize_id(id) - ) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @util.class_method_variant("_cls_post") def post(self, idempotency_key=None, **params): - url = ( + return self.resource._request( + "post", "/v1/test_helpers/treasury/outbound_payments/{id}/post".format( - id=util.sanitize_id(self.get("id")) - ) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + id=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource @classmethod def _cls_return_outbound_payment( @@ -105,25 +115,24 @@ def _cls_return_outbound_payment( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( - id=util.sanitize_id(id) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=util.sanitize_id(id) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_return_outbound_payment") def return_outbound_payment(self, idempotency_key=None, **params): - url = "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( - id=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + return self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_payments/{id}/return".format( + id=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource diff --git a/stripe/api_resources/treasury/outbound_transfer.py b/stripe/api_resources/treasury/outbound_transfer.py index a3d06ee84..92cc81bf8 100644 --- a/stripe/api_resources/treasury/outbound_transfer.py +++ b/stripe/api_resources/treasury/outbound_transfer.py @@ -1,27 +1,47 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method from stripe.api_resources.abstract import test_helpers @test_helpers -@custom_method("cancel", http_verb="post") class OutboundTransfer(CreateableAPIResource, ListableAPIResource): OBJECT_NAME = "treasury.outbound_transfer" + @classmethod + def _cls_cancel( + cls, + outbound_transfer, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=util.sanitize_id(outbound_transfer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( - outbound_transfer=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/treasury/outbound_transfers/{outbound_transfer}/cancel".format( + outbound_transfer=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self class TestHelpers(APIResourceTestHelpers): @classmethod @@ -33,28 +53,27 @@ def _cls_fail( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account - ) - url = "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( - outbound_transfer=util.sanitize_id(outbound_transfer) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=util.sanitize_id(outbound_transfer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - return stripe_object @util.class_method_variant("_cls_fail") def fail(self, idempotency_key=None, **params): - url = "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( - outbound_transfer=util.sanitize_id(self.get("id")) + return self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail".format( + outbound_transfer=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) - ) - return self.resource @classmethod def _cls_post( @@ -65,28 +84,27 @@ def _cls_post( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=util.sanitize_id(outbound_transfer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( - outbound_transfer=util.sanitize_id(outbound_transfer) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @util.class_method_variant("_cls_post") def post(self, idempotency_key=None, **params): - url = "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( - outbound_transfer=util.sanitize_id(self.get("id")) + return self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post".format( + outbound_transfer=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) - ) - return self.resource @classmethod def _cls_return_outbound_transfer( @@ -97,25 +115,24 @@ def _cls_return_outbound_transfer( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=util.sanitize_id(outbound_transfer) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( - outbound_transfer=util.sanitize_id(outbound_transfer) - ) - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object @util.class_method_variant("_cls_return_outbound_transfer") def return_outbound_transfer(self, idempotency_key=None, **params): - url = "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( - outbound_transfer=util.sanitize_id(self.get("id")) - ) - headers = util.populate_headers(idempotency_key) - self.resource.refresh_from( - self.resource.request("post", url, params, headers) + return self.resource._request( + "post", + "/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return".format( + outbound_transfer=util.sanitize_id(self.resource.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - return self.resource diff --git a/stripe/api_resources/treasury/received_credit.py b/stripe/api_resources/treasury/received_credit.py index bf7a47e76..2cfb6a886 100644 --- a/stripe/api_resources/treasury/received_credit.py +++ b/stripe/api_resources/treasury/received_credit.py @@ -1,8 +1,6 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor -from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import test_helpers @@ -21,12 +19,11 @@ def create( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/received_credits", + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/test_helpers/treasury/received_credits" - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object diff --git a/stripe/api_resources/treasury/received_debit.py b/stripe/api_resources/treasury/received_debit.py index 38b9c86f0..6187e1a38 100644 --- a/stripe/api_resources/treasury/received_debit.py +++ b/stripe/api_resources/treasury/received_debit.py @@ -1,8 +1,6 @@ # File generated from our OpenAPI spec from __future__ import absolute_import, division, print_function -from stripe import api_requestor -from stripe import util from stripe.api_resources.abstract import APIResourceTestHelpers from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import test_helpers @@ -21,12 +19,11 @@ def create( stripe_account=None, **params ): - requestor = api_requestor.APIRequestor( - api_key, api_version=stripe_version, account=stripe_account + return cls._static_request( + "post", + "/v1/test_helpers/treasury/received_debits", + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - url = "/v1/test_helpers/treasury/received_debits" - response, api_key = requestor.request("post", url, params) - stripe_object = util.convert_to_stripe_object( - response, api_key, stripe_version, stripe_account - ) - return stripe_object diff --git a/stripe/data/ca-certificates.crt b/stripe/data/ca-certificates.crt index 0cb1d0075..26f135040 100644 --- a/stripe/data/ca-certificates.crt +++ b/stripe/data/ca-certificates.crt @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Wed Oct 17 03:12:10 2018 GMT +## Certificate data from Mozilla as of: Tue Apr 26 03:12:05 2022 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -13,8 +13,8 @@ ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## -## Conversion done with mk-ca-bundle.pl version 1.27. -## SHA256: 3f875d87fee4ce3d966c69f1d6c111aa95c0143ade59e4fa24882c582bb5f0ca +## Conversion done with mk-ca-bundle.pl version 1.29. +## SHA256: 34a54d5191775c1bd37be6cfd3f09e831e072555dc3a2e51f4a2c4b0f8ada5cc ## @@ -39,52 +39,6 @@ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- @@ -130,30 +84,6 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - Entrust Root Certification Authority ==================================== -----BEGIN CERTIFICATE----- @@ -180,109 +110,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw -MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo -BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet -8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc -T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU -vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk -DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q -zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 -d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 -mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p -XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm -Mw== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 -MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu -Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t -JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e -RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs -7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d -8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V -qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga -Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB -Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu -KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 -ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 -XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB -hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 -qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL -oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK -xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF -KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 -DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK -xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU -p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI -P/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 -MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg -SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 -DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 -j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q -JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a -QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 -WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP -20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn -ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC -SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG -8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 -+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E -BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ -4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ -mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq -A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg -Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP -pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d -FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp -gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm -X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG -EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug -QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 -WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm -VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL -F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b -RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 -TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI -/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs -GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG -MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc -CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW -YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz -zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu -YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - Comodo AAA Services root ======================== -----BEGIN CERTIFICATE----- @@ -307,38 +134,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - QuoVadis Root CA 2 ================== -----BEGIN CERTIFICATE----- @@ -426,26 +221,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ FL39vmwLAw== -----END CERTIFICATE----- -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - XRamp Global CA Root ==================== -----BEGIN CERTIFICATE----- @@ -518,36 +293,6 @@ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG -EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X -DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv -dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN -w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 -BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O -1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO -htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov -J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 -Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t -B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB -O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 -lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV -HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 -09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj -Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 -Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU -D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz -DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk -Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk -7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ -CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy -+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS ------END CERTIFICATE----- - DigiCert Assured ID Root CA =========================== -----BEGIN CERTIFICATE----- @@ -614,48 +359,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K -----END CERTIFICATE----- -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE -BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN -OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy -dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR -5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ -Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO -YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e -e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME -CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ -YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t -L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD -P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R -TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ -7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW -//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- @@ -718,78 +421,6 @@ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx -CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN -b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 -nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge -RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt -tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI -hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K -Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN -NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa -Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG -1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 -MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg -SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv -KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT -FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs -oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ -1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc -q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K -aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p -afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF -AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE -uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 -jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH -z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln -biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh -dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz -j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD -Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ -Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r -fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv -Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG -SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ -X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE -KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC -Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE -ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - SecureTrust CA ============== -----BEGIN CERTIFICATE----- @@ -898,29 +529,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- -OISTE WISeKey Global Root GA CA -=============================== ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE -BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG -A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH -bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD -VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw -IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 -IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 -Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg -Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD -d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ -/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R -LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm -MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 -+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY -okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= ------END CERTIFICATE----- - Certigna ======== -----BEGIN CERTIFICATE----- @@ -943,50 +551,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- -Deutsche Telekom Root CA 2 -========================== ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT -RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG -A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 -MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G -A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS -b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 -bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI -KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY -AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK -Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV -jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV -HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr -E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy -zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 -rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G -dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - ePKI Root Certification Authority ================================= -----BEGIN CERTIFICATE----- @@ -1038,136 +602,6 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD -----END CERTIFICATE----- -GeoTrust Primary Certification Authority - G3 -============================================= ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz -NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo -YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT -LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j -K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE -c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C -IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu -dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr -2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 -cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE -Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s -t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -thawte Primary Root CA - G2 -=========================== ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC -VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu -IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg -Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV -MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG -b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt -IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS -LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 -8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU -mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN -G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K -rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -thawte Primary Root CA - G3 -=========================== ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w -ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD -VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG -A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At -P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC -+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY -7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW -vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ -KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK -A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC -8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm -er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G2 -============================================= ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 -OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl -b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG -BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc -KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ -EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m -ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 -npaqBA+K ------END CERTIFICATE----- - -VeriSign Universal Root Certification Authority -=============================================== ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj -1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP -MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 -9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I -AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR -tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G -CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O -a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 -Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx -Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx -P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P -wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 -mJO37M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G4 -============================================================ ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC -VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 -b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz -ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU -cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo -b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 -Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz -rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw -HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u -Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD -A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx -AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - NetLock Arany (Class Gold) Főtanúsítvány ======================================== -----BEGIN CERTIFICATE----- @@ -1192,38 +626,6 @@ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ -5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn -vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj -CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil -e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR -OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI -CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 -48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi -trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 -qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB -AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC -ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA -A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz -+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj -f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN -kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk -CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF -URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb -CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h -oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV -IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm -66+KAQ== ------END CERTIFICATE----- - Hongkong Post Root CA 1 ======================= -----BEGIN CERTIFICATE----- @@ -1375,82 +777,6 @@ Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- -Chambers of Commerce Root - 2008 -================================ ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy -Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl -ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF -EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl -cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA -XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj -h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ -ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk -NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g -D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 -lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ -0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 -EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI -G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ -BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh -bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh -bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC -CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH -AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 -wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH -3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU -RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 -M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 -YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF -9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK -zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG -nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ ------END CERTIFICATE----- - -Global Chambersign Root - 2008 -============================== ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx -NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg -Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ -QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf -VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf -XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 -ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB -/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA -TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M -H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe -Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF -HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB -AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT -BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE -BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm -aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm -aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp -1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 -dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG -/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 -ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s -dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg -9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH -foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du -qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr -P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq -c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - Go Daddy Root Certificate Authority - G2 ======================================== -----BEGIN CERTIFICATE----- @@ -1667,36 +993,6 @@ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - Hellenic Academic and Research Institutions RootCA 2011 ======================================================= -----BEGIN CERTIFICATE----- @@ -1752,27 +1048,6 @@ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG -EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 -IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV -BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ -RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk -H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa -cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt -o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA -AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd -BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c -GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC -yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P -8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV -l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl -iB6XzCGcKQENZetX2fNXlrtIzYE= ------END CERTIFICATE----- - Buypass Class 2 Root CA ======================= -----BEGIN CERTIFICATE----- @@ -1855,30 +1130,6 @@ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== -----END CERTIFICATE----- -EE Certification Centre Root CA -=============================== ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy -dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw -MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB -UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy -ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM -TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 -rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw -93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN -P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ -MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF -BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj -xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM -lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU -3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM -dcGWxZ0= ------END CERTIFICATE----- - D-TRUST Root Class 3 CA 2 2009 ============================== -----BEGIN CERTIFICATE----- @@ -2412,20 +1663,6 @@ HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= -----END CERTIFICATE----- -GlobalSign ECC Root CA - R4 -=========================== ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl -OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV -MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF -JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= ------END CERTIFICATE----- - GlobalSign ECC Root CA - R5 =========================== -----BEGIN CERTIFICATE----- @@ -2441,36 +1678,6 @@ uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 -----END CERTIFICATE----- -Staat der Nederlanden Root CA - G3 -================================== ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y -olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t -x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy -EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K -Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur -mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 -1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp -07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo -FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE -41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu -yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq -KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 -v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA -8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b -8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r -mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq -1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI -JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV -tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= ------END CERTIFICATE----- - Staat der Nederlanden EV Root CA ================================ -----BEGIN CERTIFICATE----- @@ -2635,37 +1842,6 @@ kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- -Certinomis - Root CA -==================== ------BEGIN CERTIFICATE----- -MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg -LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx -EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD -ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos -P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo -d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap -z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 -8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x -RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE -6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t -FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV -PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH -i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj -YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I -6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF -AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV -WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw -Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX -lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ -y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 -Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng -DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi -I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM -cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr -hkIGuUE= ------END CERTIFICATE----- - OISTE WISeKey Global Root GB CA =============================== -----BEGIN CERTIFICATE----- @@ -2928,37 +2104,6 @@ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== -----END CERTIFICATE----- -LuxTrust Global Root 2 -====================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 ============================================= -----BEGIN CERTIFICATE----- @@ -3238,3 +2383,965 @@ BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 -----END CERTIFICATE----- + +UCA Global G2 Root +================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x +NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU +cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT +oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV +8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS +h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o +LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ +R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe +KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa +4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc +OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 +8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo +5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A +Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 +yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX +c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo +jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk +bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x +ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn +RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== +-----END CERTIFICATE----- + +UCA Extended Validation Root +============================ +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u +IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G +A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs +iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF +Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu +eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR +59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH +0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR +el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv +B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth +WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS +NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS +3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL +BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM +aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 +dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb ++7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW +F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi +GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc +GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi +djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr +dhh2n1ax +-----END CERTIFICATE----- + +Certigna Root CA +================ +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE +BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ +MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda +MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz +MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX +stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz +KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 +JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 +XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq +4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej +wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ +lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI +jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ +/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy +dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h +LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl +cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt +OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP +TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq +7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 +4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd +8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS +6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY +tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS +aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde +E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +emSign Root CA - G1 +=================== +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET +MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl +ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx +ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk +aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN +LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 +cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW +DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ +6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH +hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 +vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q +NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q ++Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih +U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +emSign ECC Root CA - G3 +======================= +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG +A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg +MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 +MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 +ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc +58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr +MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D +CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 +jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +emSign Root CA - C1 +=================== +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp +Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD +ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up +ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ +Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX +OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V +I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms +lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ +XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD +ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp +/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 +NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 +wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ +BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +emSign ECC Root CA - C3 +======================= +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG +A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF +Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD +ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd +6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 +SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA +B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA +MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU +ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 3 +======================= +-----BEGIN CERTIFICATE----- +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 +dBb9HxEGmpv0 +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G4 +========================================= +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu +bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 +dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT +AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D +umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV +3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds +8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ +e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 +ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X +xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV +7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW +Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n +MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q +jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht +7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK +YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt +jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ +m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW +RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA +JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G ++TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT +kcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- + +Microsoft ECC Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND +IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 +MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 +thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB +eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM ++Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf +Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR +eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +Microsoft RSA Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg +UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw +NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml +7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e +S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 +1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ +dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F +yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS +MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr +lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ +0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ +ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og +6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 +dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk ++ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex +/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy +AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW +ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE +7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT +c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D +5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +e-Szigno Root CA 2017 +===================== +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw +DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt +MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa +Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE +CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp +Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx +s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G +A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv +vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA +tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO +svxyqltZ+efcMQ== +-----END CERTIFICATE----- + +certSIGN Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw +EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy +MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH +TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 +N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk +abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg +wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp +dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh +ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 +jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf +95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc +z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL +iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB +ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB +/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 +8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 +BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW +atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU +Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M +NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N +0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +Trustwave Global Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV +UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 +ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV +UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 +ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29 +zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf +LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq +stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o +WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+ +OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40 +Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE +uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm ++9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj +ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB +BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H +PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H +ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla +4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R +vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd +zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O +856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH +Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu +3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP +29FpHOTKyeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +Trustwave Global ECC P256 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 +NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj +43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm +P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt +0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz +RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +Trustwave Global ECC P384 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 +NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH +Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr +/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV +HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn +ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl +CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== +-----END CERTIFICATE----- + +NAVER Global Root Certification Authority +========================================= +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG +A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD +DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 +NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT +UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb +UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW ++j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 +XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 +aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 +Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z +VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B +A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai +cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy +YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV +HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK +21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB +jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx +hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg +E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH +D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ +A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY +qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG +I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg +kpzNNIaRkPpkUZ3+/uul9XXeifdy +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM SERVIDORES SEGUROS +=================================== +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF +UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy +NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 +MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt +UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB +QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 +LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG +SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD +zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= +-----END CERTIFICATE----- + +GlobalSign Root R46 +=================== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv +b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX +BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es +CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ +r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje +2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt +bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj +K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 +12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on +ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls +eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 +vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM +BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy +gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 +CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm +OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq +JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye +qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz +nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 +DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 +QEUxeCp6 +-----END CERTIFICATE----- + +GlobalSign Root E46 +=================== +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT +AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg +RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV +BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB +jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj +QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL +gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk +vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ +CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +GLOBALTRUST 2020 +================ +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx +IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT +VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh +BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy +MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi +D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO +VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM +CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm +fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA +A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR +JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG +DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU +clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ +mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud +IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw +4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 +iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS +8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 +HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS +vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 +oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF +YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl +gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +ANF Secure Server Root CA +========================= +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Certum EC-384 CA +================ +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ +TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2 +MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh +dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx +GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq +vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn +iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo +ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 +QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +Certum Trusted Root CA +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +TunTrust Root CA +================ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +HARICA TLS RSA Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG +EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz +OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl +bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB +IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN +JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu +a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y +Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K +5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv +dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR +0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH +GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm +haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ +CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU +EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq +QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD +QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR +j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 +vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 +qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 +Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ +PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn +kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= +-----END CERTIFICATE----- + +HARICA TLS ECC Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH +UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD +QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX +DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj +IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv +b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l +AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b +ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW +0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi +rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw +CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1Ud +DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w +gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A +bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL +4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb +LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il +I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP +cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA +LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A +lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH +9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf +NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE +ZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +vTrus ECC Root CA +================= +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE +BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS +b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa +BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c +ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n +TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT +QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL +YgmRWAD5Tfs0aNoJrSEGGJTO +-----END CERTIFICATE----- + +vTrus Root CA +============= +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG +A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv +b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG +A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots +SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI +ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF +XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA +YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70 +kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2 +AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu +/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu +1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO +9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg +scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC +AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr +jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4 +8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn +xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg +icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4 +sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW +nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc +SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H +l3s= +-----END CERTIFICATE----- + +ISRG Root X2 +============ +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV +UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT +UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT +MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS +RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H +ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb +d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF +cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5 +U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +HiPKI Root CA - G1 +================== +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ +IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT +AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg +Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0 +o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k +wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE +YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA +GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd +hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj +1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4 +9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/ +Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF +8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD +AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl +tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE +wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q +JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv +5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz +jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg +hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb +yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/ +yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW +ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E +BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI +KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg +UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +GTS Root R1 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0 +xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w +B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW +nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk +9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq +kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A +K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX +V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW +cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD +ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi +ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar +J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci +NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me +LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF +fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+ +7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3 +FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3 +gm3c +-----END CERTIFICATE----- + +GTS Root R2 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl +e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb +a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS ++LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M +kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG +r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q +S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV +J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL +dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD +ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh +swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel +/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn +jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5 +9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M +7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8 +0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR +WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW +HYbL +-----END CERTIFICATE----- + +GTS Root R3 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq +Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT +L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV +11RZt+cRLInUue4X +-----END CERTIFICATE----- + +GTS Root R4 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1 +PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C +r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh +4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +Telia Root CA v2 +================ +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNVBAYT +AkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2 +MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQK +DBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ7 +6zBqAMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9vVYiQJ3q +9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9lRdU2HhE8Qx3FZLgmEKn +pNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTODn3WhUidhOPFZPY5Q4L15POdslv5e2QJl +tI5c0BE0312/UqeBAMN/mUWZFdUXyApT7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW +5olWK8jjfN7j/4nlNW4o6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNr +RBH0pUPCTEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6WT0E +BXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63RDolUK5X6wK0dmBR4 +M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZIpEYslOqodmJHixBTB0hXbOKSTbau +BcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGjYzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7W +xy+G2CQ5MB0GA1UdDgQWBBRyrOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi0f6X+J8wfBj5 +tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMMA8iZGok1GTzTyVR8qPAs5m4H +eW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBSSRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+C +y748fdHif64W1lZYudogsYMVoe+KTTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygC +QMez2P2ccGrGKMOF6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15 +h2Er3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMtTy3EHD70 +sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pTVmBds9hCG1xLEooc6+t9 +xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAWysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQ +raVplI/owd8k+BsHMYeB2F326CjYSlKArBPuUBQemMc= +-----END CERTIFICATE----- + +D-TRUST BR Root CA 1 2020 +========================= +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE +RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3QgQ0EgMSAy +MDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNV +BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7 +dPYSzuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0QVK5buXu +QqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/VbNafAkl1bK6CKBrqx9t +MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu +bmV0L2NybC9kLXRydXN0X2JyX3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP +PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD +AwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFWwKrY7RjEsK70Pvom +AjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHVdWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +D-TRUST EV Root CA 1 2020 +========================= +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE +RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3QgQ0EgMSAy +MDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNV +BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8 +ZRCC/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rDwpdhQntJ +raOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3OqQo5FD4pPfsazK2/umL +MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu +bmV0L2NybC9kLXRydXN0X2V2X3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP +PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD +AwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CAy/m0sRtW9XLS/BnR +AjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJbgfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- diff --git a/stripe/object_classes.py b/stripe/object_classes.py index e41194c7a..c1444bbb8 100644 --- a/stripe/object_classes.py +++ b/stripe/object_classes.py @@ -11,7 +11,6 @@ # business objects api_resources.Account.OBJECT_NAME: api_resources.Account, api_resources.AccountLink.OBJECT_NAME: api_resources.AccountLink, - api_resources.AlipayAccount.OBJECT_NAME: api_resources.AlipayAccount, api_resources.ApplePayDomain.OBJECT_NAME: api_resources.ApplePayDomain, api_resources.ApplicationFee.OBJECT_NAME: api_resources.ApplicationFee, api_resources.ApplicationFeeRefund.OBJECT_NAME: api_resources.ApplicationFeeRefund, @@ -21,8 +20,6 @@ api_resources.BankAccount.OBJECT_NAME: api_resources.BankAccount, api_resources.billing_portal.Configuration.OBJECT_NAME: api_resources.billing_portal.Configuration, api_resources.billing_portal.Session.OBJECT_NAME: api_resources.billing_portal.Session, - api_resources.BitcoinReceiver.OBJECT_NAME: api_resources.BitcoinReceiver, - api_resources.BitcoinTransaction.OBJECT_NAME: api_resources.BitcoinTransaction, api_resources.Capability.OBJECT_NAME: api_resources.Capability, api_resources.Card.OBJECT_NAME: api_resources.Card, api_resources.CashBalance.OBJECT_NAME: api_resources.CashBalance, @@ -51,10 +48,8 @@ api_resources.Invoice.OBJECT_NAME: api_resources.Invoice, api_resources.InvoiceItem.OBJECT_NAME: api_resources.InvoiceItem, api_resources.InvoiceLineItem.OBJECT_NAME: api_resources.InvoiceLineItem, - api_resources.IssuerFraudRecord.OBJECT_NAME: api_resources.IssuerFraudRecord, api_resources.issuing.Authorization.OBJECT_NAME: api_resources.issuing.Authorization, api_resources.issuing.Card.OBJECT_NAME: api_resources.issuing.Card, - api_resources.issuing.CardDetails.OBJECT_NAME: api_resources.issuing.CardDetails, api_resources.issuing.Cardholder.OBJECT_NAME: api_resources.issuing.Cardholder, api_resources.issuing.Dispute.OBJECT_NAME: api_resources.issuing.Dispute, api_resources.issuing.Transaction.OBJECT_NAME: api_resources.issuing.Transaction, @@ -75,8 +70,6 @@ api_resources.radar.EarlyFraudWarning.OBJECT_NAME: api_resources.radar.EarlyFraudWarning, api_resources.radar.ValueList.OBJECT_NAME: api_resources.radar.ValueList, api_resources.radar.ValueListItem.OBJECT_NAME: api_resources.radar.ValueListItem, - api_resources.Recipient.OBJECT_NAME: api_resources.Recipient, - api_resources.RecipientTransfer.OBJECT_NAME: api_resources.RecipientTransfer, api_resources.Refund.OBJECT_NAME: api_resources.Refund, api_resources.reporting.ReportRun.OBJECT_NAME: api_resources.reporting.ReportRun, api_resources.reporting.ReportType.OBJECT_NAME: api_resources.reporting.ReportType, @@ -100,7 +93,6 @@ api_resources.terminal.Location.OBJECT_NAME: api_resources.terminal.Location, api_resources.terminal.Reader.OBJECT_NAME: api_resources.terminal.Reader, api_resources.test_helpers.TestClock.OBJECT_NAME: api_resources.test_helpers.TestClock, - api_resources.ThreeDSecure.OBJECT_NAME: api_resources.ThreeDSecure, api_resources.Token.OBJECT_NAME: api_resources.Token, api_resources.Topup.OBJECT_NAME: api_resources.Topup, api_resources.Transfer.OBJECT_NAME: api_resources.Transfer, diff --git a/stripe/stripe_object.py b/stripe/stripe_object.py index 03f992f5b..a06cedd2e 100644 --- a/stripe/stripe_object.py +++ b/stripe/stripe_object.py @@ -102,7 +102,7 @@ def __setitem__(self, k, v): raise ValueError( "You cannot set %s to an empty string on this object. " "The empty string is treated specially in our requests. " - "If you'd like to delete the property using the save() method on this object, you may set %s.%s = None. " + "If you'd like to delete the property using the save() method on this object, you may set %s.%s=None. " "Alternatively, you can pass %s='' to delete the property when using a resource method such as modify()." % (k, str(self), k, k) ) @@ -233,18 +233,43 @@ def api_base(cls): return None def request(self, method, url, params=None, headers=None): - if params is None: - params = self._retrieve_params + return StripeObject._request( + self, method, url, headers=headers, params=params + ) + + # The `method_` and `url_` arguments are suffixed with an underscore to + # avoid conflicting with actual request parameters in `params`. + def _request( + self, + method_, + url_, + api_key=None, + idempotency_key=None, + stripe_version=None, + stripe_account=None, + headers=None, + params=None, + ): + stripe_account = stripe_account or self.stripe_account + stripe_version = stripe_version or self.stripe_version + api_key = api_key or self.api_key + params = params or self._retrieve_params + requestor = api_requestor.APIRequestor( - key=self.api_key, + key=api_key, api_base=self.api_base(), - api_version=self.stripe_version, - account=self.stripe_account, + api_version=stripe_version, + account=stripe_account, ) - response, api_key = requestor.request(method, url, params, headers) + + if idempotency_key is not None: + headers = {} if headers is None else headers.copy() + headers.update(util.populate_headers(idempotency_key)) + + response, api_key = requestor.request(method_, url_, params, headers) return util.convert_to_stripe_object( - response, api_key, self.stripe_version, self.stripe_account + response, api_key, stripe_version, stripe_account, params ) def request_stream(self, method, url, params=None, headers=None): diff --git a/stripe/util.py b/stripe/util.py index da5be7259..619f9cb1f 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -136,7 +136,7 @@ def get_object_classes(): def convert_to_stripe_object( - resp, api_key=None, stripe_version=None, stripe_account=None + resp, api_key=None, stripe_version=None, stripe_account=None, params=None ): # If we get a StripeResponse, we'll want to return a # StripeObject with the last_response field filled out with @@ -166,13 +166,20 @@ def convert_to_stripe_object( else: klass = stripe.stripe_object.StripeObject - return klass.construct_from( + obj = klass.construct_from( resp, api_key, stripe_version=stripe_version, stripe_account=stripe_account, last_response=stripe_response, ) + + if hasattr(obj, "object") and ( + (obj.object == "list") or (obj.object == "search_result") + ): + obj._retrieve_params = params + + return obj else: return resp diff --git a/tests/api_resources/abstract/test_updateable_api_resource.py b/tests/api_resources/abstract/test_updateable_api_resource.py index 89a6b3b49..21c577459 100644 --- a/tests/api_resources/abstract/test_updateable_api_resource.py +++ b/tests/api_resources/abstract/test_updateable_api_resource.py @@ -24,6 +24,7 @@ def obj(self, request_mock): "foo": "bar", "baz": "boz", "metadata": {"size": "l", "score": 4, "height": 10}, + "object": "obj", }, "mykey", ) diff --git a/tests/api_resources/issuing/test_card.py b/tests/api_resources/issuing/test_card.py index 6f0320f64..7498c9976 100644 --- a/tests/api_resources/issuing/test_card.py +++ b/tests/api_resources/issuing/test_card.py @@ -43,34 +43,3 @@ def test_is_saveable(self, request_mock): ) assert isinstance(resource, stripe.issuing.Card) assert resource is card - - def test_can_retrieve_details(self, request_mock): - # stripe-mock does not handle this anymore so we stub instead. - request_mock.stub_request( - "get", - "/v1/issuing/cards/%s/details" % TEST_RESOURCE_ID, - {"object": "issuing.card_details"}, - ) - card = stripe.issuing.Card.construct_from( - {"id": "%s" % TEST_RESOURCE_ID, "object": "issuing.card"}, - stripe.api_key, - ) - card_details = card.details() - request_mock.assert_requested( - "get", "/v1/issuing/cards/%s/details" % TEST_RESOURCE_ID - ) - assert isinstance(card_details, stripe.issuing.CardDetails) - - def test_can_retrieve_details_classmethod(self, request_mock): - # stripe-mock does not handle this anymore so we stub instead. - request_mock.stub_request( - "get", - "/v1/issuing/cards/%s/details" % TEST_RESOURCE_ID, - {"object": "issuing.card_details"}, - ) - - card_details = stripe.issuing.Card.details(TEST_RESOURCE_ID) - request_mock.assert_requested( - "get", "/v1/issuing/cards/%s/details" % TEST_RESOURCE_ID - ) - assert isinstance(card_details, stripe.issuing.CardDetails) diff --git a/tests/api_resources/test_alipay_account.py b/tests/api_resources/test_alipay_account.py deleted file mode 100644 index e656b66f0..000000000 --- a/tests/api_resources/test_alipay_account.py +++ /dev/null @@ -1,56 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import pytest - -import stripe - - -TEST_RESOURCE_ID = "aliacc_123" - - -class TestAlipayAccount(object): - def construct_resource(self): - alipay_dict = { - "id": TEST_RESOURCE_ID, - "object": "alipay_account", - "metadata": {}, - "customer": "cus_123", - } - return stripe.AlipayAccount.construct_from(alipay_dict, stripe.api_key) - - def test_has_instance_url(self, request_mock): - resource = self.construct_resource() - assert ( - resource.instance_url() - == "/v1/customers/cus_123/sources/%s" % TEST_RESOURCE_ID - ) - - def test_is_modifiable(self, request_mock): - stripe.AlipayAccount.modify( - "cus_123", TEST_RESOURCE_ID, metadata={"key": "value"} - ) - request_mock.assert_requested( - "post", "/v1/customers/cus_123/sources/%s" % TEST_RESOURCE_ID - ) - - def test_is_not_retrievable(self, request_mock): - with pytest.raises(NotImplementedError): - stripe.AlipayAccount.retrieve(TEST_RESOURCE_ID) - - # Below, we don't use stripe-mock as it always returns a Bank Account - # object when you hit /v1/customers/%s/sources/%s - - def test_is_saveable(self, request_mock): - resource = self.construct_resource() - resource.metadata["key"] = "value" - resource.save() - request_mock.assert_requested( - "post", "/v1/customers/cus_123/sources/%s" % TEST_RESOURCE_ID - ) - - def test_is_deletable(self, request_mock): - resource = self.construct_resource() - resource.delete() - request_mock.assert_requested( - "delete", "/v1/customers/cus_123/sources/%s" % TEST_RESOURCE_ID - ) diff --git a/tests/api_resources/test_application_fee.py b/tests/api_resources/test_application_fee.py index ef138a121..8597a315a 100644 --- a/tests/api_resources/test_application_fee.py +++ b/tests/api_resources/test_application_fee.py @@ -14,15 +14,6 @@ def test_is_listable(self, request_mock): assert isinstance(resources.data, list) assert isinstance(resources.data[0], stripe.ApplicationFee) - def test_is_refundable(self, request_mock): - appfee = stripe.ApplicationFee.retrieve(TEST_RESOURCE_ID) - resource = appfee.refund() - request_mock.assert_requested( - "post", "/v1/application_fees/%s/refund" % TEST_RESOURCE_ID - ) - assert isinstance(resource, stripe.ApplicationFee) - assert resource is appfee - class TestApplicationFeeRefunds(object): def test_is_listable(self, request_mock): diff --git a/tests/api_resources/test_bitcoin_receiver.py b/tests/api_resources/test_bitcoin_receiver.py deleted file mode 100644 index 5e2f20b75..000000000 --- a/tests/api_resources/test_bitcoin_receiver.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import stripe - - -TEST_RESOURCE_ID = "btcrcv_123" - - -class TestBitcoinReceiver(object): - def construct_resource(self, **params): - res_dict = { - "id": TEST_RESOURCE_ID, - "object": "bitcoin_receiver", - "metadata": {}, - } - res_dict.update(params) - return stripe.BitcoinReceiver.construct_from(res_dict, stripe.api_key) - - def test_has_customer_instance_url(self): - resource = self.construct_resource(customer="cus_123") - assert ( - resource.instance_url() - == "/v1/customers/cus_123/sources/%s" % TEST_RESOURCE_ID - ) - - def test_has_receiver_instance_url(self): - resource = self.construct_resource() - assert ( - resource.instance_url() - == "/v1/bitcoin/receivers/%s" % TEST_RESOURCE_ID - ) - - def test_is_listable(self, request_mock): - resources = stripe.BitcoinReceiver.list() - request_mock.assert_requested("get", "/v1/bitcoin/receivers") - assert isinstance(resources.data, list) - assert isinstance(resources.data[0], stripe.BitcoinReceiver) - - def test_is_retrievable(self, request_mock): - resource = stripe.BitcoinReceiver.retrieve(TEST_RESOURCE_ID) - request_mock.assert_requested( - "get", "/v1/bitcoin/receivers/%s" % TEST_RESOURCE_ID - ) - assert isinstance(resource, stripe.BitcoinReceiver) diff --git a/tests/api_resources/test_card.py b/tests/api_resources/test_card.py index 029b70d82..be47c9c76 100644 --- a/tests/api_resources/test_card.py +++ b/tests/api_resources/test_card.py @@ -28,13 +28,6 @@ def test_has_customer_instance_url(self): == "/v1/customers/cus_123/sources/%s" % TEST_RESOURCE_ID ) - def test_has_recipient_instance_url(self): - resource = self.construct_resource(recipient="rp_123") - assert ( - resource.instance_url() - == "/v1/recipients/rp_123/cards/%s" % TEST_RESOURCE_ID - ) - # The previous tests already ensure that the request will be routed to the # correct URL, so we only test the API operations once. diff --git a/tests/api_resources/test_charge.py b/tests/api_resources/test_charge.py index 290774358..4781feecd 100644 --- a/tests/api_resources/test_charge.py +++ b/tests/api_resources/test_charge.py @@ -60,14 +60,6 @@ def test_is_modifiable(self, request_mock): ) assert isinstance(resource, stripe.Charge) - def test_is_refundable(self, request_mock): - charge = stripe.Charge.retrieve(TEST_RESOURCE_ID) - resource = charge.refund() - request_mock.assert_requested( - "post", "/v1/charges/%s/refund" % TEST_RESOURCE_ID - ) - assert isinstance(resource, stripe.Charge) - def test_can_capture(self, request_mock): charge = stripe.Charge.retrieve(TEST_RESOURCE_ID) resource = charge.capture() @@ -83,22 +75,6 @@ def test_can_capture_classmethod(self, request_mock): ) assert isinstance(resource, stripe.Charge) - def test_can_update_dispute(self, request_mock): - charge = stripe.Charge.retrieve(TEST_RESOURCE_ID) - resource = charge.update_dispute() - request_mock.assert_requested( - "post", "/v1/charges/%s/dispute" % charge.id - ) - assert isinstance(resource, stripe.Dispute) - - def test_can_close_dispute(self, request_mock): - charge = stripe.Charge.retrieve(TEST_RESOURCE_ID) - resource = charge.close_dispute() - request_mock.assert_requested( - "post", "/v1/charges/%s/dispute/close" % charge.id - ) - assert isinstance(resource, stripe.Dispute) - def test_can_mark_as_fraudulent(self, request_mock): charge = stripe.Charge.retrieve(TEST_RESOURCE_ID) resource = charge.mark_as_fraudulent() diff --git a/tests/api_resources/test_issuer_fraud_record.py b/tests/api_resources/test_issuer_fraud_record.py deleted file mode 100644 index c735794c3..000000000 --- a/tests/api_resources/test_issuer_fraud_record.py +++ /dev/null @@ -1,21 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import stripe - - -TEST_RESOURCE_ID = "issfr_123" - - -class TestIssuerFraudRecord(object): - def test_is_listable(self, request_mock): - resources = stripe.IssuerFraudRecord.list() - request_mock.assert_requested("get", "/v1/issuer_fraud_records") - assert isinstance(resources.data, list) - assert isinstance(resources.data[0], stripe.IssuerFraudRecord) - - def test_is_retrievable(self, request_mock): - resource = stripe.IssuerFraudRecord.retrieve(TEST_RESOURCE_ID) - request_mock.assert_requested( - "get", "/v1/issuer_fraud_records/%s" % TEST_RESOURCE_ID - ) - assert isinstance(resource, stripe.IssuerFraudRecord) diff --git a/tests/api_resources/test_recipient.py b/tests/api_resources/test_recipient.py deleted file mode 100644 index 33830befd..000000000 --- a/tests/api_resources/test_recipient.py +++ /dev/null @@ -1,58 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import stripe - - -TEST_RESOURCE_ID = "rp_123" - - -class TestRecipient(object): - def test_is_listable(self, request_mock): - resources = stripe.Recipient.list() - request_mock.assert_requested("get", "/v1/recipients") - assert isinstance(resources.data, list) - assert isinstance(resources.data[0], stripe.Recipient) - - def test_is_retrievable(self, request_mock): - resource = stripe.Recipient.retrieve(TEST_RESOURCE_ID) - request_mock.assert_requested( - "get", "/v1/recipients/%s" % TEST_RESOURCE_ID - ) - assert isinstance(resource, stripe.Recipient) - - def test_is_creatable(self, request_mock): - resource = stripe.Recipient.create(type="individual", name="NAME") - request_mock.assert_requested("post", "/v1/recipients") - assert isinstance(resource, stripe.Recipient) - - def test_is_saveable(self, request_mock): - resource = stripe.Recipient.retrieve(TEST_RESOURCE_ID) - resource.metadata["key"] = "value" - resource.save() - request_mock.assert_requested( - "post", "/v1/recipients/%s" % TEST_RESOURCE_ID - ) - - def test_is_modifiable(self, request_mock): - resource = stripe.Recipient.modify( - TEST_RESOURCE_ID, metadata={"key": "value"} - ) - request_mock.assert_requested( - "post", "/v1/recipients/%s" % TEST_RESOURCE_ID - ) - assert isinstance(resource, stripe.Recipient) - - def test_is_deletable(self, request_mock): - resource = stripe.Recipient.retrieve(TEST_RESOURCE_ID) - resource.delete() - request_mock.assert_requested( - "delete", "/v1/recipients/%s" % TEST_RESOURCE_ID - ) - assert resource.deleted is True - - def test_can_delete(self, request_mock): - resource = stripe.Recipient.delete(TEST_RESOURCE_ID) - request_mock.assert_requested( - "delete", "/v1/recipients/%s" % TEST_RESOURCE_ID - ) - assert resource.deleted is True diff --git a/tests/api_resources/test_source_transaction.py b/tests/api_resources/test_source_transaction.py index 8b0575cac..24af7d69a 100644 --- a/tests/api_resources/test_source_transaction.py +++ b/tests/api_resources/test_source_transaction.py @@ -8,7 +8,7 @@ def test_is_listable(self, request_mock): source = stripe.Source.construct_from( {"id": "src_123", "object": "source"}, stripe.api_key ) - source_transactions = source.source_transactions() + source_transactions = source.list_source_transactions() request_mock.assert_requested( "get", "/v1/sources/src_123/source_transactions" ) diff --git a/tests/api_resources/test_three_d_secure.py b/tests/api_resources/test_three_d_secure.py deleted file mode 100644 index f1ac9074d..000000000 --- a/tests/api_resources/test_three_d_secure.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import stripe - - -TEST_RESOURCE_ID = "tdsrc_123" - - -class TestThreeDSecure(object): - def test_is_retrievable(self, request_mock): - resource = stripe.ThreeDSecure.retrieve(TEST_RESOURCE_ID) - request_mock.assert_requested( - "get", "/v1/3d_secure/%s" % TEST_RESOURCE_ID - ) - assert isinstance(resource, stripe.ThreeDSecure) - - def test_is_creatable(self, request_mock): - resource = stripe.ThreeDSecure.create( - card="tok_123", amount=100, currency="usd", return_url="url" - ) - request_mock.assert_requested("post", "/v1/3d_secure") - assert isinstance(resource, stripe.ThreeDSecure) diff --git a/tests/api_resources/test_transfer.py b/tests/api_resources/test_transfer.py index 4bd56fdf0..095cf4b0a 100644 --- a/tests/api_resources/test_transfer.py +++ b/tests/api_resources/test_transfer.py @@ -45,42 +45,6 @@ def test_is_modifiable(self, request_mock): ) assert isinstance(resource, stripe.Transfer) - def test_can_cancel(self, request_mock): - # stripe-mock does not handle this anymore as it was on an old - # API version so we stub instead. - request_mock.stub_request( - "post", - "/v1/transfers/%s/cancel" % TEST_RESOURCE_ID, - { - "id": "%s" % TEST_RESOURCE_ID, - "object": "transfer", - "status": "canceled", - }, - ) - transfer = stripe.Transfer.construct_from( - {"id": "%s" % TEST_RESOURCE_ID, "object": "transfer"}, - stripe.api_key, - ) - transfer_canceled = transfer.cancel() - request_mock.assert_requested( - "post", "/v1/transfers/%s/cancel" % TEST_RESOURCE_ID - ) - assert isinstance(transfer_canceled, stripe.Transfer) - - def test_can_cancel_classmethod(self, request_mock): - # stripe-mock does not handle this anymore as it was on an old - # API version so we stub instead. - request_mock.stub_request( - "post", - "/v1/transfers/%s/cancel" % TEST_RESOURCE_ID, - {"id": "%s" % TEST_RESOURCE_ID, "object": "transfer"}, - ) - transfer = stripe.Transfer.cancel(TEST_RESOURCE_ID) - request_mock.assert_requested( - "post", "/v1/transfers/%s/cancel" % TEST_RESOURCE_ID - ) - assert isinstance(transfer, stripe.Transfer) - class TestTransferReversals: def test_is_listable(self, request_mock): diff --git a/tests/api_resources/test_usage_record_summary.py b/tests/api_resources/test_usage_record_summary.py index f380f60d5..dfe289e50 100644 --- a/tests/api_resources/test_usage_record_summary.py +++ b/tests/api_resources/test_usage_record_summary.py @@ -5,8 +5,9 @@ class TestUsageRecordSummary(object): def test_is_listable(self, request_mock): - resource = stripe.SubscriptionItem.retrieve("si_123") - usage_record_summaries = resource.usage_record_summaries() + usage_record_summaries = ( + stripe.SubscriptionItem.list_usage_record_summaries("si_123") + ) request_mock.assert_requested( "get", "/v1/subscription_items/si_123/usage_record_summaries" ) diff --git a/tests/test_generated_examples.py b/tests/test_generated_examples.py index 422396a48..d26ab95a5 100644 --- a/tests/test_generated_examples.py +++ b/tests/test_generated_examples.py @@ -54,6 +54,13 @@ def test_checkout_session_expire(self, request_mock): "/v1/checkout/sessions/sess_xyz/expire", ) + def test_checkout_session_list_line_items(self, request_mock): + stripe.checkout.Session.list_line_items("sess_xyz") + request_mock.assert_requested( + "get", + "/v1/checkout/sessions/sess_xyz/line_items", + ) + def test_customer_cashbalance_retrieve(self, request_mock): stripe.Customer.retrieve_cash_balance("cus_123") request_mock.assert_requested( @@ -159,12 +166,16 @@ def test_order_create(self, request_mock): ) request_mock.assert_requested("post", "/v1/orders") - def test_order_update(self, request_mock): - stripe.Order.modify("order_xyz") - request_mock.assert_requested("post", "/v1/orders/order_xyz") + def test_order_retrieve(self, request_mock): + stripe.Order.retrieve("order_xyz") + request_mock.assert_requested("get", "/v1/orders/order_xyz") - def test_order_update2(self, request_mock): - stripe.Order.modify("order_xyz") + def test_order_update(self, request_mock): + stripe.Order.modify( + "order_xyz", + metadata={"reference_number": "123"}, + ip_address="0.0.0.0", + ) request_mock.assert_requested("post", "/v1/orders/order_xyz") def test_order_cancel(self, request_mock): From 9c404dc448d6a2f45c7b7089115a5575c770a5e7 Mon Sep 17 00:00:00 2001 From: pakrym-stripe <99349468+pakrym-stripe@users.noreply.github.com> Date: Tue, 2 Aug 2022 08:05:27 -0700 Subject: [PATCH 02/10] Codegen for openapi v174 (#847) --- OPENAPI_VERSION | 2 +- stripe/api_version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OPENAPI_VERSION b/OPENAPI_VERSION index 1f7b99f73..714ead978 100644 --- a/OPENAPI_VERSION +++ b/OPENAPI_VERSION @@ -1 +1 @@ -v163 \ No newline at end of file +v174 \ No newline at end of file diff --git a/stripe/api_version.py b/stripe/api_version.py index 63fc38ee7..7b13f3c30 100644 --- a/stripe/api_version.py +++ b/stripe/api_version.py @@ -2,4 +2,4 @@ class _ApiVersion: - CURRENT = "2020-08-27" + CURRENT = "2022-08-01" From e65630afe27091812f90f50befedfb489ee0191d Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Tue, 2 Aug 2022 08:50:15 -0700 Subject: [PATCH 03/10] Bump version to 4.0.0 --- CHANGELOG.md | 33 ++++++++++++++++++++++++++++++--- VERSION | 2 +- stripe/version.py | 2 +- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac3c947c6..62622ab05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,35 @@ +## 4.0.0 - 2022-08-02 + +Breaking changes that arose during code generation of the library that we postponed for the next major version. For changes to the SDK, read more detailed description at https://github.com/stripe/stripe-python/wiki/Migration-guide-for-v4. For changes to the Stripe products, read more at https://stripe.com/docs/upgrades#2022-08-01. + +"⚠️" symbol highlights breaking changes. + +* [#847](https://github.com/stripe/stripe-python/pull/847) API Updates +* [#845](https://github.com/stripe/stripe-python/pull/845) Next major release changes +* [#836](https://github.com/stripe/stripe-python/pull/836) API Updates. Add Price.create tests. +* [#835](https://github.com/stripe/stripe-python/pull/835) API Updates. Use auto-generation for credit_note and invoice methods. + +### ⚠️ Removed +- Removed deprecated `AlipayAccount`, `BitcoinReceiver`, `BitcoinTransaction`, `IssuerFraudRecord`, `Recipient`, `RecipientTransfer`, and `ThreeDSecure` classes. +- Removed deprecated `Charge.update_dispute` and `Charge.close_dispute` methods that were using legacy REST API endpoint. Prefer [Dispute.modify](https://stripe.com/docs/api/disputes/update?lang=python) and [Dispute.close](https://stripe.com/docs/api/disputes/close?lang=python) +- Removed deprecated `Card.details` method and `CardDetails` resource. The REST API endpoint is not longer supported. +- Removed the deprecated `Source.source_transactions` method. Prefer `SubscriptionItem.list_source_transactions` +- Removed the deprecated `SubscriptionItem.usage_record_summaries` method. Prefer `SubscriptionItem.list_usage_record_summaries` +- Removed the deprecated `Charge.refund` method. Prefer [Refund.create](https://stripe.com/docs/api/refunds/create) + +### ⚠️ Changed +- To be consistent with other resource methods, `ApplicationFee.refund` returns an instance of `ApplicationFee` and doesn't mutate the instance of `ApplicationFee`. +- To be consistent with other resource methods, the `Customer.delete_discount` no longer resets the `discount` property to `None` and returns the deleted discount instead. If you were relying on this behavior, reset the discount property manually: +- The `LineItem` resource now inherits from `StripeObject` as it has no methods of it's own. +- To be consistent with other resource methods, the `Subscription.delete_discount` returns an instance of deleted discount and doesn't mutate the instance of `Subscription`. +- Update the CA certificate bundle. +- Request sending logic unified across standard and custom methods (https://github.com/stripe/stripe-python/pull/832) + ## 3.5.0 - 2022-06-30 * [#831](https://github.com/stripe/stripe-python/pull/831) API Updates - * Add support for `deliver_card`, `fail_card`, `return_card`, and `ship_card` test helper methods on resource `Issuing.Card` - * Switch from using `instance_url` to computing method path in place for custom methods. - * Switch from using explicit class methods for test helpers instead of using meta-programming. + * Add support for `deliver_card`, `fail_card`, `return_card`, and `ship_card` test helper methods on resource `Issuing.Card` + * Switch from using `instance_url` to computing method path in place for custom methods. + * Switch from using explicit class methods for test helpers instead of using meta-programming. ## 3.4.0 - 2022-06-17 * [#824](https://github.com/stripe/stripe-python/pull/824) API Updates diff --git a/VERSION b/VERSION index 1545d9665..fcdb2e109 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.5.0 +4.0.0 diff --git a/stripe/version.py b/stripe/version.py index 46c424d30..189c03bb4 100644 --- a/stripe/version.py +++ b/stripe/version.py @@ -1 +1 @@ -VERSION = "3.5.0" +VERSION = "4.0.0" From b2014e6eeab1904bd5ef9a4a61a90c9140133908 Mon Sep 17 00:00:00 2001 From: Kamil Pajdzik <99290280+kamil-stripe@users.noreply.github.com> Date: Tue, 2 Aug 2022 22:03:21 -0700 Subject: [PATCH 04/10] Fix incorrect handling of additional request parameters (#850) --- stripe/api_resources/abstract/api_resource.py | 38 +++++- stripe/stripe_object.py | 13 ++ stripe/util.py | 14 +++ .../abstract/test_api_resource.py | 19 +++ .../abstract/test_custom_method.py | 111 ++++++++++++++++++ .../abstract/test_deletable_api_resource.py | 25 ++++ .../abstract/test_updateable_api_resource.py | 26 ++++ 7 files changed, 244 insertions(+), 2 deletions(-) diff --git a/stripe/api_resources/abstract/api_resource.py b/stripe/api_resources/abstract/api_resource.py index 664ea1c93..c2bcd8c61 100644 --- a/stripe/api_resources/abstract/api_resource.py +++ b/stripe/api_resources/abstract/api_resource.py @@ -115,10 +115,27 @@ def _static_request( stripe_account=None, params=None, ): + params = None if params is None else params.copy() + api_key = util.read_special_variable(params, "api_key", api_key) + idempotency_key = util.read_special_variable( + params, "idempotency_key", idempotency_key + ) + stripe_version = util.read_special_variable( + params, "stripe_version", stripe_version + ) + stripe_account = util.read_special_variable( + params, "stripe_account", stripe_account + ) + headers = util.read_special_variable(params, "headers", None) + requestor = api_requestor.APIRequestor( api_key, api_version=stripe_version, account=stripe_account ) - headers = util.populate_headers(idempotency_key) + + if idempotency_key is not None: + headers = {} if headers is None else headers.copy() + headers.update(util.populate_headers(idempotency_key)) + response, api_key = requestor.request(method_, url_, params, headers) return util.convert_to_stripe_object( response, api_key, stripe_version, stripe_account, params @@ -137,9 +154,26 @@ def _static_request_stream( stripe_account=None, params=None, ): + params = None if params is None else params.copy() + api_key = util.read_special_variable(params, "api_key", api_key) + idempotency_key = util.read_special_variable( + params, "idempotency_key", idempotency_key + ) + stripe_version = util.read_special_variable( + params, "stripe_version", stripe_version + ) + stripe_account = util.read_special_variable( + params, "stripe_account", stripe_account + ) + headers = util.read_special_variable(params, "headers", None) + requestor = api_requestor.APIRequestor( api_key, api_version=stripe_version, account=stripe_account ) - headers = util.populate_headers(idempotency_key) + + if idempotency_key is not None: + headers = {} if headers is None else headers.copy() + headers.update(util.populate_headers(idempotency_key)) + response, _ = requestor.request_stream(method_, url_, params, headers) return response diff --git a/stripe/stripe_object.py b/stripe/stripe_object.py index a06cedd2e..80ca5d664 100644 --- a/stripe/stripe_object.py +++ b/stripe/stripe_object.py @@ -250,6 +250,19 @@ def _request( headers=None, params=None, ): + params = None if params is None else params.copy() + api_key = util.read_special_variable(params, "api_key", api_key) + idempotency_key = util.read_special_variable( + params, "idempotency_key", idempotency_key + ) + stripe_version = util.read_special_variable( + params, "stripe_version", stripe_version + ) + stripe_account = util.read_special_variable( + params, "stripe_account", stripe_account + ) + headers = util.read_special_variable(params, "headers", headers) + stripe_account = stripe_account or self.stripe_account stripe_version = stripe_version or self.stripe_version api_key = api_key or self.api_key diff --git a/stripe/util.py b/stripe/util.py index 619f9cb1f..d4c55392f 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -210,6 +210,20 @@ def populate_headers(idempotency_key): return None +def read_special_variable(params, key_name, default_value): + value = default_value + params_value = None + + if params is not None and key_name in params: + params_value = params[key_name] + del params[key_name] + + if value is None: + value = params_value + + return value + + def merge_dicts(x, y): z = x.copy() z.update(y) diff --git a/tests/api_resources/abstract/test_api_resource.py b/tests/api_resources/abstract/test_api_resource.py index 9bed856b9..13794611d 100644 --- a/tests/api_resources/abstract/test_api_resource.py +++ b/tests/api_resources/abstract/test_api_resource.py @@ -38,6 +38,25 @@ def test_retrieve_and_refresh(self, request_mock): with pytest.raises(KeyError): res["bobble"] + def test_request_with_special_fields_prefers_explicit(self, request_mock): + url = "/v1/myresources/foo" + request_mock.stub_request( + "get", + url, + {"id": "foo2", "bobble": "scrobble"}, + ) + + self.MyResource._static_request( + "get", + "/v1/myresources/foo", + idempotency_key="explicit", + params={"idempotency_key": "params", "bobble": "scrobble"}, + ) + + request_mock.assert_requested( + "get", url, {"bobble": "scrobble"}, {"Idempotency-Key": "explicit"} + ) + def test_convert_to_stripe_object(self): sample = { "foo": "bar", diff --git a/tests/api_resources/abstract/test_custom_method.py b/tests/api_resources/abstract/test_custom_method.py index f02a87e9e..f3471ebf6 100644 --- a/tests/api_resources/abstract/test_custom_method.py +++ b/tests/api_resources/abstract/test_custom_method.py @@ -31,6 +31,37 @@ def do_stream_stuff(self, idempotency_key=None, **params): headers = util.populate_headers(idempotency_key) return self.request_stream("post", url, params, headers) + @classmethod + def _cls_do_stuff_new_codegen( + cls, + id, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/myresources/{id}/do_the_thing".format( + id=util.sanitize_id(id) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_do_stuff_new_codegen") + def do_stuff_new_codegen(self, idempotency_key=None, **params): + return self._request( + "post", + "/v1/myresources/{id}/do_the_thing".format( + id=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + def test_call_custom_method_class(self, request_mock): request_mock.stub_request( "post", @@ -193,3 +224,83 @@ def test_call_custom_stream_method_instance(self, request_mock): body_content = body_content.decode("utf-8") assert body_content == "response body" + + def test_call_custom_method_class_special_fields(self, request_mock): + request_mock.stub_request( + "post", + "/v1/myresources/mid/do_the_thing", + {"id": "mid", "thing_done": True}, + rheaders={"request-id": "req_id"}, + ) + + self.MyResource.do_stuff( + "mid", + foo="bar", + stripe_version="2017-08-15", + api_key="APIKEY", + idempotency_key="IdempotencyKey", + stripe_account="Acc", + ) + + request_mock.assert_requested( + "post", + "/v1/myresources/mid/do_the_thing", + {"foo": "bar"}, + {"Idempotency-Key": "IdempotencyKey"}, + ) + request_mock.assert_api_version("2017-08-15") + + def test_call_custom_method_class_newcodegen_special_fields( + self, request_mock + ): + request_mock.stub_request( + "post", + "/v1/myresources/mid/do_the_thing", + {"id": "mid", "thing_done": True}, + rheaders={"request-id": "req_id"}, + ) + + self.MyResource.do_stuff_new_codegen( + "mid", + foo="bar", + stripe_version="2017-08-15", + api_key="APIKEY", + idempotency_key="IdempotencyKey", + stripe_account="Acc", + ) + + request_mock.assert_requested( + "post", + "/v1/myresources/mid/do_the_thing", + {"foo": "bar"}, + {"Idempotency-Key": "IdempotencyKey"}, + ) + request_mock.assert_api_version("2017-08-15") + + def test_call_custom_method_instance_newcodegen_special_fields( + self, request_mock + ): + request_mock.stub_request( + "post", + "/v1/myresources/mid/do_the_thing", + {"id": "mid", "thing_done": True}, + rheaders={"request-id": "req_id"}, + ) + + obj = self.MyResource.construct_from({"id": "mid"}, "mykey") + obj.do_stuff_new_codegen( + foo="bar", + stripe_version="2017-08-15", + api_key="APIKEY", + idempotency_key="IdempotencyKey", + stripe_account="Acc", + headers={"extra_header": "val"}, + ) + + request_mock.assert_requested( + "post", + "/v1/myresources/mid/do_the_thing", + {"foo": "bar"}, + {"Idempotency-Key": "IdempotencyKey", "extra_header": "val"}, + ) + request_mock.assert_api_version("2017-08-15") diff --git a/tests/api_resources/abstract/test_deletable_api_resource.py b/tests/api_resources/abstract/test_deletable_api_resource.py index e8a452c8b..532bd493e 100644 --- a/tests/api_resources/abstract/test_deletable_api_resource.py +++ b/tests/api_resources/abstract/test_deletable_api_resource.py @@ -60,3 +60,28 @@ def test_delete_instance(self, request_mock): assert obj.last_response is not None assert obj.last_response.request_id == "req_id" + + def test_delete_with_all_special_fields(self, request_mock): + request_mock.stub_request( + "delete", + "/v1/mydeletables/foo", + {"id": "foo", "bobble": "new_scrobble"}, + {"Idempotency-Key": "IdempotencyKey"}, + ) + + self.MyDeletable.delete( + "foo", + stripe_version="2017-08-15", + api_key="APIKEY", + idempotency_key="IdempotencyKey", + stripe_account="Acc", + bobble="new_scrobble", + ) + + request_mock.assert_requested( + "delete", + "/v1/mydeletables/foo", + {"bobble": "new_scrobble"}, + {"Idempotency-Key": "IdempotencyKey"}, + ) + request_mock.assert_api_version("2017-08-15") diff --git a/tests/api_resources/abstract/test_updateable_api_resource.py b/tests/api_resources/abstract/test_updateable_api_resource.py index 21c577459..161961562 100644 --- a/tests/api_resources/abstract/test_updateable_api_resource.py +++ b/tests/api_resources/abstract/test_updateable_api_resource.py @@ -346,3 +346,29 @@ def test_retrieve_and_update_with_stripe_version(self, request_mock, obj): res.save() request_mock.assert_api_version("2017-08-15") + + def test_modify_with_all_special_fields(self, request_mock, obj): + request_mock.stub_request( + "post", + "/v1/myupdateables/foo", + {"id": "foo", "bobble": "new_scrobble"}, + {"Idempotency-Key": "IdempotencyKey"}, + ) + + self.MyUpdateable.modify( + "foo", + stripe_version="2017-08-15", + api_key="APIKEY", + idempotency_key="IdempotencyKey", + stripe_account="Acc", + bobble="new_scrobble", + headers={"extra_header": "val"}, + ) + + request_mock.assert_requested( + "post", + "/v1/myupdateables/foo", + {"bobble": "new_scrobble"}, + {"Idempotency-Key": "IdempotencyKey", "extra_header": "val"}, + ) + request_mock.assert_api_version("2017-08-15") From 37a564bc5b181f4c7fb429b17527a7855d7a421e Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Tue, 2 Aug 2022 22:05:20 -0700 Subject: [PATCH 05/10] Bump version to 4.0.1 --- CHANGELOG.md | 4 ++++ VERSION | 2 +- stripe/version.py | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62622ab05..c7d909f52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.0.1 - 2022-08-02 +* [#850](https://github.com/stripe/stripe-python/pull/850) Fix incorrect handling of additional request parameters + * Fixes issue where using special parameter like `api_key`, `idempotency_key`, `stripe_version`, `stripe_account`, `headers` can cause a `Received unknown parameter error`. + ## 4.0.0 - 2022-08-02 Breaking changes that arose during code generation of the library that we postponed for the next major version. For changes to the SDK, read more detailed description at https://github.com/stripe/stripe-python/wiki/Migration-guide-for-v4. For changes to the Stripe products, read more at https://stripe.com/docs/upgrades#2022-08-01. diff --git a/VERSION b/VERSION index fcdb2e109..1454f6ed4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.0.0 +4.0.1 diff --git a/stripe/version.py b/stripe/version.py index 189c03bb4..269d18fef 100644 --- a/stripe/version.py +++ b/stripe/version.py @@ -1 +1 @@ -VERSION = "4.0.0" +VERSION = "4.0.1" From c637f2d435ae19d25df5a6f53466d9ffcdac6bd8 Mon Sep 17 00:00:00 2001 From: Dominic Charley-Roy <78050200+dcr-stripe@users.noreply.github.com> Date: Wed, 3 Aug 2022 11:19:53 -0400 Subject: [PATCH 06/10] Fix issue where auto_paging_iter failed on nested list objects. (#855) --- stripe/util.py | 9 ++- tests/api_resources/test_invoice.py | 8 +++ tests/test_stripe_object.py | 100 +++++++++++++++++++++------- 3 files changed, 92 insertions(+), 25 deletions(-) diff --git a/stripe/util.py b/stripe/util.py index d4c55392f..b5ad1ab84 100644 --- a/stripe/util.py +++ b/stripe/util.py @@ -174,8 +174,13 @@ def convert_to_stripe_object( last_response=stripe_response, ) - if hasattr(obj, "object") and ( - (obj.object == "list") or (obj.object == "search_result") + # We only need to update _retrieve_params when special params were + # actually passed. Otherwise, leave it as is as the list / search result + # constructors will instantiate their own params. + if ( + params is not None + and hasattr(obj, "object") + and ((obj.object == "list") or (obj.object == "search_result")) ): obj._retrieve_params = params diff --git a/tests/api_resources/test_invoice.py b/tests/api_resources/test_invoice.py index 23a2fd294..4a53e9b98 100644 --- a/tests/api_resources/test_invoice.py +++ b/tests/api_resources/test_invoice.py @@ -136,3 +136,11 @@ def test_can_void_invoice_classmethod(self, request_mock): "post", "/v1/invoices/%s/void" % TEST_RESOURCE_ID ) assert isinstance(resource, stripe.Invoice) + + def test_can_iterate_lines(self, request_mock): + resource = stripe.Invoice.retrieve(TEST_RESOURCE_ID) + assert isinstance(resource.lines.data, list) + assert isinstance(resource.lines.data[0], stripe.InvoiceLineItem) + seen = [item["id"] for item in resource.lines.auto_paging_iter()] + + assert seen.__len__() > 0 diff --git a/tests/test_stripe_object.py b/tests/test_stripe_object.py index 5a4d7bdaa..15c26b670 100644 --- a/tests/test_stripe_object.py +++ b/tests/test_stripe_object.py @@ -34,28 +34,60 @@ "subtotal": 10000, "total": 10000, "lines": { - "invoiceitems": [], - "prorations": [], - "subscriptions": [ + "object": "list", + "data": [ { - "plan": { - "interval": "month", - "object": "plan", - "identifier": "expensive", + "id": "il_1LSiex2eZvKYlo2CZ5IspTNx", + "object": "line_item", + "amount": 2499, + "amount_excluding_tax": 2499, + "currency": "usd", + "description": "My First Invoice Item (created for API docs)", + "discount_amounts": [], + "discountable": true, + "discounts": [], + "invoice_item": "ii_1LSiex2eZvKYlo2C0X4adTLR", + "livemode": false, + "metadata": {}, + "period": { + "end": 1659537295, + "start": 1659537295 + }, + "price": { + "id": "price_1LSicu2eZvKYlo2C4WSIaXEp", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1659537168, "currency": "usd", + "custom_unit_amount": null, "livemode": false, - "amount": 10000, - "name": "Expensive Plan", - "trial_period_days": null, - "id": "expensive" + "lookup_key": null, + "metadata": {}, + "nickname": null, + "product": "prod_MB4mvosUV5tObf", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 2499, + "unit_amount_decimal": "2499" }, - "period": { - "end": 1340917128, - "start": 1338238728 + "proration": false, + "proration_details": { + "credited_items": null }, - "amount": 10000 + "quantity": 1, + "subscription": null, + "tax_amounts": [], + "tax_rates": [], + "type": "invoiceitem", + "unit_amount_excluding_tax": "2499" } - ] + ], + "has_more": false, + "url": "/v1/invoices/in_t9mHb2hpK7mml1/lines" } } """ @@ -157,11 +189,32 @@ def test_refresh_from_nested_object(self): SAMPLE_INVOICE, "key" ) - assert len(obj.lines.subscriptions) == 1 + assert len(obj.lines) == 1 + assert isinstance(obj.lines, stripe.ListObject) + assert isinstance(obj.lines.data[0], stripe.InvoiceLineItem) assert isinstance( - obj.lines.subscriptions[0], stripe.stripe_object.StripeObject + obj.lines.data[0].price, stripe.stripe_object.StripeObject + ) + assert isinstance(obj.lines.data[0].price, stripe.Price) + assert obj.lines.data[0].price.billing_scheme == "per_unit" + + def test_refresh_from_nested_object_can_be_paged(self): + obj = stripe.stripe_object.StripeObject.construct_from( + SAMPLE_INVOICE, "key" ) - assert obj.lines.subscriptions[0].plan.interval == "month" + + assert len(obj.lines) == 1 + assert isinstance(obj.lines, stripe.ListObject) + seen = [item["id"] for item in obj.lines.auto_paging_iter()] + + assert seen == ["il_1LSiex2eZvKYlo2CZ5IspTNx"] + + assert isinstance(obj.lines.data[0], stripe.InvoiceLineItem) + assert isinstance( + obj.lines.data[0].price, stripe.stripe_object.StripeObject + ) + assert isinstance(obj.lines.data[0].price, stripe.Price) + assert obj.lines.data[0].price.billing_scheme == "per_unit" def test_to_json(self): obj = stripe.stripe_object.StripeObject.construct_from( @@ -173,15 +226,16 @@ def test_to_json(self): def check_invoice_data(self, data): # Check rough structure assert len(list(data.keys())) == 20 - assert len(list(data["lines"].keys())) == 3 - assert len(data["lines"]["invoiceitems"]) == 0 - assert len(data["lines"]["subscriptions"]) == 1 + assert len(list(data["lines"]["data"][0].keys())) == 22 + assert len(data["lines"]["data"]) == 1 # Check various data types assert data["date"] == 1338238728 assert data["next_payment_attempt"] is None assert data["livemode"] is False - assert data["lines"]["subscriptions"][0]["plan"]["interval"] == "month" + assert ( + data["lines"]["data"][0]["price"]["billing_scheme"] == "per_unit" + ) def test_repr(self): obj = stripe.stripe_object.StripeObject("foo", "bar", myparam=5) From 583ecf9abc0698ba4a9b4c01155da44bf4073a1f Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Wed, 3 Aug 2022 08:25:09 -0700 Subject: [PATCH 07/10] Bump version to 4.0.2 --- CHANGELOG.md | 3 +++ VERSION | 2 +- stripe/version.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7d909f52..43ef51afc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 4.0.2 - 2022-08-03 +* [#855](https://github.com/stripe/stripe-python/pull/855) Fix issue where auto_paging_iter failed on nested list objects. + ## 4.0.1 - 2022-08-02 * [#850](https://github.com/stripe/stripe-python/pull/850) Fix incorrect handling of additional request parameters * Fixes issue where using special parameter like `api_key`, `idempotency_key`, `stripe_version`, `stripe_account`, `headers` can cause a `Received unknown parameter error`. diff --git a/VERSION b/VERSION index 1454f6ed4..4d54daddb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.0.1 +4.0.2 diff --git a/stripe/version.py b/stripe/version.py index 269d18fef..b8e20f029 100644 --- a/stripe/version.py +++ b/stripe/version.py @@ -1 +1 @@ -VERSION = "4.0.1" +VERSION = "4.0.2" From c2778e383834c868dcb015971e52f12737f0a1f2 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Wed, 3 Aug 2022 10:12:09 -0700 Subject: [PATCH 08/10] Set version to 4.0.2 to simplify merge --- VERSION | 2 +- stripe/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index ade65fb7c..4d54daddb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.6.0b1 +4.0.2 diff --git a/stripe/version.py b/stripe/version.py index 0ff9d1df2..b8e20f029 100644 --- a/stripe/version.py +++ b/stripe/version.py @@ -1 +1 @@ -VERSION = "3.6.0b1" +VERSION = "4.0.2" From 357320ba2a2dacd312cfde69060fa22601b1009d Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Wed, 3 Aug 2022 10:12:10 -0700 Subject: [PATCH 09/10] Reset version to 3.6.0b1 --- VERSION | 2 +- stripe/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 4d54daddb..ade65fb7c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.0.2 +3.6.0b1 diff --git a/stripe/version.py b/stripe/version.py index b8e20f029..0ff9d1df2 100644 --- a/stripe/version.py +++ b/stripe/version.py @@ -1 +1 @@ -VERSION = "4.0.2" +VERSION = "3.6.0b1" From 3d0258c92fda32e1fcb39740a125587406c2c4d5 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Wed, 3 Aug 2022 10:12:41 -0700 Subject: [PATCH 10/10] Codegen for openapi v175 --- OPENAPI_VERSION | 2 +- stripe/api_resources/__init__.py | 7 -- stripe/api_resources/quote_phase.py | 37 +++++-- stripe/api_resources/subscription_schedule.py | 103 ++++++++++++++---- stripe/api_version.py | 2 +- 5 files changed, 114 insertions(+), 37 deletions(-) diff --git a/OPENAPI_VERSION b/OPENAPI_VERSION index 48af0461c..9b1d84c43 100644 --- a/OPENAPI_VERSION +++ b/OPENAPI_VERSION @@ -1 +1 @@ -v170 \ No newline at end of file +v175 \ No newline at end of file diff --git a/stripe/api_resources/__init__.py b/stripe/api_resources/__init__.py index c70e46d7b..e64a3d152 100644 --- a/stripe/api_resources/__init__.py +++ b/stripe/api_resources/__init__.py @@ -22,15 +22,12 @@ from stripe.api_resources.account import Account from stripe.api_resources.account_link import AccountLink -from stripe.api_resources.alipay_account import AlipayAccount from stripe.api_resources.apple_pay_domain import ApplePayDomain from stripe.api_resources.application_fee import ApplicationFee from stripe.api_resources.application_fee_refund import ApplicationFeeRefund from stripe.api_resources.balance import Balance from stripe.api_resources.balance_transaction import BalanceTransaction from stripe.api_resources.bank_account import BankAccount -from stripe.api_resources.bitcoin_receiver import BitcoinReceiver -from stripe.api_resources.bitcoin_transaction import BitcoinTransaction from stripe.api_resources.capability import Capability from stripe.api_resources.card import Card from stripe.api_resources.cash_balance import CashBalance @@ -54,7 +51,6 @@ from stripe.api_resources.invoice import Invoice from stripe.api_resources.invoice_item import InvoiceItem from stripe.api_resources.invoice_line_item import InvoiceLineItem -from stripe.api_resources.issuer_fraud_record import IssuerFraudRecord from stripe.api_resources.line_item import LineItem from stripe.api_resources.login_link import LoginLink from stripe.api_resources.mandate import Mandate @@ -70,8 +66,6 @@ from stripe.api_resources.promotion_code import PromotionCode from stripe.api_resources.quote import Quote from stripe.api_resources.quote_phase import QuotePhase -from stripe.api_resources.recipient import Recipient -from stripe.api_resources.recipient_transfer import RecipientTransfer from stripe.api_resources.refund import Refund from stripe.api_resources.reversal import Reversal from stripe.api_resources.review import Review @@ -87,7 +81,6 @@ from stripe.api_resources.tax_code import TaxCode from stripe.api_resources.tax_id import TaxId from stripe.api_resources.tax_rate import TaxRate -from stripe.api_resources.three_d_secure import ThreeDSecure from stripe.api_resources.token import Token from stripe.api_resources.topup import Topup from stripe.api_resources.transfer import Transfer diff --git a/stripe/api_resources/quote_phase.py b/stripe/api_resources/quote_phase.py index c393a09b5..a9a189caa 100644 --- a/stripe/api_resources/quote_phase.py +++ b/stripe/api_resources/quote_phase.py @@ -3,19 +3,38 @@ from stripe import util from stripe.api_resources.abstract import ListableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("list_line_items", http_verb="get", http_path="line_items") class QuotePhase(ListableAPIResource): OBJECT_NAME = "quote_phase" + @classmethod + def _cls_list_line_items( + cls, + quote_phase, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "get", + "/v1/quote_phases/{quote_phase}/line_items".format( + quote_phase=util.sanitize_id(quote_phase) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_list_line_items") def list_line_items(self, idempotency_key=None, **params): - url = "/v1/quote_phases/{quote_phase}/line_items".format( - quote_phase=util.sanitize_id(self.get("id")) + return self._request( + "get", + "/v1/quote_phases/{quote_phase}/line_items".format( + quote_phase=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - resp = self.request("get", url, params, headers) - stripe_object = util.convert_to_stripe_object(resp) - stripe_object._retrieve_params = params - return stripe_object diff --git a/stripe/api_resources/subscription_schedule.py b/stripe/api_resources/subscription_schedule.py index b6d0f5fe6..116b2a4c4 100644 --- a/stripe/api_resources/subscription_schedule.py +++ b/stripe/api_resources/subscription_schedule.py @@ -5,12 +5,8 @@ from stripe.api_resources.abstract import CreateableAPIResource from stripe.api_resources.abstract import ListableAPIResource from stripe.api_resources.abstract import UpdateableAPIResource -from stripe.api_resources.abstract import custom_method -@custom_method("amend", http_verb="post") -@custom_method("cancel", http_verb="post") -@custom_method("release", http_verb="post") class SubscriptionSchedule( CreateableAPIResource, ListableAPIResource, @@ -18,26 +14,95 @@ class SubscriptionSchedule( ): OBJECT_NAME = "subscription_schedule" + @classmethod + def _cls_amend( + cls, + schedule, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/subscription_schedules/{schedule}/amend".format( + schedule=util.sanitize_id(schedule) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, + ) + + @util.class_method_variant("_cls_amend") def amend(self, idempotency_key=None, **params): - url = "/v1/subscription_schedules/{schedule}/amend".format( - schedule=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/subscription_schedules/{schedule}/amend".format( + schedule=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_cancel( + cls, + schedule, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=util.sanitize_id(schedule) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_cancel") def cancel(self, idempotency_key=None, **params): - url = "/v1/subscription_schedules/{schedule}/cancel".format( - schedule=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/subscription_schedules/{schedule}/cancel".format( + schedule=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, + ) + + @classmethod + def _cls_release( + cls, + schedule, + api_key=None, + stripe_version=None, + stripe_account=None, + **params + ): + return cls._static_request( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=util.sanitize_id(schedule) + ), + api_key=api_key, + stripe_version=stripe_version, + stripe_account=stripe_account, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self + @util.class_method_variant("_cls_release") def release(self, idempotency_key=None, **params): - url = "/v1/subscription_schedules/{schedule}/release".format( - schedule=util.sanitize_id(self.get("id")) + return self._request( + "post", + "/v1/subscription_schedules/{schedule}/release".format( + schedule=util.sanitize_id(self.get("id")) + ), + idempotency_key=idempotency_key, + params=params, ) - headers = util.populate_headers(idempotency_key) - self.refresh_from(self.request("post", url, params, headers)) - return self diff --git a/stripe/api_version.py b/stripe/api_version.py index ec664eb6b..8101dd6aa 100644 --- a/stripe/api_version.py +++ b/stripe/api_version.py @@ -2,4 +2,4 @@ class _ApiVersion: - CURRENT = "2020-08-27; server_side_confirmation_beta=v1" + CURRENT = "2022-08-01; server_side_confirmation_beta=v1; orders_beta=v4"