Skip to content

Commit da0986d

Browse files
committed
fix(entrust): Adds loop to wait for certificate to be issued before attempting to retrieve it
Closes VC-28488
1 parent 571e68e commit da0986d

1 file changed

Lines changed: 21 additions & 4 deletions

File tree

vcert/connection_cloud.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,9 @@ def request_cert(self, request, zone):
403403
status, data = self._post(URLS.CERTIFICATE_REQUESTS, data=request_data)
404404
if status == HTTPStatus.CREATED:
405405
request.id = data['certificateRequests'][0]['id']
406-
request.cert_guid = data['certificateRequests'][0]['certificateIds'][0]
406+
if 'certificateIds' in data['certificateRequests'][0] \
407+
and len(data['certificateRequests'][0]['certificateIds']) > 0:
408+
request.cert_guid = data['certificateRequests'][0]['certificateIds'][0]
407409
return True
408410
else:
409411
log.error(f"unexpected server response {status}: {data}")
@@ -413,11 +415,26 @@ def retrieve_cert(self, request):
413415
cert_status = self._get_cert_status(request)
414416
if cert_status.status == CertStatuses.PENDING or cert_status.status == CertStatuses.REQUESTED:
415417
log.info(f"Certificate status is {cert_status.status}")
416-
return None
417-
elif cert_status.status == CertStatuses.FAILED:
418+
# Time in seconds
419+
time_start = time.time()
420+
while True:
421+
log.debug("Waiting for certificate...")
422+
time.sleep(3)
423+
cert_status = self._get_cert_status(request)
424+
if cert_status.status == CertStatuses.ISSUED:
425+
log.info(f"Certificate status is {cert_status.status}")
426+
break
427+
elif (time.time() - time_start) < request.timeout:
428+
continue
429+
else:
430+
raise RetrieveCertificateTimeoutError(f"Operation timed out at {request.timeout} seconds "
431+
f"while waiting for certificate with id {request.id} to be ISSUED")
432+
433+
if cert_status.status == CertStatuses.FAILED:
418434
log.debug(f"Certificate status is {cert_status.status}. Returning data for debug")
419435
return "Certificate FAILED"
420-
elif cert_status.status == CertStatuses.ISSUED:
436+
437+
if cert_status.status == CertStatuses.ISSUED:
421438
request.cert_guid = cert_status.certificateIds[0]
422439
dek_info = self._get_dek_hash(request.cert_guid)
423440
if dek_info and dek_info.public_key:

0 commit comments

Comments
 (0)