mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-16 11:20:18 +00:00
Possible logout fix
This commit is contained in:
parent
7fe5501b06
commit
35ce609c77
@ -102,6 +102,47 @@ public func ==(lhs: AuthorizedAccountState.State, rhs: AuthorizedAccountState.St
|
|||||||
lhs.seq == rhs.seq
|
lhs.seq == rhs.seq
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private let accountRecordToActiveKeychainId = Atomic<[AccountRecordId: Int]>(value: [:])
|
||||||
|
|
||||||
|
private func makeExclusiveKeychain(id: AccountRecordId, postbox: Postbox) -> Keychain {
|
||||||
|
var keychainId = 0
|
||||||
|
let _ = accountRecordToActiveKeychainId.modify { dict in
|
||||||
|
var dict = dict
|
||||||
|
if let value = dict[id] {
|
||||||
|
dict[id] = value + 1
|
||||||
|
keychainId = value + 1
|
||||||
|
} else {
|
||||||
|
keychainId = 0
|
||||||
|
dict[id] = 0
|
||||||
|
}
|
||||||
|
return dict
|
||||||
|
}
|
||||||
|
return Keychain(get: { key in
|
||||||
|
let enabled = accountRecordToActiveKeychainId.with { dict -> Bool in
|
||||||
|
return dict[id] == keychainId
|
||||||
|
}
|
||||||
|
if enabled {
|
||||||
|
return postbox.keychainEntryForKey(key)
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}, set: { (key, data) in
|
||||||
|
let enabled = accountRecordToActiveKeychainId.with { dict -> Bool in
|
||||||
|
return dict[id] == keychainId
|
||||||
|
}
|
||||||
|
if enabled {
|
||||||
|
postbox.setKeychainEntryForKey(key, value: data)
|
||||||
|
}
|
||||||
|
}, remove: { key in
|
||||||
|
let enabled = accountRecordToActiveKeychainId.with { dict -> Bool in
|
||||||
|
return dict[id] == keychainId
|
||||||
|
}
|
||||||
|
if enabled {
|
||||||
|
postbox.removeKeychainEntryForKey(key)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
public class UnauthorizedAccount {
|
public class UnauthorizedAccount {
|
||||||
public let networkArguments: NetworkInitializationArguments
|
public let networkArguments: NetworkInitializationArguments
|
||||||
public let id: AccountRecordId
|
public let id: AccountRecordId
|
||||||
@ -141,14 +182,7 @@ public class UnauthorizedAccount {
|
|||||||
if masterDatacenterId == Int32(self.network.mtProto.datacenterId) {
|
if masterDatacenterId == Int32(self.network.mtProto.datacenterId) {
|
||||||
return .single(self)
|
return .single(self)
|
||||||
} else {
|
} else {
|
||||||
let postbox = self.postbox
|
let keychain = makeExclusiveKeychain(id: self.id, postbox: self.postbox)
|
||||||
let keychain = Keychain(get: { key in
|
|
||||||
return postbox.keychainEntryForKey(key)
|
|
||||||
}, set: { (key, data) in
|
|
||||||
postbox.setKeychainEntryForKey(key, value: data)
|
|
||||||
}, remove: { key in
|
|
||||||
postbox.removeKeychainEntryForKey(key)
|
|
||||||
})
|
|
||||||
|
|
||||||
return self.postbox.transaction { transaction -> (LocalizationSettings?, ProxySettings?, NetworkSettings?) in
|
return self.postbox.transaction { transaction -> (LocalizationSettings?, ProxySettings?, NetworkSettings?) in
|
||||||
return (transaction.getPreferencesEntry(key: PreferencesKeys.localizationSettings) as? LocalizationSettings, transaction.getPreferencesEntry(key: PreferencesKeys.proxySettings) as? ProxySettings, transaction.getPreferencesEntry(key: PreferencesKeys.networkSettings) as? NetworkSettings)
|
return (transaction.getPreferencesEntry(key: PreferencesKeys.localizationSettings) as? LocalizationSettings, transaction.getPreferencesEntry(key: PreferencesKeys.proxySettings) as? ProxySettings, transaction.getPreferencesEntry(key: PreferencesKeys.networkSettings) as? NetworkSettings)
|
||||||
@ -222,13 +256,7 @@ public func accountWithId(networkArguments: NetworkInitializationArguments, id:
|
|||||||
|> mapToSignal { (localizationSettings, proxySettings, networkSettings) -> Signal<AccountResult, NoError> in
|
|> mapToSignal { (localizationSettings, proxySettings, networkSettings) -> Signal<AccountResult, NoError> in
|
||||||
let accountState = view.state
|
let accountState = view.state
|
||||||
|
|
||||||
let keychain = Keychain(get: { key in
|
let keychain = makeExclusiveKeychain(id: id, postbox: postbox)
|
||||||
return postbox.keychainEntryForKey(key)
|
|
||||||
}, set: { (key, data) in
|
|
||||||
postbox.setKeychainEntryForKey(key, value: data)
|
|
||||||
}, remove: { key in
|
|
||||||
postbox.removeKeychainEntryForKey(key)
|
|
||||||
})
|
|
||||||
|
|
||||||
if let accountState = accountState {
|
if let accountState = accountState {
|
||||||
switch accountState {
|
switch accountState {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ public final class LoggingSettings: AccountSharedData, Equatable {
|
|||||||
public let redactSensitiveData: Bool
|
public let redactSensitiveData: Bool
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
public static var defaultSettings = LoggingSettings(logToFile: false, logToConsole: false, redactSensitiveData: true)
|
public static var defaultSettings = LoggingSettings(logToFile: true, logToConsole: true, redactSensitiveData: true)
|
||||||
#else
|
#else
|
||||||
public static var defaultSettings = LoggingSettings(logToFile: false, logToConsole: false, redactSensitiveData: true)
|
public static var defaultSettings = LoggingSettings(logToFile: false, logToConsole: false, redactSensitiveData: true)
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user