Add TLS reports capabilities

This commit is contained in:
2026-06-23 11:49:58 -03:00
parent 5c1dc95c36
commit f4ae9f8532
20 changed files with 1158 additions and 75 deletions
+55
View File
@@ -52,6 +52,7 @@ class MailMessage(Base):
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)
reports: Mapped[list["Report"]] = relationship(back_populates="mail_message")
tls_reports: Mapped[list["TLSReport"]] = relationship(back_populates="mail_message")
class Report(Base):
@@ -124,6 +125,60 @@ class AuthResult(Base):
record: Mapped[Record] = relationship(back_populates="auth_results")
class TLSReport(Base):
__tablename__ = "tls_reports"
id: Mapped[int] = mapped_column(primary_key=True)
inbox_id: Mapped[str] = mapped_column(String(120), index=True)
mail_message_id: Mapped[int | None] = mapped_column(ForeignKey("mail_messages.id"))
raw_json_sha256: Mapped[str] = mapped_column(String(64), unique=True, index=True)
report_id: Mapped[str | None] = mapped_column(String(500), index=True)
org_name: Mapped[str | None] = mapped_column(String(255), index=True)
contact_info: Mapped[str | None] = mapped_column(Text)
domain: Mapped[str] = mapped_column(String(255), index=True)
date_begin: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), index=True)
date_end: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), index=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)
mail_message: Mapped[MailMessage | None] = relationship(back_populates="tls_reports")
policies: Mapped[list["TLSPolicy"]] = relationship(back_populates="tls_report", cascade="all, delete-orphan")
class TLSPolicy(Base):
__tablename__ = "tls_policies"
id: Mapped[int] = mapped_column(primary_key=True)
tls_report_id: Mapped[int] = mapped_column(ForeignKey("tls_reports.id"), index=True)
policy_type: Mapped[str | None] = mapped_column(String(80), index=True)
policy_domain: Mapped[str] = mapped_column(String(255), index=True)
policy_strings_json: Mapped[str] = mapped_column(Text, default="[]")
mx_hosts_json: Mapped[str] = mapped_column(Text, default="[]")
total_successful_session_count: Mapped[int] = mapped_column(Integer, default=0)
total_failure_session_count: Mapped[int] = mapped_column(Integer, default=0)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)
tls_report: Mapped[TLSReport] = relationship(back_populates="policies")
failures: Mapped[list["TLSFailure"]] = relationship(back_populates="policy", cascade="all, delete-orphan")
class TLSFailure(Base):
__tablename__ = "tls_failures"
id: Mapped[int] = mapped_column(primary_key=True)
tls_policy_id: Mapped[int] = mapped_column(ForeignKey("tls_policies.id"), index=True)
result_type: Mapped[str | None] = mapped_column(String(120), index=True)
sending_mta_ip: Mapped[str | None] = mapped_column(String(80), index=True)
receiving_mx_hostname: Mapped[str | None] = mapped_column(String(255), index=True)
receiving_mx_helo: Mapped[str | None] = mapped_column(String(255))
receiving_ip: Mapped[str | None] = mapped_column(String(80))
failed_session_count: Mapped[int] = mapped_column(Integer, default=0)
additional_information: Mapped[str | None] = mapped_column(Text)
failure_reason_code: Mapped[str | None] = mapped_column(String(120))
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)
policy: Mapped[TLSPolicy] = relationship(back_populates="failures")
class SkippedReportPayload(Base):
__tablename__ = "skipped_report_payloads"
__table_args__ = (