From 8ddeb7f9fb94c029a7d33ccfbb40a7acd874b7d0 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 14 Apr 2022 16:37:29 -0700 Subject: [PATCH] =?UTF-8?q?Uses=20Keychain.patreonAccountID=20to=20fetch?= =?UTF-8?q?=20current=20user=E2=80=99s=20PatreonAccount?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows us to distinguish between the current user and other cached patrons in the future. --- AltStoreCore/Components/Keychain.swift | 3 +++ AltStoreCore/Model/DatabaseManager.swift | 8 ++++++-- AltStoreCore/Patreon/PatreonAPI.swift | 17 ++++++++++++++--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/AltStoreCore/Components/Keychain.swift b/AltStoreCore/Components/Keychain.swift index 519b197b..ef45ad8e 100644 --- a/AltStoreCore/Components/Keychain.swift +++ b/AltStoreCore/Components/Keychain.swift @@ -74,6 +74,9 @@ public class Keychain @KeychainItem(key: "patreonCreatorAccessToken") public var patreonCreatorAccessToken: String? + @KeychainItem(key: "patreonAccountID") + public var patreonAccountID: String? + private init() { } diff --git a/AltStoreCore/Model/DatabaseManager.swift b/AltStoreCore/Model/DatabaseManager.swift index 4a99ca0b..44006365 100644 --- a/AltStoreCore/Model/DatabaseManager.swift +++ b/AltStoreCore/Model/DatabaseManager.swift @@ -151,8 +151,12 @@ public extension DatabaseManager func patreonAccount(in context: NSManagedObjectContext = DatabaseManager.shared.viewContext) -> PatreonAccount? { - let patronAccount = PatreonAccount.first(in: context) - return patronAccount + guard let patreonAccountID = Keychain.shared.patreonAccountID else { return nil } + + let predicate = NSPredicate(format: "%K == %@", #keyPath(PatreonAccount.identifier), patreonAccountID) + + let patreonAccount = PatreonAccount.first(satisfying: predicate, in: context) + return patreonAccount } } diff --git a/AltStoreCore/Patreon/PatreonAPI.swift b/AltStoreCore/Patreon/PatreonAPI.swift index fb9308a8..96a87a1e 100644 --- a/AltStoreCore/Patreon/PatreonAPI.swift +++ b/AltStoreCore/Patreon/PatreonAPI.swift @@ -120,7 +120,15 @@ public extension PatreonAPI Keychain.shared.patreonAccessToken = accessToken Keychain.shared.patreonRefreshToken = refreshToken - self.fetchAccount(completion: completion) + self.fetchAccount { (result) in + switch result + { + case .success(let account): Keychain.shared.patreonAccountID = account.identifier + case .failure: break + } + + completion(result) + } } } } @@ -238,8 +246,10 @@ public extension PatreonAPI DatabaseManager.shared.persistentContainer.performBackgroundTask { (context) in do { - let accounts = PatreonAccount.all(in: context, requestProperties: [\FetchRequest.returnsObjectsAsFaults: true]) - accounts.forEach(context.delete(_:)) + if let account = DatabaseManager.shared.patreonAccount(in: context) + { + context.delete(account) + } self.deactivateBetaApps(in: context) @@ -247,6 +257,7 @@ public extension PatreonAPI Keychain.shared.patreonAccessToken = nil Keychain.shared.patreonRefreshToken = nil + Keychain.shared.patreonAccountID = nil completion(.success(())) }