slidge-whatsapp 0.2.5__cp313-cp313-manylinux_2_36_aarch64.whl → 0.2.7__cp313-cp313-manylinux_2_36_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of slidge-whatsapp might be problematic. Click here for more details.
- slidge_whatsapp/config.py +3 -0
- slidge_whatsapp/event.go +31 -26
- slidge_whatsapp/gateway.go +13 -9
- slidge_whatsapp/gateway.py +2 -2
- slidge_whatsapp/generated/_whatsapp.cpython-313-aarch64-linux-gnu.h +135 -135
- slidge_whatsapp/generated/_whatsapp.cpython-313-aarch64-linux-gnu.so +0 -0
- slidge_whatsapp/generated/build.py +108 -108
- slidge_whatsapp/generated/whatsapp.c +954 -954
- slidge_whatsapp/generated/whatsapp.go +602 -602
- slidge_whatsapp/generated/whatsapp.py +783 -783
- slidge_whatsapp/generated/whatsapp_go.h +135 -135
- slidge_whatsapp/go.mod +15 -12
- slidge_whatsapp/go.sum +35 -29
- slidge_whatsapp/media/media.go +21 -11
- slidge_whatsapp/session.go +73 -66
- slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn.go +4 -4
- slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn_darwin.go +0 -5
- slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go +3 -0
- slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/symbols.go +40 -20
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/CHANGELOG.md +14 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/ffi.go +2 -2
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/fun.go +10 -2
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib.go +1 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_unix.go +1 -1
- slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_windows.go +1 -1
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/README.md +2 -7
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/callback.go +2 -1
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c +8510 -5090
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h +344 -150
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3.go +57 -23
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.c +4 -0
- slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/.gitignore +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/LICENSE +202 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/README.md +4 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid.go +35 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_gccgo.go +26 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.c +23 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.go +22 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.go +35 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.s +18 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.go +28 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.s +44 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/goid_slow.go +24 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go +17 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.23.go +38 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.5.go +57 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.6.go +43 -0
- slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.9.go +37 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/CONTRIBUTING.md +43 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/README.md +31 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/console.go +20 -5
- slidge_whatsapp/vendor/github.com/rs/zerolog/log/log.go +131 -0
- slidge_whatsapp/vendor/github.com/rs/zerolog/log.go +1 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/sampler.go +4 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/writer.go +9 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupCipher.go +17 -6
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go +17 -7
- slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go +4 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go +2 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/libsignal/session/Session.go +41 -17
- slidge_whatsapp/vendor/go.mau.fi/libsignal/session/SessionCipher.go +64 -30
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go +5 -3
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go +6 -4
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go +6 -4
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SessionStore.go +8 -6
- slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go +7 -5
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/connlog.go +257 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/database.go +309 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/iter.go +233 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/json.go +47 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/log.go +129 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/massinsert.go +164 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/queryhelper.go +137 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/reflectscan.go +30 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/transaction.go +180 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgrades.go +250 -0
- slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgradetable.go +331 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exerrors/dualerror.go +33 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exerrors/must.go +23 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/cors.go +32 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/handleerrors.go +64 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/json.go +36 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/middleware.go +30 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exhttp/networkerror.go +37 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exstrings/stringutil.go +76 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/event.go +88 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/returnonce.go +25 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/ringbuffer.go +139 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncmap.go +94 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncset.go +136 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/callermarshal.go +28 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/defaults.go +32 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/generics.go +45 -0
- slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/writer.go +81 -0
- slidge_whatsapp/vendor/go.mau.fi/util/ptr/ptr.go +43 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/decode.go +27 -26
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/encode.go +4 -3
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/keys.go +5 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +27 -25
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +40 -7
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/binary/encoder.go +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/broadcast.go +5 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/call.go +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/client.go +119 -37
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/connectionevents.go +29 -11
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download-to-file.go +63 -30
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download.go +74 -34
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/errors.go +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/group.go +61 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +188 -152
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/keepalive.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaconn.go +5 -3
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaretry.go +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +444 -135
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/msgsecret.go +118 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/notification.go +78 -42
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair-code.go +7 -4
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair.go +42 -18
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/prekeys.go +9 -5
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/presence.go +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/privacysettings.go +10 -11
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/extra.go +7 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.pb.go +983 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.proto +85 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/extra.go +3 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.pb.go +197 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto +13 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.pb.go +279 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto +21 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.pb.go +137 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto +10 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.pb.go +313 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto +27 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.pb.go +1299 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto +112 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.pb.go +514 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.proto +47 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.pb.go +123 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.proto +7 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/extra.go +3 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.pb.go +720 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.proto +59 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/extra.go +3 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.pb.go +365 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.proto +33 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.pb.go +1238 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.proto +105 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go +39 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go +354 -175
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto +5 -5
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go +170 -15
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto +4 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go +29 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go +13 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go +344 -31
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto +26 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.pb.go → WACompanionReg.pb.go} +184 -89
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.proto → WACompanionReg.proto} +2 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go +173 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go +78 -16
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto +5 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +7428 -2151
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +373 -44
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +456 -135
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +14 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.pb.go +198 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto +14 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go +162 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go +32 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go +192 -52
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go +60 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/extra.go +7 -6
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go +39 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go +61 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go +800 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto +72 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +1344 -438
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +52 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go +27 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go +59 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +382 -78
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +563 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +4 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +25 -9
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/reportingfields.json +1 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/reportingtoken.go +176 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/retry.go +39 -21
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +261 -75
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/sendfb.go +28 -16
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +3 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +85 -43
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/signal.go +75 -88
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go +86 -65
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go +186 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +291 -167
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql +155 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql +11 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql +8 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql +5 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql +10 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/10-chat-db-lid-migration-ts.sql +2 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go +22 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +107 -56
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/botmap.go +210 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/events/events.go +13 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/group.go +15 -6
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +7 -8
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/message.go +18 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/update.go +3 -2
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/upload.go +1 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +47 -29
- slidge_whatsapp/vendor/golang.org/x/exp/LICENSE +27 -0
- slidge_whatsapp/vendor/golang.org/x/exp/PATENTS +22 -0
- slidge_whatsapp/vendor/golang.org/x/exp/constraints/constraints.go +54 -0
- slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
- slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/.gitignore +2 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/ascii.go +53 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/ciphers.go +641 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/client_conn_pool.go +311 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +122 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config_go124.go +61 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/config_pre_go124.go +16 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/databuffer.go +149 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/errors.go +145 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/flow.go +120 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/frame.go +1702 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/gotrack.go +170 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +432 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/pipe.go +184 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +3350 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/timer.go +20 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +3287 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/write.go +381 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched.go +251 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_priority.go +451 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_random.go +77 -0
- slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_roundrobin.go +119 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/go118.go +13 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/idna10.0.0.go +769 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/idna9.0.0.go +717 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/pre_go118.go +11 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/punycode.go +217 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables10.0.0.go +4559 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables11.0.0.go +4653 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables12.0.0.go +4733 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables13.0.0.go +4959 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/tables9.0.0.go +4486 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie.go +51 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie12.0.0.go +30 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trie13.0.0.go +30 -0
- slidge_whatsapp/vendor/golang.org/x/net/idna/trieval.go +119 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
- slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/request.go +467 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_darwin.go +148 -1
- slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_linux.go +16 -26
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +84 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +20 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +84 -0
- slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +20 -0
- slidge_whatsapp/vendor/golang.org/x/sys/windows/security_windows.go +44 -5
- slidge_whatsapp/vendor/golang.org/x/sys/windows/syscall_windows.go +4 -2
- slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +239 -0
- slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +9 -0
- slidge_whatsapp/vendor/golang.org/x/text/LICENSE +27 -0
- slidge_whatsapp/vendor/golang.org/x/text/PATENTS +22 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule.go +336 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +11 -0
- slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +14 -0
- slidge_whatsapp/vendor/golang.org/x/text/transform/transform.go +709 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/core.go +1071 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +1815 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +1887 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +1923 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +1955 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +1781 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/forminfo.go +279 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/iter.go +458 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +7657 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +7693 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +7710 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +7760 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +7637 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
- slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb +0 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +3 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +16 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/{strings_unsafe_go121.go → strings_unsafe.go} +0 -2
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/version/version.go +1 -1
- slidge_whatsapp/vendor/google.golang.org/protobuf/proto/merge.go +6 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +2 -0
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/{value_unsafe_go121.go → value_unsafe.go} +0 -2
- slidge_whatsapp/vendor/modules.txt +52 -13
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/METADATA +1 -1
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/RECORD +330 -184
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/WHEEL +1 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/CNAME +0 -1
- slidge_whatsapp/vendor/github.com/rs/zerolog/_config.yml +0 -1
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw +0 -23
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw +0 -7
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw +0 -0
- slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go +0 -296
- slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go +0 -94
- slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go +0 -98
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/LICENSE +0 -0
- {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/entry_points.txt +0 -0
|
@@ -9,13 +9,17 @@ package whatsmeow
|
|
|
9
9
|
import (
|
|
10
10
|
"bytes"
|
|
11
11
|
"compress/zlib"
|
|
12
|
+
"context"
|
|
13
|
+
"crypto/sha256"
|
|
12
14
|
"encoding/hex"
|
|
13
15
|
"errors"
|
|
14
16
|
"fmt"
|
|
15
17
|
"io"
|
|
16
18
|
"runtime/debug"
|
|
19
|
+
"strconv"
|
|
17
20
|
"time"
|
|
18
21
|
|
|
22
|
+
"github.com/rs/zerolog"
|
|
19
23
|
"go.mau.fi/libsignal/groups"
|
|
20
24
|
"go.mau.fi/libsignal/protocol"
|
|
21
25
|
"go.mau.fi/libsignal/session"
|
|
@@ -27,6 +31,7 @@ import (
|
|
|
27
31
|
waBinary "go.mau.fi/whatsmeow/binary"
|
|
28
32
|
"go.mau.fi/whatsmeow/proto/waE2E"
|
|
29
33
|
"go.mau.fi/whatsmeow/proto/waHistorySync"
|
|
34
|
+
"go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload"
|
|
30
35
|
"go.mau.fi/whatsmeow/proto/waWeb"
|
|
31
36
|
"go.mau.fi/whatsmeow/store"
|
|
32
37
|
"go.mau.fi/whatsmeow/types"
|
|
@@ -36,33 +41,42 @@ import (
|
|
|
36
41
|
var pbSerializer = store.SignalProtobufSerializer
|
|
37
42
|
|
|
38
43
|
func (cli *Client) handleEncryptedMessage(node *waBinary.Node) {
|
|
44
|
+
ctx := cli.BackgroundEventCtx
|
|
39
45
|
info, err := cli.parseMessageInfo(node)
|
|
40
46
|
if err != nil {
|
|
41
47
|
cli.Log.Warnf("Failed to parse message: %v", err)
|
|
42
48
|
} else {
|
|
49
|
+
if !info.SenderAlt.IsEmpty() {
|
|
50
|
+
cli.StoreLIDPNMapping(ctx, info.SenderAlt, info.Sender)
|
|
51
|
+
} else if !info.RecipientAlt.IsEmpty() {
|
|
52
|
+
cli.StoreLIDPNMapping(ctx, info.RecipientAlt, info.Chat)
|
|
53
|
+
}
|
|
43
54
|
if info.VerifiedName != nil && len(info.VerifiedName.Details.GetVerifiedName()) > 0 {
|
|
44
|
-
go cli.updateBusinessName(info.Sender, info, info.VerifiedName.Details.GetVerifiedName())
|
|
55
|
+
go cli.updateBusinessName(cli.BackgroundEventCtx, info.Sender, info, info.VerifiedName.Details.GetVerifiedName())
|
|
45
56
|
}
|
|
46
|
-
if len(info.PushName) > 0 && info.PushName != "-" {
|
|
47
|
-
go cli.updatePushName(info.Sender, info, info.PushName)
|
|
57
|
+
if len(info.PushName) > 0 && info.PushName != "-" && (cli.MessengerConfig == nil || info.PushName != "username") {
|
|
58
|
+
go cli.updatePushName(cli.BackgroundEventCtx, info.Sender, info, info.PushName)
|
|
48
59
|
}
|
|
49
|
-
|
|
60
|
+
var cancelled bool
|
|
61
|
+
defer cli.maybeDeferredAck(ctx, node)(&cancelled)
|
|
50
62
|
if info.Sender.Server == types.NewsletterServer {
|
|
51
|
-
cli.handlePlaintextMessage(info, node)
|
|
63
|
+
cancelled = cli.handlePlaintextMessage(ctx, info, node)
|
|
52
64
|
} else {
|
|
53
|
-
cli.decryptMessages(info, node)
|
|
65
|
+
cancelled = cli.decryptMessages(ctx, info, node)
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
68
|
}
|
|
57
69
|
|
|
58
70
|
func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bool) (source types.MessageSource, err error) {
|
|
59
71
|
clientID := cli.getOwnID()
|
|
72
|
+
clientLID := cli.Store.GetLID()
|
|
60
73
|
if clientID.IsEmpty() {
|
|
61
74
|
err = ErrNotLoggedIn
|
|
62
75
|
return
|
|
63
76
|
}
|
|
64
77
|
ag := node.AttrGetter()
|
|
65
78
|
from := ag.JID("from")
|
|
79
|
+
source.AddressingMode = types.AddressingMode(ag.OptionalString("addressing_mode"))
|
|
66
80
|
if from.Server == types.GroupServer || from.Server == types.BroadcastServer {
|
|
67
81
|
source.IsGroup = true
|
|
68
82
|
source.Chat = from
|
|
@@ -71,7 +85,12 @@ func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bo
|
|
|
71
85
|
} else {
|
|
72
86
|
source.Sender = ag.OptionalJIDOrEmpty("participant")
|
|
73
87
|
}
|
|
74
|
-
if source.
|
|
88
|
+
if source.AddressingMode == types.AddressingModeLID {
|
|
89
|
+
source.SenderAlt = ag.OptionalJIDOrEmpty("participant_pn")
|
|
90
|
+
} else {
|
|
91
|
+
source.SenderAlt = ag.OptionalJIDOrEmpty("participant_lid")
|
|
92
|
+
}
|
|
93
|
+
if source.Sender.User == clientID.User || source.Sender.User == clientLID.User {
|
|
75
94
|
source.IsFromMe = true
|
|
76
95
|
}
|
|
77
96
|
if from.Server == types.BroadcastServer {
|
|
@@ -81,7 +100,7 @@ func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bo
|
|
|
81
100
|
source.Chat = from
|
|
82
101
|
source.Sender = from
|
|
83
102
|
// TODO IsFromMe?
|
|
84
|
-
} else if from.User == clientID.User {
|
|
103
|
+
} else if from.User == clientID.User || from.User == clientLID.User {
|
|
85
104
|
source.IsFromMe = true
|
|
86
105
|
source.Sender = from
|
|
87
106
|
recipient := ag.OptionalJID("recipient")
|
|
@@ -90,6 +109,11 @@ func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bo
|
|
|
90
109
|
} else {
|
|
91
110
|
source.Chat = from.ToNonAD()
|
|
92
111
|
}
|
|
112
|
+
if source.Chat.Server == types.HiddenUserServer {
|
|
113
|
+
source.RecipientAlt = ag.OptionalJIDOrEmpty("peer_recipient_pn")
|
|
114
|
+
} else {
|
|
115
|
+
source.RecipientAlt = ag.OptionalJIDOrEmpty("peer_recipient_lid")
|
|
116
|
+
}
|
|
93
117
|
} else if from.IsBot() {
|
|
94
118
|
source.Sender = from
|
|
95
119
|
meta := node.GetChildByTag("meta")
|
|
@@ -103,6 +127,14 @@ func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bo
|
|
|
103
127
|
} else {
|
|
104
128
|
source.Chat = from.ToNonAD()
|
|
105
129
|
source.Sender = from
|
|
130
|
+
if source.Sender.Server == types.HiddenUserServer {
|
|
131
|
+
source.SenderAlt = ag.OptionalJIDOrEmpty("sender_pn")
|
|
132
|
+
} else {
|
|
133
|
+
source.SenderAlt = ag.OptionalJIDOrEmpty("sender_lid")
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if !source.SenderAlt.IsEmpty() && source.SenderAlt.Device == 0 {
|
|
137
|
+
source.SenderAlt.Device = source.Sender.Device
|
|
106
138
|
}
|
|
107
139
|
err = ag.Error()
|
|
108
140
|
return
|
|
@@ -125,11 +157,15 @@ func (cli *Client) parseMsgMetaInfo(node waBinary.Node) (metaInfo types.MsgMetaI
|
|
|
125
157
|
metaNode := node.GetChildByTag("meta")
|
|
126
158
|
|
|
127
159
|
ag := metaNode.AttrGetter()
|
|
128
|
-
metaInfo.TargetID = types.MessageID(ag.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
160
|
+
metaInfo.TargetID = types.MessageID(ag.OptionalString("target_id"))
|
|
161
|
+
metaInfo.TargetSender = ag.OptionalJIDOrEmpty("target_sender_jid")
|
|
162
|
+
metaInfo.TargetChat = ag.OptionalJIDOrEmpty("target_chat_jid")
|
|
163
|
+
deprecatedLIDSession, ok := ag.GetBool("deprecated_lid_session", false)
|
|
164
|
+
if ok {
|
|
165
|
+
metaInfo.DeprecatedLIDSession = &deprecatedLIDSession
|
|
132
166
|
}
|
|
167
|
+
metaInfo.ThreadMessageID = types.MessageID(ag.OptionalString("thread_msg_id"))
|
|
168
|
+
metaInfo.ThreadMessageSenderJID = ag.OptionalJIDOrEmpty("thread_msg_sender_jid")
|
|
133
169
|
err = ag.Error()
|
|
134
170
|
return
|
|
135
171
|
}
|
|
@@ -168,8 +204,10 @@ func (cli *Client) parseMessageInfo(node *waBinary.Node) (*types.MessageInfo, er
|
|
|
168
204
|
cli.Log.Warnf("Failed to parse <bot> node in %s: %v", info.ID, err)
|
|
169
205
|
}
|
|
170
206
|
case "meta":
|
|
171
|
-
|
|
172
|
-
|
|
207
|
+
info.MsgMetaInfo, err = cli.parseMsgMetaInfo(child)
|
|
208
|
+
if err != nil {
|
|
209
|
+
cli.Log.Warnf("Failed to parse <meta> node in %s: %v", info.ID, err)
|
|
210
|
+
}
|
|
173
211
|
case "franking":
|
|
174
212
|
// TODO
|
|
175
213
|
case "trace":
|
|
@@ -184,7 +222,7 @@ func (cli *Client) parseMessageInfo(node *waBinary.Node) (*types.MessageInfo, er
|
|
|
184
222
|
return &info, nil
|
|
185
223
|
}
|
|
186
224
|
|
|
187
|
-
func (cli *Client) handlePlaintextMessage(info *types.MessageInfo, node *waBinary.Node) {
|
|
225
|
+
func (cli *Client) handlePlaintextMessage(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) (handlerFailed bool) {
|
|
188
226
|
// TODO edits have an additional <meta msg_edit_t="1696321271735" original_msg_t="1696321248"/> node
|
|
189
227
|
plaintext, ok := node.GetOptionalChildByTag("plaintext")
|
|
190
228
|
if !ok {
|
|
@@ -203,7 +241,7 @@ func (cli *Client) handlePlaintextMessage(info *types.MessageInfo, node *waBinar
|
|
|
203
241
|
cli.Log.Warnf("Error unmarshaling plaintext message from %s: %v", info.SourceString(), err)
|
|
204
242
|
return
|
|
205
243
|
}
|
|
206
|
-
cli.storeMessageSecret(info, &msg)
|
|
244
|
+
cli.storeMessageSecret(ctx, info, &msg)
|
|
207
245
|
evt := &events.Message{
|
|
208
246
|
Info: *info,
|
|
209
247
|
RawMessage: &msg,
|
|
@@ -215,16 +253,26 @@ func (cli *Client) handlePlaintextMessage(info *types.MessageInfo, node *waBinar
|
|
|
215
253
|
OriginalTS: meta.AttrGetter().UnixTime("original_msg_t"),
|
|
216
254
|
}
|
|
217
255
|
}
|
|
218
|
-
cli.dispatchEvent(evt.UnwrapRaw())
|
|
219
|
-
return
|
|
256
|
+
return cli.dispatchEvent(evt.UnwrapRaw())
|
|
220
257
|
}
|
|
221
258
|
|
|
222
|
-
func (cli *Client)
|
|
259
|
+
func (cli *Client) migrateSessionStore(ctx context.Context, pn, lid types.JID) {
|
|
260
|
+
err := cli.Store.Sessions.MigratePNToLID(ctx, pn, lid)
|
|
261
|
+
if err != nil {
|
|
262
|
+
cli.Log.Errorf("Failed to migrate signal store from %s to %s: %v", pn, lid, err)
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
func (cli *Client) decryptMessages(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) (handlerFailed bool) {
|
|
223
267
|
unavailableNode, ok := node.GetOptionalChildByTag("unavailable")
|
|
224
268
|
if ok && len(node.GetChildrenByTag("enc")) == 0 {
|
|
225
269
|
uType := events.UnavailableType(unavailableNode.AttrGetter().String("type"))
|
|
226
270
|
cli.Log.Warnf("Unavailable message %s from %s (type: %q)", info.ID, info.SourceString(), uType)
|
|
227
|
-
|
|
271
|
+
if cli.SynchronousAck {
|
|
272
|
+
cli.immediateRequestMessageFromPhone(ctx, info)
|
|
273
|
+
} else {
|
|
274
|
+
go cli.delayedRequestMessageFromPhone(info)
|
|
275
|
+
}
|
|
228
276
|
cli.dispatchEvent(&events.UndecryptableMessage{Info: *info, IsUnavailable: true, UnavailableType: uType})
|
|
229
277
|
return
|
|
230
278
|
}
|
|
@@ -233,6 +281,21 @@ func (cli *Client) decryptMessages(info *types.MessageInfo, node *waBinary.Node)
|
|
|
233
281
|
cli.Log.Debugf("Decrypting message from %s", info.SourceString())
|
|
234
282
|
handled := false
|
|
235
283
|
containsDirectMsg := false
|
|
284
|
+
senderEncryptionJID := info.Sender
|
|
285
|
+
if info.Sender.Server == types.DefaultUserServer && !info.Sender.IsBot() {
|
|
286
|
+
if info.SenderAlt.Server == types.HiddenUserServer {
|
|
287
|
+
senderEncryptionJID = info.SenderAlt
|
|
288
|
+
cli.migrateSessionStore(ctx, info.Sender, info.SenderAlt)
|
|
289
|
+
} else if lid, err := cli.Store.LIDs.GetLIDForPN(ctx, info.Sender); err != nil {
|
|
290
|
+
cli.Log.Errorf("Failed to get LID for %s: %v", info.Sender, err)
|
|
291
|
+
} else if !lid.IsEmpty() {
|
|
292
|
+
cli.migrateSessionStore(ctx, info.Sender, lid)
|
|
293
|
+
senderEncryptionJID = lid
|
|
294
|
+
info.SenderAlt = lid
|
|
295
|
+
} else {
|
|
296
|
+
cli.Log.Warnf("No LID found for %s", info.Sender)
|
|
297
|
+
}
|
|
298
|
+
}
|
|
236
299
|
for _, child := range children {
|
|
237
300
|
if child.Tag != "enc" {
|
|
238
301
|
continue
|
|
@@ -243,61 +306,64 @@ func (cli *Client) decryptMessages(info *types.MessageInfo, node *waBinary.Node)
|
|
|
243
306
|
continue
|
|
244
307
|
}
|
|
245
308
|
var decrypted []byte
|
|
309
|
+
var ciphertextHash *[32]byte
|
|
246
310
|
var err error
|
|
247
311
|
if encType == "pkmsg" || encType == "msg" {
|
|
248
|
-
decrypted, err = cli.decryptDM(&child,
|
|
312
|
+
decrypted, ciphertextHash, err = cli.decryptDM(ctx, &child, senderEncryptionJID, encType == "pkmsg", info.Timestamp)
|
|
249
313
|
containsDirectMsg = true
|
|
250
314
|
} else if info.IsGroup && encType == "skmsg" {
|
|
251
|
-
decrypted, err = cli.decryptGroupMsg(&child, info.
|
|
315
|
+
decrypted, ciphertextHash, err = cli.decryptGroupMsg(ctx, &child, senderEncryptionJID, info.Chat, info.Timestamp)
|
|
252
316
|
} else if encType == "msmsg" && info.Sender.IsBot() {
|
|
253
|
-
// Meta AI / other bots (biz?):
|
|
254
|
-
|
|
255
|
-
// step 1: get message secret
|
|
256
317
|
targetSenderJID := info.MsgMetaInfo.TargetSender
|
|
318
|
+
messageSecretSenderJID := targetSenderJID
|
|
257
319
|
if targetSenderJID.User == "" {
|
|
258
|
-
|
|
259
|
-
|
|
320
|
+
if info.Sender.Server == types.BotServer {
|
|
321
|
+
targetSenderJID = cli.Store.GetLID()
|
|
322
|
+
} else {
|
|
323
|
+
targetSenderJID = cli.getOwnID()
|
|
324
|
+
}
|
|
325
|
+
messageSecretSenderJID = cli.getOwnID()
|
|
260
326
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
327
|
+
var decryptMessageID string
|
|
328
|
+
if info.MsgBotInfo.EditType == types.EditTypeInner || info.MsgBotInfo.EditType == types.EditTypeLast {
|
|
329
|
+
decryptMessageID = info.MsgBotInfo.EditTargetID
|
|
330
|
+
} else {
|
|
331
|
+
decryptMessageID = info.ID
|
|
266
332
|
}
|
|
267
|
-
|
|
268
|
-
// step 2: get MessageSecretMessage
|
|
269
|
-
byteContents := child.Content.([]byte) // <enc> contents
|
|
270
333
|
var msMsg waE2E.MessageSecretMessage
|
|
271
|
-
|
|
272
|
-
err =
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// step 3: determine best message id for decryption
|
|
279
|
-
var messageID string
|
|
280
|
-
if info.MsgBotInfo.EditType == types.EditTypeInner || info.MsgBotInfo.EditType == types.EditTypeLast {
|
|
281
|
-
messageID = info.MsgBotInfo.EditTargetID
|
|
334
|
+
var messageSecret []byte
|
|
335
|
+
if messageSecret, err = cli.Store.MsgSecrets.GetMessageSecret(ctx, info.Chat, messageSecretSenderJID, info.MsgMetaInfo.TargetID); err != nil {
|
|
336
|
+
err = fmt.Errorf("failed to get message secret for %s: %v", info.MsgMetaInfo.TargetID, err)
|
|
337
|
+
} else if messageSecret == nil {
|
|
338
|
+
err = fmt.Errorf("message secret for %s not found", info.MsgMetaInfo.TargetID)
|
|
339
|
+
} else if err = proto.Unmarshal(child.Content.([]byte), &msMsg); err != nil {
|
|
340
|
+
err = fmt.Errorf("failed to unmarshal MessageSecretMessage protobuf: %v", err)
|
|
282
341
|
} else {
|
|
283
|
-
|
|
342
|
+
decrypted, err = cli.decryptBotMessage(ctx, messageSecret, &msMsg, decryptMessageID, targetSenderJID, info)
|
|
284
343
|
}
|
|
285
|
-
|
|
286
|
-
// step 4: decrypt and voila
|
|
287
|
-
decrypted, err = cli.decryptBotMessage(messageSecret, &msMsg, messageID, targetSenderJID, info)
|
|
288
344
|
} else {
|
|
289
345
|
cli.Log.Warnf("Unhandled encrypted message (type %s) from %s", encType, info.SourceString())
|
|
290
346
|
continue
|
|
291
347
|
}
|
|
292
348
|
|
|
293
|
-
if err
|
|
294
|
-
cli.Log.
|
|
349
|
+
if errors.Is(err, EventAlreadyProcessed) {
|
|
350
|
+
cli.Log.Debugf("Ignoring message %s from %s: %v", info.ID, info.SourceString(), err)
|
|
351
|
+
return
|
|
352
|
+
} else if err != nil {
|
|
353
|
+
cli.Log.Warnf("Error decrypting message %s from %s: %v", info.ID, info.SourceString(), err)
|
|
354
|
+
if ctx.Err() != nil {
|
|
355
|
+
handlerFailed = true
|
|
356
|
+
return
|
|
357
|
+
}
|
|
295
358
|
isUnavailable := encType == "skmsg" && !containsDirectMsg && errors.Is(err, signalerror.ErrNoSenderKeyForUser)
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
359
|
+
if encType != "msmsg" {
|
|
360
|
+
if cli.SynchronousAck {
|
|
361
|
+
cli.sendRetryReceipt(ctx, node, info, isUnavailable)
|
|
362
|
+
} else {
|
|
363
|
+
go cli.sendRetryReceipt(context.WithoutCancel(ctx), node, info, isUnavailable)
|
|
364
|
+
}
|
|
299
365
|
}
|
|
300
|
-
cli.dispatchEvent(&events.UndecryptableMessage{
|
|
366
|
+
handlerFailed = cli.dispatchEvent(&events.UndecryptableMessage{
|
|
301
367
|
Info: *info,
|
|
302
368
|
IsUnavailable: isUnavailable,
|
|
303
369
|
DecryptFailMode: events.DecryptFailMode(ag.OptionalString("decrypt-fail")),
|
|
@@ -315,85 +381,184 @@ func (cli *Client) decryptMessages(info *types.MessageInfo, node *waBinary.Node)
|
|
|
315
381
|
cli.Log.Warnf("Error unmarshaling decrypted message from %s: %v", info.SourceString(), err)
|
|
316
382
|
continue
|
|
317
383
|
}
|
|
318
|
-
cli.handleDecryptedMessage(info, &msg, retryCount)
|
|
384
|
+
handlerFailed = cli.handleDecryptedMessage(ctx, info, &msg, retryCount)
|
|
319
385
|
handled = true
|
|
320
386
|
case 3:
|
|
321
|
-
handled = cli.handleDecryptedArmadillo(info, decrypted, retryCount)
|
|
387
|
+
handled, handlerFailed = cli.handleDecryptedArmadillo(ctx, info, decrypted, retryCount)
|
|
322
388
|
default:
|
|
323
389
|
cli.Log.Warnf("Unknown version %d in decrypted message from %s", ag.Int("v"), info.SourceString())
|
|
324
390
|
}
|
|
391
|
+
if ciphertextHash != nil && cli.EnableDecryptedEventBuffer {
|
|
392
|
+
// Use the context passed to decryptMessages
|
|
393
|
+
err = cli.Store.EventBuffer.ClearBufferedEventPlaintext(ctx, *ciphertextHash)
|
|
394
|
+
if err != nil {
|
|
395
|
+
zerolog.Ctx(ctx).Err(err).
|
|
396
|
+
Hex("ciphertext_hash", ciphertextHash[:]).
|
|
397
|
+
Msg("Failed to clear buffered event plaintext")
|
|
398
|
+
} else {
|
|
399
|
+
zerolog.Ctx(ctx).Debug().
|
|
400
|
+
Hex("ciphertext_hash", ciphertextHash[:]).
|
|
401
|
+
Msg("Deleted event plaintext from buffer")
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if time.Since(cli.lastDecryptedBufferClear) > 12*time.Hour && ctx.Err() == nil {
|
|
405
|
+
cli.lastDecryptedBufferClear = time.Now()
|
|
406
|
+
go func() {
|
|
407
|
+
err := cli.Store.EventBuffer.DeleteOldBufferedHashes(context.WithoutCancel(ctx))
|
|
408
|
+
if err != nil {
|
|
409
|
+
zerolog.Ctx(ctx).Err(err).Msg("Failed to delete old buffered hashes")
|
|
410
|
+
}
|
|
411
|
+
}()
|
|
412
|
+
}
|
|
413
|
+
}
|
|
325
414
|
}
|
|
326
415
|
if handled {
|
|
327
416
|
go cli.sendMessageReceipt(info)
|
|
328
417
|
}
|
|
418
|
+
return
|
|
329
419
|
}
|
|
330
420
|
|
|
331
|
-
func (cli *Client) clearUntrustedIdentity(target types.JID) {
|
|
332
|
-
err := cli.Store.Identities.DeleteIdentity(target.SignalAddress().String())
|
|
421
|
+
func (cli *Client) clearUntrustedIdentity(ctx context.Context, target types.JID) error {
|
|
422
|
+
err := cli.Store.Identities.DeleteIdentity(ctx, target.SignalAddress().String())
|
|
333
423
|
if err != nil {
|
|
334
|
-
|
|
424
|
+
return fmt.Errorf("failed to delete identity: %w", err)
|
|
335
425
|
}
|
|
336
|
-
err = cli.Store.Sessions.DeleteSession(target.SignalAddress().String())
|
|
426
|
+
err = cli.Store.Sessions.DeleteSession(ctx, target.SignalAddress().String())
|
|
337
427
|
if err != nil {
|
|
338
|
-
|
|
428
|
+
return fmt.Errorf("failed to delete session: %w", err)
|
|
429
|
+
}
|
|
430
|
+
go cli.dispatchEvent(&events.IdentityChange{JID: target, Timestamp: time.Now(), Implicit: true})
|
|
431
|
+
return nil
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
var EventAlreadyProcessed = errors.New("event was already processed")
|
|
435
|
+
|
|
436
|
+
func (cli *Client) bufferedDecrypt(
|
|
437
|
+
ctx context.Context,
|
|
438
|
+
ciphertext []byte,
|
|
439
|
+
serverTimestamp time.Time,
|
|
440
|
+
decrypt func(context.Context) ([]byte, error),
|
|
441
|
+
) (plaintext []byte, ciphertextHash [32]byte, err error) {
|
|
442
|
+
if !cli.EnableDecryptedEventBuffer {
|
|
443
|
+
plaintext, err = decrypt(ctx)
|
|
444
|
+
return
|
|
445
|
+
}
|
|
446
|
+
ciphertextHash = sha256.Sum256(ciphertext)
|
|
447
|
+
var buf *store.BufferedEvent
|
|
448
|
+
buf, err = cli.Store.EventBuffer.GetBufferedEvent(ctx, ciphertextHash)
|
|
449
|
+
if err != nil {
|
|
450
|
+
err = fmt.Errorf("failed to get buffered event: %w", err)
|
|
451
|
+
return
|
|
452
|
+
} else if buf != nil {
|
|
453
|
+
if buf.Plaintext == nil {
|
|
454
|
+
zerolog.Ctx(ctx).Debug().
|
|
455
|
+
Hex("ciphertext_hash", ciphertextHash[:]).
|
|
456
|
+
Time("insertion_time", buf.InsertTime).
|
|
457
|
+
Msg("Returning event already processed error")
|
|
458
|
+
err = fmt.Errorf("%w at %s", EventAlreadyProcessed, buf.InsertTime.String())
|
|
459
|
+
return
|
|
460
|
+
}
|
|
461
|
+
zerolog.Ctx(ctx).Debug().
|
|
462
|
+
Hex("ciphertext_hash", ciphertextHash[:]).
|
|
463
|
+
Time("insertion_time", buf.InsertTime).
|
|
464
|
+
Msg("Returning previously decrypted plaintext")
|
|
465
|
+
plaintext = buf.Plaintext
|
|
466
|
+
return
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
err = cli.Store.EventBuffer.DoDecryptionTxn(ctx, func(ctx context.Context) (innerErr error) {
|
|
470
|
+
plaintext, innerErr = decrypt(ctx)
|
|
471
|
+
if innerErr != nil {
|
|
472
|
+
return
|
|
473
|
+
}
|
|
474
|
+
innerErr = cli.Store.EventBuffer.PutBufferedEvent(ctx, ciphertextHash, plaintext, serverTimestamp)
|
|
475
|
+
if innerErr != nil {
|
|
476
|
+
innerErr = fmt.Errorf("failed to save decrypted event to buffer: %w", innerErr)
|
|
477
|
+
}
|
|
478
|
+
return
|
|
479
|
+
})
|
|
480
|
+
if err == nil {
|
|
481
|
+
zerolog.Ctx(ctx).Debug().
|
|
482
|
+
Hex("ciphertext_hash", ciphertextHash[:]).
|
|
483
|
+
Msg("Successfully decrypted and saved event")
|
|
339
484
|
}
|
|
340
|
-
|
|
485
|
+
return
|
|
341
486
|
}
|
|
342
487
|
|
|
343
|
-
func (cli *Client) decryptDM(child *waBinary.Node, from types.JID, isPreKey bool) ([]byte, error) {
|
|
344
|
-
content,
|
|
488
|
+
func (cli *Client) decryptDM(ctx context.Context, child *waBinary.Node, from types.JID, isPreKey bool, serverTS time.Time) ([]byte, *[32]byte, error) {
|
|
489
|
+
content, ok := child.Content.([]byte)
|
|
490
|
+
if !ok {
|
|
491
|
+
return nil, nil, fmt.Errorf("message content is not a byte slice")
|
|
492
|
+
}
|
|
345
493
|
|
|
346
494
|
builder := session.NewBuilderFromSignal(cli.Store, from.SignalAddress(), pbSerializer)
|
|
347
495
|
cipher := session.NewCipher(builder, from.SignalAddress())
|
|
348
496
|
var plaintext []byte
|
|
497
|
+
var ciphertextHash [32]byte
|
|
349
498
|
if isPreKey {
|
|
350
499
|
preKeyMsg, err := protocol.NewPreKeySignalMessageFromBytes(content, pbSerializer.PreKeySignalMessage, pbSerializer.SignalMessage)
|
|
351
500
|
if err != nil {
|
|
352
|
-
return nil, fmt.Errorf("failed to parse prekey message: %w", err)
|
|
353
|
-
}
|
|
354
|
-
plaintext,
|
|
355
|
-
|
|
356
|
-
cli.
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
501
|
+
return nil, nil, fmt.Errorf("failed to parse prekey message: %w", err)
|
|
502
|
+
}
|
|
503
|
+
plaintext, ciphertextHash, err = cli.bufferedDecrypt(ctx, content, serverTS, func(decryptCtx context.Context) ([]byte, error) {
|
|
504
|
+
pt, innerErr := cipher.DecryptMessage(decryptCtx, preKeyMsg)
|
|
505
|
+
if cli.AutoTrustIdentity && errors.Is(innerErr, signalerror.ErrUntrustedIdentity) {
|
|
506
|
+
cli.Log.Warnf("Got %v error while trying to decrypt prekey message from %s, clearing stored identity and retrying", innerErr, from)
|
|
507
|
+
if innerErr = cli.clearUntrustedIdentity(decryptCtx, from); innerErr != nil {
|
|
508
|
+
innerErr = fmt.Errorf("failed to clear untrusted identity: %w", innerErr)
|
|
509
|
+
return nil, innerErr
|
|
510
|
+
}
|
|
511
|
+
pt, innerErr = cipher.DecryptMessage(decryptCtx, preKeyMsg)
|
|
512
|
+
}
|
|
513
|
+
return pt, innerErr
|
|
514
|
+
})
|
|
360
515
|
if err != nil {
|
|
361
|
-
return nil, fmt.Errorf("failed to decrypt prekey message: %w", err)
|
|
516
|
+
return nil, nil, fmt.Errorf("failed to decrypt prekey message: %w", err)
|
|
362
517
|
}
|
|
363
518
|
} else {
|
|
364
519
|
msg, err := protocol.NewSignalMessageFromBytes(content, pbSerializer.SignalMessage)
|
|
365
520
|
if err != nil {
|
|
366
|
-
return nil, fmt.Errorf("failed to parse normal message: %w", err)
|
|
521
|
+
return nil, nil, fmt.Errorf("failed to parse normal message: %w", err)
|
|
367
522
|
}
|
|
368
|
-
plaintext, err =
|
|
523
|
+
plaintext, ciphertextHash, err = cli.bufferedDecrypt(ctx, content, serverTS, func(decryptCtx context.Context) ([]byte, error) {
|
|
524
|
+
return cipher.Decrypt(decryptCtx, msg)
|
|
525
|
+
})
|
|
369
526
|
if err != nil {
|
|
370
|
-
return nil, fmt.Errorf("failed to decrypt normal message: %w", err)
|
|
527
|
+
return nil, nil, fmt.Errorf("failed to decrypt normal message: %w", err)
|
|
371
528
|
}
|
|
372
529
|
}
|
|
373
|
-
|
|
374
|
-
|
|
530
|
+
var err error
|
|
531
|
+
plaintext, err = unpadMessage(plaintext, child.AttrGetter().Int("v"))
|
|
532
|
+
if err != nil {
|
|
533
|
+
return nil, nil, fmt.Errorf("failed to unpad message: %w", err)
|
|
375
534
|
}
|
|
376
|
-
return
|
|
535
|
+
return plaintext, &ciphertextHash, nil
|
|
377
536
|
}
|
|
378
537
|
|
|
379
|
-
func (cli *Client) decryptGroupMsg(child *waBinary.Node, from types.JID, chat types.JID) ([]byte, error) {
|
|
380
|
-
content,
|
|
538
|
+
func (cli *Client) decryptGroupMsg(ctx context.Context, child *waBinary.Node, from types.JID, chat types.JID, serverTS time.Time) ([]byte, *[32]byte, error) {
|
|
539
|
+
content, ok := child.Content.([]byte)
|
|
540
|
+
if !ok {
|
|
541
|
+
return nil, nil, fmt.Errorf("message content is not a byte slice")
|
|
542
|
+
}
|
|
381
543
|
|
|
382
544
|
senderKeyName := protocol.NewSenderKeyName(chat.String(), from.SignalAddress())
|
|
383
545
|
builder := groups.NewGroupSessionBuilder(cli.Store, pbSerializer)
|
|
384
546
|
cipher := groups.NewGroupCipher(builder, senderKeyName, cli.Store)
|
|
385
547
|
msg, err := protocol.NewSenderKeyMessageFromBytes(content, pbSerializer.SenderKeyMessage)
|
|
386
548
|
if err != nil {
|
|
387
|
-
return nil, fmt.Errorf("failed to parse group message: %w", err)
|
|
549
|
+
return nil, nil, fmt.Errorf("failed to parse group message: %w", err)
|
|
388
550
|
}
|
|
389
|
-
plaintext, err :=
|
|
551
|
+
plaintext, ciphertextHash, err := cli.bufferedDecrypt(ctx, content, serverTS, func(decryptCtx context.Context) ([]byte, error) {
|
|
552
|
+
return cipher.Decrypt(decryptCtx, msg)
|
|
553
|
+
})
|
|
390
554
|
if err != nil {
|
|
391
|
-
return nil, fmt.Errorf("failed to decrypt group message: %w", err)
|
|
555
|
+
return nil, nil, fmt.Errorf("failed to decrypt group message: %w", err)
|
|
392
556
|
}
|
|
393
|
-
|
|
394
|
-
|
|
557
|
+
plaintext, err = unpadMessage(plaintext, child.AttrGetter().Int("v"))
|
|
558
|
+
if err != nil {
|
|
559
|
+
return nil, nil, err
|
|
395
560
|
}
|
|
396
|
-
return
|
|
561
|
+
return plaintext, &ciphertextHash, nil
|
|
397
562
|
}
|
|
398
563
|
|
|
399
564
|
const checkPadding = true
|
|
@@ -404,14 +569,16 @@ func isValidPadding(plaintext []byte) bool {
|
|
|
404
569
|
return bytes.HasSuffix(plaintext, expectedPadding)
|
|
405
570
|
}
|
|
406
571
|
|
|
407
|
-
func unpadMessage(plaintext []byte) ([]byte, error) {
|
|
408
|
-
if
|
|
572
|
+
func unpadMessage(plaintext []byte, version int) ([]byte, error) {
|
|
573
|
+
if version == 3 {
|
|
574
|
+
return plaintext, nil
|
|
575
|
+
} else if len(plaintext) == 0 {
|
|
409
576
|
return nil, fmt.Errorf("plaintext is empty")
|
|
410
|
-
}
|
|
411
|
-
if checkPadding && !isValidPadding(plaintext) {
|
|
577
|
+
} else if checkPadding && !isValidPadding(plaintext) {
|
|
412
578
|
return nil, fmt.Errorf("plaintext doesn't have expected padding")
|
|
579
|
+
} else {
|
|
580
|
+
return plaintext[:len(plaintext)-int(plaintext[len(plaintext)-1])], nil
|
|
413
581
|
}
|
|
414
|
-
return plaintext[:len(plaintext)-int(plaintext[len(plaintext)-1])], nil
|
|
415
582
|
}
|
|
416
583
|
|
|
417
584
|
func padMessage(plaintext []byte) []byte {
|
|
@@ -424,7 +591,7 @@ func padMessage(plaintext []byte) []byte {
|
|
|
424
591
|
return plaintext
|
|
425
592
|
}
|
|
426
593
|
|
|
427
|
-
func (cli *Client) handleSenderKeyDistributionMessage(chat, from types.JID, axolotlSKDM []byte) {
|
|
594
|
+
func (cli *Client) handleSenderKeyDistributionMessage(ctx context.Context, chat, from types.JID, axolotlSKDM []byte) {
|
|
428
595
|
builder := groups.NewGroupSessionBuilder(cli.Store, pbSerializer)
|
|
429
596
|
senderKeyName := protocol.NewSenderKeyName(chat.String(), from.SignalAddress())
|
|
430
597
|
sdkMsg, err := protocol.NewSenderKeyDistributionMessageFromBytes(axolotlSKDM, pbSerializer.SenderKeyDistributionMessage)
|
|
@@ -432,7 +599,11 @@ func (cli *Client) handleSenderKeyDistributionMessage(chat, from types.JID, axol
|
|
|
432
599
|
cli.Log.Errorf("Failed to parse sender key distribution message from %s for %s: %v", from, chat, err)
|
|
433
600
|
return
|
|
434
601
|
}
|
|
435
|
-
builder.Process(senderKeyName, sdkMsg)
|
|
602
|
+
err = builder.Process(ctx, senderKeyName, sdkMsg)
|
|
603
|
+
if err != nil {
|
|
604
|
+
cli.Log.Errorf("Failed to process sender key distribution message from %s for %s: %v", from, chat, err)
|
|
605
|
+
return
|
|
606
|
+
}
|
|
436
607
|
cli.Log.Debugf("Processed sender key distribution message from %s in %s", senderKeyName.Sender().String(), senderKeyName.GroupID())
|
|
437
608
|
}
|
|
438
609
|
|
|
@@ -451,35 +622,56 @@ func (cli *Client) handleHistorySyncNotificationLoop() {
|
|
|
451
622
|
go cli.handleHistorySyncNotificationLoop()
|
|
452
623
|
}
|
|
453
624
|
}()
|
|
625
|
+
ctx := cli.BackgroundEventCtx
|
|
454
626
|
for notif := range cli.historySyncNotifications {
|
|
455
|
-
cli.
|
|
627
|
+
blob, err := cli.DownloadHistorySync(ctx, notif, false)
|
|
628
|
+
if err != nil {
|
|
629
|
+
cli.Log.Errorf("Failed to download history sync: %v", err)
|
|
630
|
+
} else {
|
|
631
|
+
cli.dispatchEvent(&events.HistorySync{Data: blob})
|
|
632
|
+
}
|
|
456
633
|
}
|
|
457
634
|
}
|
|
458
635
|
|
|
459
|
-
|
|
636
|
+
// DownloadHistorySync will download and parse the history sync blob from the given history sync notification.
|
|
637
|
+
//
|
|
638
|
+
// You only need to call this manually if you set [Client.ManualHistorySyncDownload] to true.
|
|
639
|
+
// By default, whatsmeow will call this automatically and dispatch an [events.HistorySync] with the parsed data.
|
|
640
|
+
func (cli *Client) DownloadHistorySync(ctx context.Context, notif *waE2E.HistorySyncNotification, synchronousStorage bool) (*waHistorySync.HistorySync, error) {
|
|
460
641
|
var historySync waHistorySync.HistorySync
|
|
461
|
-
if data, err := cli.Download(notif); err != nil {
|
|
462
|
-
|
|
642
|
+
if data, err := cli.Download(ctx, notif); err != nil {
|
|
643
|
+
return nil, fmt.Errorf("failed to download: %w", err)
|
|
463
644
|
} else if reader, err := zlib.NewReader(bytes.NewReader(data)); err != nil {
|
|
464
|
-
|
|
645
|
+
return nil, fmt.Errorf("failed to prepare to decompress: %w", err)
|
|
465
646
|
} else if rawData, err := io.ReadAll(reader); err != nil {
|
|
466
|
-
|
|
647
|
+
return nil, fmt.Errorf("failed to decompress: %w", err)
|
|
467
648
|
} else if err = proto.Unmarshal(rawData, &historySync); err != nil {
|
|
468
|
-
|
|
649
|
+
return nil, fmt.Errorf("failed to unmarshal: %w", err)
|
|
469
650
|
} else {
|
|
470
651
|
cli.Log.Debugf("Received history sync (type %s, chunk %d)", historySync.GetSyncType(), historySync.GetChunkOrder())
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
652
|
+
doStorage := func(ctx context.Context) {
|
|
653
|
+
if historySync.GetSyncType() == waHistorySync.HistorySync_PUSH_NAME {
|
|
654
|
+
cli.handleHistoricalPushNames(ctx, historySync.GetPushnames())
|
|
655
|
+
} else if len(historySync.GetConversations()) > 0 {
|
|
656
|
+
cli.storeHistoricalMessageSecrets(ctx, historySync.GetConversations())
|
|
657
|
+
}
|
|
658
|
+
if len(historySync.GetPhoneNumberToLidMappings()) > 0 {
|
|
659
|
+
cli.storeHistoricalPNLIDMappings(ctx, historySync.GetPhoneNumberToLidMappings())
|
|
660
|
+
}
|
|
661
|
+
if historySync.GlobalSettings != nil {
|
|
662
|
+
cli.storeGlobalSettings(ctx, historySync.GlobalSettings)
|
|
663
|
+
}
|
|
475
664
|
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
}
|
|
665
|
+
if synchronousStorage {
|
|
666
|
+
doStorage(ctx)
|
|
667
|
+
} else {
|
|
668
|
+
go doStorage(context.WithoutCancel(ctx))
|
|
669
|
+
}
|
|
670
|
+
return &historySync, nil
|
|
479
671
|
}
|
|
480
672
|
}
|
|
481
673
|
|
|
482
|
-
func (cli *Client) handleAppStateSyncKeyShare(keys *waE2E.AppStateSyncKeyShare) {
|
|
674
|
+
func (cli *Client) handleAppStateSyncKeyShare(ctx context.Context, keys *waE2E.AppStateSyncKeyShare) {
|
|
483
675
|
onlyResyncIfNotSynced := true
|
|
484
676
|
|
|
485
677
|
cli.Log.Debugf("Got %d new app state keys", len(keys.GetKeys()))
|
|
@@ -494,7 +686,7 @@ func (cli *Client) handleAppStateSyncKeyShare(keys *waE2E.AppStateSyncKeyShare)
|
|
|
494
686
|
if isReRequest {
|
|
495
687
|
onlyResyncIfNotSynced = false
|
|
496
688
|
}
|
|
497
|
-
err = cli.Store.AppStateKeys.PutAppStateSyncKey(key.GetKeyID().GetKeyID(), store.AppStateSyncKey{
|
|
689
|
+
err = cli.Store.AppStateKeys.PutAppStateSyncKey(ctx, key.GetKeyID().GetKeyID(), store.AppStateSyncKey{
|
|
498
690
|
Data: key.GetKeyData().GetKeyData(),
|
|
499
691
|
Fingerprint: marshaledFingerprint,
|
|
500
692
|
Timestamp: key.GetKeyData().GetTimestamp(),
|
|
@@ -508,17 +700,18 @@ func (cli *Client) handleAppStateSyncKeyShare(keys *waE2E.AppStateSyncKeyShare)
|
|
|
508
700
|
cli.appStateKeyRequestsLock.RUnlock()
|
|
509
701
|
|
|
510
702
|
for _, name := range appstate.AllPatchNames {
|
|
511
|
-
err := cli.FetchAppState(name, false, onlyResyncIfNotSynced)
|
|
703
|
+
err := cli.FetchAppState(ctx, name, false, onlyResyncIfNotSynced)
|
|
512
704
|
if err != nil {
|
|
513
705
|
cli.Log.Errorf("Failed to do initial fetch of app state %s: %v", name, err)
|
|
514
706
|
}
|
|
515
707
|
}
|
|
516
708
|
}
|
|
517
709
|
|
|
518
|
-
func (cli *Client) handlePlaceholderResendResponse(msg *waE2E.PeerDataOperationRequestResponseMessage) {
|
|
710
|
+
func (cli *Client) handlePlaceholderResendResponse(msg *waE2E.PeerDataOperationRequestResponseMessage) (ok bool) {
|
|
519
711
|
reqID := msg.GetStanzaID()
|
|
520
712
|
parts := msg.GetPeerDataOperationResult()
|
|
521
713
|
cli.Log.Debugf("Handling response to placeholder resend request %s with %d items", reqID, len(parts))
|
|
714
|
+
ok = true
|
|
522
715
|
for i, part := range parts {
|
|
523
716
|
var webMsg waWeb.WebMessageInfo
|
|
524
717
|
if resp := part.GetPlaceholderMessageResendResponse(); resp == nil {
|
|
@@ -529,36 +722,51 @@ func (cli *Client) handlePlaceholderResendResponse(msg *waE2E.PeerDataOperationR
|
|
|
529
722
|
cli.Log.Warnf("Failed to parse web message info in item #%d of response to %s: %v", i+1, reqID, err)
|
|
530
723
|
} else {
|
|
531
724
|
msgEvt.UnavailableRequestID = reqID
|
|
532
|
-
cli.dispatchEvent(msgEvt)
|
|
725
|
+
ok = cli.dispatchEvent(msgEvt) && ok
|
|
533
726
|
}
|
|
534
727
|
}
|
|
728
|
+
return
|
|
535
729
|
}
|
|
536
730
|
|
|
537
|
-
func (cli *Client) handleProtocolMessage(info *types.MessageInfo, msg *waE2E.Message) {
|
|
731
|
+
func (cli *Client) handleProtocolMessage(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) (ok bool) {
|
|
732
|
+
ok = true
|
|
538
733
|
protoMsg := msg.GetProtocolMessage()
|
|
539
734
|
|
|
540
|
-
if
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
735
|
+
if !info.IsFromMe {
|
|
736
|
+
return
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
if protoMsg.GetHistorySyncNotification() != nil {
|
|
740
|
+
if !cli.ManualHistorySyncDownload {
|
|
741
|
+
cli.historySyncNotifications <- protoMsg.HistorySyncNotification
|
|
742
|
+
if cli.historySyncHandlerStarted.CompareAndSwap(false, true) {
|
|
743
|
+
go cli.handleHistorySyncNotificationLoop()
|
|
744
|
+
}
|
|
544
745
|
}
|
|
545
746
|
go cli.sendProtocolMessageReceipt(info.ID, types.ReceiptTypeHistorySync)
|
|
546
747
|
}
|
|
547
748
|
|
|
749
|
+
if protoMsg.GetLidMigrationMappingSyncMessage() != nil {
|
|
750
|
+
cli.storeLIDSyncMessage(ctx, protoMsg.GetLidMigrationMappingSyncMessage().GetEncodedMappingPayload())
|
|
751
|
+
}
|
|
752
|
+
|
|
548
753
|
if protoMsg.GetPeerDataOperationRequestResponseMessage().GetPeerDataOperationRequestType() == waE2E.PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND {
|
|
549
|
-
|
|
754
|
+
ok = cli.handlePlaceholderResendResponse(protoMsg.GetPeerDataOperationRequestResponseMessage()) && ok
|
|
550
755
|
}
|
|
551
756
|
|
|
552
|
-
if protoMsg.GetAppStateSyncKeyShare() != nil
|
|
553
|
-
go cli.handleAppStateSyncKeyShare(protoMsg.AppStateSyncKeyShare)
|
|
757
|
+
if protoMsg.GetAppStateSyncKeyShare() != nil {
|
|
758
|
+
go cli.handleAppStateSyncKeyShare(context.WithoutCancel(ctx), protoMsg.AppStateSyncKeyShare)
|
|
554
759
|
}
|
|
555
760
|
|
|
556
761
|
if info.Category == "peer" {
|
|
557
762
|
go cli.sendProtocolMessageReceipt(info.ID, types.ReceiptTypePeerMsg)
|
|
558
763
|
}
|
|
764
|
+
return
|
|
559
765
|
}
|
|
560
766
|
|
|
561
|
-
func (cli *Client) processProtocolParts(info *types.MessageInfo, msg *waE2E.Message) {
|
|
767
|
+
func (cli *Client) processProtocolParts(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) (ok bool) {
|
|
768
|
+
ok = true
|
|
769
|
+
cli.storeMessageSecret(ctx, info, msg)
|
|
562
770
|
// Hopefully sender key distribution messages and protocol messages can't be inside ephemeral messages
|
|
563
771
|
if msg.GetDeviceSentMessage().GetMessage() != nil {
|
|
564
772
|
msg = msg.GetDeviceSentMessage().GetMessage()
|
|
@@ -567,20 +775,24 @@ func (cli *Client) processProtocolParts(info *types.MessageInfo, msg *waE2E.Mess
|
|
|
567
775
|
if !info.IsGroup {
|
|
568
776
|
cli.Log.Warnf("Got sender key distribution message in non-group chat from %s", info.Sender)
|
|
569
777
|
} else {
|
|
570
|
-
|
|
778
|
+
encryptionIdentity := info.Sender
|
|
779
|
+
if encryptionIdentity.Server == types.DefaultUserServer && info.SenderAlt.Server == types.HiddenUserServer {
|
|
780
|
+
encryptionIdentity = info.SenderAlt
|
|
781
|
+
}
|
|
782
|
+
cli.handleSenderKeyDistributionMessage(ctx, info.Chat, encryptionIdentity, msg.SenderKeyDistributionMessage.AxolotlSenderKeyDistributionMessage)
|
|
571
783
|
}
|
|
572
784
|
}
|
|
573
785
|
// N.B. Edits are protocol messages, but they're also wrapped inside EditedMessage,
|
|
574
786
|
// which is only unwrapped after processProtocolParts, so this won't trigger for edits.
|
|
575
787
|
if msg.GetProtocolMessage() != nil {
|
|
576
|
-
cli.handleProtocolMessage(info, msg)
|
|
788
|
+
ok = cli.handleProtocolMessage(ctx, info, msg) && ok
|
|
577
789
|
}
|
|
578
|
-
|
|
790
|
+
return
|
|
579
791
|
}
|
|
580
792
|
|
|
581
|
-
func (cli *Client) storeMessageSecret(info *types.MessageInfo, msg *waE2E.Message) {
|
|
793
|
+
func (cli *Client) storeMessageSecret(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) {
|
|
582
794
|
if msgSecret := msg.GetMessageContextInfo().GetMessageSecret(); len(msgSecret) > 0 {
|
|
583
|
-
err := cli.Store.MsgSecrets.PutMessageSecret(info.Chat, info.Sender, info.ID, msgSecret)
|
|
795
|
+
err := cli.Store.MsgSecrets.PutMessageSecret(ctx, info.Chat, info.Sender, info.ID, msgSecret)
|
|
584
796
|
if err != nil {
|
|
585
797
|
cli.Log.Errorf("Failed to store message secret key for %s: %v", info.ID, err)
|
|
586
798
|
} else {
|
|
@@ -589,7 +801,7 @@ func (cli *Client) storeMessageSecret(info *types.MessageInfo, msg *waE2E.Messag
|
|
|
589
801
|
}
|
|
590
802
|
}
|
|
591
803
|
|
|
592
|
-
func (cli *Client) storeHistoricalMessageSecrets(conversations []*waHistorySync.Conversation) {
|
|
804
|
+
func (cli *Client) storeHistoricalMessageSecrets(ctx context.Context, conversations []*waHistorySync.Conversation) {
|
|
593
805
|
var secrets []store.MessageSecretInsert
|
|
594
806
|
var privacyTokens []store.PrivacyToken
|
|
595
807
|
ownID := cli.getOwnID().ToNonAD()
|
|
@@ -639,7 +851,7 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waHistorySync.
|
|
|
639
851
|
}
|
|
640
852
|
if len(secrets) > 0 {
|
|
641
853
|
cli.Log.Debugf("Storing %d message secret keys in history sync", len(secrets))
|
|
642
|
-
err := cli.Store.MsgSecrets.PutMessageSecrets(secrets)
|
|
854
|
+
err := cli.Store.MsgSecrets.PutMessageSecrets(ctx, secrets)
|
|
643
855
|
if err != nil {
|
|
644
856
|
cli.Log.Errorf("Failed to store message secret keys in history sync: %v", err)
|
|
645
857
|
} else {
|
|
@@ -648,7 +860,7 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waHistorySync.
|
|
|
648
860
|
}
|
|
649
861
|
if len(privacyTokens) > 0 {
|
|
650
862
|
cli.Log.Debugf("Storing %d privacy tokens in history sync", len(privacyTokens))
|
|
651
|
-
err := cli.Store.PrivacyTokens.PutPrivacyTokens(privacyTokens...)
|
|
863
|
+
err := cli.Store.PrivacyTokens.PutPrivacyTokens(ctx, privacyTokens...)
|
|
652
864
|
if err != nil {
|
|
653
865
|
cli.Log.Errorf("Failed to store privacy tokens in history sync: %v", err)
|
|
654
866
|
} else {
|
|
@@ -657,10 +869,107 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waHistorySync.
|
|
|
657
869
|
}
|
|
658
870
|
}
|
|
659
871
|
|
|
660
|
-
func (cli *Client)
|
|
661
|
-
|
|
872
|
+
func (cli *Client) storeLIDSyncMessage(ctx context.Context, msg []byte) {
|
|
873
|
+
var decoded waLidMigrationSyncPayload.LIDMigrationMappingSyncPayload
|
|
874
|
+
err := proto.Unmarshal(msg, &decoded)
|
|
875
|
+
if err != nil {
|
|
876
|
+
zerolog.Ctx(ctx).Err(err).Msg("Failed to unmarshal LID migration mapping sync payload")
|
|
877
|
+
return
|
|
878
|
+
}
|
|
879
|
+
if cli.Store.LIDMigrationTimestamp == 0 && decoded.GetChatDbMigrationTimestamp() > 0 {
|
|
880
|
+
cli.Store.LIDMigrationTimestamp = int64(decoded.GetChatDbMigrationTimestamp())
|
|
881
|
+
err = cli.Store.Save(ctx)
|
|
882
|
+
if err != nil {
|
|
883
|
+
zerolog.Ctx(ctx).Err(err).
|
|
884
|
+
Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp).
|
|
885
|
+
Msg("Failed to save chat DB LID migration timestamp")
|
|
886
|
+
} else {
|
|
887
|
+
zerolog.Ctx(ctx).Debug().
|
|
888
|
+
Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp).
|
|
889
|
+
Msg("Saved chat DB LID migration timestamp")
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
lidPairs := make([]store.LIDMapping, len(decoded.PnToLidMappings))
|
|
893
|
+
for i, mapping := range decoded.PnToLidMappings {
|
|
894
|
+
lidPairs[i] = store.LIDMapping{
|
|
895
|
+
LID: types.JID{User: strconv.FormatUint(mapping.GetAssignedLid(), 10), Server: types.HiddenUserServer},
|
|
896
|
+
PN: types.JID{User: strconv.FormatUint(mapping.GetPn(), 10), Server: types.DefaultUserServer},
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
err = cli.Store.LIDs.PutManyLIDMappings(ctx, lidPairs)
|
|
900
|
+
if err != nil {
|
|
901
|
+
zerolog.Ctx(ctx).Err(err).
|
|
902
|
+
Int("pair_count", len(lidPairs)).
|
|
903
|
+
Msg("Failed to store phone number to LID mappings from sync message")
|
|
904
|
+
} else {
|
|
905
|
+
zerolog.Ctx(ctx).Debug().
|
|
906
|
+
Int("pair_count", len(lidPairs)).
|
|
907
|
+
Msg("Stored PN-LID mappings from sync message")
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
func (cli *Client) storeGlobalSettings(ctx context.Context, settings *waHistorySync.GlobalSettings) {
|
|
912
|
+
if cli.Store.LIDMigrationTimestamp == 0 && settings.GetChatDbLidMigrationTimestamp() > 0 {
|
|
913
|
+
cli.Store.LIDMigrationTimestamp = settings.GetChatDbLidMigrationTimestamp()
|
|
914
|
+
err := cli.Store.Save(ctx)
|
|
915
|
+
if err != nil {
|
|
916
|
+
zerolog.Ctx(ctx).Err(err).
|
|
917
|
+
Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp).
|
|
918
|
+
Msg("Failed to save chat DB LID migration timestamp")
|
|
919
|
+
} else {
|
|
920
|
+
zerolog.Ctx(ctx).Debug().
|
|
921
|
+
Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp).
|
|
922
|
+
Msg("Saved chat DB LID migration timestamp")
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
func (cli *Client) storeHistoricalPNLIDMappings(ctx context.Context, mappings []*waHistorySync.PhoneNumberToLIDMapping) {
|
|
928
|
+
lidPairs := make([]store.LIDMapping, 0, len(mappings))
|
|
929
|
+
for _, mapping := range mappings {
|
|
930
|
+
pn, err := types.ParseJID(mapping.GetPnJID())
|
|
931
|
+
if err != nil {
|
|
932
|
+
zerolog.Ctx(ctx).Err(err).
|
|
933
|
+
Str("pn_jid", mapping.GetPnJID()).
|
|
934
|
+
Str("lid_jid", mapping.GetLidJID()).
|
|
935
|
+
Msg("Failed to parse phone number from history sync")
|
|
936
|
+
continue
|
|
937
|
+
}
|
|
938
|
+
if pn.Server == types.LegacyUserServer {
|
|
939
|
+
pn.Server = types.DefaultUserServer
|
|
940
|
+
}
|
|
941
|
+
lid, err := types.ParseJID(mapping.GetLidJID())
|
|
942
|
+
if err != nil {
|
|
943
|
+
zerolog.Ctx(ctx).Err(err).
|
|
944
|
+
Str("pn_jid", mapping.GetPnJID()).
|
|
945
|
+
Str("lid_jid", mapping.GetLidJID()).
|
|
946
|
+
Msg("Failed to parse LID from history sync")
|
|
947
|
+
continue
|
|
948
|
+
}
|
|
949
|
+
lidPairs = append(lidPairs, store.LIDMapping{
|
|
950
|
+
LID: lid,
|
|
951
|
+
PN: pn,
|
|
952
|
+
})
|
|
953
|
+
}
|
|
954
|
+
err := cli.Store.LIDs.PutManyLIDMappings(ctx, lidPairs)
|
|
955
|
+
if err != nil {
|
|
956
|
+
zerolog.Ctx(ctx).Err(err).
|
|
957
|
+
Int("pair_count", len(lidPairs)).
|
|
958
|
+
Msg("Failed to store phone number to LID mappings from history sync")
|
|
959
|
+
} else {
|
|
960
|
+
zerolog.Ctx(ctx).Debug().
|
|
961
|
+
Int("pair_count", len(lidPairs)).
|
|
962
|
+
Msg("Stored PN-LID mappings from history sync")
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
func (cli *Client) handleDecryptedMessage(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message, retryCount int) bool {
|
|
967
|
+
ok := cli.processProtocolParts(ctx, info, msg)
|
|
968
|
+
if !ok {
|
|
969
|
+
return false
|
|
970
|
+
}
|
|
662
971
|
evt := &events.Message{Info: *info, RawMessage: msg, RetryCount: retryCount}
|
|
663
|
-
cli.dispatchEvent(evt.UnwrapRaw())
|
|
972
|
+
return cli.dispatchEvent(evt.UnwrapRaw())
|
|
664
973
|
}
|
|
665
974
|
|
|
666
975
|
func (cli *Client) sendProtocolMessageReceipt(id types.MessageID, msgType types.ReceiptType) {
|