39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
"""Create admin user
|
|
|
|
Revision ID: 003_create_admin
|
|
Revises: 002_marathon_settings
|
|
Create Date: 2024-12-14
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from passlib.context import CryptContext
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = '003_create_admin'
|
|
down_revision: Union[str, None] = '002_marathon_settings'
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
|
|
|
|
|
def upgrade() -> None:
|
|
# Hash the password
|
|
password_hash = pwd_context.hash("RPQ586qq")
|
|
|
|
# Insert admin user (ignore if already exists)
|
|
op.execute(f"""
|
|
INSERT INTO users (login, password_hash, nickname, role, created_at)
|
|
VALUES ('admin', '{password_hash}', 'Admin', 'admin', NOW())
|
|
ON CONFLICT (login) DO UPDATE SET
|
|
password_hash = '{password_hash}',
|
|
role = 'admin'
|
|
""")
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.execute("DELETE FROM users WHERE login = 'admin'")
|