Files
secretive/Sources/Secretive/Views/Secrets/CertificateDetailView.swift
T
2026-09-07 12:49:44 -07:00

94 lines
4.4 KiB
Swift

import SwiftUI
import SecretKit
import Common
import CertificateKit
import SSHProtocolKit
import CryptoKit
struct CertificateDetailView: View {
let certificate: Certificate
var body: some View {
ScrollView {
Form {
Section {
CopyableView(
title: .certificateDetailKeyIdLabel,
image: Image(systemName: "person.text.rectangle"),
text: certificate.keyID
)
Spacer()
.frame(height: 20)
CopyableView(
title: .certificateDetailSerialLabel,
image: Image(systemName: "number.circle"),
text: certificate.serial.formatted()
)
Spacer()
.frame(height: 20)
CopyableView(
title: .secretDetailSha256FingerprintLabel,
image: Image(systemName: "touchid"),
text: OpenSSHCertificateWriter().openSSHSHA256KeyFingerprint(publicKey: certificate.publicKey)
)
Spacer()
.frame(height: 20)
CopyableView(
title: .secretDetailSha256FingerprintLabel,
image: Image(systemName: "touchid"),
text: OpenSSHCertificateWriter().openSSHSHA256KeyFingerprint(publicKey: certificate.signingKey)
)
Spacer()
.frame(height: 20)
CopyableView(
title: .certificateDetailPathLabel,
image: Image(systemName: "checkmark.seal.text.page"),
text: URL.certificatePath(for: certificate.id, in: URL.certificatesDirectory),
showRevealInFinder: true
)
// if let validityRange = certificate.validityRange {
// let epoch = Date(timeIntervalSince1970: 0)
// let end = Date(timeIntervalSince1970: TimeInterval(UInt64.max))
// switch (validityRange.lowerBound, validityRange.upperBound) {
// case (epoch, end):
// EmptyView()
// case (epoch, let otherEnd):
// Spacer()
// .frame(height: 20)
// MultilineInfoView(title: .certificateDetailValidUntilLabel, image: Image(systemName: "calendar.badge.clock"), items: [otherEnd.formatted()])
// case (let otherStart, end):
// Spacer()
// .frame(height: 20)
// MultilineInfoView(title: .certificateDetailValidAfterLabel, image: Image(systemName: "calendar.badge.clock"), items: [otherStart.formatted()])
// default:
// Spacer()
// .frame(height: 20)
// MultilineInfoView(title: .certificateDetailValidityRangeLabel, image: Image(systemName: "calendar.badge.clock"), items: [validityRange.formatted()])
// }
// }
// if !certificate.principals.isEmpty {
// Spacer()
// .frame(height: 20)
// MultilineInfoView(title: .certificateDetailPrincipalsLabel, image: Image(systemName: "person.2"), items: certificate.principals)
// }
// if !certificate.criticalOptions.isEmpty {
// Spacer()
// .frame(height: 20)
// MultilineInfoView(title: .certificateDetailCriticalOptionsLabel, image: Image(systemName: "person.2"), items: certificate.criticalOptions)
// }
// if !certificate.extensions.isEmpty {
// Spacer()
// .frame(height: 20)
// MultilineInfoView(title: .certificateDetailExtensionsLabel, image: Image(systemName: "person.2"), items: certificate.extensions)
// }
// Spacer()
}
}
.padding()
}
.frame(minHeight: 200, maxHeight: .infinity)
}
}