backend changes

This commit is contained in:
Chandini 2025-09-03 10:47:50 +05:30
parent f927bd3d3b
commit 3ecaee5542
5 changed files with 49 additions and 39 deletions

View File

@ -555,6 +555,9 @@ services:
- RABBITMQ_PORT=5672 - RABBITMQ_PORT=5672
- RABBITMQ_USER=pipeline_admin - RABBITMQ_USER=pipeline_admin
- RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD} - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
# JWT Configuration (must match user-auth service)
- JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-${POSTGRES_PASSWORD}
- JWT_REFRESH_SECRET=refresh-secret-key-2024-tech4biz-${POSTGRES_PASSWORD}
# Internal service URLs for proxying (Docker network names) # Internal service URLs for proxying (Docker network names)
- USER_AUTH_URL=http://user-auth:8011 - USER_AUTH_URL=http://user-auth:8011
- TEMPLATE_MANAGER_URL=http://template-manager:8009 - TEMPLATE_MANAGER_URL=http://template-manager:8009

6
package-lock.json generated Normal file
View File

@ -0,0 +1,6 @@
{
"name": "codenuk-backend-live",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}

View File

@ -15,7 +15,7 @@
"express-rate-limit": "^6.8.1", "express-rate-limit": "^6.8.1",
"express-validator": "^7.0.1", "express-validator": "^7.0.1",
"helmet": "^7.0.0", "helmet": "^7.0.0",
"http-proxy-middleware": "^3.0.5", "http-proxy-middleware": "^2.0.6",
"jsonwebtoken": "^9.0.1", "jsonwebtoken": "^9.0.1",
"morgan": "^1.10.0", "morgan": "^1.10.0",
"pg": "^8.11.1", "pg": "^8.11.1",
@ -2803,45 +2803,29 @@
} }
}, },
"node_modules/http-proxy-middleware": { "node_modules/http-proxy-middleware": {
"version": "3.0.5", "version": "2.0.9",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
"integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/http-proxy": "^1.17.15", "@types/http-proxy": "^1.17.8",
"debug": "^4.3.6",
"http-proxy": "^1.18.1", "http-proxy": "^1.18.1",
"is-glob": "^4.0.3", "is-glob": "^4.0.1",
"is-plain-object": "^5.0.0", "is-plain-obj": "^3.0.0",
"micromatch": "^4.0.8" "micromatch": "^4.0.2"
}, },
"engines": { "engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0" "node": ">=12.0.0"
}
}, },
"node_modules/http-proxy-middleware/node_modules/debug": { "peerDependencies": {
"version": "4.4.1", "@types/express": "^4.17.13"
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"supports-color": { "@types/express": {
"optional": true "optional": true
} }
} }
}, },
"node_modules/http-proxy-middleware/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
"node_modules/human-signals": { "node_modules/human-signals": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@ -3014,13 +2998,16 @@
"node": ">=0.12.0" "node": ">=0.12.0"
} }
}, },
"node_modules/is-plain-object": { "node_modules/is-plain-obj": {
"version": "5.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/is-stream": { "node_modules/is-stream": {

View File

@ -4,9 +4,14 @@ const axios = require('axios');
// JWT token verification middleware // JWT token verification middleware
const verifyToken = async (req, res, next) => { const verifyToken = async (req, res, next) => {
try { try {
const token = req.headers.authorization?.split(' ')[1]; const authHeader = req.headers.authorization;
console.log('🔐 [API Gateway] Authorization header:', authHeader ? 'Present' : 'Missing');
const token = authHeader?.split(' ')[1];
console.log('🔐 [API Gateway] Token extracted:', token ? `${token.substring(0, 20)}...` : 'None');
if (!token) { if (!token) {
console.log('❌ [API Gateway] No token provided');
return res.status(401).json({ return res.status(401).json({
success: false, success: false,
message: 'Access token required', message: 'Access token required',
@ -14,8 +19,14 @@ const verifyToken = async (req, res, next) => {
}); });
} }
// Verify JWT token // Verify JWT token using the same secret as the auth service
const decoded = jwt.verify(token, process.env.JWT_SECRET); const jwtSecret = process.env.JWT_ACCESS_SECRET || process.env.JWT_SECRET || 'access-secret-key-2024-tech4biz';
console.log('🔐 [API Gateway] Verifying token with secret:', jwtSecret.substring(0, 20) + '...');
console.log('🔐 [API Gateway] Environment JWT_ACCESS_SECRET:', process.env.JWT_ACCESS_SECRET ? 'Set' : 'Not set');
console.log('🔐 [API Gateway] Environment JWT_SECRET:', process.env.JWT_SECRET ? 'Set' : 'Not set');
const decoded = jwt.verify(token, jwtSecret);
console.log('✅ [API Gateway] Token verified successfully for user:', decoded.id || decoded.userId);
req.user = decoded; req.user = decoded;
// Add user context to headers for downstream services // Add user context to headers for downstream services
@ -25,9 +36,12 @@ const verifyToken = async (req, res, next) => {
next(); next();
} catch (error) { } catch (error) {
console.error('Token verification failed:', error.message); console.error('❌ [API Gateway] Token verification failed:', error.message);
console.error('❌ [API Gateway] Error type:', error.name);
console.error('❌ [API Gateway] Error stack:', error.stack);
if (error.name === 'TokenExpiredError') { if (error.name === 'TokenExpiredError') {
console.log('❌ [API Gateway] Token expired');
return res.status(401).json({ return res.status(401).json({
success: false, success: false,
message: 'Token expired', message: 'Token expired',
@ -36,6 +50,7 @@ const verifyToken = async (req, res, next) => {
} }
if (error.name === 'JsonWebTokenError') { if (error.name === 'JsonWebTokenError') {
console.log('❌ [API Gateway] Invalid token format or signature');
return res.status(401).json({ return res.status(401).json({
success: false, success: false,
message: 'Invalid token', message: 'Invalid token',
@ -43,6 +58,7 @@ const verifyToken = async (req, res, next) => {
}); });
} }
console.log('❌ [API Gateway] General authentication error');
return res.status(401).json({ return res.status(401).json({
success: false, success: false,
message: 'Authentication failed', message: 'Authentication failed',

View File

@ -10,8 +10,6 @@ const logger = winston.createLogger({
), ),
defaultMeta: { service: 'api-gateway' }, defaultMeta: { service: 'api-gateway' },
transports: [ transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' }),
new winston.transports.Console({ new winston.transports.Console({
format: winston.format.combine( format: winston.format.combine(
winston.format.colorize(), winston.format.colorize(),