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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +109 -45
app.py CHANGED
@@ -1,55 +1,119 @@
1
- # app.py
2
- from flask import Flask, request, jsonify
3
- from auth import (
4
- authenticate_user,
5
- create_access_token,
6
- register_user,
7
- ACCESS_TOKEN_EXPIRE_MINUTES,
8
- SECRET_KEY
9
  )
10
- import jwt
11
- from datetime import timedelta
 
12
 
13
- app = Flask(__name__)
 
 
 
14
 
15
- @app.route("/register", methods=["POST"])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  def register():
17
  data = request.get_json()
18
- try:
19
- result = register_user(data["username"], data["password"])
20
- return jsonify(result), 201
21
- except ValueError as e:
22
- return jsonify({"detail": str(e)}), 400
 
 
 
 
 
 
 
 
 
 
23
 
24
- @app.route("/token", methods=["POST"])
25
  def login():
26
- username = request.form.get("username")
27
- password = request.form.get("password")
28
- user = authenticate_user(username, password)
29
- if not user:
30
- return jsonify({"detail": "Invalid username or password"}), 401
31
-
32
- access_token = create_access_token(
33
- data={"sub": username}, expires_delta=timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  )
35
- return jsonify({"access_token": access_token, "token_type": "bearer"})
36
-
37
- @app.route("/users/me", methods=["GET"])
38
- def get_user():
39
- auth_header = request.headers.get("Authorization")
40
- if not auth_header or not auth_header.startswith("Bearer "):
41
- return jsonify({"detail": "Missing or invalid token"}), 401
42
- token = auth_header.split(" ")[1]
43
- try:
44
- payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
45
- username = payload.get("sub")
46
- if username is None:
47
- raise jwt.InvalidTokenError
48
- return jsonify({"username": username})
49
- except jwt.ExpiredSignatureError:
50
- return jsonify({"detail": "Token expired"}), 401
51
- except jwt.InvalidTokenError:
52
- return jsonify({"detail": "Invalid token"}), 401
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  if __name__ == "__main__":
55
- app.run(host="0.0.0.0", port=8000)
 
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():
20
+ try:
21
+ with open(USERS_FILE, "r") as f:
22
+ return json.load(f)
23
+ except (FileNotFoundError, json.JSONDecodeError):
24
+ return {}
25
+
26
+ 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()
67
+ 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()