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, )