Alexis Bruneteau c6a0bb1654 feat: Complete frontend-backend API integration for voting system
This commit completes the voting system implementation with:

1. Frontend API Proxy Routes:
   - Created 9 Next.js API routes to proxy backend requests
   - Elections endpoints: /api/elections/*, /api/elections/{id}/*
   - Votes endpoints: /api/votes/*, /api/votes/submit/*, etc.
   - Auth endpoints: /api/auth/register/*, /api/auth/login/*, /api/auth/profile/*
   - Fixed Next.js 15.5 compatibility with Promise-based params

2. Backend Admin API:
   - Created /api/admin/fix-elgamal-keys endpoint
   - Created /api/admin/elections/elgamal-status endpoint
   - Created /api/admin/init-election-keys endpoint
   - All endpoints tested and working

3. Database Schema Fixes:
   - Fixed docker/create_active_election.sql to preserve ElGamal parameters
   - All elections now have elgamal_p=23, elgamal_g=5 set
   - Public keys generated for voting encryption

4. Documentation:
   - Added VOTING_SYSTEM_STATUS.md with complete status
   - Added FINAL_SETUP_STEPS.md with setup instructions
   - Added fix_elgamal_keys.py utility script

System Status:
 Backend: All 3 nodes operational with 12 elections
 Database: ElGamal parameters initialized
 Crypto: Public keys generated for active elections
 API: All endpoints verified working
 Frontend: Proxy routes created (ready for rebuild)

Next Step: docker compose up -d --build frontend

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 03:32:08 +01:00

48 lines
1.3 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
/**
* Proxy API route for elections endpoint
* Forwards requests to the backend API
*/
export async function GET(request: NextRequest) {
try {
const searchParams = request.nextUrl.searchParams
const backendUrl = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000'
// Build the backend URL with query parameters
const url = new URL('/api/elections', backendUrl)
// Copy all query parameters from the incoming request
searchParams.forEach((value, key) => {
url.searchParams.append(key, value)
})
// Get the authorization header if present
const authHeader = request.headers.get('authorization')
const headers: HeadersInit = {
'Content-Type': 'application/json',
}
if (authHeader) {
headers['Authorization'] = authHeader
}
// Forward the request to the backend
const response = await fetch(url.toString(), {
method: 'GET',
headers,
})
const data = await response.json()
// Return the response with the same status code
return NextResponse.json(data, { status: response.status })
} catch (error) {
console.error('Error proxying elections request:', error)
return NextResponse.json(
{ detail: 'Error proxying request to backend' },
{ status: 500 }
)
}
}