"""Security-Fixes: LDAP tls_verify default=True, totp_secret column length 500

Revision ID: 0026
Revises: 0025
Create Date: 2026-05-24

Änderungen:
  - ldap_configs.tls_verify: DEFAULT False → DEFAULT True
    Neue Konfigurationen werden mit TLS-Verifikation angelegt.
    BESTEHENDE Einträge mit tls_verify=False werden NICHT automatisch geändert,
    da dies laufende LDAP-Verbindungen unterbrechen könnte.
    Admins müssen ihre LDAP-Konfiguration manuell prüfen.

  - users.totp_secret: VARCHAR(64) → VARCHAR(500)
    Fernet-verschlüsselte Secrets sind länger als 64 Zeichen (~180 Zeichen).
    Bestehende Plaintext-Secrets (falls vorhanden) müssen manuell verschlüsselt
    werden; nach dieser Migration werden neue Secrets automatisch verschlüsselt.
    WICHTIG: Nach dem Deployment müssen bestehende TOTP-Nutzer ihr 2FA neu einrichten
    (altes Plaintext-Secret nicht mehr kompatibel mit neuem Decrypt-Flow).
    Alternativ: vor dem Deployment `migrate_totp_secrets.py` ausführen (TODO).
"""
from alembic import op
import sqlalchemy as sa

revision = "0026"
down_revision = "0025"
branch_labels = None
depends_on = None


def upgrade() -> None:
    # ── C-1: LDAP tls_verify Default auf True ────────────────────────────────
    op.alter_column(
        "ldap_configs",
        "tls_verify",
        server_default=sa.text("true"),
        existing_type=sa.Boolean(),
        existing_nullable=False,
    )

    # ── C-2: totp_secret Column-Länge für Fernet-Token ───────────────────────
    op.alter_column(
        "users",
        "totp_secret",
        existing_type=sa.String(64),
        type_=sa.String(500),
        existing_nullable=True,
    )


def downgrade() -> None:
    # totp_secret zurück auf 64 (ggf. Datenverlust bei Fernet-verschlüsselten Werten)
    op.alter_column(
        "users",
        "totp_secret",
        existing_type=sa.String(500),
        type_=sa.String(64),
        existing_nullable=True,
    )

    # LDAP tls_verify Default zurück auf False
    op.alter_column(
        "ldap_configs",
        "tls_verify",
        server_default=sa.text("false"),
        existing_type=sa.Boolean(),
        existing_nullable=False,
    )
