v1.4.0: fix #43, #31, #29, #49, #33 + shared templating

This commit is contained in:
2026-05-20 20:08:25 +03:00
parent ca4d00c895
commit 64991f0228
63 changed files with 5005 additions and 45 deletions
+3 -5
View File
@@ -1,23 +1,21 @@
import time
import secrets
import bcrypt
from datetime import datetime
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, func
from passlib.context import CryptContext
from app.models.models import User, LoginAttempt, AuditLog
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
BRUTE_FORCE_WINDOW = 180
BRUTE_FORCE_MAX_ATTEMPTS = 3
def hash_password(password: str) -> str:
return pwd_context.hash(password)
return bcrypt.hashpw(password.encode()[:72], bcrypt.gensalt()).decode()
def verify_password(password: str, hashed: str) -> bool:
return pwd_context.verify(password, hashed)
return bcrypt.checkpw(password.encode()[:72], hashed.encode())
def generate_csrf_token() -> str: