broadfield-dev's picture
Update app.py
deca09f verified
import gradio as gr
from keylock_component import KeylockDecoderComponent, AppServerLogic
shared_server_logic = AppServerLogic()
MOCK_CREDENTIALS = {
"demo-user": {"password": "password123"},
"admin-user": {"password": "adminpass"}
}
with gr.Blocks(theme=gr.themes.Soft(primary_hue="sky")) as demo:
gr.Markdown("# πŸ”‘ KeyLock Application Login")
with gr.Row():
with gr.Column(scale=2):
gr.Markdown("### 1. Login with Credentials")
gr.Markdown("Enter credentials manually, or use a KeyLock image to auto-fill them.")
username_input = gr.Textbox(label="Username", interactive=True)
password_input = gr.Textbox(label="Password", type="password", interactive=True)
login_button = gr.Button("Login", variant="primary")
login_status = gr.Markdown()
with gr.Column(scale=3):
gr.Markdown("### 2. Use a KeyLock Image to Auto-Fill")
keylock_decoder = KeylockDecoderComponent(
server_logic=shared_server_logic
)
def handle_login(username, password):
user_data = MOCK_CREDENTIALS.get(username)
if user_data and user_data["password"] == password:
gr.Info(f"Login Successful! Welcome, {username}.")
return f"<p style='color:green;font-weight:bold'>βœ… Login successful for {username}.</p>"
else:
gr.Error("Login Failed: Invalid username or password.")
return f"<p style='color:red;font-weight:bold'>❌ Login failed.</p>"
def autofill_from_key(decoder_result):
if decoder_result and decoder_result.get("status") == "Success":
payload = decoder_result.get("payload", {})
user = payload.get("USER", "")
user_data = MOCK_CREDENTIALS.get(user)
password = user_data.get("password", "") if user_data else ""
return gr.update(value=user), gr.update(value=password)
return gr.update(), gr.update()
keylock_decoder.change(
fn=autofill_from_key,
inputs=[keylock_decoder],
outputs=[username_input, password_input]
)
login_button.click(
fn=handle_login,
inputs=[username_input, password_input],
outputs=[login_status]
)
if __name__ == "__main__":
demo.launch()