"""Added oauth models Revision ID: fc6608d3f9cc Revises: 115caa5a76d0 Create Date: 2026-07-02 17:40:58.968553 """ import json import os from datetime import datetime, UTC from secrets import token_hex from random import randbytes from typing import Sequence, Union from uuid import uuid4, uuid7 from alembic import op import sqlalchemy as sa import sqlmodel from authlib.integrations.sqla_oauth2 import OAuth2ClientMixin # revision identifiers, used by Alembic. revision: str = 'fc6608d3f9cc' down_revision: Union[str, Sequence[str], None] = '115caa5a76d0' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### client_application = op.create_table('clientapplication', sa.Column('id', sa.Uuid(), nullable=False), sa.Column('name', sqlmodel.sql.sqltypes.AutoString(), nullable=False), sa.Column('client_id', sa.String(length=48), nullable=True), sa.Column('client_secret', sa.String(length=120), nullable=True), sa.Column('client_id_issued_at', sa.Integer(), nullable=False), sa.Column('client_secret_expires_at', sa.Integer(), nullable=False), sa.Column('client_metadata', sa.Text(), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_clientapplication_client_id'), 'clientapplication', ['client_id'], unique=False) op.create_table('authcode', sa.Column('id', sa.Uuid(), nullable=False), sa.Column('user_id', sa.Uuid(), nullable=False), sa.Column('code', sa.String(length=120), nullable=False), sa.Column('client_id', sa.String(length=48), nullable=True), sa.Column('redirect_uri', sa.Text(), nullable=True), sa.Column('response_type', sa.Text(), nullable=True), sa.Column('scope', sa.Text(), nullable=True), sa.Column('nonce', sa.Text(), nullable=True), sa.Column('auth_time', sa.Integer(), nullable=False), sa.Column('acr', sa.Text(), nullable=True), sa.Column('amr', sa.Text(), nullable=True), sa.Column('code_challenge', sa.Text(), nullable=True), sa.Column('code_challenge_method', sa.String(length=48), nullable=True), sa.ForeignKeyConstraint(['user_id'], ['user.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('code') ) op.create_table('authtoken', sa.Column('id', sa.Uuid(), nullable=False), sa.Column('user_id', sa.Uuid(), nullable=False), sa.Column('client_id', sa.String(length=48), nullable=True), sa.Column('token_type', sa.String(length=40), nullable=True), sa.Column('access_token', sa.String(length=255), nullable=False), sa.Column('refresh_token', sa.String(length=255), nullable=True), sa.Column('scope', sa.Text(), nullable=True), sa.Column('issued_at', sa.Integer(), nullable=False), sa.Column('access_token_revoked_at', sa.Integer(), nullable=False), sa.Column('refresh_token_revoked_at', sa.Integer(), nullable=False), sa.Column('expires_in', sa.Integer(), nullable=False), sa.ForeignKeyConstraint(['user_id'], ['user.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('access_token') ) op.create_index(op.f('ix_authtoken_refresh_token'), 'authtoken', ['refresh_token'], unique=False) op.bulk_insert(client_application, [ { 'id': uuid7(), 'name': 'TTUN', 'client_id': uuid4().hex, 'client_secret': token_hex(32), 'client_id_issued_at': datetime.now(tz=UTC).timestamp(), 'client_secret_expires_at': datetime.now(tz=UTC).timestamp() + 3600, 'client_metadata': json.dumps({ 'redirect_uris': [ f'//{os.environ['TUNNEL_DOMAIN']}/oauth/callback' ], }) } ]) # ### end Alembic commands ### def downgrade() -> None: """Downgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.drop_index(op.f('ix_authtoken_refresh_token'), table_name='authtoken') op.drop_table('authtoken') op.drop_table('authcode') op.drop_index(op.f('ix_clientapplication_client_id'), table_name='clientapplication') op.drop_table('clientapplication') # ### end Alembic commands ###