import bcrypt import gradio as gr from simple_salesforce import Salesforce # Salesforce Connection sf = Salesforce(username='diggavalli98@gmail.com', password='Sati@1020', security_token='sSSjyhInIsUohKpG8sHzty2q') # Function to Hash Password def hash_password(password): return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8') # Function to Verify Password def verify_password(plain_password, hashed_password): return bcrypt.checkpw(plain_password.encode('utf-8'), hashed_password.encode('utf-8')) # Signup function with email validation def signup(name, email, phone, password): try: email = email.strip() # Check if the email already exists in Salesforce query = f"SELECT Id FROM Customer_Login__c WHERE Email__c = '{email}'" result = sf.query(query) if len(result['records']) > 0: # Email already exists return "Email already exists! Please use a different email." # Hash the password hashed_password = hash_password(password) # Create the new user record sf.Customer_Login__c.create({ 'Name': name.strip(), 'Email__c': email, 'Phone_Number__c': phone.strip(), 'Password__c': hashed_password # Use Password3__c field for hashed passwords }) return "Signup successful! You can now login." except Exception as e: return f"Error during signup: {str(e)}" # Login function def login(email, password): try: email = email.strip() password = password.strip() # Query Salesforce for user details query = f"SELECT Name, Email__c, Phone_Number__c, Password__c FROM Customer_Login__c WHERE Email__c = '{email}'" result = sf.query(query) if len(result['records']) == 0: return "Invalid email or password.", None, None, None user = result['records'][0] stored_password = user['Password__c'] print(f"Entered Email: {email}") print(f"Entered Password: {password}") print(f"Stored Hashed Password: {stored_password}") # Verify the entered password with the stored hash if verify_password(password, stored_password): print("Password matched!") return "Login successful!", user['Name'], user['Email__c'], user['Phone_Number__c'] else: print("Password did not match!") return "Invalid email or password.", None, None, None except Exception as e: print(f"Error during login: {str(e)}") return f"Error during login: {str(e)}", None, None, None # Gradio Signup Page def signup_page(name, email, phone, password): response = signup(name, email, phone, password) return response signup_interface = gr.Interface( fn=signup_page, inputs=[ gr.Textbox(label="Name"), gr.Textbox(label="Email"), gr.Textbox(label="Phone"), gr.Textbox(label="Password", type="password"), ], outputs=gr.Textbox(label="Signup Status"), title="Signup Page" ) # Gradio Login Page def login_page(email, password): login_status, name, email, phone = login(email, password) if login_status == "Login successful!": return login_status, name, email, phone else: return login_status, "Error", "Error", "Error" login_interface = gr.Interface( fn=login_page, inputs=[ gr.Textbox(label="Email"), gr.Textbox(label="Password", type="password"), ], outputs=[ gr.Textbox(label="Login Status"), gr.Textbox(label="Name"), gr.Textbox(label="Email"), gr.Textbox(label="Phone"), ], title="Login Page" ) # Combine Pages in Gradio with gr.Blocks() as app: with gr.Tab("Signup"): signup_interface.render() with gr.Tab("Login"): login_interface.render() # Launch Gradio App app.launch()