field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | LICENSE

FieldIdentityPublicMetadataStore.swift (1690B)


      1 import Foundation
      2 
      3 struct FieldIdentityPublicMetadata: Codable, Equatable, Sendable {
      4     let selectedIdentityId: String
      5     let publicKeyHex: String
      6     let publicKeyNpub: String
      7     let label: String?
      8     let updatedAtUnix: UInt64
      9 
     10     init(record: NostrIdentityRecord, updatedAtUnix: UInt64 = UInt64(Date().timeIntervalSince1970)) {
     11         self.selectedIdentityId = record.id
     12         self.publicKeyHex = record.publicKeyHex
     13         self.publicKeyNpub = record.publicKeyNpub
     14         self.label = record.label
     15         self.updatedAtUnix = updatedAtUnix
     16     }
     17 }
     18 
     19 struct FieldIdentityPublicMetadataStore {
     20     private let userDefaults: UserDefaults
     21     private let key: String
     22 
     23     init(servicePrefix: String, userDefaults: UserDefaults = .standard) {
     24         self.userDefaults = userDefaults
     25         self.key = "field_ios.identity.public_metadata.\(servicePrefix)"
     26     }
     27 
     28     static func configured() throws -> FieldIdentityPublicMetadataStore {
     29         guard let servicePrefix = BuildConfig.string(.keychainServicePrefix) else {
     30             throw FieldSecureIdentityStoreError.missingSecureStoreServicePrefix
     31         }
     32         return FieldIdentityPublicMetadataStore(servicePrefix: servicePrefix)
     33     }
     34 
     35     func load() -> FieldIdentityPublicMetadata? {
     36         guard let data = userDefaults.data(forKey: key) else {
     37             return nil
     38         }
     39         return try? JSONDecoder().decode(FieldIdentityPublicMetadata.self, from: data)
     40     }
     41 
     42     func save(_ metadata: FieldIdentityPublicMetadata) throws {
     43         let data = try JSONEncoder().encode(metadata)
     44         userDefaults.set(data, forKey: key)
     45     }
     46 
     47     func delete() {
     48         userDefaults.removeObject(forKey: key)
     49     }
     50 }