Fix jwt-token
This commit is contained in:
2
.env
2
.env
@@ -22,6 +22,8 @@ PROBE_FAILRATE=30
|
|||||||
PROBE_INTERVAL_SECONDS=60
|
PROBE_INTERVAL_SECONDS=60
|
||||||
API_BASE_URL=https://selfservice.cqers.com/drones/api
|
API_BASE_URL=https://selfservice.cqers.com/drones/api
|
||||||
|
|
||||||
|
API_DEBUG=true
|
||||||
|
|
||||||
# Optional: Override default settings
|
# Optional: Override default settings
|
||||||
# NODE_ENV=production
|
# NODE_ENV=production
|
||||||
# CORS_ORIGIN=http://localhost:3000
|
# CORS_ORIGIN=http://localhost:3000
|
||||||
|
|||||||
59
.gitignore
vendored
Normal file
59
.gitignore
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Dependencies
|
||||||
|
node_modules/
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Production build
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Debug files
|
||||||
|
api_debug.log
|
||||||
|
debug.log
|
||||||
|
requests.log
|
||||||
|
responses.log
|
||||||
|
|
||||||
|
# IDE files
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Database
|
||||||
|
*.sqlite
|
||||||
|
*.db
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
.dockerignore
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
.venv/
|
||||||
|
pip-log.txt
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
*.tmp
|
||||||
|
*.temp
|
||||||
132
server/utils/apiDebugLogger.js
Normal file
132
server/utils/apiDebugLogger.js
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
class ApiDebugLogger {
|
||||||
|
constructor() {
|
||||||
|
this.logFile = path.join(__dirname, '..', 'api_debug.log');
|
||||||
|
this.enabled = process.env.NODE_ENV === 'development' || process.env.API_DEBUG === 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
log(method, url, statusCode, requestBody = {}, responseBody = {}, headers = {}) {
|
||||||
|
if (!this.enabled) return;
|
||||||
|
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
const sanitizedRequest = this.sanitizeData(requestBody);
|
||||||
|
const sanitizedResponse = this.sanitizeData(responseBody);
|
||||||
|
const sanitizedHeaders = this.sanitizeHeaders(headers);
|
||||||
|
|
||||||
|
const logEntry = [
|
||||||
|
`[${timestamp}]`,
|
||||||
|
method.toUpperCase(),
|
||||||
|
url,
|
||||||
|
`-`,
|
||||||
|
`STATUS:${statusCode}`,
|
||||||
|
`-`,
|
||||||
|
`REQ:${JSON.stringify(sanitizedRequest)}`,
|
||||||
|
`-`,
|
||||||
|
`RES:${JSON.stringify(sanitizedResponse)}`,
|
||||||
|
`-`,
|
||||||
|
`HEADERS:${JSON.stringify(sanitizedHeaders)}`
|
||||||
|
].join(' ');
|
||||||
|
|
||||||
|
try {
|
||||||
|
fs.appendFileSync(this.logFile, logEntry + '\n');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to write to API debug log:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sanitizeData(data) {
|
||||||
|
if (!data || typeof data !== 'object') return data;
|
||||||
|
|
||||||
|
const sanitized = { ...data };
|
||||||
|
|
||||||
|
// Remove sensitive fields
|
||||||
|
const sensitiveFields = ['password', 'token', 'secret', 'key', 'auth', 'authorization'];
|
||||||
|
|
||||||
|
sensitiveFields.forEach(field => {
|
||||||
|
if (sanitized[field]) {
|
||||||
|
sanitized[field] = '***REDACTED***';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return sanitized;
|
||||||
|
}
|
||||||
|
|
||||||
|
sanitizeHeaders(headers) {
|
||||||
|
if (!headers || typeof headers !== 'object') return {};
|
||||||
|
|
||||||
|
const sanitized = { ...headers };
|
||||||
|
|
||||||
|
// Remove sensitive headers
|
||||||
|
const sensitiveHeaders = ['authorization', 'cookie', 'x-api-key', 'x-auth-token'];
|
||||||
|
|
||||||
|
sensitiveHeaders.forEach(header => {
|
||||||
|
if (sanitized[header]) {
|
||||||
|
sanitized[header] = '***REDACTED***';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return sanitized;
|
||||||
|
}
|
||||||
|
|
||||||
|
logRequest(req) {
|
||||||
|
if (!this.enabled) return;
|
||||||
|
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
const logEntry = `[${timestamp}] INCOMING ${req.method} ${req.url} - BODY:${JSON.stringify(this.sanitizeData(req.body))} - HEADERS:${JSON.stringify(this.sanitizeHeaders(req.headers))}`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
fs.appendFileSync(this.logFile, logEntry + '\n');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to write request to API debug log:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logResponse(req, res, responseBody) {
|
||||||
|
if (!this.enabled) return;
|
||||||
|
|
||||||
|
this.log(
|
||||||
|
req.method,
|
||||||
|
req.url,
|
||||||
|
res.statusCode,
|
||||||
|
req.body,
|
||||||
|
responseBody,
|
||||||
|
{
|
||||||
|
'content-type': res.getHeader('content-type'),
|
||||||
|
'user-agent': req.headers['user-agent']
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
clear() {
|
||||||
|
try {
|
||||||
|
fs.writeFileSync(this.logFile, '# API Debug Log Cleared at ' + new Date().toISOString() + '\n');
|
||||||
|
console.log('API debug log cleared');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to clear API debug log:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Middleware function for Express
|
||||||
|
function apiDebugMiddleware(req, res, next) {
|
||||||
|
const logger = new ApiDebugLogger();
|
||||||
|
|
||||||
|
// Log incoming request
|
||||||
|
logger.logRequest(req);
|
||||||
|
|
||||||
|
// Override res.json to capture response
|
||||||
|
const originalJson = res.json;
|
||||||
|
res.json = function(data) {
|
||||||
|
logger.logResponse(req, res, data);
|
||||||
|
return originalJson.call(this, data);
|
||||||
|
};
|
||||||
|
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
ApiDebugLogger,
|
||||||
|
apiDebugMiddleware
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user