Spaces:
Sleeping
Sleeping
Update dashboard.py
Browse files- dashboard.py +29 -3
dashboard.py
CHANGED
|
@@ -93,6 +93,28 @@ def login_user(email, password):
|
|
| 93 |
return bcrypt.checkpw(password.encode(), stored_hash.encode())
|
| 94 |
return False
|
| 95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
# --- UI ---
|
| 97 |
with gr.Blocks(theme=gr.themes.Soft(), title="VerifiAI - Deepfake Detector") as demo:
|
| 98 |
is_logged_in = gr.State(False)
|
|
@@ -114,6 +136,7 @@ with gr.Blocks(theme=gr.themes.Soft(), title="VerifiAI - Deepfake Detector") as
|
|
| 114 |
email_login = gr.Textbox(label="Email")
|
| 115 |
password_login = gr.Textbox(label="Password", type="password")
|
| 116 |
login_btn = gr.Button("Login", variant="primary")
|
|
|
|
| 117 |
with gr.Accordion("New User? Click here to Sign Up", open=False) as signup_accordion:
|
| 118 |
name_signup = gr.Textbox(label="Name")
|
| 119 |
phone_signup = gr.Textbox(label="Phone (10 digits)")
|
|
@@ -138,18 +161,21 @@ with gr.Blocks(theme=gr.themes.Soft(), title="VerifiAI - Deepfake Detector") as
|
|
| 138 |
|
| 139 |
def update_ui_on_auth_change(logged_in_status):
|
| 140 |
if logged_in_status:
|
|
|
|
| 141 |
return (
|
| 142 |
gr.update(visible=False),
|
| 143 |
gr.update(visible=True),
|
| 144 |
gr.update(selected=DETECT_TAB_NAME),
|
| 145 |
-
gr.update(value="β
Login successful!", visible=True)
|
|
|
|
| 146 |
)
|
| 147 |
else:
|
| 148 |
return (
|
| 149 |
gr.update(visible=True),
|
| 150 |
gr.update(visible=False),
|
| 151 |
gr.update(selected=LOGIN_TAB_NAME),
|
| 152 |
-
gr.update(value="", visible=False)
|
|
|
|
| 153 |
)
|
| 154 |
|
| 155 |
def handle_login(email, password):
|
|
@@ -170,7 +196,7 @@ with gr.Blocks(theme=gr.themes.Soft(), title="VerifiAI - Deepfake Detector") as
|
|
| 170 |
|
| 171 |
login_btn.click(fn=handle_login, inputs=[email_login, password_login], outputs=[is_logged_in, message_output])
|
| 172 |
logout_btn.click(fn=handle_logout, inputs=[], outputs=[is_logged_in, email_login, password_login])
|
| 173 |
-
is_logged_in.change(fn=update_ui_on_auth_change, inputs=is_logged_in, outputs=[login_tab, detect_tab, tabs, message_output])
|
| 174 |
signup_btn.click(
|
| 175 |
fn=handle_signup,
|
| 176 |
inputs=[name_signup, phone_signup, email_signup, gender_signup, password_signup],
|
|
|
|
| 93 |
return bcrypt.checkpw(password.encode(), stored_hash.encode())
|
| 94 |
return False
|
| 95 |
|
| 96 |
+
def get_user_stats():
|
| 97 |
+
url = f"{SUPABASE_URL}/rest/v1/{SUPABASE_TABLE}?select=gender"
|
| 98 |
+
r = requests.get(url, headers=headers)
|
| 99 |
+
if r.status_code != 200:
|
| 100 |
+
return "Failed to fetch user stats."
|
| 101 |
+
|
| 102 |
+
users = r.json()
|
| 103 |
+
total = len(users)
|
| 104 |
+
gender_counts = {"Male": 0, "Female": 0, "Other": 0}
|
| 105 |
+
for u in users:
|
| 106 |
+
g = u.get("gender", "Other")
|
| 107 |
+
gender_counts[g] = gender_counts.get(g, 0) + 1
|
| 108 |
+
|
| 109 |
+
stats = f"""
|
| 110 |
+
### π Dashboard
|
| 111 |
+
- π₯ Total Users: **{total}**
|
| 112 |
+
- πΉ Male: **{gender_counts['Male']}**
|
| 113 |
+
- πΊ Female: **{gender_counts['Female']}**
|
| 114 |
+
- π Other: **{gender_counts['Other']}**
|
| 115 |
+
"""
|
| 116 |
+
return stats
|
| 117 |
+
|
| 118 |
# --- UI ---
|
| 119 |
with gr.Blocks(theme=gr.themes.Soft(), title="VerifiAI - Deepfake Detector") as demo:
|
| 120 |
is_logged_in = gr.State(False)
|
|
|
|
| 136 |
email_login = gr.Textbox(label="Email")
|
| 137 |
password_login = gr.Textbox(label="Password", type="password")
|
| 138 |
login_btn = gr.Button("Login", variant="primary")
|
| 139 |
+
dashboard_stats = gr.Markdown(visible=False)
|
| 140 |
with gr.Accordion("New User? Click here to Sign Up", open=False) as signup_accordion:
|
| 141 |
name_signup = gr.Textbox(label="Name")
|
| 142 |
phone_signup = gr.Textbox(label="Phone (10 digits)")
|
|
|
|
| 161 |
|
| 162 |
def update_ui_on_auth_change(logged_in_status):
|
| 163 |
if logged_in_status:
|
| 164 |
+
stats = get_user_stats()
|
| 165 |
return (
|
| 166 |
gr.update(visible=False),
|
| 167 |
gr.update(visible=True),
|
| 168 |
gr.update(selected=DETECT_TAB_NAME),
|
| 169 |
+
gr.update(value="β
Login successful!", visible=True),
|
| 170 |
+
gr.update(value=stats, visible=True)
|
| 171 |
)
|
| 172 |
else:
|
| 173 |
return (
|
| 174 |
gr.update(visible=True),
|
| 175 |
gr.update(visible=False),
|
| 176 |
gr.update(selected=LOGIN_TAB_NAME),
|
| 177 |
+
gr.update(value="", visible=False),
|
| 178 |
+
gr.update(visible=False)
|
| 179 |
)
|
| 180 |
|
| 181 |
def handle_login(email, password):
|
|
|
|
| 196 |
|
| 197 |
login_btn.click(fn=handle_login, inputs=[email_login, password_login], outputs=[is_logged_in, message_output])
|
| 198 |
logout_btn.click(fn=handle_logout, inputs=[], outputs=[is_logged_in, email_login, password_login])
|
| 199 |
+
is_logged_in.change(fn=update_ui_on_auth_change, inputs=is_logged_in, outputs=[login_tab, detect_tab, tabs, message_output, dashboard_stats])
|
| 200 |
signup_btn.click(
|
| 201 |
fn=handle_signup,
|
| 202 |
inputs=[name_signup, phone_signup, email_signup, gender_signup, password_signup],
|