From 77f7cf2c2ea16e96ffba0cd77b7b6b0b83ff331a Mon Sep 17 00:00:00 2001 From: Jacob Hoffman-Andrews Date: Tue, 13 Feb 2018 17:25:25 -0800 Subject: [PATCH] Split up poll_order_and_request_issuance. --- acme/acme/client.py | 12 +++++++++--- acme/acme/messages.py | 16 ++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/acme/acme/client.py b/acme/acme/client.py index 7e47c6da7..c20d55894 100644 --- a/acme/acme/client.py +++ b/acme/acme/client.py @@ -597,10 +597,15 @@ class ClientV2(ClientBase): authorizations=authorizations, csr_pem=csr_pem) - def poll_order_and_request_issuance(self, orderr, max_time=datetime.timedelta(seconds=90)): + def poll_and_finalize(self, orderr, deadline=None): + if deadline is None: + deadline = datetime.datetime.now() + datetime.timedelta(seconds=90) + orderr = self.poll_authorizations(orderr, deadline) + return self.finalize_order(orderr, deadline) + + def poll_authorizations(self, orderr, deadline): """Poll Order Resource for status.""" responses = [] - deadline = datetime.datetime.now() + max_time for url in orderr.body.authorizations: while datetime.datetime.now() < deadline: time.sleep(1) @@ -615,8 +620,9 @@ class ClientV2(ClientBase): raise Exception("failed challenge for %s: %s" % (authzr.body.identifier.value, chall.error)) raise Exception("failed authorization: %s" % authzr.body) - latest = self._order_resource_from_response(self.net.get(orderr.uri), uri=orderr.uri) + return self._order_resource_from_response(self.net.get(orderr.uri), uri=orderr.uri) + def finalize_order(self, orderr, deadline): csr = OpenSSL.crypto.load_certificate_request( OpenSSL.crypto.FILETYPE_PEM, orderr.csr_pem) wrapped_csr = messages.CertificateRequest(csr=jose.ComparableX509(csr)) diff --git a/acme/acme/messages.py b/acme/acme/messages.py index 37cd3b7ab..64455d04a 100644 --- a/acme/acme/messages.py +++ b/acme/acme/messages.py @@ -490,13 +490,13 @@ class Order(ResourceBody): """Order Resource Body. :ivar buffer csr: CSR in pem format. - :ivar string status: - :ivar list of string authorizations: - :ivar datetime.datetime expires: - + :ivar acme.messages.Status status: + :ivar list of string authorizations: URLs of authorizations. + :ivar datetime.datetime expires: When the order expires. """ identifiers = jose.Field('identifiers', omitempty=True) - status = jose.Field('status', omitempty=True, default=None) + status = jose.Field('status', decoder=Status.from_json, + omitempty=True, default=STATUS_PENDING) authorizations = jose.Field('authorizations', omitempty=True) certificate = jose.Field('certificate', omitempty=True) finalize = jose.Field('finalize', omitempty=True) @@ -506,7 +506,11 @@ class OrderResource(ResourceWithURI): """Order Resource. :ivar acme.messages.Order body: - + :ivar list of acme.messages.AuthorizationResource authorizations: + Fully-fetched AuthorizationResource objects. + :ivar string csr_pem: The CSR this Order will be finalized with. + :ivar string fullchain_pem: The fetched contents of the certificate URL + produced once the order was finalized, if it's present. """ body = jose.Field('body', decoder=Order.from_json) csr_pem = jose.Field('csr_pem', omitempty=True)