Spaces:
Runtime error
Runtime error
from flask import Blueprint, request, jsonify | |
from utils.auth import hash_password, check_password, generate_token, verify_token | |
import pymongo | |
from bson import ObjectId | |
# Define a Blueprint for authentication routes | |
auth_bp = Blueprint('auth', __name__, url_prefix='/auth') | |
# MongoDB connection | |
client = pymongo.MongoClient("mongodb+srv://pmsankheb23:[email protected]/") | |
db = client["Eloquence"] | |
collections_user = db["user"] | |
# ROUTE 1: Create a user using POST: auth/create, no auth required | |
def create_user(): | |
try: | |
data = request.get_json() | |
username = data['username'] | |
email = data['email'] | |
password = data['password'] | |
# Check if user already exists | |
if collections_user.find_one({'email': email}): | |
return jsonify({"error": "User with this email already exists"}), 400 | |
# Hash the password | |
hashed_password = hash_password(password) | |
# Insert the new user | |
result = collections_user.insert_one({'username': username, 'password': hashed_password, 'email': email}) | |
user_id = str(result.inserted_id) | |
# Generate JWT token | |
token = generate_token(username) # Or email, depending on your token strategy | |
return jsonify({ | |
"message": "User created", | |
"authToken": token, | |
"userId": user_id, | |
"username": username | |
}), 201 | |
except Exception as e: | |
return jsonify({"error": str(e)}), 500 | |
# ROUTE 2: Authenticate a user using POST: auth/login, no login required | |
def login_user(): | |
try: | |
data = request.get_json() | |
email = data['email'] | |
password = data['password'] | |
user = collections_user.find_one({'email': email}) | |
if not user: | |
return jsonify({"error": "User not found"}), 404 | |
if not check_password(user['password'], password): | |
return jsonify({"error": "Invalid password"}), 401 | |
user_id = str(user['_id']) | |
username = user['username'] | |
# Generate JWT token | |
token = generate_token(username) # Or email, consistent with your token strategy | |
return jsonify({ | |
"message": "Login successful", | |
"token": token, | |
"userId": user_id, | |
"username": username | |
}), 200 | |
except Exception as e: | |
return jsonify({"error": str(e)}), 500 | |
# ROUTE 3: Get logged-in user details using POST: auth/protected, login required | |
def protected(): | |
# Get token from the body as it's a post method | |
token = request.json.get("token", None) | |
if not token: | |
return jsonify({"error": "Token missing"}), 401 | |
# Remove 'Bearer ' from the token string if it's present | |
token = token.replace("Bearer ", "") | |
username = verify_token(token) # Verify the token | |
if not username: | |
return jsonify({"error": "Invalid or expired token"}), 401 | |
return jsonify({"message": f"Hello, {username}! This is a protected route."}) | |