Show / app.py
nagasurendra's picture
Update app.py
8e40f0d verified
# app.py
import gradio as gr
from simple_salesforce import Salesforce
from datetime import datetime, timedelta
import random
# Salesforce Authentication
sf = Salesforce(username='diggavalli98@gmail.com', password='Sati@1020', security_token='sSSjyhInIsUohKpG8sHzty2q')
otp_data = {} # Temporary OTP storage
# Navigation state
current_page = "login"
def set_page(page):
global current_page
current_page = page
# Login Page Function
def login(email, password):
global current_page
try:
query_result = sf.query(f"SELECT Password__c FROM Customer_Login__c WHERE Email__c = '{email}'")
if not query_result['records']:
return "Error: Email not found."
stored_password = query_result['records'][0]['Password__c']
if password != stored_password:
return "Error: Invalid password."
sf.Customer_Login__c.update(query_result['records'][0]['Id'], {'Login_Status__c': 'Logged In'})
set_page("menu")
return "Login successful! Redirecting to menu..."
except Exception as e:
return f"Error: {str(e)}"
def login_ui():
return gr.Interface(
fn=login,
inputs=[gr.Textbox(label="Email"), gr.Password(label="Password")],
outputs="text",
title="Login Page"
)
# Signup Page Functions
def send_otp(email):
try:
query_result = sf.query(f"SELECT Id FROM Customer_Login__c WHERE Email__c = '{email}'")
if query_result['records']:
return "Error: Email already registered."
otp = random.randint(100000, 999999)
otp_data[email] = {
"otp": otp,
"expiration": datetime.now() + timedelta(minutes=2)
}
print(f"OTP for {email}: {otp}") # Simulated email sending
return "OTP sent successfully! Check your email."
except Exception as e:
return f"Error: {str(e)}"
def verify_otp(email, otp, name, password, phone):
try:
if email not in otp_data or otp_data[email]['expiration'] < datetime.now():
return "Error: OTP expired or invalid."
if otp_data[email]['otp'] != int(otp):
return "Error: Incorrect OTP."
if not (6 <= len(password) <= 10 and
any(c.isupper() for c in password) and
any(c.islower() for c in password) and
any(c.isdigit() for c in password) and
any(c in "!@#$%^&*" for c in password)):
return "Error: Password does not meet complexity requirements."
sf.Customer_Login__c.create({
"Name": name,
"Email__c": email,
"Password__c": password,
"Phone_Number__c": phone,
"Login_Status__c": "Logged Out"
})
del otp_data[email]
set_page("login")
return "Signup successful! Redirecting to login page..."
except Exception as e:
return f"Error: {str(e)}"
def signup_ui():
return gr.Interface(
fn=lambda email, otp, name, password, phone: (
send_otp(email) if otp == "" else verify_otp(email, otp, name, password, phone)
),
inputs=[
gr.Textbox(label="Email"),
gr.Textbox(label="OTP (Leave blank to send OTP)"),
gr.Textbox(label="Name"),
gr.Password(label="Password"),
gr.Textbox(label="Phone Number")
],
outputs="text",
title="Signup Page"
)
# Forgot Password Page Function
def forgot_password(email, otp, new_password):
global current_page
try:
query_result = sf.query(f"SELECT Id FROM Customer_Login__c WHERE Email__c = '{email}'")
if not query_result['records']:
return "Error: Email not found."
if otp == "":
otp = random.randint(100000, 999999)
otp_data[email] = {
"otp": otp,
"expiration": datetime.now() + timedelta(minutes=2)
}
print(f"OTP for {email}: {otp}")
return "OTP sent successfully! Check your email."
if email in otp_data and otp_data[email]['otp'] == int(otp) and otp_data[email]['expiration'] > datetime.now():
if not (6 <= len(new_password) <= 10 and
any(c.isupper() for c in new_password) and
any(c.islower() for c in new_password) and
any(c.isdigit() for c in new_password) and
any(c in "!@#$%^&*" for c in new_password)):
return "Error: Password does not meet complexity requirements."
sf.Customer_Login__c.update(query_result['records'][0]['Id'], {"Password__c": new_password})
del otp_data[email]
set_page("login")
return "Password updated successfully! Redirecting to login page..."
return "Error: Invalid or expired OTP."
except Exception as e:
return f"Error: {str(e)}"
def forgot_password_ui():
return gr.Interface(
fn=forgot_password,
inputs=[
gr.Textbox(label="Email"),
gr.Textbox(label="OTP (Leave blank to send OTP)"),
gr.Password(label="New Password")
],
outputs="text",
title="Forgot Password Page"
)
# Menu Page Function
def menu_page():
global current_page
return "Welcome to the Menu Page! Select your options here."
def menu_ui():
return gr.Interface(
fn=menu_page,
inputs=None,
outputs="text",
title="Menu Page"
)
# Main App Logic
def render_page():
if current_page == "login":
return login_ui()
elif current_page == "signup":
return signup_ui()
elif current_page == "forgot_password":
return forgot_password_ui()
elif current_page == "menu":
return menu_ui()
# Launch App
app = render_page()
app.launch()