|
|
from flask import Blueprint, request, jsonify |
|
|
from flask_jwt_extended import create_access_token |
|
|
import bcrypt |
|
|
from pymongo import MongoClient |
|
|
import os |
|
|
from dotenv import load_dotenv |
|
|
|
|
|
load_dotenv() |
|
|
MONGO_URI = os.getenv("MONGO_URI") |
|
|
|
|
|
auth_bp = Blueprint('auth', __name__) |
|
|
client = MongoClient(MONGO_URI) |
|
|
db = client["codewhisperer"] |
|
|
users = db["users"] |
|
|
|
|
|
@auth_bp.route("/register", methods=["POST"]) |
|
|
def register(): |
|
|
data = request.json |
|
|
username = data["username"] |
|
|
email = data["email"] |
|
|
password = data["password"] |
|
|
|
|
|
if users.find_one({"username": username}): |
|
|
return jsonify({"error": "User already exists"}), 400 |
|
|
|
|
|
hashed_pw = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()) |
|
|
users.insert_one({"username": username, "email": email, "password": hashed_pw}) |
|
|
token = create_access_token(identity=username) |
|
|
return jsonify({"token": token}), 201 |
|
|
|
|
|
@auth_bp.route("/login", methods=["POST"]) |
|
|
def login(): |
|
|
data = request.json |
|
|
username = data["username"] |
|
|
password = data["password"] |
|
|
|
|
|
user = users.find_one({"username": username}) |
|
|
if not user: |
|
|
return jsonify({"error": "Invalid credentials"}), 401 |
|
|
|
|
|
if not bcrypt.checkpw(password.encode("utf-8"), user["password"]): |
|
|
return jsonify({"error": "Invalid credentials"}), 401 |
|
|
|
|
|
token = create_access_token(identity=username) |
|
|
return jsonify({"token": token}) |
|
|
|