Mangesh223 commited on
Commit
cc2f721
·
verified ·
1 Parent(s): 0c27a92

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -51
app.py CHANGED
@@ -1,19 +1,20 @@
 
 
 
 
1
  import gradio as gr
2
- from flask import Flask, jsonify, request
3
  from flask_jwt_extended import (
4
- JWTManager, create_access_token,
5
  jwt_required, get_jwt_identity
6
  )
7
- from passlib.hash import pbkdf2_sha256
8
- import json
9
- import os
10
 
11
- # Initialize Flask
12
  flask_app = Flask(__name__)
13
  flask_app.config["JWT_SECRET_KEY"] = os.getenv("JWT_SECRET_KEY", "super-secret-key")
14
  jwt = JWTManager(flask_app)
15
 
16
- # Simple JSON-based user storage
17
  USERS_FILE = "users.json"
18
 
19
  def load_users():
@@ -27,40 +28,43 @@ def save_users(users):
27
  with open(USERS_FILE, "w") as f:
28
  json.dump(users, f)
29
 
30
- # Flask API Routes
 
 
 
31
  @flask_app.route("/register", methods=["POST"])
32
  def register():
33
  data = request.get_json()
34
  username = data.get("username")
35
  password = data.get("password")
36
-
37
- users = load_users()
38
-
39
  if not username or not password:
40
  return jsonify({"error": "Username and password required"}), 400
41
-
 
42
  if username in users:
43
  return jsonify({"error": "Username already exists"}), 400
44
-
45
- users[username] = {"password": pbkdf2_sha256.hash(password)}
 
46
  save_users(users)
47
-
48
- return jsonify({"message": "User created successfully"}), 201
49
 
50
  @flask_app.route("/login", methods=["POST"])
51
  def login():
52
  data = request.get_json()
53
  username = data.get("username")
54
  password = data.get("password")
55
-
56
  users = load_users()
57
  user = users.get(username)
58
-
59
- if not user or not pbkdf2_sha256.verify(password, user["password"]):
60
  return jsonify({"error": "Invalid credentials"}), 401
61
-
62
  access_token = create_access_token(identity=username)
63
- return jsonify({"access_token": access_token, "username": username})
64
 
65
  @flask_app.route("/protected", methods=["GET"])
66
  @jwt_required()
@@ -68,52 +72,63 @@ def protected():
68
  current_user = get_jwt_identity()
69
  return jsonify(logged_in_as=current_user), 200
70
 
71
- # Gradio Interface
 
 
 
 
 
 
72
  def register_interface(username, password):
73
- response = requests.post(
74
- "http://localhost:7860/register",
75
- json={"username": username, "password": password}
76
- )
77
- return response.json().get("message", response.json().get("error", "Unknown error"))
 
 
 
78
 
79
  def login_interface(username, password):
80
- response = requests.post(
81
- "http://localhost:7860/login",
82
- json={"username": username, "password": password}
83
- )
84
- if response.status_code == 200:
85
- token = response.json().get("access_token")
86
- return f"Login successful! Token: {token[:15]}... (truncated)"
87
- return response.json().get("error", "Login failed")
 
 
 
88
 
89
  with gr.Blocks() as demo:
90
- gr.Markdown("# Secure Authentication System")
91
 
92
  with gr.Tab("Register"):
93
  reg_username = gr.Textbox(label="Username")
94
  reg_password = gr.Textbox(label="Password", type="password")
95
  reg_output = gr.Textbox(label="Output")
96
  reg_button = gr.Button("Register")
97
-
 
 
 
 
 
98
  with gr.Tab("Login"):
99
  login_username = gr.Textbox(label="Username")
100
  login_password = gr.Textbox(label="Password", type="password")
101
  login_output = gr.Textbox(label="Output")
102
  login_button = gr.Button("Login")
103
-
104
- reg_button.click(
105
- register_interface,
106
- inputs=[reg_username, reg_password],
107
- outputs=reg_output
108
- )
109
- login_button.click(
110
- login_interface,
111
- inputs=[login_username, login_password],
112
- outputs=login_output
113
- )
114
-
115
- # Combined app for HuggingFace Spaces
116
  app = gr.mount_gradio_app(flask_app, demo, path="/")
117
 
118
  if __name__ == "__main__":
119
- app.run()
 
1
+ import os
2
+ import json
3
+ import requests
4
+ import bcrypt
5
  import gradio as gr
6
+ from flask import Flask, request, jsonify
7
  from flask_jwt_extended import (
8
+ JWTManager, create_access_token,
9
  jwt_required, get_jwt_identity
10
  )
 
 
 
11
 
12
+ # Flask setup
13
  flask_app = Flask(__name__)
14
  flask_app.config["JWT_SECRET_KEY"] = os.getenv("JWT_SECRET_KEY", "super-secret-key")
15
  jwt = JWTManager(flask_app)
16
 
17
+ # File-based user storage
18
  USERS_FILE = "users.json"
19
 
20
  def load_users():
 
28
  with open(USERS_FILE, "w") as f:
29
  json.dump(users, f)
30
 
31
+ # ============================
32
+ # Flask API routes
33
+ # ============================
34
+
35
  @flask_app.route("/register", methods=["POST"])
36
  def register():
37
  data = request.get_json()
38
  username = data.get("username")
39
  password = data.get("password")
40
+
 
 
41
  if not username or not password:
42
  return jsonify({"error": "Username and password required"}), 400
43
+
44
+ users = load_users()
45
  if username in users:
46
  return jsonify({"error": "Username already exists"}), 400
47
+
48
+ hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
49
+ users[username] = {"password": hashed}
50
  save_users(users)
51
+
52
+ return jsonify({"message": "User registered successfully"}), 201
53
 
54
  @flask_app.route("/login", methods=["POST"])
55
  def login():
56
  data = request.get_json()
57
  username = data.get("username")
58
  password = data.get("password")
59
+
60
  users = load_users()
61
  user = users.get(username)
62
+
63
+ if not user or not bcrypt.checkpw(password.encode(), user["password"].encode()):
64
  return jsonify({"error": "Invalid credentials"}), 401
65
+
66
  access_token = create_access_token(identity=username)
67
+ return jsonify({"access_token": access_token, "username": username}), 200
68
 
69
  @flask_app.route("/protected", methods=["GET"])
70
  @jwt_required()
 
72
  current_user = get_jwt_identity()
73
  return jsonify(logged_in_as=current_user), 200
74
 
75
+ # ============================
76
+ # Gradio UI
77
+ # ============================
78
+
79
+ # IMPORTANT: Replace with your actual space URL
80
+ SPACE_URL = os.getenv("SPACE_URL", "https://your-username-your-space.hf.space")
81
+
82
  def register_interface(username, password):
83
+ try:
84
+ response = requests.post(
85
+ f"{SPACE_URL}/register",
86
+ json={"username": username, "password": password}
87
+ )
88
+ return response.json().get("message", response.json().get("error", "Unknown error"))
89
+ except Exception as e:
90
+ return f"Error: {str(e)}"
91
 
92
  def login_interface(username, password):
93
+ try:
94
+ response = requests.post(
95
+ f"{SPACE_URL}/login",
96
+ json={"username": username, "password": password}
97
+ )
98
+ if response.status_code == 200:
99
+ token = response.json().get("access_token")
100
+ return f"Login successful! Token: {token[:15]}... (truncated)"
101
+ return response.json().get("error", "Login failed")
102
+ except Exception as e:
103
+ return f"Error: {str(e)}"
104
 
105
  with gr.Blocks() as demo:
106
+ gr.Markdown("# 🔐 Secure Auth System (Gradio + Flask + JWT + bcrypt)")
107
 
108
  with gr.Tab("Register"):
109
  reg_username = gr.Textbox(label="Username")
110
  reg_password = gr.Textbox(label="Password", type="password")
111
  reg_output = gr.Textbox(label="Output")
112
  reg_button = gr.Button("Register")
113
+ reg_button.click(
114
+ register_interface,
115
+ inputs=[reg_username, reg_password],
116
+ outputs=reg_output
117
+ )
118
+
119
  with gr.Tab("Login"):
120
  login_username = gr.Textbox(label="Username")
121
  login_password = gr.Textbox(label="Password", type="password")
122
  login_output = gr.Textbox(label="Output")
123
  login_button = gr.Button("Login")
124
+ login_button.click(
125
+ login_interface,
126
+ inputs=[login_username, login_password],
127
+ outputs=login_output
128
+ )
129
+
130
+ # Mount Gradio to Flask app
 
 
 
 
 
 
131
  app = gr.mount_gradio_app(flask_app, demo, path="/")
132
 
133
  if __name__ == "__main__":
134
+ app.run()