def __init__(self, x509=None, path=None, version=None, serial=None, start=None, end=None, subject=None, pem=None): # The X509 M2crypto object for this certificate. # WARNING: May be None in tests self.x509 = x509 # Full file path to the certificate on disk. May be None if the cert # hasn't yet been written to disk. self.path = path # Version of the certificate sent by Candlepin: self.version = version if serial is None: raise CertificateException("Certificate has no serial") self.serial = serial # Certificate start/end datetimes: self.start = start self.end = end self.valid_range = DateRange(self.start, self.end) self.pem = pem self.subject = subject
class Certificate(object): """ Parent class of all x509 certificate types. """ def __init__(self, x509=None, path=None, version=None, serial=None, start=None, end=None, subject=None, pem=None): # The X509 M2crypto object for this certificate. # WARNING: May be None in tests self.x509 = x509 # Full file path to the certificate on disk. May be None if the cert # hasn't yet been written to disk. self.path = path # Version of the certificate sent by Candlepin: self.version = version if serial is None: raise CertificateException("Certificate has no serial") self.serial = serial # Certificate start/end datetimes: self.start = start self.end = end self.valid_range = DateRange(self.start, self.end) self.pem = pem self.subject = subject def is_valid(self, on_date=None): gmt = datetime.utcnow() if on_date: gmt = on_date gmt = gmt.replace(tzinfo=GMT()) return self.valid_range.has_date(gmt) def is_expired(self, on_date=None): gmt = datetime.utcnow() if on_date: gmt = on_date gmt = gmt.replace(tzinfo=GMT()) return self.valid_range.end() < gmt def __cmp__(self, other): if self.end < other.end: return -1 if self.end > other.end: return 1 return 0 def write(self, path): """ Write the certificate to disk. """ f = open(path, "w") # if we were given the original pem, preserve it # ie for certv3 detached format. if self.pem is not None: f.write(self.pem) else: f.write(self.x509.as_pem()) f.close() self.path = path def delete(self): """ Delete the file associated with this certificate. """ if self.path: os.unlink(self.path) else: raise CertificateException("Certificate has no path, cannot delete.")