Commit Graph

7381 Commits

Author SHA1 Message Date
mpeter50 8be0a7df95 Update logging of device verification request timestamp valdiation
In element-hq/element-web#29625 it was found to be useful to give more visibility to this kind of verification error.

Signed-off-by: mpeter50 <83356418+mpeter50@users.noreply.github.com>
2025-05-05 09:46:29 +03:00
Michael Goldenberg 8fd122c431 style(indexeddb): cargo fmt
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2025-05-05 08:44:54 +02:00
Michael Goldenberg f661b82f18 refactor(indexeddb): rename module (indexeddb_serializer -> serializer)
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2025-05-05 08:44:54 +02:00
Michael Goldenberg 77ee7f1d19 refactor(indexeddb): change indexeddb_serializer::Result to use IndexeddbSerializerError
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2025-05-05 08:44:54 +02:00
Michael Goldenberg af90b7ac4e refactor(indexeddb): add conversions into IndexeddbSerializerError
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2025-05-05 08:44:54 +02:00
Michael Goldenberg 3f3daef01c refactor(indexeddb): add conversion IndexeddbSerializerError -> IndexeddbCryptoStoreError
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2025-05-05 08:44:54 +02:00
Michael Goldenberg c2e859273d refactor(indexeddb): add enum for general IndexedDB serialization errors
Signed-off-by: Michael Goldenberg <m@mgoldenberg.net>
2025-05-05 08:44:54 +02:00
Stefan Ceriu 284db61540 feat(ffi): expose a new get_room method on the NotificationClient that will fetch it from its inner in-memory store backed client instead of the parent one.
This is necessary because the `NotificationClient` runs a sliding sync loop and the retrieved data isn't pushed back into the parent client stores (because of cross process locking shenanigans).
This will be used with the previously introduced `org.matrix.msc3401.call.member` required state to check whether a room still has an ongoing call before showing the ringing screen.
2025-04-30 12:48:41 +03:00
Stefan Ceriu 8e19a5eb33 change(notification_client): request the org.matrix.msc3401.call.member state events resolving notification payloads
- this will be used to check whether a room still has an active call (`has_active_room_call`) before showing the ringing screen
2025-04-30 12:48:41 +03:00
Jorge Martín ef4cb79cde fix(sdk): Upload encrypted media with application/octet-stream mime type
This is apparently the right way to do it, both because some HS expect only this mimetype and also so we don't leak the mime type of the encrypted media.
2025-04-30 09:10:27 +02:00
Timo 9fbb9cbe9b WidgetDriver: refactor Filter
This commit simplifies the filter public api.

Rethinking the public api we only need:
 - to know if events can be sent based on the capabilities
 - to know if events can be sent to the widget (read) based on the capabilities
 - if it even makes sense to sent a cs api read request or if all possibly returned events
   would not match the type.

To simplify the code in the machine it also made sense to add `From` implementation
to the FilterInputs instead of gathering the relevant data from all kinds of Raw events.

The new api is simpler:
All possible events we need to check can be converted into filter inputs (using `into()`).
`capabilites` has two allow_read/allow_send that consume filter inputs.
`capabilites` can be asked if there is any filter for specific event types
to allow not send unnecassary requests.
2025-04-29 18:15:07 +02:00
Timo 4e64f28318 WidgetDriver: filter event_type change from dedicated ...EventType -> String
This is (sadly) required since we cannot do `as_str()` for `TimlineEventType` and other `ruma` event types.
So we need to use `String`. We also never used them more specifically than strings.
2025-04-29 18:15:07 +02:00
Timo 5e2f775b2b WidgetDriver: rename EventFilter->Filter & MatrixEventFilterInput -> FilterInput
This is a simple devtool refactor rename. Nothing fancy here.
2025-04-29 18:15:07 +02:00
procr1337 0856f4e6b0 refactor(crypto): Properly encapsulate internal OutboundGroupSession state
Previously, the `share_strategy` was breaking the abstraction provided
by `OutboundGroupSession` by accessing its internal fields in an
inconsistent and adhoc way. Now all fields are private and a proper
abstraction was added to access the required state in a consistent API.
2025-04-29 17:39:21 +02:00
Benjamin Bouvier ae4cdda939 feat(sdk): add a room method to retrieve all related events 2025-04-29 15:01:31 +02:00
Benjamin Bouvier 0db273bf38 test(sdk): add a mocking endpoint for listing relations and test Room::relations 2025-04-29 15:01:31 +02:00
Benjamin Bouvier a912a7584f test(sdk): add a mocking endpoint for listing threads and test Room::list_threads() 2025-04-29 15:01:31 +02:00
Benjamin Bouvier fa1aa57581 feat(sdk): add a room method to retrieve a list of threads 2025-04-29 15:01:31 +02:00
Valere Fedronic ff32840387 refactor(crypto): Move session_id from EncryptionInfo to AlgorithmInfo as it is megolm specific
This patch moves the `session_id` field from EncryptionInfo to
AlgorithmInfo::MegolmV1AesSha2 as it is specific to Megolm. We provide
transparent migration of the serialized data from one format to the other.

In the future we plan to reuse `EncryptionInfo` for to_device decryption
(using olm not megolm). So megolm session_id should move to algorithm
specific data.
2025-04-29 08:07:03 +00:00
Richard van der Hoff d800d3c324 crypto: clean up confusing method (#4983)
This method had a confusing name: it didn't receive a key bundle, but
rather the data *about* a key bundle.

Remove the unused `sender_key` parameter while we are at it: we use the
embedded (and already-checked) `event.sender_device_keys` here.
2025-04-28 13:55:51 +01:00
Richard van der Hoff 7c84ab2701 Merge pull request #4982 from matrix-org/rav/random_fix_1
sdk: remove redundant variable
2025-04-28 13:51:12 +01:00
procr1337 6e119c737c fix(crypto): Take into account pending to-device room key sharing requests when collecting devices that have already received a session
This avoids conditions where a key may be shared with a device only
after we decided that it is fine to reuse (and not rotate) the session
based on the wrong assumption that that particular device does not have
the keys.

Signed-off-by: Niklas Baumstark
[niklas.baumstark@gmail.com](mailto:niklas.baumstark@gmail.com)
2025-04-25 15:51:41 +02:00
Valere Fedronic 237c0256a2 fix(tests): tweak a flaky test to make it more stable + logs (#4968)
Tentative fix for
https://github.com/matrix-org/matrix-rust-sdk/issues/4832

Tweaked a bit the timings and added more logging in the UTD manager to
see what is happening exactly in case it is still flaky.

Signed-off-by: Damir Jelić <poljar@termina.org.uk>
Co-authored-by: Damir Jelić <poljar@termina.org.uk>
Co-authored-by: Benjamin Bouvier <benjamin@bouvier.cc>
2025-04-25 10:42:55 +00:00
Benjamin Bouvier f763d3690d docs(common): add a comment explaining how to use the timer! macro 2025-04-24 18:21:00 +02:00
procr1337 afb6627bef fix(crypto): Fixed a bug where room keys would be rotated unecessarily
Previously, `is_session_overshared_for_user` did not take into account
that `shared_with_set` also contains withheld device IDs who explicitly
have never received the session keys. This would lead to it mistakenly
determining oversharing for those devices for every event being sent in
the presence of blacklisted/withheld devices in the room, and rotating
the group session accordingly.

The fix is to correctly exclude devices with `ShareInfo::Withheld` from
the enumeration.

Signed-off-by: Niklas Baumstark niklas.baumstark@gmail.com
2025-04-24 14:39:02 +02:00
Benjamin Bouvier 8c3f55456f refactor(widget): reduce indent in a few places thanks to early returns 2025-04-24 14:07:27 +02:00
Benjamin Bouvier 03d9e9b368 refactor(widget): avoid complicated combinators and make decisions more local and explicit 2025-04-24 14:07:27 +02:00
Benjamin Bouvier 75c4af5f4e chore(widget): make some names more explicit 2025-04-24 14:07:27 +02:00
Benjamin Bouvier c9f6938cb7 refactor(widget): get rid of WidgetDriverRequestHandle::null too 2025-04-24 14:07:27 +02:00
Benjamin Bouvier 939af521f3 refactor(widget): simplify further the MatrixDriverRequestHandle 2025-04-24 14:07:27 +02:00
Benjamin Bouvier bb9d481d88 refactor(widget): get rid of the null MatrixDriverRequestHandle 2025-04-24 14:07:27 +02:00
Benjamin Bouvier 3df336ab1c refactor(widget): get rid of function used only once 2025-04-24 14:07:27 +02:00
Benjamin Kampmann 12e358a54f fix(sdk): Don't overwrite previously added state events in state_event processing
Fixes #4952 .

Signed-off-by: Benjamin Kampmann <ben@acter.global>
2025-04-24 13:49:22 +02:00
Richard van der Hoff a3cb1cd6b5 Merge branch 'main' into rav/history_sharing/save_key_bundle_data 2025-04-24 12:07:21 +01:00
Johannes Marbach 1554e05d8a refactor(send_queue): generalize SentRequestKey::Media and DependentQueuedRequestKind::UploadFileWithThumbnail to prepare for MSC4274 gallery uploads (#4897)
This was broken out of
https://github.com/matrix-org/matrix-rust-sdk/pull/4838 and is a
preliminary step towards implementing
[MSC4274](https://github.com/matrix-org/matrix-spec-proposals/pull/4274).
`SentRequestKey::Media` and
`DependentQueuedRequestKind::UploadFileWithThumbnail` are generalized to
allow chaining dependent media uploads and accumulating sent media
sources.

- [x] Public API changes documented in changelogs (optional)

---------

Signed-off-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Benjamin Bouvier <benjamin@bouvier.cc>
2025-04-24 09:52:33 +00:00
Richard van der Hoff 85e0626d5f indexeddb: fudge implementation of get_received_room_key_bundle_data 2025-04-23 19:59:24 +01:00
Richard van der Hoff e89c45ba42 sqlite: store data on received room key bundles 2025-04-23 19:59:24 +01:00
Richard van der Hoff 6173aef064 memorystore: store received room key bundle data 2025-04-23 19:59:24 +01:00
Richard van der Hoff 00364d95af crypto: add methods for room key bundles to store traits 2025-04-23 19:59:24 +01:00
Richard van der Hoff 3aa0983a5c crypto: add received room key bundles to store changes list
After we receive a to-device message holding room key bundle info, add the data
to the store's Changes structure
2025-04-23 19:59:24 +01:00
Richard van der Hoff 4be4d39851 crypto: add types to support decryption of RoomKeyHistoryBundle to-device
events
2025-04-23 19:59:24 +01:00
Damir Jelić a60e336f85 feat(crypto): Start using the stable identifier for the sender device keys
This patch updates the sending side of the `sender_device_keys` field
introduced in MSC4147.

Since the MSC got merged, we're switching from the unstable identifier
to the stable one.

A couple of snapshot tests were added modified to make this happen.
2025-04-23 15:25:11 +02:00
Benjamin Bouvier 426a4ff1bf chore(ci): make clippy happy on all configurations 2025-04-23 14:49:49 +02:00
Benjamin Bouvier 9492614ea6 refactor(sdk): rename a few push_action_ctx variables back into push_ctx 2025-04-23 14:49:49 +02:00
Benjamin Bouvier 234e0be337 refactor(timeline): reuse the same push context for all the events we're trying to re-decrypt 2025-04-23 14:49:49 +02:00
Benjamin Bouvier b6d71a3875 refactor(timeline): make use of PushContext in the RoomDataProvider trait 2025-04-23 14:49:49 +02:00
Benjamin Bouvier 4c8e2fd4ae refactor(sdk): no need to recompute push actions from /messages, since try_decrypt_event does it for us 2025-04-23 14:49:49 +02:00
Benjamin Bouvier 55342a84fa refactor(sdk): explicit the case where we can't compute the push actions 2025-04-23 14:49:49 +02:00
Benjamin Bouvier 9950268164 refactor(sdk): rename Room::push_action_ctx to Room::push_context() (and associated type too) 2025-04-23 14:49:49 +02:00
Benjamin Bouvier f17c9fb2d5 refactor(sdk): rename Room::push_context() to Room::push_condition_room_ctx() 2025-04-23 14:49:49 +02:00