Aethel Bot OSS repository!
aethel.xyz
bot
fun
ai
discord
discord-bot
aethel
1import { Request, Response, NextFunction } from 'express';
2import jwt from 'jsonwebtoken';
3import logger from '../utils/logger';
4
5if (!process.env.JWT_SECRET) {
6 throw new Error('JWT_SECRET environment variable is required');
7}
8
9const JWT_SECRET = process.env.JWT_SECRET;
10
11interface JwtPayload {
12 userId: string;
13 username: string;
14 discriminator: string;
15 avatar?: string;
16 iat?: number;
17 exp?: number;
18}
19
20export const authenticateToken = (req: Request, res: Response, next: NextFunction) => {
21 const authHeader = req.headers['authorization'];
22 const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
23
24 if (!token) {
25 return res.status(401).json({ error: 'Access token required' });
26 }
27
28 try {
29 const decoded = jwt.verify(token, JWT_SECRET) as unknown as JwtPayload;
30 req.user = decoded;
31 next();
32 } catch (error) {
33 if (error instanceof jwt.TokenExpiredError) {
34 logger.debug('Expired JWT token used');
35 return res.status(401).json({ error: 'Token expired' });
36 } else if (error instanceof jwt.JsonWebTokenError) {
37 logger.debug('Invalid JWT token used');
38 return res.status(401).json({ error: 'Invalid token' });
39 }
40 logger.error('JWT verification error:', error);
41 return res.status(500).json({ error: 'Token verification failed' });
42 }
43};