fix: makefile:install, auth token logic
This commit is contained in:
parent
29027bf9f8
commit
8271737ce2
2
Makefile
2
Makefile
@ -44,7 +44,7 @@ venv-api:
|
|||||||
install:
|
install:
|
||||||
make migrate head && \
|
make migrate head && \
|
||||||
cd api && \
|
cd api && \
|
||||||
poetry run python3 api/utils/init.py
|
poetry run python3 -m api.utils.init
|
||||||
|
|
||||||
%::
|
%::
|
||||||
echo $(MESSAGE)
|
echo $(MESSAGE)
|
||||||
|
138
api/api/db/alembic/versions/f1b06efacec0_.py
Normal file
138
api/api/db/alembic/versions/f1b06efacec0_.py
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
"""empty message
|
||||||
|
|
||||||
|
Revision ID: f1b06efacec0
|
||||||
|
Revises:
|
||||||
|
Create Date: 2025-04-23 15:09:14.833213
|
||||||
|
|
||||||
|
"""
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects import mysql
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = 'f1b06efacec0'
|
||||||
|
down_revision: Union[str, None] = None
|
||||||
|
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! ###
|
||||||
|
op.create_table('account',
|
||||||
|
sa.Column('id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), autoincrement=True, nullable=False),
|
||||||
|
sa.Column('name', sa.String(length=100), nullable=False),
|
||||||
|
sa.Column('login', sa.String(length=100), nullable=False),
|
||||||
|
sa.Column('email', sa.String(length=100), nullable=True),
|
||||||
|
sa.Column('bind_tenant_id', sa.String(length=40), nullable=True),
|
||||||
|
sa.Column('role', sa.Enum('OWNER', 'ADMIN', 'EDITOR', 'VIEWER', name='accountrole'), nullable=False),
|
||||||
|
sa.Column('meta', sa.JSON(), nullable=True),
|
||||||
|
sa.Column('creator_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=True),
|
||||||
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
|
||||||
|
sa.Column('status', sa.Enum('ACTIVE', 'DISABLED', 'BLOCKED', 'DELETED', name='accountstatus'), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(['creator_id'], ['account.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('id')
|
||||||
|
)
|
||||||
|
op.create_index('idx_login', 'account', ['login'], unique=False)
|
||||||
|
op.create_index('idx_name', 'account', ['name'], unique=False)
|
||||||
|
op.create_table('account_keyring',
|
||||||
|
sa.Column('owner_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('key_type', sa.Enum('PASSWORD', 'ACCESS_TOKEN', 'REFRESH_TOKEN', 'API_KEY', name='keytype'), nullable=False),
|
||||||
|
sa.Column('key_id', sa.String(length=40), nullable=False),
|
||||||
|
sa.Column('key_value', sa.String(length=255), nullable=False),
|
||||||
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
|
||||||
|
sa.Column('expiry', sa.DateTime(timezone=True), nullable=True),
|
||||||
|
sa.Column('status', sa.Enum('ACTIVE', 'EXPIRED', 'DELETED', name='keystatus'), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(['owner_id'], ['account.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('owner_id', 'key_type', 'key_id')
|
||||||
|
)
|
||||||
|
op.create_table('list_events',
|
||||||
|
sa.Column('id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), autoincrement=True, nullable=False),
|
||||||
|
sa.Column('name', sa.String(length=40, collation='latin1_bin'), nullable=False),
|
||||||
|
sa.Column('title', sa.String(length=64), nullable=False),
|
||||||
|
sa.Column('creator_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
|
||||||
|
sa.Column('schema', sa.JSON(), nullable=True),
|
||||||
|
sa.Column('state', sa.Enum('AUTO', 'DESCRIPTED', name='eventstate'), nullable=False),
|
||||||
|
sa.Column('status', sa.Enum('ACTIVE', 'DISABLED', 'DELETED', name='eventstatus'), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(['creator_id'], ['account.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('id'),
|
||||||
|
sa.UniqueConstraint('name')
|
||||||
|
)
|
||||||
|
op.create_table('process_schema',
|
||||||
|
sa.Column('id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), autoincrement=True, nullable=False),
|
||||||
|
sa.Column('title', sa.String(length=100), nullable=False),
|
||||||
|
sa.Column('description', sa.Text(), nullable=False),
|
||||||
|
sa.Column('owner_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('creator_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
|
||||||
|
sa.Column('settings', sa.JSON(), nullable=True),
|
||||||
|
sa.Column('status', sa.Enum('ACTIVE', 'STOPPING', 'STOPPED', 'DELETED', name='processstatus'), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(['creator_id'], ['account.id'], ),
|
||||||
|
sa.ForeignKeyConstraint(['owner_id'], ['account.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('id')
|
||||||
|
)
|
||||||
|
op.create_index('idx_owner_id', 'process_schema', ['owner_id'], unique=False)
|
||||||
|
op.create_table('process_version_archive',
|
||||||
|
sa.Column('id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), autoincrement=True, nullable=False),
|
||||||
|
sa.Column('ps_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('version', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('snapshot', sa.JSON(), nullable=True),
|
||||||
|
sa.Column('owner_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
|
||||||
|
sa.Column('is_last', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(['owner_id'], ['account.id'], ),
|
||||||
|
sa.ForeignKeyConstraint(['ps_id'], ['process_schema.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('id', 'version')
|
||||||
|
)
|
||||||
|
op.create_table('ps_node',
|
||||||
|
sa.Column('id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), autoincrement=True, nullable=False),
|
||||||
|
sa.Column('ps_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('node_type', sa.Enum('TYPE1', 'TYPE2', 'TYPE3', name='nodetype'), nullable=False),
|
||||||
|
sa.Column('settings', sa.JSON(), nullable=True),
|
||||||
|
sa.Column('creator_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
|
||||||
|
sa.Column('status', sa.Enum('ACTIVE', 'DISABLED', 'DELETED', name='nodestatus'), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(['creator_id'], ['account.id'], ),
|
||||||
|
sa.ForeignKeyConstraint(['ps_id'], ['process_schema.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('id')
|
||||||
|
)
|
||||||
|
op.create_index('idx_ps_id', 'ps_node', ['ps_id'], unique=False)
|
||||||
|
op.create_table('node_link',
|
||||||
|
sa.Column('id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), autoincrement=True, nullable=False),
|
||||||
|
sa.Column('link_name', sa.String(length=20), nullable=False),
|
||||||
|
sa.Column('node_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('next_node_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('settings', sa.JSON(), nullable=True),
|
||||||
|
sa.Column('creator_id', sa.Integer().with_variant(mysql.INTEGER(unsigned=True), 'mysql'), nullable=False),
|
||||||
|
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True),
|
||||||
|
sa.Column('status', sa.Enum('ACTIVE', 'STOPPING', 'STOPPED', 'DELETED', name='nodelinkstatus'), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(['creator_id'], ['account.id'], ),
|
||||||
|
sa.ForeignKeyConstraint(['next_node_id'], ['ps_node.id'], ),
|
||||||
|
sa.ForeignKeyConstraint(['node_id'], ['ps_node.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('id')
|
||||||
|
)
|
||||||
|
op.create_index('idx_next_node_id', 'node_link', ['next_node_id'], unique=False)
|
||||||
|
op.create_index('idx_node_id', 'node_link', ['node_id'], unique=False)
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
"""Downgrade schema."""
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.drop_index('idx_node_id', table_name='node_link')
|
||||||
|
op.drop_index('idx_next_node_id', table_name='node_link')
|
||||||
|
op.drop_table('node_link')
|
||||||
|
op.drop_index('idx_ps_id', table_name='ps_node')
|
||||||
|
op.drop_table('ps_node')
|
||||||
|
op.drop_table('process_version_archive')
|
||||||
|
op.drop_index('idx_owner_id', table_name='process_schema')
|
||||||
|
op.drop_table('process_schema')
|
||||||
|
op.drop_table('list_events')
|
||||||
|
op.drop_table('account_keyring')
|
||||||
|
op.drop_index('idx_name', table_name='account')
|
||||||
|
op.drop_index('idx_login', table_name='account')
|
||||||
|
op.drop_table('account')
|
||||||
|
# ### end Alembic commands ###
|
@ -26,6 +26,8 @@ from api.services.auth import authenticate_user
|
|||||||
|
|
||||||
from api.db.logic.auth import add_new_refresh_token,upgrade_old_refresh_token
|
from api.db.logic.auth import add_new_refresh_token,upgrade_old_refresh_token
|
||||||
|
|
||||||
|
from api.db.logic.account import get_user_login
|
||||||
|
|
||||||
from api.schemas.endpoints.auth import Auth
|
from api.schemas.endpoints.auth import Auth
|
||||||
|
|
||||||
api_router = APIRouter(
|
api_router = APIRouter(
|
||||||
@ -91,7 +93,6 @@ async def login_for_access_token(
|
|||||||
|
|
||||||
refresh_token_expires_time = datetime.now(timezone.utc) + refresh_token_expires
|
refresh_token_expires_time = datetime.now(timezone.utc) + refresh_token_expires
|
||||||
|
|
||||||
await upgrade_old_refresh_token(connection,user)
|
|
||||||
|
|
||||||
await add_new_refresh_token(connection,refresh_token,refresh_token_expires_time,user)
|
await add_new_refresh_token(connection,refresh_token,refresh_token_expires_time,user)
|
||||||
|
|
||||||
@ -107,8 +108,9 @@ async def login_for_access_token(
|
|||||||
|
|
||||||
|
|
||||||
@api_router.post("/refresh")
|
@api_router.post("/refresh")
|
||||||
def refresh(
|
async def refresh(
|
||||||
request: Request,
|
request: Request,
|
||||||
|
connection: AsyncConnection = Depends(get_connection_dep),
|
||||||
Authorize: AuthJWT = Depends()):
|
Authorize: AuthJWT = Depends()):
|
||||||
"""Обновляет access токен."""
|
"""Обновляет access токен."""
|
||||||
|
|
||||||
@ -122,22 +124,27 @@ def refresh(
|
|||||||
try:
|
try:
|
||||||
|
|
||||||
Authorize.jwt_refresh_token_required()
|
Authorize.jwt_refresh_token_required()
|
||||||
|
current_user = Authorize.get_jwt_subject()
|
||||||
|
print(current_user)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
||||||
|
await upgrade_old_refresh_token(connection,current_user)
|
||||||
|
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
detail="Invalid refresh token",
|
detail="Invalid refresh token",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
current_user = Authorize.get_jwt_subject()
|
|
||||||
|
|
||||||
access_token_expires = timedelta(minutes=get_settings().ACCESS_TOKEN_EXPIRE_MINUTES)
|
access_token_expires = timedelta(minutes=get_settings().ACCESS_TOKEN_EXPIRE_MINUTES)
|
||||||
|
|
||||||
new_access_token = Authorize.create_access_token(
|
new_access_token = Authorize.create_access_token(
|
||||||
subject=current_user, expires_time=access_token_expires
|
subject=current_user, expires_time=access_token_expires
|
||||||
)
|
)
|
||||||
|
|
||||||
Authorize.set_access_cookies(new_access_token)
|
return {
|
||||||
|
"access_token": new_access_token,
|
||||||
return {"msg": "The token has been refresh"}
|
# "access_token_expires": access_token_expires_time,
|
||||||
|
# "refresh_token": refresh_token,
|
||||||
|
# "refresh_token_expires": refresh_token_expires_time
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user