mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-05-07 07:58:58 +02:00
94 lines
4.4 KiB
Swift
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)
|
|
}
|
|
|
|
|
|
}
|