system-prompts-and-models-o.../Nowhere_AI_Agent/backend/src/middleware/auth.ts
dopeuni444 d43632a49a Removes outdated prompt files
Removes the `Chat Prompt.txt`, `VSCode Agent/Prompt.txt`, `Warp.dev/Prompt.txt`, and `v0 Prompts and Tools/Prompt.txt` files.

These files likely contain outdated prompts or configurations that are no longer needed in the current project. Removing them helps to clean up the codebase and prevent potential confusion or conflicts.
2025-07-31 01:45:01 +04:00

107 lines
2.6 KiB
TypeScript

import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
import { Logger } from '../utils/logger';
const logger = new Logger('AuthMiddleware');
export interface AuthenticatedRequest extends Request {
user?: {
id: string;
email?: string;
role?: string;
};
}
export function authMiddleware(req: AuthenticatedRequest, res: Response, next: NextFunction) {
try {
// Skip authentication for public endpoints
if (req.path.startsWith('/public')) {
return next();
}
// Get token from header
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
// For development, allow requests without token
if (process.env.NODE_ENV === 'development') {
req.user = {
id: 'default-user',
email: 'dev@nowhere.ai',
role: 'developer'
};
return next();
}
return res.status(401).json({
success: false,
message: 'Access token required'
});
}
const token = authHeader.substring(7); // Remove 'Bearer ' prefix
// Verify token
const secret = process.env.JWT_SECRET || 'nowhere-secret-key';
const decoded = jwt.verify(token, secret) as any;
// Add user info to request
req.user = {
id: decoded.id || decoded.sub,
email: decoded.email,
role: decoded.role || 'user'
};
logger.debug('User authenticated', {
userId: req.user.id,
role: req.user.role
});
next();
} catch (error) {
logger.error('Authentication failed', { error: error.message });
// For development, allow requests with invalid tokens
if (process.env.NODE_ENV === 'development') {
req.user = {
id: 'default-user',
email: 'dev@nowhere.ai',
role: 'developer'
};
return next();
}
return res.status(401).json({
success: false,
message: 'Invalid or expired token'
});
}
}
/**
* Generate JWT token for user
*/
export function generateToken(userId: string, email?: string, role?: string): string {
const secret = process.env.JWT_SECRET || 'nowhere-secret-key';
const payload = {
id: userId,
email,
role: role || 'user',
iat: Math.floor(Date.now() / 1000),
exp: Math.floor(Date.now() / 1000) + (24 * 60 * 60) // 24 hours
};
return jwt.sign(payload, secret);
}
/**
* Verify token and return user info
*/
export function verifyToken(token: string): any {
try {
const secret = process.env.JWT_SECRET || 'nowhere-secret-key';
return jwt.verify(token, secret);
} catch (error) {
throw new Error('Invalid token');
}
}