Files
@ 769134152475
Branch filter:
Location: C3L-NOC/tls-expiry-tracker/backend/mail.py - annotation
769134152475
1.4 KiB
text/x-python
feat: rework time handling
d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 c11dd0c93877 d0238a1adb40 d0238a1adb40 c11dd0c93877 b3456703e541 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 769134152475 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d969304ee9cb d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 d0238a1adb40 c11dd0c93877 | #!/usr/bin/env python3
import ssl
import smtplib
import imaplib
from rich.console import Console
from cryptography import x509
import tls_utils
from generic_handler import GenericHandler
from abc import ABC, abstractmethod
class MailHandler(GenericHandler):
def connect(self, verification: bool) -> int:
connection = self.protocol_init(self.host, self.port)
if verification:
connection.starttls(**self.protocol_starttls_args())
else:
connection.starttls()
cert = connection.sock.getpeercert()
self.protocol_close(connection)
return tls_utils.get_cert_expiry_timestamp(cert)
@abstractmethod
def protocol_init(self, host, port):
raise NotImplementedError()
@abstractmethod
def protocol_close(self, connection):
raise NotImplementedError()
@abstractmethod
def protocol_starttls_args(self):
raise NotImplementedError()
class IMAPHandler(MailHandler):
def protocol_init(self, host, port):
return imaplib.IMAP4(host, port)
def protocol_close(self, connection):
connection.logout()
def protocol_starttls_args(self):
return {"ssl_context": self.context}
class SMTPHandler(MailHandler):
def protocol_init(self, host, port):
return smtplib.SMTP(host, port)
def protocol_close(self, connection):
connection.quit()
def protocol_starttls_args(self):
return {"context": self.context}
|