File size: 2,782 Bytes
59b54d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e415aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59b54d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
76
77
78
79
80
81
82
83
84
85
86
from flask import Blueprint, request, jsonify, session
import hashlib
from src.services import supabase_service
from src.core.exceptions import AuthError, ValidationError
from src.utils.logger import setup_logging

logger = setup_logging("auth_api")
auth_bp = Blueprint('auth', __name__)

def hash_password(password):
    return hashlib.sha256(password.encode()).hexdigest()

@auth_bp.route('/api/register', methods=['POST'])
def register():
    data = request.get_json() or {}
    name = data.get('name', '').strip()
    email = data.get('email', '').strip().lower()
    password = data.get('password', '')

    if not all([name, email, password]):
        raise ValidationError("All fields are required")

    if len(password) < 6:
        raise ValidationError("Password must be at least 6 characters")

    if supabase_service.get_user_by_email(email):
        raise ValidationError("Email already registered")

    if supabase_service.get_user_by_username(name):
        raise ValidationError("Username already taken")

    success = supabase_service.create_user(name, hash_password(password), email)
    
    if success:
        logger.info(f"Registered new user: {email}")
        return jsonify({'success': True, 'message': 'Registration successful!'})
    
    return jsonify({'success': False, 'message': 'Registration failed'}), 500

@auth_bp.route('/api/login', methods=['POST'])
def login():
    data = request.get_json() or {}
    email = data.get('email', '').strip().lower()
    password = data.get('password', '')

    # Hardcoded bypass for testing
    if email == "lakshmi@gmail.com" and password == "test123":
        logger.info(f"Hardcoded user logged in: {email}")
        session['user'] = {
            'id': 'hardcoded-test-id-12345',
            'name': 'Lakshmi (Admin)',
            'email': email,
            'role': 'admin'
        }
        return jsonify({
            'success': True,
            'message': 'Login successful!',
            'user': {'name': 'Lakshmi (Admin)', 'role': 'admin'}
        })

    user = supabase_service.get_user_by_email(email)

    if not user or user['password'] != hash_password(password):
        logger.warning(f"Failed login attempt: {email}")
        raise AuthError("Invalid email or password")

    role = user.get('role', 'user')
    session['user'] = {
        'id': user['id'], 
        'name': user['username'], 
        'email': user['email'], 
        'role': role
    }
    
    logger.info(f"User logged in: {email}")
    return jsonify({
        'success': True,
        'message': 'Login successful!',
        'user': {'name': user['username'], 'role': role}
    })

@auth_bp.route('/api/logout', methods=['POST'])
def logout():
    session.pop('user', None)
    return jsonify({'success': True})