Spaces:
Sleeping
Sleeping
| from flask import Flask, request, jsonify | |
| from pymongo import MongoClient | |
| from flask_cors import CORS | |
| from bson import ObjectId | |
| import json | |
| import os | |
| app = Flask(__name__) | |
| CORS(app) | |
| print("applied CORS") | |
| # MongoDB Connection | |
| MONGO_URI = "mongodb+srv://nanduvinay719:76qqKRX4zC97yQun@travis.744fuyn.mongodb.net/?retryWrites=true&w=majority&appName=travis" | |
| client = MongoClient(MONGO_URI) | |
| print("connected to mongodb") | |
| db = client["travisDB"] | |
| # Define collections | |
| user_collection = db["users"] | |
| agent_collection = db["agents"] | |
| # Helper function to convert ObjectId to string for JSON serialization | |
| class JSONEncoder(json.JSONEncoder): | |
| def default(self, obj): | |
| if isinstance(obj, ObjectId): | |
| return str(obj) | |
| return json.JSONEncoder.default(self, obj) | |
| def home(): | |
| return jsonify({"message": "Travis Backend API is running"}) | |
| def login(): | |
| data = request.json | |
| email = data.get("email") | |
| password = data.get("password") | |
| role = data.get("role") | |
| try: | |
| # First, try to find the user based on email and role | |
| user = None | |
| # Try to find in the appropriate collection based on provided role | |
| if role == "admin": | |
| user = user_collection.find_one({"email": email, "password": password}) | |
| else: | |
| user = agent_collection.find_one({"email": email, "password": password}) | |
| # If user is found, verify their role | |
| if user: | |
| # Return user information including their actual role from DB | |
| return jsonify({ | |
| "success": True, | |
| "role": user.get("role"), | |
| "userId": str(user.get("_id")) | |
| }) | |
| else: | |
| # Try the other collection as fallback (in case the user selected the wrong role) | |
| other_collection = agent_collection if role == "admin" else user_collection | |
| other_user = other_collection.find_one({"email": email, "password": password}) | |
| if other_user: | |
| # User exists but in the other collection | |
| return jsonify({ | |
| "success": True, | |
| "role": other_user.get("role"), | |
| "userId": str(other_user.get("_id")) | |
| }) | |
| else: | |
| # No user found in either collection | |
| return jsonify({"success": False, "message": "Invalid credentials"}) | |
| except Exception as e: | |
| print(f"Login error: {e}") | |
| return jsonify({"success": False, "message": "Server error"}), 500 | |
| def register(): | |
| print(f"Registration request received: {request.json}") | |
| data = request.json | |
| email = data.get("email") | |
| password = data.get("password") | |
| if not email or not password: | |
| print("Missing required fields") | |
| return jsonify({ | |
| "success": False, | |
| "message": "Email and password are required" | |
| }), 400 | |
| try: | |
| # Check if an agent with this email already exists | |
| existing_agent = agent_collection.find_one({"email": email}) | |
| if existing_agent: | |
| return jsonify({ | |
| "success": False, | |
| "message": "An agent with this email already exists" | |
| }), 400 | |
| # Check if a user with this email exists in the User collection | |
| existing_user = user_collection.find_one({"email": email}) | |
| if existing_user: | |
| return jsonify({ | |
| "success": False, | |
| "message": "A user with this email already exists" | |
| }), 400 | |
| # Create new agent with role explicitly set to "agent" | |
| new_agent = { | |
| "email": email, | |
| "password": password, | |
| "role": "agent" # Always set to "agent" as required | |
| } | |
| # Save the new agent to the database | |
| result = agent_collection.insert_one(new_agent) | |
| return jsonify({ | |
| "success": True, | |
| "message": "Agent registered successfully", | |
| "role": "agent" | |
| }), 201 | |
| except Exception as e: | |
| print(f"Registration error: {e}") | |
| return jsonify({ | |
| "success": False, | |
| "message": "Server error during registration" | |
| }), 500 | |
| if __name__ == "__main__": | |
| app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860))) | |