Mangesh223's picture
Update app.py
3c29f34 verified
import os
import json
import bcrypt
import gradio as gr
from flask_jwt_extended import (
JWTManager, create_access_token,
jwt_required, get_jwt_identity
)
# Gradio app will handle everything
USERS_FILE = "users.json"
def load_users():
try:
with open(USERS_FILE, "r") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return {}
def save_users(users):
with open(USERS_FILE, "w") as f:
json.dump(users, f)
# JWT setup (simplified for Gradio)
JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY", "super-secret-key")
def register_user(username, password):
if not username or not password:
return "Username and password required"
users = load_users()
if username in users:
return "Username already exists"
hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
users[username] = {"password": hashed}
save_users(users)
return "User registered successfully"
def login_user(username, password):
users = load_users()
user = users.get(username)
if not user or not bcrypt.checkpw(password.encode(), user["password"].encode()):
return "Invalid credentials", None
access_token = create_access_token(identity=username, secret_key=JWT_SECRET_KEY)
return "Login successful", access_token
with gr.Blocks() as demo:
gr.Markdown("# ๐Ÿ” Secure Auth System")
with gr.Tab("Register"):
reg_username = gr.Textbox(label="Username")
reg_password = gr.Textbox(label="Password", type="password")
reg_output = gr.Textbox(label="Output")
reg_button = gr.Button("Register")
def register(username, password):
return register_user(username, password)
reg_button.click(
register,
inputs=[reg_username, reg_password],
outputs=reg_output
)
with gr.Tab("Login"):
login_username = gr.Textbox(label="Username")
login_password = gr.Textbox(label="Password", type="password")
login_output = gr.Textbox(label="Output")
login_button = gr.Button("Login")
def login(username, password):
message, token = login_user(username, password)
if token:
return f"{message}! Token: {token[:15]}... (truncated)"
return message
login_button.click(
login,
inputs=[login_username, login_password],
outputs=login_output
)
demo.launch()