Files
workavia-mail-front/ios/TwakeMailNSE/Keychain/KeychainController.swift
T
dab246 274e01d113 TF-2464 Save both EmailDelivery and EmailState in the keychain
Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit a37fe7ea8bcc38eb96df39f46128c9e1f7af046e)
2024-02-19 15:55:12 +07:00

61 lines
2.1 KiB
Swift

import Foundation
import KeychainAccess
enum KeychainControllerService: String {
case sessions
var identifier: String {
InfoPlistReader.main.baseBundleIdentifier + "." + rawValue
}
}
class KeychainController: KeychainControllerDelegate {
private let keychain: Keychain
init(service: KeychainControllerService,
accessGroup: String) {
keychain = Keychain(service: service.identifier,
accessGroup: accessGroup)
}
func retrieveSharingSessionFromKeychain(accountId: String) -> KeychainSharingSession? {
do {
guard let sessionData = try keychain.getData(accountId) else {
return nil
}
return try JSONDecoder().decode(KeychainSharingSession.self, from: sessionData)
} catch {
return nil
}
}
func retrieveSharingSessions() -> [KeychainCredentials] {
keychain.allKeys().compactMap { accountId in
guard let sharingSession = retrieveSharingSessionFromKeychain(accountId: accountId) else {
return nil
}
return KeychainCredentials(accountId: accountId, sharingSession: sharingSession)
}
}
func updateEmailDeliveryStateToKeychain(accountId: String, newEmailDeliveryState: String) {
do {
if let sharingSession = retrieveSharingSessionFromKeychain(accountId: accountId) {
let newSharingSession = sharingSession.updateEmailDeliveryState(newEmailDeliveryState: newEmailDeliveryState)
try keychain.set(newSharingSession.toJson() ?? "", key: accountId)
}
} catch {}
}
func updateTokenOidc(accountId: String, newTokenOidc: TokenOidc) {
do {
if let sharingSession = retrieveSharingSessionFromKeychain(accountId: accountId) {
let newSharingSession = sharingSession.updateTokenOidc(newTokenOidc: newTokenOidc)
try keychain.set(newSharingSession.toJson() ?? "", key: accountId)
}
} catch {}
}
}