Neda/Back/domains/auth/service.py

60 lines
1.1 KiB
Python

from sqlalchemy.ext.asyncio import AsyncSession
from core.security import verify_password
from core.jwt import create_access_token, create_refresh_token
from domains.users.repo import get_user_by_username
async def authenticate_user(
db: AsyncSession,
username: str,
secret: str
):
user = await get_user_by_username(db, username)
if not user:
return None
if not user.is_active:
return None
valid = verify_password(secret, user.secret_hash)
if not valid:
return None
return user
async def login_user(
db: AsyncSession,
username: str,
secret: str
):
user = await authenticate_user(
db,
username,
secret
)
if not user:
return None
token = create_access_token(
subject=str(user.id),
token_version=user.token_version
)
refresh_token = create_refresh_token(
subject=str(user.id),
token_version=user.token_version
)
return {
"access_token": token,
"refresh_token": refresh_token,
"token_type": "bearer"
}