FitplanAI / auth.py
Renukalaxmi's picture
Update auth.py
183a9fe verified
import random
import jwt
import datetime
import os
from dotenv import load_dotenv
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
# -----------------------------
# LOAD ENV VARIABLES
# -----------------------------
load_dotenv()
SECRET_KEY = os.getenv("JWT_SECRET", "fallback_secret")
SENDGRID_API_KEY = os.getenv("SENDGRID_API_KEY")
FROM_EMAIL = os.getenv("SENDGRID_FROM_EMAIL")
# -----------------------------
# GENERATE 6 DIGIT OTP
# -----------------------------
def generate_otp():
otp = str(random.randint(100000, 999999))
return otp
# -----------------------------
# CREATE JWT TOKEN
# -----------------------------
def create_jwt(email):
payload = {
"email": email,
"exp": datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1)
}
token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
return token
# -----------------------------
# VERIFY JWT TOKEN
# -----------------------------
def verify_jwt(token):
try:
decoded = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
return decoded
except jwt.ExpiredSignatureError:
print("Token expired")
return None
except jwt.InvalidTokenError:
print("Invalid token")
return None
# -----------------------------
# SEND OTP VIA SENDGRID EMAIL
# -----------------------------
def send_otp_via_sendgrid(receiver_email, otp):
message = Mail(
from_email=FROM_EMAIL,
to_emails=receiver_email,
subject="FitPlan AI OTP Verification",
html_content=f"""
<h2>Your FitPlan AI Login OTP</h2>
<p>Your verification code is:</p>
<h1>{otp}</h1>
<p>This OTP is valid for login verification.</p>
"""
)
try:
sg = SendGridAPIClient(SENDGRID_API_KEY)
response = sg.send(message)
if response.status_code == 202:
return True
else:
return False
except Exception as e:
print("SendGrid Error:", e)
return False