main
py 35 lines 1.08 KB
Raw
1 """Add user_totp table for TOTP 2FA.
2
3 Revision ID: c3d4e5f6a7b8
4 Revises: b2c3d4e5f6a7
5 Create Date: 2026-03-23 00:00:00.000000
6 """
7
8 import sqlalchemy as sa
9
10 from alembic import op
11
12 # revision identifiers, used by Alembic.
13 revision = "c3d4e5f6a7b8"
14 down_revision = "b2c3d4e5f6a7"
15 branch_labels = None
16 depends_on = None
17
18
19 def upgrade() -> None:
20 op.create_table(
21 "user_totp",
22 sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True),
23 sa.Column("user_id", sa.Integer(), nullable=False, unique=True),
24 sa.Column("secret_enc", sa.Text(), nullable=False),
25 sa.Column("enabled", sa.Boolean(), nullable=False, server_default="0"),
26 sa.Column("backup_codes", sa.JSON(), nullable=False),
27 sa.Column("last_used_at", sa.Integer(), nullable=True),
28 sa.Column("created_at", sa.DateTime(), nullable=False, server_default=sa.func.now()),
29 )
30 op.create_index("ix_user_totp_user_id", "user_totp", ["user_id"], unique=True)
31
32
33 def downgrade() -> None:
34 op.drop_index("ix_user_totp_user_id", table_name="user_totp")
35 op.drop_table("user_totp")