from flask import request, jsonify from models import get_user_by_email, add_user, bcrypt import re import logging import traceback import os logging.basicConfig( filename=os.path.join('/tmp', 'app.log'), level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s' ) def signup_route(): if request.method == 'POST': username = request.form.get('username') email = request.form.get('email') password = request.form.get('password') confirm_password = request.form.get('confirm_password') role = request.form.get('role') if not username or not email or not password or not confirm_password or not role: print('Empty field in signup attempt: %s', {'username': username, 'email': email}) logging.warning('Empty field in signup attempt: %s', {'username': username, 'email': email}) return jsonify({'message': 'Please fill out all fields', 'status': 'danger'}), 400 if not re.match(r'^[^@]+@[^@]+\.[^@]+$', email): print('Invalid email format: %s', email) logging.warning('Invalid email format: %s', email) return jsonify({'message': 'Invalid email address! Please ensure it contains "@" and ".".', 'status': 'danger'}), 400 if password != confirm_password: print('Password mismatch for user: %s', username) logging.warning('Password mismatch for user: %s', username) return jsonify({'message': 'Passwords do not match', 'status': 'danger'}), 400 if role.lower() == 'player': preference_1 = request.form.get('preference_1') preference_2 = request.form.get('preference_2') preference_3 = request.form.get('preference_3') preference_4 = request.form.get('preference_4') if not all([preference_1, preference_2, preference_3, preference_4]): print('Missing preferences for player role: %s', email) logging.warning('Missing preferences for player role: %s', email) return jsonify({'message': 'Please provide all four preferences', 'status': 'danger'}), 400 user = get_user_by_email(email) if user: print('Email already exists: %s', email) logging.warning('Email already exists: %s', email) return jsonify({'message': 'Email already exists', 'status': 'danger'}), 400 try: add_user(username, email, password, role, preference_1, preference_2, preference_3, preference_4) print('User created successfully: %s', email) logging.info('User created successfully: %s', email) return jsonify({'message': 'Account created successfully', 'status': 'success'}), 201 except Exception as db_error: print('Error adding user to database: %s', traceback.format_exc()) logging.error('Error adding user to database: %s', traceback.format_exc()) return jsonify({'message': 'Internal server error while adding user.', 'status': 'danger'}), 500 print('Method not allowed: %s', request.method) logging.error('Method not allowed: %s', request.method) return jsonify({'message': 'Method not allowed', 'status': 'danger'}), 405