diff --git a/TelegramCore/ProxyServersStatuses.swift b/TelegramCore/ProxyServersStatuses.swift index da8b40bbc7..4b55209330 100644 --- a/TelegramCore/ProxyServersStatuses.swift +++ b/TelegramCore/ProxyServersStatuses.swift @@ -44,7 +44,6 @@ private final class ProxyServerItemContext { final class ProxyServersStatusesImpl { private let queue: Queue - private let account: Account private var contexts: [ProxyServerSettings: ProxyServerItemContext] = [:] private var serversDisposable: Disposable? @@ -56,9 +55,8 @@ final class ProxyServersStatusesImpl { } let values = Promise<[ProxyServerSettings: ProxyServerStatus]>([:]) - init(queue: Queue, account: Account, servers: Signal<[ProxyServerSettings], NoError>) { + init(queue: Queue, network: Network, servers: Signal<[ProxyServerSettings], NoError>) { self.queue = queue - self.account = account self.serversDisposable = (servers |> deliverOn(self.queue)).start(next: { [weak self] servers in @@ -66,7 +64,7 @@ final class ProxyServersStatusesImpl { let validKeys = Set(servers) for key in validKeys { if strongSelf.contexts[key] == nil { - let context = ProxyServerItemContext(queue: strongSelf.queue, context: account.network.context, datacenterId: account.network.datacenterId, server: key, updated: { value in + let context = ProxyServerItemContext(queue: strongSelf.queue, context: network.context, datacenterId: network.datacenterId, server: key, updated: { value in queue.async { if let strongSelf = self { strongSelf.contexts[key]?.value = value @@ -111,10 +109,10 @@ final class ProxyServersStatusesImpl { public final class ProxyServersStatuses { private let impl: QueueLocalObject - public init(account: Account, servers: Signal<[ProxyServerSettings], NoError>) { + public init(network: Network, servers: Signal<[ProxyServerSettings], NoError>) { let queue = Queue() self.impl = QueueLocalObject(queue: queue, generate: { - return ProxyServersStatusesImpl(queue: queue, account: account, servers: servers) + return ProxyServersStatusesImpl(queue: queue, network: network, servers: servers) }) } diff --git a/TelegramCore/SaveSecureIdValue.swift b/TelegramCore/SaveSecureIdValue.swift index 1ea78d97ef..4c1c7737e6 100644 --- a/TelegramCore/SaveSecureIdValue.swift +++ b/TelegramCore/SaveSecureIdValue.swift @@ -244,3 +244,36 @@ public func deleteSecureIdValues(network: Network, keys: Set) return .complete() } } + +public func dropSecureId(network: Network, currentPassword: String) -> Signal { + return twoStepAuthData(network) + |> mapError { _ -> AuthorizationPasswordVerificationError in + return .generic + } + |> mapToSignal { authData -> Signal in + let currentPasswordHash: Buffer + if let currentSalt = authData.currentSalt { + var data = Data() + data.append(currentSalt) + data.append(currentPassword.data(using: .utf8, allowLossyConversion: true)!) + data.append(currentSalt) + currentPasswordHash = Buffer(data: sha256Digest(data)) + } else { + currentPasswordHash = Buffer(data: Data()) + } + + let flags: Int32 = 1 << 1 + + let settings = network.request(Api.functions.account.getPasswordSettings(currentPasswordHash: currentPasswordHash), automaticFloodWait: false) |> mapError { error in + return AuthorizationPasswordVerificationError.generic + } + + + return settings |> mapToSignal { value -> Signal in + switch value { + case let .passwordSettings(email, secureSalt, _, _): + return network.request(Api.functions.account.updatePasswordSettings(currentPasswordHash: currentPasswordHash, newSettings: Api.account.PasswordInputSettings.passwordInputSettings(flags: flags, newSalt: secureSalt, newPasswordHash: currentPasswordHash, hint: nil, email: email, newSecureSalt: secureSalt, newSecureSecret: nil, newSecureSecretId: nil)), automaticFloodWait: false) |> map {_ in} |> mapError {_ in return AuthorizationPasswordVerificationError.generic} + } + } + } +}