fix(backend): улучшить уникальность идентификаторов сертификатов

This commit is contained in:
Denozordec
2026-05-12 20:29:57 +07:00
parent 60024facab
commit 500a543045
+16 -1
View File
@@ -53,6 +53,11 @@ export function mapRosCertificateRow(
const name = (row.name ?? "").trim() const name = (row.name ?? "").trim()
if (!name) return null 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 { revoked, expired: expiredFlag } = parseFlags(row.flags)
const validFrom = parseRosDate(row["invalid-before"]) const validFrom = parseRosDate(row["invalid-before"])
const validUntil = parseRosDate(row["invalid-after"]) const validUntil = parseRosDate(row["invalid-after"])
@@ -68,7 +73,7 @@ export function mapRosCertificateRow(
const keySize = Number.parseInt(String(row["key-size"] ?? "0"), 10) const keySize = Number.parseInt(String(row["key-size"] ?? "0"), 10)
return { return {
id: `${serverId}:${name}`, id: `${serverId}:${stableId}`,
name, name,
serverId: String(serverId), serverId: String(serverId),
serverName, serverName,
@@ -91,7 +96,17 @@ export function mapRosCertificates(
serverName: string, serverName: string,
rows: RosCertificateRow[], rows: RosCertificateRow[],
): CertificateDto[] { ): CertificateDto[] {
const seen = new Set<string>()
return rows return rows
.map((row) => mapRosCertificateRow(serverId, serverName, row)) .map((row) => mapRosCertificateRow(serverId, serverName, row))
.filter((row): row is CertificateDto => row != null) .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 }
})
} }