def get_certificates()

in lemur/plugins/lemur_entrust/plugin.py [0:0]


    def get_certificates(self, options, **kwargs):
        """ Fetch all Entrust certificates """
        base_url = current_app.config.get("ENTRUST_URL")
        host = base_url.replace('/enterprise/v2', '')

        get_url = f"{base_url}/certificates"
        certs = []
        processed_certs = 0
        offset = 0
        while True:
            response = self.session.get(get_url,
                 params={
                     "status": "ACTIVE",
                     "isThirdParty": "false",
                     "fields": "uri,dn",
                     "offset": offset
                 }
            )
            try:
                data = json.loads(response.content)
            except ValueError:
                # catch an empty jason object here
                data = {'response': 'No detailed message'}
            status_code = response.status_code
            if status_code > 399:
                raise Exception(f"ENTRUST error: {status_code}\n{data['errors']}")
            for c in data["certificates"]:
                download_url = "{0}{1}".format(
                    host, c["uri"]
                )
                cert_response = self.session.get(download_url)
                certificate = json.loads(cert_response.content)
                # normalize serial
                serial = str(int(certificate["serialNumber"], 16))
                cert = {
                    "body": certificate["endEntityCert"],
                    "serial": serial,
                    "external_id": str(certificate["trackingId"]),
                    "csr": certificate["csr"],
                    "owner": certificate["tracking"]["requesterEmail"],
                    "description": f"Imported by Lemur; Type: Entrust {certificate['certType']}\nExtended Key Usage: {certificate['eku']}"
                }
                certs.append(cert)
                processed_certs += 1
            if data["summary"]["limit"] * offset >= data["summary"]["total"]:
                break
            else:
                offset += 1
        current_app.logger.info(f"Retrieved {processed_certs} ertificates")
        return certs