mirror of
				https://github.com/maxgoedjen/secretive.git
				synced 2025-10-30 23:10:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import Cocoa
 | |
| import OSLog
 | |
| import Combine
 | |
| import SecretKit
 | |
| import SecureEnclaveSecretKit
 | |
| import SmartCardSecretKit
 | |
| import SecretAgentKit
 | |
| import Brief
 | |
| import Observation
 | |
| 
 | |
| @main
 | |
| class AppDelegate: NSObject, NSApplicationDelegate {
 | |
| 
 | |
|     private let storeList: SecretStoreList = {
 | |
|         let list = SecretStoreList()
 | |
|         list.add(store: SecureEnclave.Store())
 | |
|         list.add(store: SmartCard.Store())
 | |
|         return list
 | |
|     }()
 | |
|     private let updater = Updater(checkOnLaunch: false)
 | |
|     private let notifier = Notifier()
 | |
|     private let publicKeyFileStoreController = PublicKeyFileStoreController(homeDirectory: NSHomeDirectory())
 | |
|     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 var updateSink: AnyCancellable?
 | |
|     private let logger = Logger(subsystem: "com.maxgoedjen.secretive.secretagent", category: "AppDelegate")
 | |
| 
 | |
|     func applicationDidFinishLaunching(_ aNotification: Notification) {
 | |
|         logger.debug("SecretAgent finished launching")
 | |
|         Task { @MainActor in
 | |
|             socketController.handler = { [agent] reader, writer in
 | |
|                 await agent.handle(reader: reader, writer: writer)
 | |
|             }
 | |
|         }
 | |
|         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
 | |
|             notifier.notify(update: updater.update!) { release in
 | |
|                 Task {
 | |
|                     await updater.ignore(release: release)
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     
 | |
| }
 | |
| 
 |