import Foundation import Postbox import TelegramApi import SwiftSignalKit func requestRecentAccountSessions(account: Account) -> Signal<([RecentAccountSession], Int32), NoError> { return account.network.request(Api.functions.account.getAuthorizations()) |> retryRequest |> map { result -> ([RecentAccountSession], Int32) in var sessions: [RecentAccountSession] = [] var ttlDays: Int32 = 1 switch result { case let .authorizations(authorizationTtlDays, authorizations): for authorization in authorizations { sessions.append(RecentAccountSession(apiAuthorization: authorization)) } ttlDays = authorizationTtlDays } return (sessions, ttlDays) } } public enum TerminateSessionError { case generic case freshReset } func terminateAccountSession(account: Account, hash: Int64) -> Signal { return account.network.request(Api.functions.account.resetAuthorization(hash: hash)) |> mapError { error -> TerminateSessionError in if error.errorCode == 406 { return .freshReset } return .generic } |> mapToSignal { _ -> Signal in return .single(Void()) } } func terminateOtherAccountSessions(account: Account) -> Signal { return account.network.request(Api.functions.auth.resetAuthorizations()) |> mapError { error -> TerminateSessionError in if error.errorCode == 406 { return .freshReset } return .generic } |> mapToSignal { _ -> Signal in return .single(Void()) } } public enum UpadteAuthorizationTTLError { case generic } func setAuthorizationTTL(account: Account, ttl: Int32) -> Signal { return account.network.request(Api.functions.account.setAuthorizationTTL(authorizationTtlDays: ttl)) |> mapError { error -> UpadteAuthorizationTTLError in return .generic } |> mapToSignal { _ -> Signal in return .single(Void()) } } public enum UpdateSessionError { case generic } func updateAccountSessionAcceptsSecretChats(account: Account, hash: Int64, accepts: Bool) -> Signal { return account.network.request(Api.functions.account.changeAuthorizationSettings(hash: hash, encryptedRequestsDisabled: accepts ? .boolFalse : .boolTrue)) |> mapError { error -> UpdateSessionError in return .generic } |> mapToSignal { _ -> Signal in return .single(Void()) } }