38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
from core.secrets import generate_pair, hash_refresh_token
|
|
from db.models.users import User
|
|
from repositories.sessions import SessionsRepository
|
|
from schemas.login import UserLogin
|
|
from schemas.providers import ProvidersType
|
|
from schemas.user import SubscriptionData, UserInfo
|
|
|
|
|
|
async def authorize_user(
|
|
sessions_repo: SessionsRepository, user: User, iss: ProvidersType
|
|
) -> UserLogin:
|
|
key_pair = generate_pair(user.id, iss)
|
|
|
|
refresh_token_hash = hash_refresh_token(key_pair.refresh_token)
|
|
|
|
await sessions_repo.create(user_id=user.id, refresh_token_hash=refresh_token_hash, iss=iss)
|
|
|
|
sub = (
|
|
SubscriptionData(
|
|
devices=user.subscription.devices,
|
|
expires_at=user.subscription.expires_at,
|
|
addon_ids=[a.id for a in user.subscription.addons],
|
|
)
|
|
if user.subscription
|
|
else None
|
|
)
|
|
return UserLogin(
|
|
access_token=key_pair.access_token,
|
|
refresh_token=key_pair.refresh_token,
|
|
user=UserInfo(
|
|
username=user.username,
|
|
telegram_id=user.telegram_id,
|
|
referal_code=user.referal_code,
|
|
subscription=sub,
|
|
),
|
|
expires_at=key_pair.expires_at,
|
|
)
|