/** * Authentication API endpoints */ const express = require('express'); const router = express.Router(); const jwt = require('jsonwebtoken'); const User = require('../models/User'); const JWT_SECRET = 'your-secret-key'; // TODO: Move to environment variable // Login router.post('/login', async (req, res) => { const { email, password } = req.body; const user = await User.findByEmail(email); if (!user || user.password !== password) { return res.status(401).json({ error: 'Invalid credentials' }); } const token = jwt.sign({ userId: user.id }, JWT_SECRET, { expiresIn: '24h' }); res.json({ token, user: { id: user.id, name: user.name, email: user.email } }); }); // Register router.post('/register', async (req, res) => { const { name, email, password } = req.body; const existingUser = await User.findByEmail(email); if (existingUser) { return res.status(400).json({ error: 'Email already registered' }); } const user = await User.create({ name, email, password }); const token = jwt.sign({ userId: user.id }, JWT_SECRET, { expiresIn: '24h' }); res.status(201).json({ token, user: { id: user.id, name: user.name, email: user.email } }); }); // Verify token router.get('/verify', (req, res) => { const token = req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).json({ error: 'No token provided' }); } try { const decoded = jwt.verify(token, JWT_SECRET); res.json({ valid: true, userId: decoded.userId }); } catch (error) { res.status(401).json({ error: 'Invalid token' }); } }); module.exports = router;