Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
@@ -2,8 +2,9 @@ from huggingface_hub import InferenceClient
|
|
2 |
|
3 |
import random
|
4 |
|
5 |
-
from flask import Flask, request, jsonify,
|
6 |
-
from flask_jwt_extended import JWTManager, create_access_token
|
|
|
7 |
from werkzeug.security import generate_password_hash, check_password_hash
|
8 |
import sqlite3
|
9 |
|
@@ -22,6 +23,12 @@ def home():
|
|
22 |
app.config['JWT_SECRET_KEY'] = 123456
|
23 |
jwt = JWTManager(app)
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
# Create SQLite database
|
26 |
conn = sqlite3.connect('users.db', check_same_thread=False)
|
27 |
c = conn.cursor()
|
@@ -33,30 +40,71 @@ c.execute('''CREATE TABLE IF NOT EXISTS user_details
|
|
33 |
FOREIGN KEY(user_id) REFERENCES users(id))''')
|
34 |
conn.commit()
|
35 |
|
36 |
-
# Endpoint for user registration
|
37 |
@app.route('/register', methods=['POST'])
|
38 |
def register():
|
39 |
data = request.get_json()
|
40 |
username = data.get('username')
|
41 |
password = data.get('password')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
if not username or not password:
|
43 |
return jsonify({"message": "Missing username or password"}), 400
|
|
|
44 |
hashed_password = generate_password_hash(password)
|
45 |
try:
|
46 |
-
c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, hashed_password))
|
47 |
conn.commit()
|
48 |
-
|
|
|
49 |
except sqlite3.IntegrityError:
|
50 |
return jsonify({"message": "Username already exists"}), 400
|
51 |
|
52 |
-
# Endpoint for user login
|
53 |
@app.route('/login', methods=['POST'])
|
54 |
def login():
|
55 |
data = request.get_json()
|
56 |
username = data.get('username')
|
57 |
password = data.get('password')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
if not username or not password:
|
59 |
return jsonify({"message": "Missing username or password"}), 400
|
|
|
60 |
user = c.execute("SELECT * FROM users WHERE username=?", (username,)).fetchone()
|
61 |
if user and check_password_hash(user[2], password):
|
62 |
access_token = create_access_token(identity=username, expires_delta=False)
|
|
|
2 |
|
3 |
import random
|
4 |
|
5 |
+
from flask import Flask, request, jsonify, redirect, url_for
|
6 |
+
from flask_jwt_extended import JWTManager, create_access_token
|
7 |
+
from flask_dance.contrib.google import make_google_blueprint, google
|
8 |
from werkzeug.security import generate_password_hash, check_password_hash
|
9 |
import sqlite3
|
10 |
|
|
|
23 |
app.config['JWT_SECRET_KEY'] = 123456
|
24 |
jwt = JWTManager(app)
|
25 |
|
26 |
+
# Setup Google OAuth
|
27 |
+
app.config["GOOGLE_OAUTH_CLIENT_ID"] = "your_google_client_id"
|
28 |
+
app.config["GOOGLE_OAUTH_CLIENT_SECRET"] = "your_google_client_secret"
|
29 |
+
google_bp = make_google_blueprint(scope=["profile", "email"])
|
30 |
+
app.register_blueprint(google_bp, url_prefix="/login")
|
31 |
+
|
32 |
# Create SQLite database
|
33 |
conn = sqlite3.connect('users.db', check_same_thread=False)
|
34 |
c = conn.cursor()
|
|
|
40 |
FOREIGN KEY(user_id) REFERENCES users(id))''')
|
41 |
conn.commit()
|
42 |
|
43 |
+
# Endpoint for user registration and Google signup
|
44 |
@app.route('/register', methods=['POST'])
|
45 |
def register():
|
46 |
data = request.get_json()
|
47 |
username = data.get('username')
|
48 |
password = data.get('password')
|
49 |
+
google_token = data.get('google_token')
|
50 |
+
|
51 |
+
if google_token:
|
52 |
+
# User signing up with Google
|
53 |
+
resp = google.get("/oauth2/v2/userinfo")
|
54 |
+
if not resp.ok:
|
55 |
+
return jsonify({"message": "Failed to fetch Google user info"}), 400
|
56 |
+
google_user_info = resp.json()
|
57 |
+
google_id = google_user_info["id"]
|
58 |
+
username = google_user_info["email"]
|
59 |
+
password = None # No password for Google signup
|
60 |
+
|
61 |
+
# Check if Google user already exists in the database
|
62 |
+
existing_user = c.execute("SELECT * FROM users WHERE google_id=?", (google_id,)).fetchone()
|
63 |
+
if existing_user:
|
64 |
+
access_token = create_access_token(identity=username, expires_delta=False)
|
65 |
+
return jsonify({"access_token": access_token}), 200
|
66 |
+
|
67 |
+
# User signing up with username and password
|
68 |
if not username or not password:
|
69 |
return jsonify({"message": "Missing username or password"}), 400
|
70 |
+
|
71 |
hashed_password = generate_password_hash(password)
|
72 |
try:
|
73 |
+
c.execute("INSERT INTO users (username, password, google_id) VALUES (?, ?, ?)", (username, hashed_password, google_id))
|
74 |
conn.commit()
|
75 |
+
access_token = create_access_token(identity=username, expires_delta=False)
|
76 |
+
return jsonify({"access_token": access_token}), 201
|
77 |
except sqlite3.IntegrityError:
|
78 |
return jsonify({"message": "Username already exists"}), 400
|
79 |
|
80 |
+
# Endpoint for user login and Google login
|
81 |
@app.route('/login', methods=['POST'])
|
82 |
def login():
|
83 |
data = request.get_json()
|
84 |
username = data.get('username')
|
85 |
password = data.get('password')
|
86 |
+
google_token = data.get('google_token')
|
87 |
+
|
88 |
+
if google_token:
|
89 |
+
# User logging in with Google
|
90 |
+
resp = google.get("/oauth2/v2/userinfo")
|
91 |
+
if not resp.ok:
|
92 |
+
return jsonify({"message": "Failed to fetch Google user info"}), 400
|
93 |
+
google_user_info = resp.json()
|
94 |
+
google_id = google_user_info["id"]
|
95 |
+
|
96 |
+
# Check if Google user exists in the database
|
97 |
+
user = c.execute("SELECT * FROM users WHERE google_id=?", (google_id,)).fetchone()
|
98 |
+
if user:
|
99 |
+
access_token = create_access_token(identity=user[1], expires_delta=False)
|
100 |
+
return jsonify({"access_token": access_token}), 200
|
101 |
+
else:
|
102 |
+
return jsonify({"message": "User not found"}), 404
|
103 |
+
|
104 |
+
# User logging in with username and password
|
105 |
if not username or not password:
|
106 |
return jsonify({"message": "Missing username or password"}), 400
|
107 |
+
|
108 |
user = c.execute("SELECT * FROM users WHERE username=?", (username,)).fetchone()
|
109 |
if user and check_password_hash(user[2], password):
|
110 |
access_token = create_access_token(identity=username, expires_delta=False)
|