Files
benchpress/backend/app/services/auth.py
T
2026-10-11 14:12:10 +03:00

57 lines
1.4 KiB
Python

from __future__ import annotations
from datetime import date, datetime, timedelta
from typing import Optional
from jose import JWTError, jwt
from passlib.context import CryptContext
from sqlalchemy.orm import Session
from app.config import settings
from app.models import Profile, User
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def hash_password(password: str) -> str:
return pwd_context.hash(password)
def verify_password(password: str, password_hash: str) -> bool:
return pwd_context.verify(password, password_hash)
def create_access_token(subject: str = "user") -> str:
expire = datetime.utcnow() + timedelta(minutes=settings.access_token_expire_minutes)
return jwt.encode(
{"sub": subject, "exp": expire},
settings.secret_key,
algorithm="HS256",
)
def decode_token(token: str) -> Optional[str]:
try:
payload = jwt.decode(token, settings.secret_key, algorithms=["HS256"])
return payload.get("sub")
except JWTError:
return None
def get_or_create_profile(db: Session) -> Profile:
profile = db.query(Profile).first()
if not profile:
profile = Profile()
db.add(profile)
db.commit()
db.refresh(profile)
return profile
def has_password(db: Session) -> bool:
return db.query(User).first() is not None
def get_user(db: Session) -> Optional[User]:
return db.query(User).first()