security(errors): 5xx без утечки err.message клиенту
Шаг 0.7 плана production-готовности: - глобальный error handler: нейтральный текст + код инцидента, детали в лог - route-уровень: зачистка err.message/String(err) в 5xx по 12 файлам, оригинальные ошибки логируются с контекстом
This commit is contained in:
@@ -29,7 +29,8 @@ router.get('/api/tasks/:taskId/reactions', authenticateToken, tenantIsolation, a
|
||||
const reactions = await getReactionsForTaskMsgs(msgIds, req.user!.id);
|
||||
return res.json({ success: true, reactions });
|
||||
} catch (err: any) {
|
||||
return res.status(500).json({ success: false, error: err.message });
|
||||
console.error('[REACTIONS] Ошибка загрузки реакций задачи:', err);
|
||||
return res.status(500).json({ success: false, error: 'Ошибка загрузки реакций' });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -55,7 +56,8 @@ router.get('/api/messenger/conversations/:id/reactions', authenticateToken, tena
|
||||
const reactions = await getReactionsForConvMsgs(msgIds, req.user!.id);
|
||||
return res.json({ success: true, reactions });
|
||||
} catch (err: any) {
|
||||
return res.status(500).json({ success: false, error: err.message });
|
||||
console.error('[REACTIONS] Ошибка загрузки реакций диалога:', err);
|
||||
return res.status(500).json({ success: false, error: 'Ошибка загрузки реакций' });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -117,7 +119,8 @@ router.post('/api/messages/:id/reactions', authenticateToken, tenantIsolation, a
|
||||
|
||||
return res.json({ success: true, reactions });
|
||||
} catch (err: any) {
|
||||
return res.status(500).json({ success: false, error: err.message });
|
||||
console.error('[REACTIONS] Ошибка обновления реакции на сообщение задачи:', err);
|
||||
return res.status(500).json({ success: false, error: 'Ошибка обновления реакции' });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -143,7 +146,8 @@ router.delete('/api/messages/:id/reactions', authenticateToken, tenantIsolation,
|
||||
emitTaskReaction(req.organizationId!, { taskMessageId: msgId, taskId: ctx.taskId, reactions });
|
||||
return res.json({ success: true, reactions });
|
||||
} catch (err: any) {
|
||||
return res.status(500).json({ success: false, error: err.message });
|
||||
console.error('[REACTIONS] Ошибка удаления реакции с сообщения задачи:', err);
|
||||
return res.status(500).json({ success: false, error: 'Ошибка удаления реакции' });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -210,7 +214,8 @@ router.post('/api/conv-messages/:id/reactions', authenticateToken, tenantIsolati
|
||||
|
||||
return res.json({ success: true, reactions });
|
||||
} catch (err: any) {
|
||||
return res.status(500).json({ success: false, error: err.message });
|
||||
console.error('[REACTIONS] Ошибка обновления реакции на сообщение диалога:', err);
|
||||
return res.status(500).json({ success: false, error: 'Ошибка обновления реакции' });
|
||||
}
|
||||
});
|
||||
|
||||
@@ -236,7 +241,8 @@ router.delete('/api/conv-messages/:id/reactions', authenticateToken, tenantIsola
|
||||
await emitConvReaction(ctx.conversationId, req.organizationId!, { convMessageId: msgId, conversationId: ctx.conversationId, reactions });
|
||||
return res.json({ success: true, reactions });
|
||||
} catch (err: any) {
|
||||
return res.status(500).json({ success: false, error: err.message });
|
||||
console.error('[REACTIONS] Ошибка удаления реакции с сообщения диалога:', err);
|
||||
return res.status(500).json({ success: false, error: 'Ошибка удаления реакции' });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user