Spaces:
Running
Running
File size: 1,353 Bytes
ade0290 d576ad8 ade0290 d576ad8 ade0290 |
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 39 40 41 42 43 |
import os
from passlib.context import CryptContext
from itsdangerous import URLSafeTimedSerializer, SignatureExpired, BadSignature
from dotenv import load_dotenv
from typing import Optional
from . import crud, models
load_dotenv()
SECRET_KEY = os.getenv("SECRET_KEY", "super-secret")
serializer = URLSafeTimedSerializer(SECRET_KEY)
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def verify_password(plain_password: str, hashed_password: str) -> bool:
return pwd_context.verify(plain_password, hashed_password)
def get_password_hash(password: str) -> str:
return pwd_context.hash(password)
def create_session_token(user_id: int) -> str:
return serializer.dumps(user_id)
# Session Token verification
async def get_user_id_from_token(token: str) -> Optional[int]:
if not token:
return None
try:
user_id = serializer.loads(token, max_age=86400)
return int(user_id)
except (SignatureExpired, BadSignature, ValueError):
return None
# Function to get current user from token
async def get_current_user_from_token(token: str) -> Optional[models.User]:
user_id = await get_user_id_from_token(token)
if user_id is None:
return None
user = await crud.get_user_by_id(user_id)
if user:
return models.User(id=user.id, email=user.email)
return None |