mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-08-10 16:20:32 +02:00
Update Ghostgram features
This commit is contained in:
@@ -10,7 +10,8 @@ func validatedEncryptionConfig(postbox: Postbox, network: Network) -> Signal<Sec
|
||||
|> retryRequest
|
||||
|> mapToSignal { result -> Signal<SecretChatEncryptionConfig, NoError> in
|
||||
switch result {
|
||||
case let .dhConfig(g, p, version, _):
|
||||
case let .dhConfig(dhConfigData):
|
||||
let (g, p, version) = (dhConfigData.g, dhConfigData.p, dhConfigData.version)
|
||||
if !MTCheckIsSafeG(UInt32(g)) {
|
||||
Logger.shared.log("SecretChatEncryptionConfig", "Invalid g")
|
||||
return .complete()
|
||||
@@ -26,7 +27,7 @@ func validatedEncryptionConfig(postbox: Postbox, network: Network) -> Signal<Sec
|
||||
return .never()
|
||||
}
|
||||
return .single(SecretChatEncryptionConfig(g: g, p: MemoryBuffer(p), version: version))
|
||||
case .dhConfigNotModified(_):
|
||||
case .dhConfigNotModified:
|
||||
assertionFailure()
|
||||
return .never()
|
||||
}
|
||||
|
||||
@@ -6,7 +6,8 @@ import TelegramApi
|
||||
extension SecretChatFileReference {
|
||||
convenience init?(_ file: Api.EncryptedFile) {
|
||||
switch file {
|
||||
case let .encryptedFile(id, accessHash, size, dcId, keyFingerprint):
|
||||
case let .encryptedFile(encryptedFileData):
|
||||
let (id, accessHash, size, dcId, keyFingerprint) = (encryptedFileData.id, encryptedFileData.accessHash, encryptedFileData.size, encryptedFileData.dcId, encryptedFileData.keyFingerprint)
|
||||
self.init(id: id, accessHash: accessHash, size: size, datacenterId: dcId, keyFingerprint: keyFingerprint)
|
||||
case .encryptedFileEmpty:
|
||||
return nil
|
||||
|
||||
+4
-2
@@ -15,9 +15,11 @@ private func keyFingerprintFromBytes(_ bytes: Buffer) -> Int64 {
|
||||
extension SecretChatIncomingEncryptedOperation {
|
||||
convenience init(message: Api.EncryptedMessage) {
|
||||
switch message {
|
||||
case let .encryptedMessage(randomId, chatId, date, bytes, file):
|
||||
case let .encryptedMessage(encryptedMessageData):
|
||||
let (randomId, chatId, date, bytes, file) = (encryptedMessageData.randomId, encryptedMessageData.chatId, encryptedMessageData.date, encryptedMessageData.bytes, encryptedMessageData.file)
|
||||
self.init(peerId: PeerId(namespace: Namespaces.Peer.SecretChat, id: PeerId.Id._internalFromInt64Value(Int64(chatId))), globallyUniqueId: randomId, timestamp: date, type: .message, keyFingerprint: keyFingerprintFromBytes(bytes), contents: MemoryBuffer(bytes), mediaFileReference: SecretChatFileReference(file))
|
||||
case let .encryptedMessageService(randomId, chatId, date, bytes):
|
||||
case let .encryptedMessageService(encryptedMessageServiceData):
|
||||
let (randomId, chatId, date, bytes) = (encryptedMessageServiceData.randomId, encryptedMessageServiceData.chatId, encryptedMessageServiceData.date, encryptedMessageServiceData.bytes)
|
||||
self.init(peerId: PeerId(namespace: Namespaces.Peer.SecretChat, id: PeerId.Id._internalFromInt64Value(Int64(chatId))), globallyUniqueId: randomId, timestamp: date, type: .service, keyFingerprint: keyFingerprintFromBytes(bytes), contents: MemoryBuffer(bytes), mediaFileReference: nil)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,14 @@ import TelegramApi
|
||||
extension SecretChatOutgoingFileReference {
|
||||
init?(_ apiFile: Api.InputEncryptedFile) {
|
||||
switch apiFile {
|
||||
case let .inputEncryptedFile(id, accessHash):
|
||||
case let .inputEncryptedFile(inputEncryptedFileData):
|
||||
let (id, accessHash) = (inputEncryptedFileData.id, inputEncryptedFileData.accessHash)
|
||||
self = .remote(id: id, accessHash: accessHash)
|
||||
case let .inputEncryptedFileBigUploaded(id, parts, keyFingerprint):
|
||||
case let .inputEncryptedFileBigUploaded(inputEncryptedFileBigUploadedData):
|
||||
let (id, parts, keyFingerprint) = (inputEncryptedFileBigUploadedData.id, inputEncryptedFileBigUploadedData.parts, inputEncryptedFileBigUploadedData.keyFingerprint)
|
||||
self = .uploadedLarge(id: id, partCount: parts, keyFingerprint: keyFingerprint)
|
||||
case let .inputEncryptedFileUploaded(id, parts, md5Checksum, keyFingerprint):
|
||||
case let .inputEncryptedFileUploaded(inputEncryptedFileUploadedData):
|
||||
let (id, parts, md5Checksum, keyFingerprint) = (inputEncryptedFileUploadedData.id, inputEncryptedFileUploadedData.parts, inputEncryptedFileUploadedData.md5Checksum, inputEncryptedFileUploadedData.keyFingerprint)
|
||||
self = .uploadedRegular(id: id, partCount: parts, md5Digest: md5Checksum, keyFingerprint: keyFingerprint)
|
||||
case .inputEncryptedFileEmpty:
|
||||
return nil
|
||||
@@ -20,11 +23,11 @@ extension SecretChatOutgoingFileReference {
|
||||
var apiInputFile: Api.InputEncryptedFile {
|
||||
switch self {
|
||||
case let .remote(id, accessHash):
|
||||
return .inputEncryptedFile(id: id, accessHash: accessHash)
|
||||
return .inputEncryptedFile(.init(id: id, accessHash: accessHash))
|
||||
case let .uploadedRegular(id, partCount, md5Digest, keyFingerprint):
|
||||
return .inputEncryptedFileUploaded(id: id, parts: partCount, md5Checksum: md5Digest, keyFingerprint: keyFingerprint)
|
||||
return .inputEncryptedFileUploaded(.init(id: id, parts: partCount, md5Checksum: md5Digest, keyFingerprint: keyFingerprint))
|
||||
case let .uploadedLarge(id, partCount, keyFingerprint):
|
||||
return .inputEncryptedFileBigUploaded(id: id, parts: partCount, keyFingerprint: keyFingerprint)
|
||||
return .inputEncryptedFileBigUploaded(.init(id: id, parts: partCount, keyFingerprint: keyFingerprint))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -26,6 +26,11 @@ func _internal_setSecretChatMessageAutoremoveTimeoutInteractively(transaction: T
|
||||
}
|
||||
|
||||
func _internal_addSecretChatMessageScreenshot(account: Account, peerId: PeerId) -> Signal<Void, NoError> {
|
||||
// MISC: Bypass screenshot notifications in secret chats when enabled
|
||||
if MiscSettingsManager.shared.shouldBypassScreenshotProtection {
|
||||
return .complete()
|
||||
}
|
||||
|
||||
return account.postbox.transaction { transaction -> Void in
|
||||
if let _ = transaction.getPeer(peerId) as? TelegramSecretChat, let state = transaction.getPeerChatState(peerId) as? SecretChatState {
|
||||
switch state.embeddedState {
|
||||
|
||||
@@ -17,7 +17,8 @@ func updateSecretChat(encryptionProvider: EncryptionProvider, accountPeerId: Pee
|
||||
let settings = transaction.getPreferencesEntry(key: PreferencesKeys.secretChatSettings)?.get(SecretChatSettings.self) ?? SecretChatSettings.defaultSettings
|
||||
assert((currentPeer == nil) == (currentState == nil))
|
||||
switch chat {
|
||||
case let .encryptedChat(_, _, _, adminId, _, gAOrB, _):
|
||||
case let .encryptedChat(encryptedChatData):
|
||||
let (adminId, gAOrB) = (encryptedChatData.adminId, encryptedChatData.gAOrB)
|
||||
if let currentPeer = currentPeer, let currentState = currentState, adminId == accountPeerId.id._internalGetInt64Value() {
|
||||
if case let .handshake(handshakeState) = currentState.embeddedState, case let .requested(_, p, a) = handshakeState {
|
||||
let pData = p.makeData()
|
||||
@@ -67,7 +68,8 @@ func updateSecretChat(encryptionProvider: EncryptionProvider, accountPeerId: Pee
|
||||
} else {
|
||||
Logger.shared.log("State", "got encryptedChat, but peer or state don't exist or account is not creator")
|
||||
}
|
||||
case let .encryptedChatDiscarded(flags, _):
|
||||
case let .encryptedChatDiscarded(encryptedChatDiscardedData):
|
||||
let flags = encryptedChatDiscardedData.flags
|
||||
if let currentPeer = currentPeer, let currentState = currentState {
|
||||
let isRemoved = (flags & (1 << 0)) != 0
|
||||
|
||||
@@ -86,9 +88,10 @@ func updateSecretChat(encryptionProvider: EncryptionProvider, accountPeerId: Pee
|
||||
} else {
|
||||
Logger.shared.log("State", "got encryptedChatDiscarded, but peer doesn't exist")
|
||||
}
|
||||
case .encryptedChatEmpty(_):
|
||||
case .encryptedChatEmpty:
|
||||
break
|
||||
case let .encryptedChatRequested(_, folderId, _, accessHash, date, adminId, participantId, gA):
|
||||
case let .encryptedChatRequested(encryptedChatRequestedData):
|
||||
let (folderId, accessHash, date, adminId, participantId, gA) = (encryptedChatRequestedData.folderId, encryptedChatRequestedData.accessHash, encryptedChatRequestedData.date, encryptedChatRequestedData.adminId, encryptedChatRequestedData.participantId, encryptedChatRequestedData.gA)
|
||||
if currentPeer == nil && participantId == accountPeerId.id._internalGetInt64Value() {
|
||||
if settings.acceptOnThisDevice {
|
||||
let state = SecretChatState(role: .participant, embeddedState: .handshake(.accepting), keychain: SecretChatKeychain(keys: []), keyFingerprint: nil, messageAutoremoveTimeout: nil)
|
||||
@@ -122,7 +125,8 @@ func updateSecretChat(encryptionProvider: EncryptionProvider, accountPeerId: Pee
|
||||
} else {
|
||||
Logger.shared.log("State", "got encryptedChatRequested, but peer already exists or this account is creator")
|
||||
}
|
||||
case let .encryptedChatWaiting(_, accessHash, date, adminId, participantId):
|
||||
case let .encryptedChatWaiting(encryptedChatWaitingData):
|
||||
let (accessHash, date, adminId, participantId) = (encryptedChatWaitingData.accessHash, encryptedChatWaitingData.date, encryptedChatWaitingData.adminId, encryptedChatWaitingData.participantId)
|
||||
if let requestData = requestData, currentPeer == nil && adminId == accountPeerId.id._internalGetInt64Value() {
|
||||
let state = SecretChatState(role: .creator, embeddedState: .handshake(.requested(g: requestData.g, p: requestData.p, a: requestData.a)), keychain: SecretChatKeychain(keys: []), keyFingerprint: nil, messageAutoremoveTimeout: nil)
|
||||
let peer = TelegramSecretChat(id: chat.peerId, creationDate: date, regularPeerId: PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(participantId)), accessHash: accessHash, role: state.role, embeddedState: state.embeddedState.peerState, messageAutoremoveTimeout: nil)
|
||||
|
||||
Reference in New Issue
Block a user