Quellcode durchsuchen

Peristant storage of jwt token

Jonas Björkert vor 1 Jahr
Ursprung
Commit
95c4d742da

+ 3 - 6
LoopFollow/Remote/PushNotificationManager.swift

@@ -25,9 +25,6 @@ class PushNotificationManager {
     private var user: String
     private var bundleId: String
 
-    private var cachedJWT: String?
-    private var jwtExpirationDate: Date?
-
     init() {
         self.deviceToken = Storage.shared.deviceToken.value
         self.sharedSecret = Storage.shared.sharedSecret.value
@@ -227,7 +224,7 @@ class PushNotificationManager {
 
 
     private func getOrGenerateJWT() -> String? {
-        if let cachedJWT = cachedJWT, let expirationDate = jwtExpirationDate {
+        if let cachedJWT = Storage.shared.cachedJWT.value, let expirationDate = Storage.shared.jwtExpirationDate.value {
             if Date() < expirationDate {
                 return cachedJWT
             }
@@ -243,8 +240,8 @@ class PushNotificationManager {
             let jwtSigner = JWTSigner.es256(privateKey: privateKey)
             let signedJWT = try jwt.sign(using: jwtSigner)
 
-            cachedJWT = signedJWT
-            jwtExpirationDate = Date().addingTimeInterval(3600)
+            Storage.shared.cachedJWT.value = signedJWT
+            Storage.shared.jwtExpirationDate.value = Date().addingTimeInterval(3600)
 
             return signedJWT
         } catch {

+ 1 - 1
LoopFollow/Storage/SecureStorageValue.swift

@@ -29,7 +29,7 @@ class SecureStorageValue<T: NSObject & NSSecureCoding & Equatable>: ObservableOb
         return UserDefaults.standard
     }
 
-    init(key: String, default defaultValue: T) {
+    init(key: String, defaultValue: T) {
         self.key = key
         if let data = SecureStorageValue.defaults.data(forKey: key),
            let decodedValue = try? NSKeyedUnarchiver.unarchivedObject(ofClass: T.self, from: data) {

+ 16 - 13
LoopFollow/Storage/Storage.swift

@@ -10,20 +10,23 @@ import Foundation
 import HealthKit
 
 class Storage {
-    var remoteType = StorageValue<RemoteType>(key: "remoteType", default: .nightscout)
-    var deviceToken = StorageValue<String>(key: "deviceToken", default: "")
-    var sharedSecret = StorageValue<String>(key: "sharedSecret", default: "")
-    var productionEnvironment = StorageValue<Bool>(key: "productionEnvironment", default: true)
-    var apnsKey = StorageValue<String>(key: "apnsKey", default: "")
-    var teamId = StorageValue<String>(key: "teamId", default: "")
-    var keyId = StorageValue<String>(key: "keyId", default: "")
-    var bundleId = StorageValue<String>(key: "bundleId", default: "")
-    var user = StorageValue<String>(key: "user", default: "")
+    var remoteType = StorageValue<RemoteType>(key: "remoteType", defaultValue: .nightscout)
+    var deviceToken = StorageValue<String>(key: "deviceToken", defaultValue: "")
+    var sharedSecret = StorageValue<String>(key: "sharedSecret", defaultValue: "")
+    var productionEnvironment = StorageValue<Bool>(key: "productionEnvironment", defaultValue: true)
+    var apnsKey = StorageValue<String>(key: "apnsKey", defaultValue: "")
+    var teamId = StorageValue<String>(key: "teamId", defaultValue: "")
+    var keyId = StorageValue<String>(key: "keyId", defaultValue: "")
+    var bundleId = StorageValue<String>(key: "bundleId", defaultValue: "")
+    var user = StorageValue<String>(key: "user", defaultValue: "")
 
-    var maxBolus = SecureStorageValue<HKQuantity>(key: "maxBolus", default: HKQuantity(unit: .internationalUnit(), doubleValue: 1.0))
-    var maxCarbs = SecureStorageValue<HKQuantity>(key: "maxCarbs", default: HKQuantity(unit: .gram(), doubleValue: 30.0))
-    var maxProtein = SecureStorageValue<HKQuantity>(key: "maxProtein", default: HKQuantity(unit: .gram(), doubleValue: 30.0))
-    var maxFat = SecureStorageValue<HKQuantity>(key: "maxFat", default: HKQuantity(unit: .gram(), doubleValue: 30.0))
+    var maxBolus = SecureStorageValue<HKQuantity>(key: "maxBolus", defaultValue: HKQuantity(unit: .internationalUnit(), doubleValue: 1.0))
+    var maxCarbs = SecureStorageValue<HKQuantity>(key: "maxCarbs", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0))
+    var maxProtein = SecureStorageValue<HKQuantity>(key: "maxProtein", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0))
+    var maxFat = SecureStorageValue<HKQuantity>(key: "maxFat", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0))
+
+    var cachedJWT = StorageValue<String?>(key: "cachedJWT", defaultValue: nil)
+    var jwtExpirationDate = StorageValue<Date?>(key: "jwtExpirationDate", defaultValue: nil)
 
     static let shared = Storage()
 

+ 3 - 2
LoopFollow/Storage/StorageValue.swift

@@ -30,10 +30,11 @@ class StorageValue<T: Codable & Equatable>: ObservableObject {
         return UserDefaults.standard
     }
 
-    init(key: String, default defaultValue: T) {
+    init(key: String, defaultValue: T) {
         self.key = key
 
-        if let data = StorageValue.defaults.data(forKey: key), let decodedValue = try? JSONDecoder().decode(T.self, from: data) {
+        if let data = StorageValue.defaults.data(forKey: key),
+           let decodedValue = try? JSONDecoder().decode(T.self, from: data) {
             self.value = decodedValue
         } else {
             self.value = defaultValue