mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-03-10 19:47:24 +01:00
POC
This commit is contained in:
@@ -6,65 +6,85 @@ import SmartCardSecretKit
|
||||
import SecretAgentKit
|
||||
import Brief
|
||||
import Observation
|
||||
import SwiftUI
|
||||
|
||||
|
||||
extension EnvironmentValues {
|
||||
private static let _agentStatusChecker = AgentStatusChecker()
|
||||
@Entry var agentStatusChecker: any AgentStatusCheckerProtocol = _agentStatusChecker
|
||||
}
|
||||
|
||||
@main
|
||||
class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
struct SecretAgent: App {
|
||||
|
||||
@MainActor private let storeList: SecretStoreList = {
|
||||
let list = SecretStoreList()
|
||||
let cryptoKit = SecureEnclave.Store()
|
||||
let migrator = SecureEnclave.CryptoKitMigrator()
|
||||
try? migrator.migrate(to: cryptoKit)
|
||||
list.add(store: cryptoKit)
|
||||
list.add(store: SmartCard.Store())
|
||||
return list
|
||||
}()
|
||||
private let updater = Updater(checkOnLaunch: true)
|
||||
private let notifier = Notifier()
|
||||
private let publicKeyFileStoreController = PublicKeyFileStoreController(homeDirectory: URL.homeDirectory)
|
||||
private lazy var agent: Agent = {
|
||||
Agent(storeList: storeList, witness: notifier)
|
||||
}()
|
||||
private lazy var socketController: SocketController = {
|
||||
let path = (NSHomeDirectory() as NSString).appendingPathComponent("socket.ssh") as String
|
||||
return SocketController(path: path)
|
||||
}()
|
||||
private let logger = Logger(subsystem: "com.maxgoedjen.secretive.secretagent", category: "AppDelegate")
|
||||
|
||||
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||
logger.debug("SecretAgent finished launching")
|
||||
Task {
|
||||
for await session in socketController.sessions {
|
||||
Task {
|
||||
do {
|
||||
for await message in session.messages {
|
||||
let agentResponse = try await agent.handle(data: message, provenance: session.provenance)
|
||||
try await session.write(agentResponse)
|
||||
}
|
||||
} catch {
|
||||
try session.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Task {
|
||||
for await _ in NotificationCenter.default.notifications(named: .secretStoreReloaded) {
|
||||
try? publicKeyFileStoreController.generatePublicKeys(for: storeList.allSecrets, clear: true)
|
||||
}
|
||||
}
|
||||
try? publicKeyFileStoreController.generatePublicKeys(for: storeList.allSecrets, clear: true)
|
||||
notifier.prompt()
|
||||
_ = withObservationTracking {
|
||||
updater.update
|
||||
} onChange: { [updater, notifier] in
|
||||
Task {
|
||||
guard !updater.testBuild else { return }
|
||||
await notifier.notify(update: updater.update!) { release in
|
||||
await updater.ignore(release: release)
|
||||
}
|
||||
}
|
||||
@SceneBuilder var body: some Scene {
|
||||
MenuBarExtra("Test", systemImage: "lock") {
|
||||
AgentStatusView()
|
||||
.fixedSize()
|
||||
}
|
||||
.menuBarExtraStyle(.window)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//@main
|
||||
//class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
//
|
||||
// @MainActor private let storeList: SecretStoreList = {
|
||||
// let list = SecretStoreList()
|
||||
// let cryptoKit = SecureEnclave.Store()
|
||||
// let migrator = SecureEnclave.CryptoKitMigrator()
|
||||
// try? migrator.migrate(to: cryptoKit)
|
||||
// list.add(store: cryptoKit)
|
||||
// list.add(store: SmartCard.Store())
|
||||
// return list
|
||||
// }()
|
||||
// private let updater = Updater(checkOnLaunch: true)
|
||||
// private let notifier = Notifier()
|
||||
// private let publicKeyFileStoreController = PublicKeyFileStoreController(homeDirectory: URL.homeDirectory)
|
||||
// private lazy var agent: Agent = {
|
||||
// Agent(storeList: storeList, witness: notifier)
|
||||
// }()
|
||||
// private lazy var socketController: SocketController = {
|
||||
// let path = (NSHomeDirectory() as NSString).appendingPathComponent("socket.ssh") as String
|
||||
// return SocketController(path: path)
|
||||
// }()
|
||||
// private let logger = Logger(subsystem: "com.maxgoedjen.secretive.secretagent", category: "AppDelegate")
|
||||
//
|
||||
// func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||
// logger.debug("SecretAgent finished launching")
|
||||
// Task {
|
||||
// for await session in socketController.sessions {
|
||||
// Task {
|
||||
// do {
|
||||
// for await message in session.messages {
|
||||
// let agentResponse = try await agent.handle(data: message, provenance: session.provenance)
|
||||
// try await session.write(agentResponse)
|
||||
// }
|
||||
// } catch {
|
||||
// try session.close()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// Task {
|
||||
// for await _ in NotificationCenter.default.notifications(named: .secretStoreReloaded) {
|
||||
// try? publicKeyFileStoreController.generatePublicKeys(for: storeList.allSecrets, clear: true)
|
||||
// }
|
||||
// }
|
||||
// try? publicKeyFileStoreController.generatePublicKeys(for: storeList.allSecrets, clear: true)
|
||||
// notifier.prompt()
|
||||
// _ = withObservationTracking {
|
||||
// updater.update
|
||||
// } onChange: { [updater, notifier] in
|
||||
// Task {
|
||||
// guard !updater.testBuild else { return }
|
||||
// await notifier.notify(update: updater.update!) { release in
|
||||
// await updater.ignore(release: release)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//}
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user