File size: 2,045 Bytes
afd21fc
 
37a44c2
 
 
afd21fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4094014
 
 
 
afd21fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import streamlit as st
from auth import generate_otp, create_jwt, verify_jwt
from email_utils import send_otp_email  
from dotenv import load_dotenv
load_dotenv()

st.set_page_config(page_title="FitPlan AI Login")

# Initialize session state
if "otp" not in st.session_state:
    st.session_state.otp = None

if "authenticated" not in st.session_state:
    st.session_state.authenticated = False

if "token" not in st.session_state:
    st.session_state.token = None


st.title("πŸ” FitPlan AI - OTP Login")

# ------------------------
# STEP 1: Enter Email
# ------------------------
if not st.session_state.authenticated:

    email = st.text_input("Enter your Email")

    if st.button("Send OTP"):
        if email:
            otp = generate_otp()
            st.session_state.otp = otp
            st.session_state.email = email
            
            send_otp_email(email, otp)
            
            st.success("OTP sent to your email πŸ“§")
        else:
            st.error("Please enter email")

    # ------------------------
    # STEP 2: Verify OTP
    # ------------------------
    if st.session_state.otp:
        entered_otp = st.text_input("Enter OTP")

        if st.button("Verify OTP"):
            if entered_otp == st.session_state.otp:
                token = create_jwt(st.session_state.email)
                st.session_state.token = token
                st.session_state.authenticated = True
                st.success("Login Successful!")
                st.rerun()
            else:
                st.error("Invalid OTP")


# ------------------------
# Protected Page
# ------------------------
else:
    decoded = verify_jwt(st.session_state.token)

    if decoded:
        st.success(f"Welcome {decoded['email']} πŸŽ‰")

        st.write("You can now access FitPlan AI")

        if st.button("Logout"):
            st.session_state.authenticated = False
            st.session_state.token = None
            st.session_state.otp = None
            st.rerun()
    else:
        st.error("Session Expired")