Mangesh223 commited on
Commit
26f75d5
·
verified ·
1 Parent(s): 6b23a58

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -56
app.py CHANGED
@@ -1,20 +1,20 @@
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,28 +28,27 @@ def save_users(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():
@@ -60,11 +59,15 @@ def login():
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,62 +75,51 @@ def protected():
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__":
 
 
 
 
 
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
+ import bcrypt
8
+ import json
9
+ import os
10
+ import requests
11
 
12
+ # Initialize Flask
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
+ # Simple JSON-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
+ # Flask Routes
 
 
 
32
  @flask_app.route("/register", methods=["POST"])
33
  def register():
34
  data = request.get_json()
35
  username = data.get("username")
36
  password = data.get("password")
37
 
38
+ users = load_users()
39
+
40
  if not username or not password:
41
  return jsonify({"error": "Username and password required"}), 400
42
 
 
43
  if username in users:
44
  return jsonify({"error": "Username already exists"}), 400
45
 
46
+ # Hash the password using bcrypt
47
+ hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
48
+ users[username] = {"password": hashed_password}
49
  save_users(users)
50
 
51
+ return jsonify({"message": "User created successfully"}), 201
52
 
53
  @flask_app.route("/login", methods=["POST"])
54
  def login():
 
59
  users = load_users()
60
  user = users.get(username)
61
 
62
+ if not user:
63
+ return jsonify({"error": "Invalid credentials"}), 401
64
+
65
+ stored_hashed = user["password"].encode('utf-8')
66
+ if not bcrypt.checkpw(password.encode('utf-8'), stored_hashed):
67
  return jsonify({"error": "Invalid credentials"}), 401
68
 
69
  access_token = create_access_token(identity=username)
70
+ return jsonify({"access_token": access_token, "username": username})
71
 
72
  @flask_app.route("/protected", methods=["GET"])
73
  @jwt_required()
 
75
  current_user = get_jwt_identity()
76
  return jsonify(logged_in_as=current_user), 200
77
 
78
+ # Gradio Interface Functions
 
 
 
 
 
 
79
  def register_interface(username, password):
80
+ response = flask_app.test_client().post(
81
+ "/register", json={"username": username, "password": password}
82
+ )
83
+ return response.get_json().get("message", response.get_json().get("error", "Unknown error"))
 
 
 
 
84
 
85
  def login_interface(username, password):
86
+ response = flask_app.test_client().post(
87
+ "/login", json={"username": username, "password": password}
88
+ )
89
+ if response.status_code == 200:
90
+ token = response.get_json().get("access_token")
91
+ return f"Login successful! Token: {token[:15]}... (truncated)"
92
+ return response.get_json().get("error", "Login failed")
 
 
 
 
93
 
94
+ # Gradio UI
95
  with gr.Blocks() as demo:
96
+ gr.Markdown("# 🔐 JWT Auth with bcrypt (Gradio + Flask)")
97
+
98
  with gr.Tab("Register"):
99
  reg_username = gr.Textbox(label="Username")
100
  reg_password = gr.Textbox(label="Password", type="password")
101
  reg_output = gr.Textbox(label="Output")
102
  reg_button = gr.Button("Register")
 
 
 
 
 
103
 
104
  with gr.Tab("Login"):
105
  login_username = gr.Textbox(label="Username")
106
  login_password = gr.Textbox(label="Password", type="password")
107
  login_output = gr.Textbox(label="Output")
108
  login_button = gr.Button("Login")
 
 
 
 
 
109
 
110
+ reg_button.click(
111
+ register_interface,
112
+ inputs=[reg_username, reg_password],
113
+ outputs=reg_output
114
+ )
115
+
116
+ login_button.click(
117
+ login_interface,
118
+ inputs=[login_username, login_password],
119
+ outputs=login_output
120
+ )
121
+
122
+ # Mount Gradio onto Flask for Hugging Face Spaces
123
  app = gr.mount_gradio_app(flask_app, demo, path="/")
124
 
125
  if __name__ == "__main__":