skill-forge/API/app/infrastructure/auth_service.py

35 lines
1.1 KiB
Python

import datetime
from typing import Optional
import jwt
from sqlalchemy.orm import Session
from app.application.users_repository import UsersRepository
from app.settings import get_auth_data
class AuthService:
def __init__(self, db: Session):
self.users_repository = UsersRepository(db)
def authenticate(self, login: str, password: str) -> Optional[dict]:
user = self.users_repository.get_by_login(login)
if user and user.check_password(password):
access_token = self.create_access_token({"user_id": user.id})
return {
"access_token": access_token,
"user_id": user.id
}
return None
@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