Атрибуция от бота в MCP/REST + REST API по ключу (этап 2)
- MCP: getActor (владелец ключа + бот), аудит changedByName=бот/label ключа, botId, metadata.source='mcp'; аудит для update_task/update_task_status - sendTaskMessage: botId (messageType 'bot'), починен путь isBotToken без req.user - authenticateTokenOrApiKey: JWT или X-Api-Key с белым списком endpoint'ов (/api/upload, messages, field-values, create task), проверки скоупов, аудит source='api' - Лимиты файлов через env: UPLOAD_IMAGE_MAX_MB=25, UPLOAD_DOC_MAX_MB=100, UPLOAD_MAX_MB=100 - MCP upload-инструменты: параметр fileUrl для привязки уже загруженного файла; новый инструмент get_api_guide
This commit is contained in:
@@ -53,10 +53,13 @@ export const EXT_MAGIC: Record<string, Buffer> = {
|
||||
pdf: Buffer.from([0x25, 0x50, 0x44, 0x46]), // %PDF
|
||||
};
|
||||
|
||||
// Image extensions → 10 MB limit; all others → 50 MB
|
||||
// Image extensions → лимит изображений; all others → документный лимит
|
||||
// Лимиты настраиваются через env (в МБ), дефолты: 25 МБ изображения, 100 МБ документы
|
||||
export const IMAGE_EXTENSIONS = new Set(['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg']);
|
||||
export const IMAGE_MAX_SIZE = 10 * 1024 * 1024; // 10 МБ
|
||||
export const DOC_MAX_SIZE = 50 * 1024 * 1024; // 50 МБ
|
||||
export const IMAGE_MAX_SIZE = Number(process.env.UPLOAD_IMAGE_MAX_MB || 25) * 1024 * 1024;
|
||||
export const DOC_MAX_SIZE = Number(process.env.UPLOAD_DOC_MAX_MB || 100) * 1024 * 1024;
|
||||
// Жёсткий потолок multer (fileSize) — отдельный env, дефолт 100 МБ
|
||||
export const UPLOAD_MAX_SIZE = Number(process.env.UPLOAD_MAX_MB || 100) * 1024 * 1024;
|
||||
|
||||
// Derives the lowercase extension from the original filename (trusted)
|
||||
export function getFileExt(originalname: string): string {
|
||||
@@ -127,7 +130,7 @@ const multerStorage = multer.diskStorage({
|
||||
|
||||
export const upload = multer({
|
||||
storage: multerStorage,
|
||||
limits: { fileSize: DOC_MAX_SIZE }, // hard cap 50 МБ; per-type check done in handler
|
||||
limits: { fileSize: UPLOAD_MAX_SIZE }, // жёсткий потолок (UPLOAD_MAX_MB); раздельная проверка по типам — в хендлере
|
||||
fileFilter: (_req, file, cb) => {
|
||||
// 1. Validate filename: strict regex + extension whitelist (extension is trusted)
|
||||
const { valid, reason } = validateFilename(file.originalname);
|
||||
|
||||
Reference in New Issue
Block a user