initial commit

This commit is contained in:
parovin committed 2026-10-11 14:12:10 +03:00
commit 39fdd43d8e
127 files changed
+13919

No files matched your search

+56
View File
@@ -0,0 +1,56 @@
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()