v0.6.11: guard на ВСЕ обязательные поля DB — companyId, cidr, userEmail, entryId

This commit is contained in:
2026-06-15 10:45:21 +04:00
parent b3d0fc36a6
commit 2cf86a22de
3 changed files with 17 additions and 2 deletions
+15
View File
@@ -67,6 +67,9 @@ async function listEntries(companyId, includeDeleted = false) {
* Создать запись (с валидацией, проверкой лимита и пересечений).
*/
async function createEntry(companyId, cidr, comment, userEmail, impersonatedBy, wasNormalized = false) {
if (!companyId) throw new Error('DB: companyId обязателен');
if (!cidr) throw new Error('DB: cidr обязателен');
if (!userEmail) throw new Error('DB: userEmail обязателен');
const client = await pool.connect();
try {
await client.query('BEGIN');
@@ -113,6 +116,10 @@ async function createEntry(companyId, cidr, comment, userEmail, impersonatedBy,
* Обновить запись.
*/
async function updateEntry(entryId, companyId, cidr, comment, userEmail, impersonatedBy, wasNormalized = false) {
if (!entryId) throw new Error('DB: entryId обязателен');
if (!companyId) throw new Error('DB: companyId обязателен');
if (!cidr) throw new Error('DB: cidr обязателен');
if (!userEmail) throw new Error('DB: userEmail обязателен');
const client = await pool.connect();
try {
await client.query('BEGIN');
@@ -154,6 +161,9 @@ async function updateEntry(entryId, companyId, cidr, comment, userEmail, imperso
* Удалить запись (soft delete).
*/
async function deleteEntry(entryId, companyId, userEmail, impersonatedBy) {
if (!entryId) throw new Error('DB: entryId обязателен');
if (!companyId) throw new Error('DB: companyId обязателен');
if (!userEmail) throw new Error('DB: userEmail обязателен');
const client = await pool.connect();
try {
await client.query('BEGIN');
@@ -197,6 +207,8 @@ async function getAllCompanies() {
}
async function setLimit(companyId, newLimit) {
if (!companyId) throw new Error('DB: companyId обязателен');
if (newLimit == null || newLimit < 0) throw new Error('DB: newLimit должен быть >= 0');
const result = await pool.query(
'UPDATE companies SET custom_limit = $1, updated_at = NOW() WHERE id = $2',
[newLimit, companyId]
@@ -221,6 +233,9 @@ async function getExportCIDRs(companyId = null) {
// ── Аудит ─────────────────────────────────────────────────────────────────────
async function logAudit(userEmail, companyId, action, oldValue, newValue, entryId, impersonatedBy, db = pool) {
if (!userEmail) throw new Error('DB audit: userEmail обязателен');
if (!companyId) throw new Error('DB audit: companyId обязателен');
if (!action) throw new Error('DB audit: action обязателен');
await db.query(
`INSERT INTO audit_log (user_email, company_id, action, old_value, new_value, entry_id, impersonated_by)
VALUES ($1, $2, $3, $4, $5, $6, $7)`,