34 lines
956 B
Python
34 lines
956 B
Python
import datetime
|
|
|
|
from jose import jwt
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.application.users_repository import UsersRepository
|
|
from app.settings import get_auth_data
|
|
|
|
|
|
class AuthService:
|
|
def __init__(self, db: AsyncSession):
|
|
self.repository = UsersRepository(db)
|
|
|
|
async def authenticate_user(self, login: str, password: str):
|
|
user = await self.repository.get_by_login(login)
|
|
|
|
if not user:
|
|
return None
|
|
|
|
if not user.check_password(password):
|
|
return None
|
|
|
|
return user
|
|
|
|
@staticmethod
|
|
def create_access_token(data: dict) -> str:
|
|
to_encode = data.copy()
|
|
expire = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(days=30)
|
|
to_encode.update({"exp": expire})
|
|
auth_data = get_auth_data()
|
|
encode_jwt = jwt.encode(to_encode, auth_data['secret_key'], algorithm=auth_data['algorithm'])
|
|
|
|
return encode_jwt
|