Fix jwt-token

This commit is contained in:
2025-08-19 19:26:42 +02:00
parent 8d9a3478fe
commit a756e3e092
3 changed files with 193 additions and 0 deletions

2
.env
View File

@@ -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
View 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

View 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
};