mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-08-11 16:40:22 +02:00
Update Ghostgram features
This commit is contained in:
@@ -121,7 +121,8 @@ public class UnauthorizedAccount {
|
||||
switch sentCode {
|
||||
case .sentCodePaymentRequired:
|
||||
break
|
||||
case let .sentCode(_, type, phoneCodeHash, nextType, codeTimeout):
|
||||
case let .sentCode(sentCodeData):
|
||||
let (type, phoneCodeHash, nextType, codeTimeout) = (sentCodeData.type, sentCodeData.phoneCodeHash, sentCodeData.nextType, sentCodeData.timeout)
|
||||
let _ = postbox.transaction({ transaction in
|
||||
var parsedNextType: AuthorizationCodeNextType?
|
||||
if let nextType = nextType {
|
||||
@@ -131,20 +132,22 @@ public class UnauthorizedAccount {
|
||||
transaction.setState(UnauthorizedAccountState(isTestingEnvironment: testingEnvironment, masterDatacenterId: masterDatacenterId, contents: .confirmationCodeEntry(number: phoneNumber, type: SentAuthorizationCodeType(apiType: type), hash: phoneCodeHash, timeout: codeTimeout, nextType: parsedNextType, syncContacts: syncContacts, previousCodeEntry: nil, usePrevious: false)))
|
||||
}
|
||||
}).start()
|
||||
case let .sentCodeSuccess(authorization):
|
||||
case let .sentCodeSuccess(sentCodeSuccessData):
|
||||
let authorization = sentCodeSuccessData.authorization
|
||||
switch authorization {
|
||||
case let .authorization(_, _, _, futureAuthToken, user):
|
||||
case let .authorization(authorizationData):
|
||||
let (futureAuthToken, apiUser) = (authorizationData.futureAuthToken, authorizationData.user)
|
||||
let _ = postbox.transaction({ [weak self] transaction in
|
||||
var syncContacts = true
|
||||
if let state = transaction.getState() as? UnauthorizedAccountState, case let .payment(_, _, _, _, _, syncContactsValue) = state.contents {
|
||||
syncContacts = syncContactsValue
|
||||
}
|
||||
|
||||
|
||||
if let futureAuthToken = futureAuthToken {
|
||||
storeFutureLoginToken(accountManager: accountManager, token: futureAuthToken.makeData())
|
||||
}
|
||||
|
||||
let user = TelegramUser(user: user)
|
||||
|
||||
let user = TelegramUser(user: apiUser)
|
||||
var isSupportUser = false
|
||||
if let phone = user.phone, phone.hasPrefix("42"), phone.count <= 5 {
|
||||
isSupportUser = true
|
||||
@@ -159,7 +162,8 @@ public class UnauthorizedAccount {
|
||||
return .loggedIn
|
||||
}
|
||||
}).start()
|
||||
case let .authorizationSignUpRequired(_, termsOfService):
|
||||
case let .authorizationSignUpRequired(authorizationSignUpRequiredData):
|
||||
let termsOfService = authorizationSignUpRequiredData.termsOfService
|
||||
let _ = postbox.transaction({ [weak self] transaction in
|
||||
if let self {
|
||||
if let state = transaction.getState() as? UnauthorizedAccountState, case let .payment(number, codeHash, _, _, _, syncContacts) = state.contents {
|
||||
@@ -364,7 +368,8 @@ public enum TwoStepPasswordDerivation {
|
||||
switch apiAlgo {
|
||||
case .passwordKdfAlgoUnknown:
|
||||
self = .unknown
|
||||
case let .passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow(salt1, salt2, g, p):
|
||||
case let .passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow(passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPowData):
|
||||
let (salt1, salt2, g, p) = (passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPowData.salt1, passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPowData.salt2, passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPowData.g, passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPowData.p)
|
||||
self = .sha256_sha256_PBKDF2_HMAC_sha512_sha256_srp(salt1: salt1.makeData(), salt2: salt2.makeData(), iterations: 100000, g: g, p: p.makeData())
|
||||
}
|
||||
}
|
||||
@@ -375,7 +380,7 @@ public enum TwoStepPasswordDerivation {
|
||||
return .passwordKdfAlgoUnknown
|
||||
case let .sha256_sha256_PBKDF2_HMAC_sha512_sha256_srp(salt1, salt2, iterations, g, p):
|
||||
precondition(iterations == 100000)
|
||||
return .passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow(salt1: Buffer(data: salt1), salt2: Buffer(data: salt2), g: g, p: Buffer(data: p))
|
||||
return .passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow(.init(salt1: Buffer(data: salt1), salt2: Buffer(data: salt2), g: g, p: Buffer(data: p)))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -389,9 +394,11 @@ public enum TwoStepSecurePasswordDerivation {
|
||||
switch apiAlgo {
|
||||
case .securePasswordKdfAlgoUnknown:
|
||||
self = .unknown
|
||||
case let .securePasswordKdfAlgoPBKDF2HMACSHA512iter100000(salt):
|
||||
case let .securePasswordKdfAlgoPBKDF2HMACSHA512iter100000(securePasswordKdfAlgoPBKDF2HMACSHA512iter100000Data):
|
||||
let (salt) = (securePasswordKdfAlgoPBKDF2HMACSHA512iter100000Data.salt)
|
||||
self = .PBKDF2_HMAC_sha512(salt: salt.makeData(), iterations: 100000)
|
||||
case let .securePasswordKdfAlgoSHA512(salt):
|
||||
case let .securePasswordKdfAlgoSHA512(securePasswordKdfAlgoSHA512Data):
|
||||
let (salt) = (securePasswordKdfAlgoSHA512Data.salt)
|
||||
self = .sha512(salt: salt.makeData())
|
||||
}
|
||||
}
|
||||
@@ -402,9 +409,9 @@ public enum TwoStepSecurePasswordDerivation {
|
||||
return .securePasswordKdfAlgoUnknown
|
||||
case let .PBKDF2_HMAC_sha512(salt, iterations):
|
||||
precondition(iterations == 100000)
|
||||
return .securePasswordKdfAlgoPBKDF2HMACSHA512iter100000(salt: Buffer(data: salt))
|
||||
return .securePasswordKdfAlgoPBKDF2HMACSHA512iter100000(.init(salt: Buffer(data: salt)))
|
||||
case let .sha512(salt):
|
||||
return .securePasswordKdfAlgoSHA512(salt: Buffer(data: salt))
|
||||
return .securePasswordKdfAlgoSHA512(.init(salt: Buffer(data: salt)))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -432,7 +439,8 @@ func _internal_twoStepAuthData(_ network: Network) -> Signal<TwoStepAuthData, MT
|
||||
return network.request(Api.functions.account.getPassword())
|
||||
|> map { config -> TwoStepAuthData in
|
||||
switch config {
|
||||
case let .password(flags, currentAlgo, srpB, srpId, hint, emailUnconfirmedPattern, newAlgo, newSecureAlgo, secureRandom, pendingResetDate, loginEmailPattern):
|
||||
case let .password(passwordData):
|
||||
let (flags, currentAlgo, srpB, srpId, hint, emailUnconfirmedPattern, newAlgo, newSecureAlgo, secureRandom, pendingResetDate, loginEmailPattern) = (passwordData.flags, passwordData.currentAlgo, passwordData.srpB, passwordData.srpId, passwordData.hint, passwordData.emailUnconfirmedPattern, passwordData.newAlgo, passwordData.newSecureAlgo, passwordData.secureRandom, passwordData.pendingResetDate, passwordData.loginEmailPattern)
|
||||
let hasRecovery = (flags & (1 << 0)) != 0
|
||||
let hasSecureValues = (flags & (1 << 1)) != 0
|
||||
|
||||
@@ -497,7 +505,8 @@ public final class TelegramPasskey: Equatable {
|
||||
extension TelegramPasskey {
|
||||
convenience init(apiPasskey: Api.Passkey) {
|
||||
switch apiPasskey {
|
||||
case let .passkey(_, id, name, date, softwareEmojiId, lastUsageDate):
|
||||
case let .passkey(passkeyData):
|
||||
let (id, name, date, softwareEmojiId, lastUsageDate) = (passkeyData.id, passkeyData.name, passkeyData.date, passkeyData.softwareEmojiId, passkeyData.lastUsageDate)
|
||||
self.init(id: id, name: name, date: date, emojiId: softwareEmojiId, lastUsageDate: lastUsageDate)
|
||||
}
|
||||
}
|
||||
@@ -514,7 +523,8 @@ func _internal_passkeysData(network: Network) -> Signal<[TelegramPasskey], NoErr
|
||||
return []
|
||||
}
|
||||
switch passkeys {
|
||||
case let .passkeys(passkeys):
|
||||
case let .passkeys(passkeysData):
|
||||
let passkeys = passkeysData.passkeys
|
||||
return passkeys.map { passkey in
|
||||
return TelegramPasskey(apiPasskey: passkey)
|
||||
}
|
||||
@@ -533,9 +543,11 @@ func _internal_requestPasskeyRegistration(network: Network) -> Signal<String?, N
|
||||
return nil
|
||||
}
|
||||
switch options {
|
||||
case let .passkeyRegistrationOptions(options):
|
||||
case let .passkeyRegistrationOptions(passkeyRegistrationOptionsData):
|
||||
let options = passkeyRegistrationOptionsData.options
|
||||
switch options {
|
||||
case let .dataJSON(data):
|
||||
case let .dataJSON(dataJSONData):
|
||||
let data = dataJSONData.data
|
||||
return data
|
||||
}
|
||||
}
|
||||
@@ -543,7 +555,7 @@ func _internal_requestPasskeyRegistration(network: Network) -> Signal<String?, N
|
||||
}
|
||||
|
||||
func _internal_requestCreatePasskey(network: Network, id: String, clientData: String, attestationObject: Data) -> Signal<TelegramPasskey?, NoError> {
|
||||
return network.request(Api.functions.account.registerPasskey(credential: .inputPasskeyCredentialPublicKey(id: id, rawId: id, response: .inputPasskeyResponseRegister(clientData: .dataJSON(data: clientData), attestationData: Buffer(data: attestationObject)))))
|
||||
return network.request(Api.functions.account.registerPasskey(credential: .inputPasskeyCredentialPublicKey(.init(id: id, rawId: id, response: .inputPasskeyResponseRegister(.init(clientData: .dataJSON(.init(data: clientData)), attestationData: Buffer(data: attestationObject)))))))
|
||||
|> map(Optional.init)
|
||||
|> `catch` { _ -> Signal<Api.Passkey?, NoError> in
|
||||
return .single(nil)
|
||||
@@ -575,9 +587,11 @@ func _internal_requestPasskeyLoginData(network: Network, apiId: Int32, apiHash:
|
||||
return nil
|
||||
}
|
||||
switch result {
|
||||
case let .passkeyLoginOptions(options):
|
||||
case let .passkeyLoginOptions(passkeyLoginOptionsData):
|
||||
let options = passkeyLoginOptionsData.options
|
||||
switch options {
|
||||
case let .dataJSON(data):
|
||||
case let .dataJSON(dataJSONData):
|
||||
let data = dataJSONData.data
|
||||
return data
|
||||
}
|
||||
}
|
||||
@@ -864,7 +878,7 @@ func verifyPassword(_ account: UnauthorizedAccount, password: String) -> Signal<
|
||||
let kdfResult = passwordKDF(encryptionProvider: account.network.encryptionProvider, password: password, derivation: currentPasswordDerivation, srpSessionData: srpSessionData)
|
||||
|
||||
if let kdfResult = kdfResult {
|
||||
return account.network.request(Api.functions.auth.checkPassword(password: .inputCheckPasswordSRP(srpId: kdfResult.id, A: Buffer(data: kdfResult.A), M1: Buffer(data: kdfResult.M1))), automaticFloodWait: false)
|
||||
return account.network.request(Api.functions.auth.checkPassword(password: .inputCheckPasswordSRP(.init(srpId: kdfResult.id, A: Buffer(data: kdfResult.A), M1: Buffer(data: kdfResult.M1)))), automaticFloodWait: false)
|
||||
} else {
|
||||
return .fail(MTRpcError(errorCode: 400, errorDescription: "KDF_ERROR"))
|
||||
}
|
||||
@@ -1523,7 +1537,7 @@ public class Account {
|
||||
return .complete()
|
||||
} else {
|
||||
return network.request(Api.functions.help.saveAppLog(events: events.map { event -> Api.InputAppEvent in
|
||||
return .inputAppEvent(time: event.0, type: "", peer: 0, data: .jsonString(value: event.1))
|
||||
return .inputAppEvent(.init(time: event.0, type: "", peer: 0, data: .jsonString(.init(value: event.1))))
|
||||
}))
|
||||
|> ignoreValues
|
||||
|> `catch` { _ -> Signal<Never, NoError> in
|
||||
|
||||
@@ -508,7 +508,8 @@ struct AccountMutableState {
|
||||
|
||||
for chat in chats {
|
||||
switch chat {
|
||||
case let .channel(_, _, _, _, _, _, _, _, _, _, _, _, participantsCount, _, _, _, _, _, _, _, _, _, _):
|
||||
case let .channel(channelData):
|
||||
let participantsCount = channelData.participantsCount
|
||||
if let participantsCount = participantsCount {
|
||||
self.addOperation(.UpdateCachedPeerData(chat.peerId, { current in
|
||||
var previous: CachedChannelData
|
||||
@@ -572,7 +573,8 @@ struct AccountMutableState {
|
||||
var presences: [PeerId: Api.UserStatus] = [:]
|
||||
for user in users {
|
||||
switch user {
|
||||
case let .user(_, _, id, _, _, _, _, _, _, status, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||
case let .user(userData):
|
||||
let (id, status) = (userData.id, userData.status)
|
||||
if let status = status {
|
||||
presences[PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(id))] = status
|
||||
}
|
||||
|
||||
@@ -215,6 +215,8 @@ private var declaredEncodables: Void = {
|
||||
declareEncodable(AuthSessionInfoAttribute.self, f: { AuthSessionInfoAttribute(decoder: $0) })
|
||||
declareEncodable(TranslationMessageAttribute.self, f: { TranslationMessageAttribute(decoder: $0) })
|
||||
declareEncodable(TranslationMessageAttribute.Additional.self, f: { TranslationMessageAttribute.Additional(decoder: $0) })
|
||||
// MARK: Swiftgram
|
||||
declareEncodable(QuickTranslationMessageAttribute.self, f: { QuickTranslationMessageAttribute(decoder: $0) })
|
||||
declareEncodable(SynchronizeAutosaveItemOperation.self, f: { SynchronizeAutosaveItemOperation(decoder: $0) })
|
||||
declareEncodable(TelegramMediaStory.self, f: { TelegramMediaStory(decoder: $0) })
|
||||
declareEncodable(SynchronizeViewStoriesOperation.self, f: { SynchronizeViewStoriesOperation(decoder: $0) })
|
||||
@@ -502,7 +504,8 @@ private func cleanupAccount(networkArguments: NetworkInitializationArguments, ac
|
||||
}
|
||||
|> mapToSignal { result -> Signal<Void, NoError> in
|
||||
switch result {
|
||||
case let .loggedOut(_, futureAuthToken):
|
||||
case let .loggedOut(loggedOutData):
|
||||
let futureAuthToken = loggedOutData.futureAuthToken
|
||||
if let futureAuthToken = futureAuthToken {
|
||||
storeFutureLoginToken(accountManager: accountManager, token: futureAuthToken.makeData())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user