113 lines
4.1 KiB
Swift
113 lines
4.1 KiB
Swift
import Foundation
|
|
|
|
enum BridgeSettingsStore {
|
|
private static let bridgeService = "com.clawdbot.bridge"
|
|
private static let nodeService = "com.clawdbot.node"
|
|
|
|
private static let instanceIdDefaultsKey = "node.instanceId"
|
|
private static let preferredBridgeStableIDDefaultsKey = "bridge.preferredStableID"
|
|
private static let lastDiscoveredBridgeStableIDDefaultsKey = "bridge.lastDiscoveredStableID"
|
|
|
|
private static let instanceIdAccount = "instanceId"
|
|
private static let preferredBridgeStableIDAccount = "preferredStableID"
|
|
private static let lastDiscoveredBridgeStableIDAccount = "lastDiscoveredStableID"
|
|
|
|
static func bootstrapPersistence() {
|
|
self.ensureStableInstanceID()
|
|
self.ensurePreferredBridgeStableID()
|
|
self.ensureLastDiscoveredBridgeStableID()
|
|
}
|
|
|
|
static func loadStableInstanceID() -> String? {
|
|
KeychainStore.loadString(service: self.nodeService, account: self.instanceIdAccount)?
|
|
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
}
|
|
|
|
static func saveStableInstanceID(_ instanceId: String) {
|
|
_ = KeychainStore.saveString(instanceId, service: self.nodeService, account: self.instanceIdAccount)
|
|
}
|
|
|
|
static func loadPreferredBridgeStableID() -> String? {
|
|
KeychainStore.loadString(service: self.bridgeService, account: self.preferredBridgeStableIDAccount)?
|
|
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
}
|
|
|
|
static func savePreferredBridgeStableID(_ stableID: String) {
|
|
_ = KeychainStore.saveString(
|
|
stableID,
|
|
service: self.bridgeService,
|
|
account: self.preferredBridgeStableIDAccount)
|
|
}
|
|
|
|
static func loadLastDiscoveredBridgeStableID() -> String? {
|
|
KeychainStore.loadString(service: self.bridgeService, account: self.lastDiscoveredBridgeStableIDAccount)?
|
|
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
}
|
|
|
|
static func saveLastDiscoveredBridgeStableID(_ stableID: String) {
|
|
_ = KeychainStore.saveString(
|
|
stableID,
|
|
service: self.bridgeService,
|
|
account: self.lastDiscoveredBridgeStableIDAccount)
|
|
}
|
|
|
|
private static func ensureStableInstanceID() {
|
|
let defaults = UserDefaults.standard
|
|
|
|
if let existing = defaults.string(forKey: self.instanceIdDefaultsKey)?
|
|
.trimmingCharacters(in: .whitespacesAndNewlines),
|
|
!existing.isEmpty
|
|
{
|
|
if self.loadStableInstanceID() == nil {
|
|
self.saveStableInstanceID(existing)
|
|
}
|
|
return
|
|
}
|
|
|
|
if let stored = self.loadStableInstanceID(), !stored.isEmpty {
|
|
defaults.set(stored, forKey: self.instanceIdDefaultsKey)
|
|
return
|
|
}
|
|
|
|
let fresh = UUID().uuidString
|
|
self.saveStableInstanceID(fresh)
|
|
defaults.set(fresh, forKey: self.instanceIdDefaultsKey)
|
|
}
|
|
|
|
private static func ensurePreferredBridgeStableID() {
|
|
let defaults = UserDefaults.standard
|
|
|
|
if let existing = defaults.string(forKey: self.preferredBridgeStableIDDefaultsKey)?
|
|
.trimmingCharacters(in: .whitespacesAndNewlines),
|
|
!existing.isEmpty
|
|
{
|
|
if self.loadPreferredBridgeStableID() == nil {
|
|
self.savePreferredBridgeStableID(existing)
|
|
}
|
|
return
|
|
}
|
|
|
|
if let stored = self.loadPreferredBridgeStableID(), !stored.isEmpty {
|
|
defaults.set(stored, forKey: self.preferredBridgeStableIDDefaultsKey)
|
|
}
|
|
}
|
|
|
|
private static func ensureLastDiscoveredBridgeStableID() {
|
|
let defaults = UserDefaults.standard
|
|
|
|
if let existing = defaults.string(forKey: self.lastDiscoveredBridgeStableIDDefaultsKey)?
|
|
.trimmingCharacters(in: .whitespacesAndNewlines),
|
|
!existing.isEmpty
|
|
{
|
|
if self.loadLastDiscoveredBridgeStableID() == nil {
|
|
self.saveLastDiscoveredBridgeStableID(existing)
|
|
}
|
|
return
|
|
}
|
|
|
|
if let stored = self.loadLastDiscoveredBridgeStableID(), !stored.isEmpty {
|
|
defaults.set(stored, forKey: self.lastDiscoveredBridgeStableIDDefaultsKey)
|
|
}
|
|
}
|
|
}
|