From d0c3843f9b3916ee7e9b81816e6f3cf93842a405 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 30 Oct 2024 14:01:07 +1300 Subject: [PATCH 1/3] Delete application password when removing site --- WordPress/Classes/Models/Blog+SelfHosted.swift | 12 ++++++++++++ WordPress/Classes/Models/Blog.m | 4 ++++ WordPress/Classes/Utility/KeychainUtils.swift | 10 +++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/Models/Blog+SelfHosted.swift b/WordPress/Classes/Models/Blog+SelfHosted.swift index a26c16aae480..7f3ac5be4c22 100644 --- a/WordPress/Classes/Models/Blog+SelfHosted.swift +++ b/WordPress/Classes/Models/Blog+SelfHosted.swift @@ -55,6 +55,18 @@ extension Blog { try keychainImplementation.getPassword(for: self.getUsername(), serviceName: self.getUrlString()) } + /// Delete Application Token + /// + func deleteApplicationToken(using keychainImplementation: KeychainAccessible = KeychainUtils()) throws { + try? keychainImplementation.setPassword(for: self.getUsername(), to: nil, serviceName: self.getUrlString()) + } + + @available(swift, obsoleted: 1.0) + @objc(deleteApplicationToken) + func objc_deleteApplicationToken() { + _ = try? deleteApplicationToken() + } + /// Store Application Tokens /// func setApplicationToken( diff --git a/WordPress/Classes/Models/Blog.m b/WordPress/Classes/Models/Blog.m index 890f0484b376..680abf32388d 100644 --- a/WordPress/Classes/Models/Blog.m +++ b/WordPress/Classes/Models/Blog.m @@ -106,6 +106,10 @@ - (void)prepareForDeletion self.password = nil; } + if (self.account == nil) { + [self deleteApplicationToken]; + } + [_xmlrpcApi invalidateAndCancelTasks]; [_selfHostedSiteRestApi invalidateAndCancelTasks]; } diff --git a/WordPress/Classes/Utility/KeychainUtils.swift b/WordPress/Classes/Utility/KeychainUtils.swift index 07b4716e50cb..ee71c72dc7c3 100644 --- a/WordPress/Classes/Utility/KeychainUtils.swift +++ b/WordPress/Classes/Utility/KeychainUtils.swift @@ -41,12 +41,16 @@ extension KeychainUtils: KeychainAccessible { try self.keychainUtils.getPasswordForUsername(username, andServiceName: serviceName) } - func setPassword(for username: String, to newValue: String, serviceName: String) throws { - try keychainUtils.storeUsername(username, andPassword: newValue, forServiceName: serviceName, updateExisting: true) + func setPassword(for username: String, to newValue: String?, serviceName: String) throws { + if let newValue { + try keychainUtils.storeUsername(username, andPassword: newValue, forServiceName: serviceName, updateExisting: true) + } else { + try keychainUtils.deleteItem(forUsername: username, andServiceName: serviceName) + } } } protocol KeychainAccessible { func getPassword(for username: String, serviceName: String) throws -> String - func setPassword(for username: String, to newValue: String, serviceName: String) throws + func setPassword(for username: String, to newValue: String?, serviceName: String) throws } From 389624422022fa256f5f379265895da4154c0781 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 30 Oct 2024 14:10:55 +1300 Subject: [PATCH 2/3] Remove self-hosted site cookies when removing site --- WordPress/Classes/Models/Blog.m | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/WordPress/Classes/Models/Blog.m b/WordPress/Classes/Models/Blog.m index 680abf32388d..68ffd1c95745 100644 --- a/WordPress/Classes/Models/Blog.m +++ b/WordPress/Classes/Models/Blog.m @@ -112,6 +112,17 @@ - (void)prepareForDeletion [_xmlrpcApi invalidateAndCancelTasks]; [_selfHostedSiteRestApi invalidateAndCancelTasks]; + + // Remove the self-hosted site cookies from the shared cookie storage. + if (self.account == nil && self.url != nil) { + NSURL *siteURL = [NSURL URLWithString:self.url]; + if (siteURL != nil) { + NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + for (NSHTTPCookie *cookie in [cookieJar cookiesForURL:siteURL]) { + [cookieJar deleteCookie:cookie]; + } + } + } } - (void)didTurnIntoFault From 12133ea87f2954be90635728d09af6ee17926d60 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 30 Oct 2024 20:05:45 +1300 Subject: [PATCH 3/3] Fix a unit test compiling issue --- WordPress/WordPressTest/TestKeychain.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/WordPress/WordPressTest/TestKeychain.swift b/WordPress/WordPressTest/TestKeychain.swift index 319795894b31..486507413433 100644 --- a/WordPress/WordPressTest/TestKeychain.swift +++ b/WordPress/WordPressTest/TestKeychain.swift @@ -21,7 +21,11 @@ class TestKeychain: KeychainAccessible { return keychainItem.password } - func setPassword(for username: String, to newValue: String, serviceName: String) throws { - keychain[serviceName] = KeychainItem(username: username, password: newValue) + func setPassword(for username: String, to newValue: String?, serviceName: String) throws { + if let newValue { + keychain[serviceName] = KeychainItem(username: username, password: newValue) + } else { + keychain[serviceName] = nil + } } }