E-Voting Developer 839ca5461c Fix: Login system and clean up duplicate src/ folder
- Fixed LoginPage.js to use correct API endpoint (localhost:8000)
- Fixed prop naming (onLoginSuccess → onLogin)
- Fixed data structure mapping (voter.email → email, etc)
- Removed duplicate src/ folder structure
- Updated DashboardPage.js with proper API endpoints
- Added lucide-react dependency
- Fixed docker-compose and Dockerfile.backend for proper execution
- Cleaned up console logs
- System fully working with Docker deployment
2025-11-05 23:25:43 +01:00

85 lines
2.5 KiB
Python

"""
Routes pour l'authentification et les électeurs.
"""
from fastapi import APIRouter, HTTPException, status, Depends
from sqlalchemy.orm import Session
from .. import schemas, services
from ..auth import create_access_token
from ..dependencies import get_db, get_current_voter
from ..models import Voter
from datetime import timedelta
router = APIRouter(prefix="/api/auth", tags=["auth"])
@router.post("/register", response_model=schemas.RegisterResponse)
def register(voter_data: schemas.VoterRegister, db: Session = Depends(get_db)):
"""Enregistrer un nouvel électeur"""
# Vérifier que l'email n'existe pas déjà
existing_voter = services.VoterService.get_voter_by_email(db, voter_data.email)
if existing_voter:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Email already registered"
)
# Créer le nouvel électeur
voter = services.VoterService.create_voter(db, voter_data)
# Créer le token JWT
access_token_expires = timedelta(minutes=30)
access_token = create_access_token(
data={"voter_id": voter.id},
expires_delta=access_token_expires
)
return schemas.RegisterResponse(
access_token=access_token,
expires_in=30 * 60,
id=voter.id,
email=voter.email,
first_name=voter.first_name,
last_name=voter.last_name
)
@router.post("/login", response_model=schemas.LoginResponse)
def login(credentials: schemas.VoterLogin, db: Session = Depends(get_db)):
"""Authentifier un électeur et retourner un token"""
voter = services.VoterService.verify_voter_credentials(
db,
credentials.email,
credentials.password
)
if not voter:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid email or password"
)
# Créer le token JWT
access_token_expires = timedelta(minutes=30)
access_token = create_access_token(
data={"voter_id": voter.id},
expires_delta=access_token_expires
)
return schemas.LoginResponse(
access_token=access_token,
expires_in=30 * 60,
id=voter.id,
email=voter.email,
first_name=voter.first_name,
last_name=voter.last_name
)
@router.get("/profile", response_model=schemas.VoterProfile)
def get_profile(current_voter: Voter = Depends(get_current_voter)):
"""Récupérer le profil de l'électeur actuel"""
return current_voter