srustik123's picture
Update auth.py
bf5d76c verified
import random
import jwt
import datetime
import os
from dotenv import load_dotenv
from werkzeug.security import generate_password_hash, check_password_hash
load_dotenv()
# Securely fetch secret key from .env
SECRET_KEY = os.getenv("JWT_SECRET", "default_secret_for_dev")
def generate_otp():
"""Generates a 6-digit random OTP."""
return str(random.randint(100000, 999999))
def create_jwt(email, name=None):
"""Creates a JWT token valid for 1 hour."""
payload = {
"email": email,
"name": name,
# Use timezone-aware UTC for expiration
"exp": datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1)
}
token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
return token
def verify_jwt(token):
"""Decodes and verifies the JWT token."""
try:
decoded = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
return decoded
except Exception:
# Returns None if token is expired or invalid
return None
def hash_password(password):
"""Hash a password using werkzeug.security."""
return generate_password_hash(password)
def verify_password(password, hashed):
"""Verify a password against its hash."""
return check_password_hash(hashed, password)