From dddbc9b2ab4082f7bc19641b26ddd5e685e0f63f Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 2 Sep 2022 19:17:02 +0200 Subject: [PATCH 1/4] Refactor --- .../Messenger/Functions/MessengerDestroy.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift index 4ed8cf2c..1ea6f3d3 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift @@ -15,10 +15,8 @@ extension MessengerDestroy { if cMix.networkFollowerStatus() == .running { try cMix.stopNetworkFollower() } - var hasRunningProcesses = cMix.hasRunningProcesses() - while hasRunningProcesses { + while cMix.hasRunningProcesses() { env.sleep(1) - hasRunningProcesses = cMix.hasRunningProcesses() } } env.ud.set(nil) -- GitLab From 0498cb3121d2c04b7cf11b30040e75cdb99f4b2b Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 2 Sep 2022 19:21:26 +0200 Subject: [PATCH 2/4] Add remove function to PasswordStorage --- Sources/XXClient/Helpers/PasswordStorage.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Sources/XXClient/Helpers/PasswordStorage.swift b/Sources/XXClient/Helpers/PasswordStorage.swift index bf84f6dd..a1c36884 100644 --- a/Sources/XXClient/Helpers/PasswordStorage.swift +++ b/Sources/XXClient/Helpers/PasswordStorage.swift @@ -8,19 +8,23 @@ public struct PasswordStorage { public init( save: @escaping (Data) throws -> Void, - load: @escaping () throws -> Data + load: @escaping () throws -> Data, + remove: @escaping () throws -> Void ) { self.save = save self.load = load + self.remove = remove } public var save: (Data) throws -> Void public var load: () throws -> Data + public var remove: () throws -> Void } extension PasswordStorage { public static let unimplemented = PasswordStorage( save: XCTUnimplemented("\(Self.self).save"), - load: XCTUnimplemented("\(Self.self).load") + load: XCTUnimplemented("\(Self.self).load"), + remove: XCTUnimplemented("\(Self.self).remove") ) } -- GitLab From 211057738550cca2d9ed3d9319c9d0b80ab7870a Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 2 Sep 2022 19:21:56 +0200 Subject: [PATCH 3/4] Update PasswordStorage.keychain implementation --- .../Utils/PasswordStorage+Keychain.swift | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Sources/XXMessengerClient/Utils/PasswordStorage+Keychain.swift b/Sources/XXMessengerClient/Utils/PasswordStorage+Keychain.swift index 0a062cc6..fdf61fe7 100644 --- a/Sources/XXMessengerClient/Utils/PasswordStorage+Keychain.swift +++ b/Sources/XXMessengerClient/Utils/PasswordStorage+Keychain.swift @@ -3,18 +3,20 @@ import XXClient extension PasswordStorage { public static let keychain: PasswordStorage = { - let keychain = KeychainAccess.Keychain( - service: "xx.network.client.messenger" - ) + let keychain = KeychainAccess.Keychain(service: "xx.network.client.messenger") + let key = "password" return PasswordStorage( save: { password in - keychain[data: "password"] = password + keychain[data: key] = password }, load: { - guard let password = keychain[data: "password"] else { + guard let password = keychain[data: key] else { throw MissingPasswordError() } return password + }, + remove: { + try keychain.remove(key) } ) }() -- GitLab From 637d1b4f8f46c408c382e11eba0029caf2c3cfbb Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 2 Sep 2022 19:27:48 +0200 Subject: [PATCH 4/4] Remove password in MessengerDestroy --- .../Functions/MessengerDestroy.swift | 1 + .../Functions/MessengerDestroyTests.swift | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift index 1ea6f3d3..65a718df 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift @@ -23,6 +23,7 @@ extension MessengerDestroy { env.e2e.set(nil) env.cMix.set(nil) try env.fileManager.removeDirectory(env.storageDir) + try env.passwordStorage.remove() } } } diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift index a91e3285..36745d02 100644 --- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift @@ -13,6 +13,7 @@ final class MessengerDestroyTests: XCTestCase { var didSetUD: [UserDiscovery?] = [] var didSetE2E: [E2E?] = [] var didSetCMix: [CMix?] = [] + var didRemovePassword = 0 var env: MessengerEnvironment = .unimplemented env.cMix.get = { @@ -28,6 +29,7 @@ final class MessengerDestroyTests: XCTestCase { env.e2e.set = { didSetE2E.append($0) } env.cMix.set = { didSetCMix.append($0) } env.fileManager.removeDirectory = { didRemoveDirectory.append($0) } + env.passwordStorage.remove = { didRemovePassword += 1 } let destroy: MessengerDestroy = .live(env) try destroy() @@ -38,11 +40,13 @@ final class MessengerDestroyTests: XCTestCase { XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true]) XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true]) XCTAssertNoDifference(didRemoveDirectory, [storageDir]) + XCTAssertNoDifference(didRemovePassword, 1) } func testStopNetworkFollowerFailure() { struct Error: Swift.Error, Equatable {} let error = Error() + var env: MessengerEnvironment = .unimplemented env.cMix.get = { var cMix: CMix = .unimplemented @@ -79,4 +83,32 @@ final class MessengerDestroyTests: XCTestCase { XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true]) XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true]) } + + func testRemovePasswordFailure() { + struct Error: Swift.Error, Equatable {} + let error = Error() + let storageDir = "test-storage-dir" + var didRemoveDirectory: [String] = [] + var didSetUD: [UserDiscovery?] = [] + var didSetE2E: [E2E?] = [] + var didSetCMix: [CMix?] = [] + + var env: MessengerEnvironment = .unimplemented + env.cMix.get = { nil } + env.ud.set = { didSetUD.append($0) } + env.e2e.set = { didSetE2E.append($0) } + env.cMix.set = { didSetCMix.append($0) } + env.storageDir = storageDir + env.fileManager.removeDirectory = { didRemoveDirectory.append($0) } + env.passwordStorage.remove = { throw error } + let destroy: MessengerDestroy = .live(env) + + XCTAssertThrowsError(try destroy()) { err in + XCTAssertEqual(err as? Error, error) + } + XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true]) + XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true]) + XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true]) + XCTAssertNoDifference(didRemoveDirectory, [storageDir]) + } } -- GitLab