feat: first commit, auth

This commit is contained in:
2026-07-24 11:33:56 +07:00
commit 0d7944fdab
43 changed files with 1303 additions and 0 deletions

0
services/__init__.py Normal file
View File

18
services/sessions.py Normal file
View File

@@ -0,0 +1,18 @@
from core.secrets import generate_pair, hash_refresh_token
from db.models import Session
from repositories.sessions import SessionsRepository
from schemas.dto import KeyPair
from schemas.providers import ProvidersType
async def refresh_token_rotation(
sessions_repo: SessionsRepository, old_token: Session, iss: ProvidersType
) -> KeyPair:
user = old_token.user
await sessions_repo.revoke(old_token.id)
key_pair = generate_pair(user.id, iss=iss)
refresh_token_hash = hash_refresh_token(key_pair.refresh_token)
await sessions_repo.create(user.id, refresh_token_hash, iss=iss)
return key_pair

22
services/users.py Normal file
View File

@@ -0,0 +1,22 @@
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),
)