From e44696ce044d66ac99483c34586ad45cc527902d Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Sun, 26 Oct 2025 22:52:07 +0300 Subject: [PATCH] wip --- api/auth.py | 11 +++++++++-- db/connection.py | 2 +- db/repositories/user_repository.py | 21 +++------------------ model/user.py | 11 ----------- utils/token.py | 14 ++++++++++++-- 5 files changed, 25 insertions(+), 34 deletions(-) diff --git a/api/auth.py b/api/auth.py index 0c357e8..b62c6e5 100644 --- a/api/auth.py +++ b/api/auth.py @@ -1,5 +1,7 @@ from flask import Blueprint, request, jsonify from model.user import User +from db.repositories.user_repository import UserRepository # FIXME: authenticate_user as get_user +from utils.token import generateKey as getToken auth = Blueprint("auth", __name__) @@ -21,8 +23,13 @@ def login(): if len(password.strip()) < 8: return "Password is too short", 400 - user = User(email, password) - return jsonify(user.toJson()) + user = UserRepository().authenticate_user(email, password) + if not user: + return "Wrong credentials", 400 + + token = getToken(user) + + return jsonify({'token': token, 'user': {'id': user.id, 'name': user.name, 'role': user.role}}) else: return "Request is not a json", 400 diff --git a/db/connection.py b/db/connection.py index f5d1825..5beb761 100644 --- a/db/connection.py +++ b/db/connection.py @@ -9,7 +9,7 @@ from utils.loadDotEnv import initializeENV initializeENV() def PSQLConnect(): - conn = psycopg2.connect(os.getenv('POSTDRESS_CONNECTION')) + conn = psycopg2.connect(os.getenv('POSTGRES_URL')) return conn def PSQLCursor(conn): diff --git a/db/repositories/user_repository.py b/db/repositories/user_repository.py index 0563d1e..a5c88f2 100644 --- a/db/repositories/user_repository.py +++ b/db/repositories/user_repository.py @@ -166,6 +166,9 @@ class UserRepository: return False def authenticate_user(self, email: str, password_hash: str) -> Optional[User]: + if not self.user_exists(email): + return + try: with get_connection() as conn: with conn.cursor() as cur: @@ -183,24 +186,6 @@ class UserRepository: logger.error(f"Ошибка аутентификации пользователя {email}: {e}") return None - def is_valid_authenticate(self, email: str, password_hash: str) -> bool: - try: - with get_connection() as conn: - with conn.cursor() as cur: - cur.execute(""" - SELECT 1 FROM users - WHERE email = %s AND password_hash = %s - """, (email, password_hash)) - is_valid = cur.fetchone() is not None - if is_valid: - logger.debug(f"Валидные учетные данные для пользователя {email}") - else: - logger.warning(f"Невалидные учетные данные для пользователя {email}") - return is_valid - except Exception as e: - logger.error(f"Ошибка проверки учетных данных пользователя {email}: {e}") - return False - def user_exists(self, email: str) -> bool: try: with get_connection() as conn: diff --git a/model/user.py b/model/user.py index d98c9c7..e9ea4da 100644 --- a/model/user.py +++ b/model/user.py @@ -1,6 +1,5 @@ from dataclasses import dataclass from datetime import datetime -from utils.token import generateKey @dataclass @@ -11,13 +10,3 @@ class User: name: str role: str created_at: datetime - - def __init__(self, email: str, passwd: str): - #us = getUsModel() #возвращает словарь - self.id = 1#us['id'] - self.name = 'Bob'#us['name'] - self.role = 'Backend'#us['role'] - self.token = generateKey(email, passwd) - - def toJson(self): - return {"user": {"id": self.id, "name": self.name, "role": self.role}, "token": self.token} diff --git a/utils/token.py b/utils/token.py index d20cea4..d14e602 100644 --- a/utils/token.py +++ b/utils/token.py @@ -1,8 +1,18 @@ import jwt import os from time import time +from model.user import User -def generateKey(email, passwd): +def generateKey(user: User) -> dict: key = os.getenv('KEY') - encoded = jwt.encode({email: passwd, 'iat': time()}, key, algorithm="HS256") + encoded = jwt.encode( + { + 'id': user.id, + 'name': user.name, + 'role': user.role, + 'iat': time() + }, + key, + algorithm="HS256" + ) return encoded