Files
DMARC-Sentinel/migrations/versions/20260623_0001_tls_reports.py
T

97 lines
5.4 KiB
Python

"""add tls aggregate reports
Revision ID: 20260623_0001
Revises: 20260520_0002
Create Date: 2026-06-23 00:00:00.000000+00:00
"""
from __future__ import annotations
from alembic import op
import sqlalchemy as sa
revision = "20260623_0001"
down_revision = "20260520_0002"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.create_table(
"tls_reports",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("inbox_id", sa.String(length=120), nullable=False),
sa.Column("mail_message_id", sa.Integer(), sa.ForeignKey("mail_messages.id"), nullable=True),
sa.Column("raw_json_sha256", sa.String(length=64), nullable=False),
sa.Column("report_id", sa.String(length=500), nullable=True),
sa.Column("org_name", sa.String(length=255), nullable=True),
sa.Column("contact_info", sa.Text(), nullable=True),
sa.Column("domain", sa.String(length=255), nullable=False),
sa.Column("date_begin", sa.DateTime(timezone=True), nullable=True),
sa.Column("date_end", sa.DateTime(timezone=True), nullable=True),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index(op.f("ix_tls_reports_date_begin"), "tls_reports", ["date_begin"], unique=False)
op.create_index(op.f("ix_tls_reports_date_end"), "tls_reports", ["date_end"], unique=False)
op.create_index(op.f("ix_tls_reports_domain"), "tls_reports", ["domain"], unique=False)
op.create_index(op.f("ix_tls_reports_inbox_id"), "tls_reports", ["inbox_id"], unique=False)
op.create_index(op.f("ix_tls_reports_org_name"), "tls_reports", ["org_name"], unique=False)
op.create_index(op.f("ix_tls_reports_raw_json_sha256"), "tls_reports", ["raw_json_sha256"], unique=True)
op.create_index(op.f("ix_tls_reports_report_id"), "tls_reports", ["report_id"], unique=False)
op.create_table(
"tls_policies",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("tls_report_id", sa.Integer(), sa.ForeignKey("tls_reports.id"), nullable=False),
sa.Column("policy_type", sa.String(length=80), nullable=True),
sa.Column("policy_domain", sa.String(length=255), nullable=False),
sa.Column("policy_strings_json", sa.Text(), nullable=False),
sa.Column("mx_hosts_json", sa.Text(), nullable=False),
sa.Column("total_successful_session_count", sa.Integer(), nullable=False),
sa.Column("total_failure_session_count", sa.Integer(), nullable=False),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index(op.f("ix_tls_policies_policy_domain"), "tls_policies", ["policy_domain"], unique=False)
op.create_index(op.f("ix_tls_policies_policy_type"), "tls_policies", ["policy_type"], unique=False)
op.create_index(op.f("ix_tls_policies_tls_report_id"), "tls_policies", ["tls_report_id"], unique=False)
op.create_table(
"tls_failures",
sa.Column("id", sa.Integer(), primary_key=True),
sa.Column("tls_policy_id", sa.Integer(), sa.ForeignKey("tls_policies.id"), nullable=False),
sa.Column("result_type", sa.String(length=120), nullable=True),
sa.Column("sending_mta_ip", sa.String(length=80), nullable=True),
sa.Column("receiving_mx_hostname", sa.String(length=255), nullable=True),
sa.Column("receiving_mx_helo", sa.String(length=255), nullable=True),
sa.Column("receiving_ip", sa.String(length=80), nullable=True),
sa.Column("failed_session_count", sa.Integer(), nullable=False),
sa.Column("additional_information", sa.Text(), nullable=True),
sa.Column("failure_reason_code", sa.String(length=120), nullable=True),
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
)
op.create_index(op.f("ix_tls_failures_receiving_mx_hostname"), "tls_failures", ["receiving_mx_hostname"], unique=False)
op.create_index(op.f("ix_tls_failures_result_type"), "tls_failures", ["result_type"], unique=False)
op.create_index(op.f("ix_tls_failures_sending_mta_ip"), "tls_failures", ["sending_mta_ip"], unique=False)
op.create_index(op.f("ix_tls_failures_tls_policy_id"), "tls_failures", ["tls_policy_id"], unique=False)
def downgrade() -> None:
op.drop_index(op.f("ix_tls_failures_tls_policy_id"), table_name="tls_failures")
op.drop_index(op.f("ix_tls_failures_sending_mta_ip"), table_name="tls_failures")
op.drop_index(op.f("ix_tls_failures_result_type"), table_name="tls_failures")
op.drop_index(op.f("ix_tls_failures_receiving_mx_hostname"), table_name="tls_failures")
op.drop_table("tls_failures")
op.drop_index(op.f("ix_tls_policies_tls_report_id"), table_name="tls_policies")
op.drop_index(op.f("ix_tls_policies_policy_type"), table_name="tls_policies")
op.drop_index(op.f("ix_tls_policies_policy_domain"), table_name="tls_policies")
op.drop_table("tls_policies")
op.drop_index(op.f("ix_tls_reports_report_id"), table_name="tls_reports")
op.drop_index(op.f("ix_tls_reports_raw_json_sha256"), table_name="tls_reports")
op.drop_index(op.f("ix_tls_reports_org_name"), table_name="tls_reports")
op.drop_index(op.f("ix_tls_reports_inbox_id"), table_name="tls_reports")
op.drop_index(op.f("ix_tls_reports_domain"), table_name="tls_reports")
op.drop_index(op.f("ix_tls_reports_date_end"), table_name="tls_reports")
op.drop_index(op.f("ix_tls_reports_date_begin"), table_name="tls_reports")
op.drop_table("tls_reports")