|
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() |