"""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, )