File size: 3,382 Bytes
149536f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b465f99
149536f
 
 
 
 
b465f99
149536f
 
 
 
 
b465f99
149536f
 
 
 
 
 
 
 
 
 
 
b465f99
149536f
 
 
 
 
b465f99
149536f
 
 
 
 
 
 
 
b465f99
149536f
 
 
b465f99
149536f
 
 
 
b465f99
149536f
ed363f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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