Swapnil-101 commited on
Commit
99d7e90
·
verified ·
1 Parent(s): c097f95

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +54 -6
main.py CHANGED
@@ -2,8 +2,9 @@ from huggingface_hub import InferenceClient
2
 
3
  import random
4
 
5
- from flask import Flask, request, jsonify, make_response
6
- from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity
 
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
- return jsonify({"message": "User created successfully"}), 201
 
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)