dev2004v's picture
Upload 10 files
f2533f4 verified
from flask import Blueprint, request, jsonify
from models.user import User
from utils.jwt_helper import generate_jwt
import re
auth_bp = Blueprint('auth', __name__)
def validate_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email) is not None
def validate_password(password):
return len(password) >= 6
@auth_bp.route('/signup', methods=['POST'])
def signup():
try:
data = request.get_json()
if not data:
return jsonify({"error": "No data provided"}), 400
username = data.get('username', '').strip()
email = data.get('email', '').strip().lower()
password = data.get('password', '')
preferences = data.get('preferences', {"genres": [], "types": []})
# Validation
if not username or not email or not password:
return jsonify({"error": "Username, email, and password are required"}), 400
if len(username) < 3:
return jsonify({"error": "Username must be at least 3 characters long"}), 400
if not validate_email(email):
return jsonify({"error": "Invalid email format"}), 400
if not validate_password(password):
return jsonify({"error": "Password must be at least 6 characters long"}), 400
# Check if user already exists
if User.find_by_email(email):
return jsonify({"error": "Email already registered"}), 409
if User.find_by_username(username):
return jsonify({"error": "Username already taken"}), 409
# Create new user
user = User(username=username, email=email, password=password, preferences=preferences)
user_id = user.save()
# Generate JWT token
token = generate_jwt(user_id, username, email)
return jsonify({
"message": "User created successfully",
"token": token,
"user": {
"id": user_id,
"username": username,
"email": email,
"preferences": preferences
}
}), 201
except Exception as e:
print(f"Signup error: {e}")
return jsonify({"error": "Internal server error"}), 500
@auth_bp.route('/login', methods=['POST'])
def login():
try:
data = request.get_json()
if not data:
return jsonify({"error": "No data provided"}), 400
email = data.get('email', '').strip().lower()
password = data.get('password', '')
if not email or not password:
return jsonify({"error": "Email and password are required"}), 400
# Find user by email
user = User.find_by_email(email)
if not user or not user.check_password(password):
return jsonify({"error": "Invalid email or password"}), 401
# Update last login
user.update_last_login()
# Generate JWT token
token = generate_jwt(user._id, user.username, user.email)
return jsonify({
"message": "Login successful",
"token": token,
"user": {
"id": str(user._id),
"username": user.username,
"email": user.email,
"preferences": user.preferences,
"last_login": user.last_login.isoformat() if user.last_login else None
}
}), 200
except Exception as e:
print(f"Login error: {e}")
return jsonify({"error": "Internal server error"}), 500