54 lines
2.4 KiB
Swift
54 lines
2.4 KiB
Swift
import Foundation
|
|
import DataLiteCore
|
|
|
|
/// A protocol for providing encryption keys to a database service.
|
|
///
|
|
/// `DatabaseServiceKeyProvider` is responsible for managing encryption keys used
|
|
/// by a database service. This makes it possible to implement different strategies for storing
|
|
/// and retrieving keys: static, dynamic, hardware-backed, biometric, and others.
|
|
///
|
|
/// - The service requests a key when establishing or restoring a connection.
|
|
/// - If decryption fails, the service may ask the provider whether it should attempt to reconnect.
|
|
/// - If applying a key fails (for example, the key does not match or the
|
|
/// ``databaseService(keyFor:)`` method throws an error), this error is reported
|
|
/// to the provider through ``databaseService(_:didReceive:)``.
|
|
///
|
|
/// - Important: The provider does not receive notifications about general database errors.
|
|
///
|
|
/// ## Topics
|
|
///
|
|
/// ### Instance Methods
|
|
///
|
|
/// - ``databaseService(keyFor:)``
|
|
/// - ``databaseService(shouldReconnect:)``
|
|
/// - ``databaseService(_:didReceive:)``
|
|
public protocol DatabaseServiceKeyProvider: AnyObject, Sendable {
|
|
/// Returns the encryption key for the specified database service.
|
|
///
|
|
/// May return `nil` if the encryption key is currently unavailable or if the database
|
|
/// does not require encryption.
|
|
///
|
|
/// - Parameter service: The service requesting the key.
|
|
/// - Returns: The encryption key or `nil`.
|
|
/// - Throws: An error if the key cannot be retrieved.
|
|
func databaseService(keyFor service: DatabaseServiceProtocol) throws -> Connection.Key?
|
|
|
|
/// Indicates whether the service should attempt to reconnect if applying the key fails.
|
|
///
|
|
/// - Parameter service: The database service.
|
|
/// - Returns: `true` to attempt reconnection. Defaults to `false`.
|
|
func databaseService(shouldReconnect service: DatabaseServiceProtocol) -> Bool
|
|
|
|
/// Notifies the provider of an error that occurred while retrieving or applying the key.
|
|
///
|
|
/// - Parameters:
|
|
/// - service: The database service reporting the error.
|
|
/// - error: The error encountered during key retrieval or application.
|
|
func databaseService(_ service: DatabaseServiceProtocol, didReceive error: Error)
|
|
}
|
|
|
|
public extension DatabaseServiceKeyProvider {
|
|
func databaseService(shouldReconnect service: DatabaseServiceProtocol) -> Bool { false }
|
|
func databaseService(_ service: DatabaseServiceProtocol, didReceive error: Error) {}
|
|
}
|