fix(backend): улучшить уникальность идентификаторов сертификатов
This commit is contained in:
@@ -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 }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user