security(auth): anti-enumeration, returnTo-валидация, лимит попыток логина
Шаг 2.1 плана production-готовности: - единый 401 при любом отказе логина + constant-time bcrypt - forgot-password: идентичный ответ независимо от существования email - sanitizeReturnTo (open redirect fix в /api/documents/generate-link) - 10 неудачных попыток → блок 15 мин (in-memory, аудит) - DATABASE_SSL_REJECT_UNAUTHORIZED env (дефолт true) - доделка 0.7: статичные тексты в llm-providers/rag/finance-di2 - 8 новых тестов (104/104)
This commit is contained in:
@@ -313,7 +313,8 @@ router.post(
|
||||
});
|
||||
if (!response.ok) {
|
||||
const text = await response.text();
|
||||
return res.json({ success: false, error: `Ошибка Ollama при генерации эмбеддинга (${response.status}): ${text.slice(0, 200)}` });
|
||||
console.error(`[RAG] Ollama embeddings error (${response.status}):`, text.slice(0, 200));
|
||||
return res.json({ success: false, error: `Ошибка Ollama при генерации эмбеддинга (${response.status})` });
|
||||
}
|
||||
return res.json({ success: true, message: "Подключение успешно, модель доступна" });
|
||||
}
|
||||
@@ -335,14 +336,15 @@ router.post(
|
||||
|
||||
if (!response.ok) {
|
||||
const text = await response.text();
|
||||
return res.json({ success: false, error: `Ошибка API (${response.status}): ${text.slice(0, 300)}` });
|
||||
console.error(`[RAG] embeddings API error (${response.status}):`, text.slice(0, 300));
|
||||
return res.json({ success: false, error: `Ошибка API (${response.status})` });
|
||||
}
|
||||
|
||||
return res.json({ success: true, message: "Подключение успешно" });
|
||||
} catch (err: any) {
|
||||
const msg = err?.message ?? String(err);
|
||||
console.error("[RAG] test connection error:", msg);
|
||||
return res.json({ success: false, error: `Ошибка соединения: ${msg.slice(0, 200)}` });
|
||||
return res.json({ success: false, error: "Ошибка соединения с сервисом эмбеддингов" });
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user