Commit Graph

13223 Commits

Author SHA1 Message Date
Benjamin Bouvier f7297edd61 refactor(event cache): get rid of get_or_wait_for_token
Also the tests, they were not quite useful to port to the new mechanism
because they made little sense.
2025-02-28 13:00:35 +01:00
Benjamin Bouvier 87a6037924 refactor(event cache): consolidate logic around returning the previous gap token 2025-02-28 13:00:35 +01:00
Benjamin Bouvier ee710e34dd test(event cache): turn test into failing regression test 2025-02-28 13:00:35 +01:00
Benjamin Bouvier 55143e1790 refactor(event cache): call /messages directly in the room pagination
And don'y rely on the `Paginator`. This simplifies the code a bit,
avoids a few methods on the `Paginator`, and makes it more
straightforward the pagination happens.
2025-02-28 12:24:59 +01:00
Damir Jelić 7a0bf9b9b9 chore(sdk): Don't repeat a log line about the list of users for a /keys/query
The crypto crate already logs this, so no need to repeat the whole list
of users in the main crate.
2025-02-27 16:33:13 +01:00
Damir Jelić b422b93c78 chore(crypto): Lower a very noisy log line
This partially reverts: 66fcaeb2bad125dcdf884aaec6528633d2f1ec32
2025-02-27 16:33:13 +01:00
Benjamin Bouvier 4742aa298a fix(event cache): wait for the initial previous-batch token, if there wasn't any 2025-02-27 10:28:02 +01:00
Benjamin Bouvier f9f389d9ec chore(event cache): remove unused errors 2025-02-26 17:20:45 +01:00
Hanadi 7dba05f4c5 feat(sdk): Add Room::report_room
solves this https://github.com/matrix-org/matrix-rust-sdk/issues/4681

- add room report_room api from
https://spec.matrix.org/latest/client-server-api/#post_matrixclientv3roomsroomidreport
- expose report_room on room ffi

---------

Signed-off-by: hanadi92 <hanadi.tamimi@gmail.com>
2025-02-26 16:55:57 +01:00
Kévin Commaille f02a7d15ab test(sdk): Run integration tests for experimental-oidc feature too
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-26 16:08:00 +01:00
Kévin Commaille 54ab46dcb4 test(oidc): Use MatrixMockServer for cross-signing test
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-26 14:31:46 +01:00
Kévin Commaille 9b406cff87 test(oidc): Use mock server and client as much as possible
We keep the mock backend for endpoints that require an ID token for now,
as it would involve generating them on the fly.
And since support for ID tokens is going to be removed, it is not worth
it to implement that.

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-26 14:31:46 +01:00
Kévin Commaille 5791ac9b76 test(oidc): Add an OauthMockServer and use it for qrcode login tests
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-26 14:31:46 +01:00
Kévin Commaille 6026b0c4b7 test(oidc): Use MatrixMockServer for qrcode login tests
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-26 14:31:46 +01:00
Kévin Commaille 52909b0eeb test(oidc): Simplify qrcode login tests
Since it only uses OAuth 2.0 now, we can remove the ID token and JWKS.

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-26 14:31:46 +01:00
Benjamin Bouvier 1feb77bbef doc(event cache): tweak paginate_backwards_with_network doc comment 2025-02-26 14:09:08 +01:00
Benjamin Bouvier 2e1b051a4d refactor(event cache): split handling a successful network pagination into its own function 2025-02-26 14:09:08 +01:00
Benjamin Bouvier 15fd892b63 chore(event cache): remove the sync_ prefix from timeline_events_diff
And simplify pluralization, use more natural terms (new instead of
next), etc.
2025-02-26 14:09:08 +01:00
Benjamin Bouvier 4833403d65 refactor(event cache): simplify signature of RoomEventCacheState::with_events_mut 2025-02-26 14:09:08 +01:00
Benjamin Bouvier 061a2f739a refactor(event cache): handle pagination status in a single location 2025-02-26 14:09:08 +01:00
Benjamin Bouvier 86b5cb4dba refactor(event cache): split disk and network paginations into smaller functions 2025-02-26 14:09:08 +01:00
Benjamin Bouvier 74bc3dfb6e refactor(event cache): don't hold onto a live instance of the paginator in RoomEventCache
Instead of keeping state for the `Paginator` instance, we create one
when needs be, in the `run_backwards_impl` method, and initialize it
with a previous-batch token. This is simpler than keeping one alive, and
making sure that we reset it in the right places.
2025-02-26 14:09:08 +01:00
Benjamin Bouvier 7841ed8637 refactor(event cache): remove RoomPagination::hit_timeline_end()
The event cache doesn't use the paginator for forwards pagination, so it
doesn't make sense to expose this method. Moreover, the event cache
always listens to sync in real-time, so technically it's always hit the
timeline end.

As a proof of this, this method wasn't even tested.
2025-02-26 14:09:08 +01:00
Doug 19df945155 fix(ffi): Correctly indicate OIDC support when fetching metadata fails. matrix-sdk-ffi/20250225 2025-02-25 19:24:07 +02:00
Damir Jelić 3e3bff76de fixup! feat(crypto): Add support for the shared_history flag defined in MSC3061 2025-02-25 16:52:23 +01:00
Damir Jelić ea073f55f0 doc(crypto): Document all the arguments of the InboundGroupSession::new method 2025-02-25 16:52:23 +01:00
Damir Jelić c1e28aa156 test(crypto): Add a snapshot test for the inbound group session pickle 2025-02-25 16:52:23 +01:00
Damir Jelić af62f09e37 test(crypto): Test that the shared history flag gets set when we ourselves crate a session 2025-02-25 16:52:23 +01:00
Damir Jelić 9a33385697 test(crypto): Test that the shared history flag gets set when creating sessions 2025-02-25 16:52:23 +01:00
Damir Jelić bfa89bc73f feat(crypto): Add support for the shared_history flag defined in MSC3061
This patch adds support for the `shared_history` flag from MSC3061 to
the `m.room_key` content, exported room keys, and backed-up room keys.

The flag is now persisted in our `InboundGroupSession`. Additionally,
when creating a new `InboundGroupSession`, we ensure the
`shared_history`  flag is set appropriately.

MSC3061: https://github.com/matrix-org/matrix-spec-proposals/pull/3061
2025-02-25 16:52:23 +01:00
Damir Jelić e1d05fa53c refactor(crypto): Use struct destructuring instead of separate field access in some places
In several places, we access almost all the fields of a struct to
create an `InboundGroupSession` from a pure data struct.

When new fields are added to these data structs, it's easy to
overlook updating the `InboundGroupSession` accordingly.

By using struct destructuring, we ensure that newly added fields  are
explicitly considered, making it harder to forget one of the newly added
fields.
2025-02-25 16:52:23 +01:00
Damir Jelić b0ccc94b26 refactor(crypto): Simplify some tests by using a session created from a helper function 2025-02-25 16:52:23 +01:00
Damir Jelić b2356a0232 doc(crypto): Improve the documentation for the encrypted Content serialization
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Signed-off-by: Damir Jelić <poljar@termina.org.uk>
2025-02-25 15:58:42 +01:00
Damir Jelić 3bb883387e refactor(crypto): Use the DecryptedOlmV1Event type when encrypting to-device events
This ensures that new fields that are added to the
`m.olm.v1.curve25519-aes-sha` content need to be added in a single
place.
2025-02-25 15:58:42 +01:00
Damir Jelić 506a36b210 fix(crypto): Fix the serialization of DecryptedOlmV1Event 2025-02-25 15:58:42 +01:00
Damir Jelić 8c1966a237 refactor(crypto): Don't require event_type to return a static string 2025-02-25 15:58:42 +01:00
Kévin Commaille 09513eaa5e refactor(oidc): Only support authorization URL parameters defined in MSCs
`prompt=create` is defined in MSC2964, and
`login_hint=mxid:@user:server.name` is defined in MSC4198.
The other parameters came from OpenID Connect.

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-25 15:34:36 +01:00
Kévin Commaille fda9177a70 refactor(oidc): Remove support for Pushed Authorization Requests
It is a small optimization which makes the URL smaller, but it is not
part of the next-gen auth MSCs and is not supported by the oauth2 crate,
so let's drop it.

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2025-02-25 15:34:36 +01:00
Benjamin Bouvier 21960a5ba2 chore(event cache): add more logs to the auto-shrinking mechanism 2025-02-25 14:13:33 +01:00
Benjamin Bouvier 0819ab1dad refactor(event cache): apply review comments of #4708 2025-02-25 12:28:28 +01:00
Ivan Enderlin 475ad79360 fix(sdk): RoomEventCache::event looks inside the store.
This patch fixes `RoomEventCache::event` to look inside `RoomEvents` but
also inside the `EventCacheStore` to look for an event. It ultimately
fallbacks to `AllEventsCache` because we can't get rid of it for the
moment.
2025-02-25 12:07:17 +01:00
Ivan Enderlin 7b52306ff2 feat(base): Add EventCacheStore::find_event.
This patch adds the method `find_event` on the `EventCacheStore` trait.
It helps to find a single event from the store.
2025-02-25 12:07:17 +01:00
Benjamin Bouvier e5f6d026ff ci: use an hardcoded version of cargo-machete in CI (#4710)
Should resolve the CI issues around cargo-machete.

See also:
https://github.com/bnjbvr/cargo-machete/issues/156#issuecomment-2681308436
2025-02-25 11:35:18 +01:00
Benjamin Bouvier 5dd5710758 feat(event cache): auto-shrink a room event cache's chunk after all listeners are left matrix-sdk-ffi/20252502 2025-02-24 17:40:50 +01:00
Ivan Enderlin 37b62dfed1 test(sdk): Add a big test for a deduplication + event removals.
This patch adds a test for deduplication that covers unloaded and loaded
chunk with event removals in both, with a finaly backwards pagination.
Yummy.
2025-02-24 17:37:47 +01:00
Ivan Enderlin d21a4152de chore(sdk): Code cleanup.
This patch puts the `Ok` outside the `match` for a better ergonomics.
2025-02-24 17:37:47 +01:00
Ivan Enderlin 8c2dcd7b5d task(sdk): Make the code more robust around event removals.
This patch makes the code more robust around event removals. Sorting
events by their position is no longer done in the `Deduplicator` but in
a new `RoomEventCacheState::remove_events` method, which removes events
in the store and in the `RoomEvents`. This method is responsible to sort
events, this stuff is less fragile like so.
2025-02-24 17:37:47 +01:00
Ivan Enderlin 019b4a20f6 chore(common): Rename EmptyChunk to EmptyChunkRule.
This patch renames `EmptyChunk` into `EmptyChunkRule`. Name suggested by
@stefanceriu, it makes a lot more sense, thanks!
2025-02-24 17:37:47 +01:00
Ivan Enderlin 30a9a972ce tes(sdk): Deduplicator dispatches duplicated events in memory vs in store.
This patch tests that `Deduplicator` dispatches duplicated events in the
correct field of `DeduplicationOutcome`.
2025-02-24 17:37:47 +01:00
Ivan Enderlin 22ba1684b2 chore(sdk): Rename a test helper and some variables.
Nothing fancy here. Just regular chore tasks.
2025-02-24 17:37:47 +01:00