add login endpoint

This commit is contained in:
IluaAir
2025-09-21 12:08:04 +03:00
parent 8620e9b5a1
commit cd51902313
8 changed files with 41 additions and 21 deletions

View File

@@ -1,7 +1,6 @@
import os
import secrets
from datetime import datetime, timedelta, timezone
import bcrypt
import jwt
from passlib.context import CryptContext
@@ -38,9 +37,10 @@ class AuthManager:
@classmethod
def create_refresh_token(cls) -> str:
random_bytes = os.urandom(32)
data = b'settings.refresh_token.secret_key' + random_bytes
token_hash = bcrypt.hashpw(data, bcrypt.gensalt(rounds=12)).decode()
# random_bytes = os.urandom(32)
# data = settings.refresh_token.secret_key.encode() + random_bytes
# token_hash = bcrypt.hashpw(data, bcrypt.gensalt(rounds=12)).decode()
token_hash = secrets.token_urlsafe(32)
return token_hash
@classmethod

View File

@@ -2,6 +2,7 @@ from typing import Any
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from src.repository.auth import AuthRepo
from src.repository.tasks import TasksRepo
from src.repository.users import UsersRepo
@@ -14,6 +15,7 @@ class DBManager:
self.session: AsyncSession = self.session_factory()
self.user = UsersRepo(self.session)
self.task = TasksRepo(self.session)
self.auth = AuthRepo(self.session)
return self
async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:

View File

@@ -3,6 +3,7 @@ from typing import TYPE_CHECKING, Any, Protocol
from sqlalchemy.ext.asyncio import AsyncSession
if TYPE_CHECKING:
from src.repository.auth import AuthRepo
from src.repository.tasks import TasksRepo
from src.repository.users import UsersRepo
@@ -15,6 +16,7 @@ class IUOWDB(Protocol):
session: AsyncSession
user: 'UsersRepo'
task: 'TasksRepo'
auth: 'AuthRepo'
async def __aenter__(self) -> "IUOWDB": ...

View File

@@ -40,18 +40,10 @@ class AccessToken(BaseSettings):
token_type: str = "bearer" # noqa: S105
class RefreshToken(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env", env_file_encoding="utf-8", env_prefix="REFRESH_TOKEN_"
)
secret_key: str
class Settings(BaseSettings):
api: ApiPrefix = ApiPrefix()
db: DbSettings = DbSettings()
access_token: AccessToken = AccessToken() # type: ignore
refresh_token: RefreshToken = RefreshToken() # type: ignore
settings = Settings()