From 500a5430456fdcf3403896fe78f4bb2afe0d8b69 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Tue, 12 May 2026 20:29:57 +0700 Subject: [PATCH] =?UTF-8?q?fix(backend):=20=D1=83=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=83=D0=BD=D0=B8=D0=BA=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B8=D0=B4=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/services/certificate-parse.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/backend/src/services/certificate-parse.ts b/backend/src/services/certificate-parse.ts index fe0b950..3b3f65e 100644 --- a/backend/src/services/certificate-parse.ts +++ b/backend/src/services/certificate-parse.ts @@ -53,6 +53,11 @@ export function mapRosCertificateRow( const name = (row.name ?? "").trim() if (!name) return null + const rosId = (row[".id"] ?? "").trim() + const fingerprint = (row.fingerprint ?? "").trim() + const serialNumber = (row["serial-number"] ?? "").trim() + const stableId = rosId || fingerprint || serialNumber || name + const { revoked, expired: expiredFlag } = parseFlags(row.flags) const validFrom = parseRosDate(row["invalid-before"]) const validUntil = parseRosDate(row["invalid-after"]) @@ -68,7 +73,7 @@ export function mapRosCertificateRow( const keySize = Number.parseInt(String(row["key-size"] ?? "0"), 10) return { - id: `${serverId}:${name}`, + id: `${serverId}:${stableId}`, name, serverId: String(serverId), serverName, @@ -91,7 +96,17 @@ export function mapRosCertificates( serverName: string, rows: RosCertificateRow[], ): CertificateDto[] { + const seen = new Set() return rows .map((row) => mapRosCertificateRow(serverId, serverName, row)) .filter((row): row is CertificateDto => row != null) + .map((cert, index) => { + if (!seen.has(cert.id)) { + seen.add(cert.id) + return cert + } + const uniqueId = `${cert.id}#${index}` + seen.add(uniqueId) + return { ...cert, id: uniqueId } + }) }