Mangesh223 commited on
Commit
3c29f34
·
verified ·
1 Parent(s): 784dfb5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -88
app.py CHANGED
@@ -2,18 +2,12 @@ import os
2
  import json
3
  import bcrypt
4
  import gradio as gr
5
- from flask import Flask, request, jsonify
6
  from flask_jwt_extended import (
7
  JWTManager, create_access_token,
8
  jwt_required, get_jwt_identity
9
  )
10
 
11
- # Flask setup
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
- # File-based user storage
17
  USERS_FILE = "users.json"
18
 
19
  def load_users():
@@ -27,90 +21,46 @@ def save_users(users):
27
  with open(USERS_FILE, "w") as f:
28
  json.dump(users, f)
29
 
30
- # ============================
31
- # Flask API routes
32
- # ============================
33
-
34
- @flask_app.route("/register", methods=["POST"])
35
- def register():
36
- data = request.get_json()
37
- username = data.get("username")
38
- password = data.get("password")
39
 
 
40
  if not username or not password:
41
- return jsonify({"error": "Username and password required"}), 400
42
-
43
  users = load_users()
44
  if username in users:
45
- return jsonify({"error": "Username already exists"}), 400
46
-
47
  hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
48
  users[username] = {"password": hashed}
49
  save_users(users)
 
50
 
51
- return jsonify({"message": "User registered successfully"}), 201
52
-
53
- @flask_app.route("/login", methods=["POST"])
54
- def login():
55
- data = request.get_json()
56
- username = data.get("username")
57
- password = data.get("password")
58
-
59
  users = load_users()
60
  user = users.get(username)
61
-
62
  if not user or not bcrypt.checkpw(password.encode(), user["password"].encode()):
63
- return jsonify({"error": "Invalid credentials"}), 401
64
-
65
- access_token = create_access_token(identity=username)
66
- return jsonify({"access_token": access_token, "username": username}), 200
67
-
68
- @flask_app.route("/protected", methods=["GET"])
69
- @jwt_required()
70
- def protected():
71
- current_user = get_jwt_identity()
72
- return jsonify(logged_in_as=current_user), 200
73
-
74
- # ============================
75
- # Gradio UI
76
- # ============================
77
-
78
- # For local development, use local Flask server
79
- LOCAL_FLASK_URL = "http://localhost:5000"
80
-
81
- def register_interface(username, password):
82
- try:
83
- response = requests.post(
84
- f"{LOCAL_FLASK_URL}/register",
85
- json={"username": username, "password": password}
86
- )
87
- return response.json().get("message", response.json().get("error", "Unknown error"))
88
- except Exception as e:
89
- return f"Error: {str(e)}"
90
-
91
- def login_interface(username, password):
92
- try:
93
- response = requests.post(
94
- f"{LOCAL_FLASK_URL}/login",
95
- json={"username": username, "password": password}
96
- )
97
- if response.status_code == 200:
98
- token = response.json().get("access_token")
99
- return f"Login successful! Token: {token[:15]}... (truncated)"
100
- return response.json().get("error", "Login failed")
101
- except Exception as e:
102
- return f"Error: {str(e)}"
103
 
104
  with gr.Blocks() as demo:
105
- gr.Markdown("# 🔐 Secure Auth System (Gradio + Flask + JWT + bcrypt)")
106
 
107
  with gr.Tab("Register"):
108
  reg_username = gr.Textbox(label="Username")
109
  reg_password = gr.Textbox(label="Password", type="password")
110
  reg_output = gr.Textbox(label="Output")
111
  reg_button = gr.Button("Register")
 
 
 
 
112
  reg_button.click(
113
- register_interface,
114
  inputs=[reg_username, reg_password],
115
  outputs=reg_output
116
  )
@@ -120,25 +70,17 @@ with gr.Blocks() as demo:
120
  login_password = gr.Textbox(label="Password", type="password")
121
  login_output = gr.Textbox(label="Output")
122
  login_button = gr.Button("Login")
 
 
 
 
 
 
 
123
  login_button.click(
124
- login_interface,
125
  inputs=[login_username, login_password],
126
  outputs=login_output
127
  )
128
 
129
- # You need to run Flask and Gradio separately
130
- if __name__ == "__main__":
131
- # Run this in one terminal: python your_script.py --flask
132
- # And in another: python your_script.py --gradio
133
- import argparse
134
- parser = argparse.ArgumentParser()
135
- parser.add_argument('--flask', action='store_true')
136
- parser.add_argument('--gradio', action='store_true')
137
- args = parser.parse_args()
138
-
139
- if args.flask:
140
- flask_app.run(port=5000)
141
- elif args.gradio:
142
- demo.launch(port=7860)
143
- else:
144
- print("Please specify --flask or --gradio")
 
2
  import json
3
  import bcrypt
4
  import gradio as gr
 
5
  from flask_jwt_extended import (
6
  JWTManager, create_access_token,
7
  jwt_required, get_jwt_identity
8
  )
9
 
10
+ # Gradio app will handle everything
 
 
 
 
 
11
  USERS_FILE = "users.json"
12
 
13
  def load_users():
 
21
  with open(USERS_FILE, "w") as f:
22
  json.dump(users, f)
23
 
24
+ # JWT setup (simplified for Gradio)
25
+ JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY", "super-secret-key")
 
 
 
 
 
 
 
26
 
27
+ def register_user(username, password):
28
  if not username or not password:
29
+ return "Username and password required"
30
+
31
  users = load_users()
32
  if username in users:
33
+ return "Username already exists"
34
+
35
  hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
36
  users[username] = {"password": hashed}
37
  save_users(users)
38
+ return "User registered successfully"
39
 
40
+ def login_user(username, password):
 
 
 
 
 
 
 
41
  users = load_users()
42
  user = users.get(username)
43
+
44
  if not user or not bcrypt.checkpw(password.encode(), user["password"].encode()):
45
+ return "Invalid credentials", None
46
+
47
+ access_token = create_access_token(identity=username, secret_key=JWT_SECRET_KEY)
48
+ return "Login successful", access_token
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
  with gr.Blocks() as demo:
51
+ gr.Markdown("# 🔐 Secure Auth System")
52
 
53
  with gr.Tab("Register"):
54
  reg_username = gr.Textbox(label="Username")
55
  reg_password = gr.Textbox(label="Password", type="password")
56
  reg_output = gr.Textbox(label="Output")
57
  reg_button = gr.Button("Register")
58
+
59
+ def register(username, password):
60
+ return register_user(username, password)
61
+
62
  reg_button.click(
63
+ register,
64
  inputs=[reg_username, reg_password],
65
  outputs=reg_output
66
  )
 
70
  login_password = gr.Textbox(label="Password", type="password")
71
  login_output = gr.Textbox(label="Output")
72
  login_button = gr.Button("Login")
73
+
74
+ def login(username, password):
75
+ message, token = login_user(username, password)
76
+ if token:
77
+ return f"{message}! Token: {token[:15]}... (truncated)"
78
+ return message
79
+
80
  login_button.click(
81
+ login,
82
  inputs=[login_username, login_password],
83
  outputs=login_output
84
  )
85
 
86
+ demo.launch()