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 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) return UserLogin( access_token=key_pair.access_token, refresh_token=key_pair.refresh_token, user=UserInfo(username=user.username, telegram_id=user.telegram_id), )