mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-03-06 09:47:22 +01:00
Add descriptions for unavailable keys (#708)
* Describe unavailable key types * Cleanup
This commit is contained in:
@@ -5833,6 +5833,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"create_secret_key_type_macOS_update_required_label" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Unavailable on this version of macOS"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"create_secret_mldsa_warning" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
|
||||
@@ -64,7 +64,7 @@ public final class AnySecretStoreModifiable: AnySecretStore, SecretStoreModifiab
|
||||
private let _create: @Sendable (String, Attributes) async throws -> AnySecret
|
||||
private let _delete: @Sendable (AnySecret) async throws -> Void
|
||||
private let _update: @Sendable (AnySecret, String, Attributes) async throws -> Void
|
||||
private let _supportedKeyTypes: @Sendable () -> [KeyType]
|
||||
private let _supportedKeyTypes: @Sendable () -> KeyAvailability
|
||||
|
||||
public init<SecretStoreType>(_ secretStore: SecretStoreType) where SecretStoreType: SecretStoreModifiable {
|
||||
_create = { AnySecret(try await secretStore.create(name: $0, attributes: $1)) }
|
||||
@@ -87,7 +87,7 @@ public final class AnySecretStoreModifiable: AnySecretStore, SecretStoreModifiab
|
||||
try await _update(secret, name, attributes)
|
||||
}
|
||||
|
||||
public var supportedKeyTypes: [KeyType] {
|
||||
public var supportedKeyTypes: KeyAvailability {
|
||||
_supportedKeyTypes()
|
||||
}
|
||||
|
||||
|
||||
@@ -62,10 +62,37 @@ public protocol SecretStoreModifiable<SecretType>: SecretStore {
|
||||
/// - attributes: The new attributes for the secret.
|
||||
func update(secret: SecretType, name: String, attributes: Attributes) async throws
|
||||
|
||||
var supportedKeyTypes: [KeyType] { get }
|
||||
var supportedKeyTypes: KeyAvailability { get }
|
||||
|
||||
}
|
||||
|
||||
public struct KeyAvailability: Sendable {
|
||||
|
||||
public let available: [KeyType]
|
||||
public let unavailable: [UnavailableKeyType]
|
||||
|
||||
public init(available: [KeyType], unavailable: [UnavailableKeyType]) {
|
||||
self.available = available
|
||||
self.unavailable = unavailable
|
||||
}
|
||||
|
||||
public struct UnavailableKeyType: Sendable {
|
||||
public let keyType: KeyType
|
||||
public let reason: Reason
|
||||
|
||||
public init(keyType: KeyType, reason: Reason) {
|
||||
self.keyType = keyType
|
||||
self.reason = reason
|
||||
}
|
||||
|
||||
public enum Reason: Sendable {
|
||||
case macOSUpdateRequired
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
extension NSNotification.Name {
|
||||
|
||||
// Distributed notification that keys were modified out of process (ie, that the management tool added/removed secrets)
|
||||
|
||||
@@ -186,17 +186,22 @@ extension SecureEnclave {
|
||||
await reloadSecrets()
|
||||
}
|
||||
|
||||
public var supportedKeyTypes: [KeyType] {
|
||||
if #available(macOS 26, *) {
|
||||
[
|
||||
.ecdsa256,
|
||||
.mldsa65,
|
||||
.mldsa87,
|
||||
]
|
||||
public let supportedKeyTypes: KeyAvailability = {
|
||||
let macOS26Keys: [KeyType] = [.mldsa65, .mldsa87]
|
||||
let isAtLeastMacOS26 = if #available(macOS 26, *) {
|
||||
true
|
||||
} else {
|
||||
[.ecdsa256]
|
||||
false
|
||||
}
|
||||
}
|
||||
return KeyAvailability(
|
||||
available: [
|
||||
.ecdsa256,
|
||||
] + (isAtLeastMacOS26 ? macOS26Keys : []),
|
||||
unavailable: (isAtLeastMacOS26 ? [] : macOS26Keys).map {
|
||||
KeyAvailability.UnavailableKeyType(keyType: $0, reason: .macOSUpdateRequired)
|
||||
}
|
||||
)
|
||||
}()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user