File size: 2,349 Bytes
706f0dd
deca09f
 
 
d33f8ac
caa916f
 
 
 
d33f8ac
 
 
deca09f
d33f8ac
 
 
caa916f
d33f8ac
 
 
 
deca09f
d33f8ac
 
deca09f
 
 
d33f8ac
 
caa916f
d33f8ac
 
 
706f0dd
d33f8ac
 
deca09f
 
 
 
 
 
 
caa916f
d33f8ac
 
 
deca09f
 
d33f8ac
 
deca09f
d33f8ac
 
 
 
 
 
 
 
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
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()