Fix jwt-token
This commit is contained in:
@@ -375,4 +375,79 @@ router.get('/status', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* POST /api/data-retention/cleanup
|
||||
* Trigger manual data retention cleanup
|
||||
* RESTRICTED: Management users only
|
||||
*/
|
||||
router.post('/cleanup', async (req, res) => {
|
||||
try {
|
||||
// Add security headers
|
||||
res.setHeader('X-Content-Type-Options', 'nosniff');
|
||||
res.setHeader('X-Frame-Options', 'DENY');
|
||||
res.setHeader('X-XSS-Protection', '1; mode=block');
|
||||
|
||||
// Make HTTP request to data retention service cleanup endpoint
|
||||
const response = await new Promise((resolve, reject) => {
|
||||
const options = {
|
||||
hostname: DATA_RETENTION_HOST,
|
||||
port: DATA_RETENTION_PORT,
|
||||
path: '/cleanup',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
timeout: 30000 // 30 second timeout for cleanup operation
|
||||
};
|
||||
|
||||
const req = http.request(options, (res) => {
|
||||
let data = '';
|
||||
res.on('data', (chunk) => data += chunk);
|
||||
res.on('end', () => {
|
||||
try {
|
||||
const parsed = data ? JSON.parse(data) : {};
|
||||
resolve({ status: res.statusCode, data: parsed });
|
||||
} catch (e) {
|
||||
resolve({ status: res.statusCode, data: { message: data } });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
req.on('error', reject);
|
||||
req.on('timeout', () => reject(new Error('Data retention service timeout')));
|
||||
req.end();
|
||||
});
|
||||
|
||||
if (response.status === 200 || response.status === 202) {
|
||||
// Log successful cleanup trigger
|
||||
await auditLogger.logSuccess(req.managementUser, req, '/cleanup');
|
||||
console.log(`✅ Data retention cleanup triggered by ${req.managementUser.username}`);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: response.data,
|
||||
message: 'Data retention cleanup initiated successfully',
|
||||
timestamp: new Date().toISOString(),
|
||||
triggeredBy: {
|
||||
username: req.managementUser.username,
|
||||
role: req.managementUser.role
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.status(response.status).json({
|
||||
success: false,
|
||||
error: 'Failed to trigger cleanup in data retention service',
|
||||
details: response.data
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`❌ Data retention cleanup trigger error for ${req.managementUser.username}:`, error);
|
||||
res.status(503).json({
|
||||
success: false,
|
||||
error: 'Data retention service unavailable',
|
||||
details: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user