|
|
@@ -0,0 +1,38 @@
|
|
|
+import { Context, Next } from 'hono';
|
|
|
+import { AuthService } from '../services';
|
|
|
+import { UserService } from '@d8d/user-module';
|
|
|
+import { AppDataSource } from '@d8d/shared-utils';
|
|
|
+import { AuthContext } from '@d8d/shared-types';
|
|
|
+import { parseWithAwait } from '@d8d/shared-utils';
|
|
|
+import { UserSchema } from '@d8d/user-module';
|
|
|
+
|
|
|
+export async function authMiddleware(c: Context<AuthContext>, 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);
|
|
|
+ }
|
|
|
+}
|