import { Context, Next } from 'hono'; import { AuthService } from '../modules/auth/auth.service'; import { UserService } from '../modules/users/user.service'; import { AppDataSource } from '../data-source'; import { AuthContext } from '../types/context'; import { parseWithAwait } from '../utils/parseWithAwait'; import { UserSchema } from '../modules/users/user.schema'; export async function authMiddleware(c: Context, next: Next) { try { const authHeader = c.req.header('Authorization'); if (!authHeader) { return c.json({ message: 'Authorization header missing' }, 401); } const token = authHeader.split(' ')[1]; if (!token) { return c.json({ message: 'Token missing' }, 401); } const userService = new UserService(AppDataSource); const authService = new AuthService(userService); const decoded = authService.verifyToken(token); const user = await userService.getUserById(decoded.id); if (!user) { return c.json({ message: 'User not found' }, 401); } c.set('user', await parseWithAwait(UserSchema, user)); c.set('token', token); await next(); } catch (error) { console.error('Authentication error:', error); return c.json({ message: 'Invalid token' }, 401); } }