admin / Apex
publicBid Management and Orchestration Tool with AI Capability
Apex / Synapse-Apexv2 / backend / app / core / security.py
1198 B · main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | from datetime import datetime, timedelta, timezone import jwt from passlib.context import CryptContext from app.core.config import settings pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto", bcrypt__rounds=12) def hash_password(password: str) -> str: return pwd_context.hash(password) def verify_password(plain: str, hashed: str) -> bool: return pwd_context.verify(plain, hashed) def _make_token(sub: str, kind: str, expires: timedelta, extra: dict | None = None) -> str: now = datetime.now(timezone.utc) payload = {"sub": sub, "type": kind, "iat": now, "exp": now + expires} if extra: payload.update(extra) return jwt.encode(payload, settings.jwt_secret, algorithm=settings.jwt_algorithm) def create_access_token(user_id: int) -> str: return _make_token(str(user_id), "access", timedelta(minutes=settings.access_token_minutes)) def create_refresh_token(user_id: int, jti: str) -> str: return _make_token( str(user_id), "refresh", timedelta(days=settings.refresh_token_days), {"jti": jti} ) def decode_token(token: str) -> dict: return jwt.decode(token, settings.jwt_secret, algorithms=[settings.jwt_algorithm]) |