Commit graph

472 commits

Author SHA1 Message Date
Damir Jelić
66ecb4c1e6 base: Store room infos for left and invited rooms 2021-01-21 15:12:13 +01:00
Damir Jelić
ae0d810fb0 base: Avoid the Trait is not general enough issue again 2021-01-21 14:03:41 +01:00
Damir Jelić
303ac513e5 base: Remove some stale files from the old state store 2021-01-21 12:13:46 +01:00
Damir Jelić
de4df4e50a base: Re-introduce a state store trait. 2021-01-21 12:08:16 +01:00
Damir Jelić
2bcc0afb91 base: Use a CSPRNG to get our randomness and handle randomness errors
Since we're going to encrypt a lot of small objects separately we're
gonna need a lot of random nonces, it doesn't help that our nonces are
24 bytes long either. So use a CSPRNG to random data faster, also don't
panic if there wasn't enough randomness.
2021-01-20 16:59:46 +01:00
Damir Jelić
0a6b0e5804 base: Properly handle crypto related errors in the sled store 2021-01-20 16:27:59 +01:00
Damir Jelić
4a06c9e82d base: Initial support for an encrypted sled store. 2021-01-20 15:57:23 +01:00
Damir Jelić
28cc5acc87 base: Add a store key struct 2021-01-20 14:10:57 +01:00
Damir Jelić
2b5ff82414 base: Move the sled store into a subfolder 2021-01-20 10:25:54 +01:00
Damir Jelić
3472c99c27 base: Split out the store module into smaller submodules 2021-01-19 16:48:37 +01:00
Damir Jelić
17f3dbb0a0 crypto: Return a deserialized ToDevice struct when we receive a sync 2021-01-19 12:59:31 +01:00
Damir Jelić
6a30514d40 base: Move the deserialized responses types into the common crate 2021-01-19 12:30:58 +01:00
Damir Jelić
b8fcc003ea base: Finish up the error handling for the new stores 2021-01-19 12:03:46 +01:00
Damir Jelić
d07063af2b base: Add some error handling to the state store 2021-01-18 18:07:53 +01:00
Damir Jelić
1746690eda crypto: Add a sled cryptostore 2021-01-18 13:38:00 +01:00
Amanda Graven
aadbc14dc6 Add accessor for room member avatar urls 2021-01-15 18:59:51 +01:00
Damir Jelić
bab8fde0ac crypto: Change the way we share group sessions
This patch removes the need to ask if a group session needs to be shared
it also adapts the method so it re-shares sessions if new users or
devices join the group.
2021-01-15 18:04:45 +01:00
Damir Jelić
40c53f09ba base: Handle room avatar updates 2021-01-15 09:57:59 +01:00
Damir Jelić
508bf3b23d base: Include the to-device events when returning the sync response 2021-01-14 13:35:21 +01:00
Amanda Graven
9efece4f7a Remove unnecessary clones 2021-01-11 14:17:17 +01:00
Damir Jelić
077c20ed74 base: Really fix the holding on across await points issue for room names 2021-01-11 13:40:35 +01:00
Amanda Graven
6c4888a123 Don't hold lock during await in name calculation 2021-01-11 13:18:26 +01:00
Damir Jelić
643526987f Merge branch 'master' into new-state-store 2021-01-05 21:40:39 +01:00
Damir Jelić
b311a31c9e matrix-sdk: Bump our tokio and reqwest versions. 2021-01-05 21:39:52 +01:00
Damir Jelić
b8c6c2e07c rooms: Use unstable member sorting for the room name calculation 2021-01-05 20:26:27 +01:00
Damir Jelić
cdc93ddd0f base: Refactor and fix the room name calculation for non-stripped rooms 2021-01-05 20:09:06 +01:00
Damir Jelić
ccd8a4d602 Merge branch 'master' into new-state-store 2021-01-05 17:03:24 +01:00
Damir Jelić
4f2cad8f62 matrix-sdk: Bump our versions 2021-01-05 11:23:18 +01:00
Damir Jelić
f3acf582ec base: Fix a typo. 2021-01-04 18:34:23 +01:00
Damir Jelić
22b13c369b base: Add a method to check if the room is public. 2021-01-04 18:26:53 +01:00
Damir Jelić
c6a80dc921 Merge branch 'master' into new-state-store 2021-01-04 17:34:33 +01:00
Damir Jelić
60950044f2 matrix-sdk: Bump our deps. 2021-01-04 17:22:09 +01:00
Damir Jelić
4c6c1d2107 matrix-sdk: Get rid of the common macros crate
This crate was used to support different trait bounds on WASM vs other
targets, since we only define async traits in a couple of places having
a whole crate to support this feels a bit excessive.

This patch defines a target specific super trait instead, this lowers
the compile time a couple of seconds.
2021-01-04 16:34:14 +01:00
Damir Jelić
2e3b6fba7d common: Use the re-exported versions of js_int and assign 2021-01-04 15:29:49 +01:00
Damir Jelić
e9d22c95a4 base: Handle the join rules, history visibility and guest access 2021-01-04 15:12:02 +01:00
Damir Jelić
e66add476f base: Store the room creation content
The power level depends on a bunch of stuff, if no power level event
exists the default for a room creator is 100 while for every other user
is 0, thus we need to know the room creator.
2021-01-04 12:32:54 +01:00
Damir Jelić
4afc6b2567 base: Don't mark all the room methods as public. 2021-01-04 12:26:13 +01:00
Damir Jelić
83b850d8f9 base: Add the last missing accessors and reorder them. 2021-01-04 10:15:02 +01:00
Damir Jelić
e7e1d2d3eb base: Add more accessors for the room info. 2021-01-04 10:03:16 +01:00
Damir Jelić
74998c8dd8 rooms: Add a method to get the room topic. 2021-01-03 16:52:47 +01:00
Damir Jelić
0edef38eb7 base: Fix some clippy warnings 2021-01-02 13:54:47 +01:00
Damir Jelić
f9f176ccfd base: Rename the state store example. 2021-01-02 13:04:05 +01:00
Damir Jelić
16f94ecc1d base: Improve the state store example so it can run non-interactively 2021-01-02 12:58:52 +01:00
Damir Jelić
b995492457 base: Add a method to get either the display name or the localpart of an user 2021-01-01 14:59:30 +01:00
Damir Jelić
0c81f3d9ae base: Add a method to get all joined members. 2021-01-01 14:58:44 +01:00
Damir Jelić
c804104293 client: Add the get_x_room methods back. 2021-01-01 14:57:39 +01:00
Damir Jelić
0952205e1e base: Restore rooms and the sync token when we restore the login. 2021-01-01 14:56:06 +01:00
Damir Jelić
4d7da05b90 base: Store the sync token. 2021-01-01 14:54:52 +01:00
Damir Jelić
d121a856c4 base: Remember the direct target for rooms. 2021-01-01 14:31:50 +01:00
Damir Jelić
2384069641 base: Add the normalized_power_level method back to the member. 2020-12-24 17:14:46 +01:00
Damir Jelić
a29d2e39c4 base: Save profiles independently from membership events.
The sender controls the content of the membership event, since the
content contains profile data (display names, avatar urls) a sender
might incorrectly change the profile of another member inside the room.

This is allowed in the case where the sender is kicking or inviting the
member, this it will self heal once the member re-joins. Still, to
mitigate this a bit we're storing the profile data when we know that the
member sent out the content on their own.
2020-12-24 16:35:32 +01:00
Damir Jelić
e2225b2700 base: Add a state store inspector to the examples. 2020-12-23 14:53:14 +01:00
Damir Jelić
8857335a7d Merge branch 'crypto-improvements' into new-state-store 2020-12-22 16:18:46 +01:00
Damir Jelić
1313c3da3c client: Restore the membership based get room methods. 2020-12-22 10:47:21 +01:00
Damir Jelić
1bfb2d08a6 base: Remove the obsolete models files. 2020-12-22 10:14:16 +01:00
Damir Jelić
c5709d23a5 base: Implement the last missing thing to get the emitter working again. 2020-12-22 10:09:59 +01:00
Damir Jelić
e25441babc base: Create a store wrapp and move store methods under it. 2020-12-20 16:27:29 +01:00
Damir Jelić
a370eb1e37 base: Re-introduce the event emitter. 2020-12-19 20:20:39 +01:00
Damir Jelić
f9af880176 base: Upcast the bare rooms based on the membership state 2020-12-19 16:37:35 +01:00
Damir Jelić
7abf0c8805 store: Honor state keys for the state storage. 2020-12-19 14:44:46 +01:00
Alex Black
d4327d4cfc EventEmitter: add VoIP event support (m.call.* event types)
Signed-off-by: Alex Black <blacka101@gmail.com>
2020-12-17 00:19:37 +11:00
Damir Jelić
b05fed5a3b matrix-sdk: Fix our tests now that the state store is roughly done. 2020-12-15 10:23:31 +01:00
Damir Jelić
b4edaffbe1 base: Rename the method to get joined/invited members. 2020-12-14 15:54:49 +01:00
Damir Jelić
45db95742a base: Add a common room info struct for normal and stripped rooms. 2020-12-14 14:53:50 +01:00
Damir Jelić
3a76cf7692 base: Restore getting the user ids when receiving a sync. 2020-12-14 13:48:29 +01:00
Damir Jelić
05b1384d16 base: Upcast member events so the state key is an user id. 2020-12-12 21:44:53 +01:00
Damir Jelić
e245599913 base: Save the stripped state of invited rooms. 2020-12-11 21:17:27 +01:00
Damir Jelić
b16e3b6bd8 base: Rename joined rooms as they are used for left rooms as well. 2020-12-11 16:42:38 +01:00
Damir Jelić
6f35a05311 matrix-sdk: Allow users to get a reference to the store. 2020-12-11 09:52:39 +01:00
Damir Jelić
a4e7dc1042 base: Correctly store the state events of rooms. 2020-12-10 10:01:53 +01:00
Damir Jelić
ae33904a93 base: Rename some structs. 2020-12-09 20:22:11 +01:00
Damir Jelić
a08f857e49 base: Split out the new room and member structs from the state store 2020-12-09 18:12:51 +01:00
Damir Jelić
a80aa4c2ad base: Fix some lint issues. 2020-12-08 12:11:55 +01:00
Damir Jelić
27d9cf04de base: Remove a flaky state store test.
The state store is undergoing a rewrite and this test fails more often
than i would like making our CI seem flaky.

Remove the test since it's going to become obsolete anyways.
2020-12-08 11:52:21 +01:00
Damir Jelić
6d2d48a35a base: WIP inivted rooms handling. 2020-12-08 09:52:27 +01:00
Damir Jelić
5c608ed474 base: Store main account data. 2020-12-07 16:35:00 +01:00
Damir Jelić
e38f0762ee base: Store the notification counts. 2020-12-07 15:11:18 +01:00
Damir Jelić
ab832da03e base: Deserialize ephemeral events. 2020-12-07 14:34:18 +01:00
Damir Jelić
de61798d78 base: Store room account data. 2020-12-07 14:17:18 +01:00
Damir Jelić
b36d907fac base: Add the power level event to the room member. 2020-12-06 18:11:32 +01:00
Damir Jelić
8a842ec0a5 base: Log deserialization errors for decrypted events. 2020-12-04 15:13:37 +01:00
Damir Jelić
27b5bf3ddd base: Add initial left rooms handling. 2020-12-01 10:23:28 +01:00
Damir Jelić
0e563a9a81 base: Refactor out the room state/timeline handling. 2020-11-30 17:25:29 +01:00
Damir Jelić
7dd834a214 base: Add some more sync response fields. 2020-11-30 15:50:47 +01:00
Damir Jelić
b4d0179c18 base: Fetch the member presence when we fetch members. 2020-11-30 14:55:18 +01:00
Damir Jelić
38048a2043 base: Add presence storing. 2020-11-30 14:42:08 +01:00
Damir Jelić
ac2d90e92a client: Apply room changes when fetching members. 2020-11-30 09:19:11 +01:00
Damir Jelić
baa5bed1c9 Merge branch 'crypto-improvements' into new-state-store 2020-11-26 14:00:18 +01:00
Damir Jelić
7ec5a5ad1a Merge branch 'master' into crypto-improvements 2020-11-26 13:24:57 +01:00
Damir Jelić
de5f5cf00a base: A better log message for unhandled member events. 2020-11-24 10:58:33 +01:00
Damir Jelić
35069c5252 base: Turn the get member method async. 2020-11-24 10:58:14 +01:00
Damir Jelić
dadcc68336 base: Use the room summary for the display name calculation if we have one. 2020-11-24 10:57:21 +01:00
Damir Jelić
64fff933af base: Store the room topic with the room summary. 2020-11-24 10:56:43 +01:00
Damir Jelić
e84d3b9950 base: Track new users we get from the room/members call. 2020-11-23 17:19:55 +01:00
Damir Jelić
c1383402ed matrix-sdk: Initial support to upload filters. 2020-11-22 21:25:31 +01:00
Damir Jelić
a98f23e2a7 base: Add a deserialized SyncResponse type. 2020-11-21 22:48:27 +01:00
Damir Jelić
dedb1eb745 Merge branch 'update-ruma' 2020-11-20 21:21:24 +01:00
Damir Jelić
c40edcf2fc matrix-sdk: Try to lower our compile times, at least in the crypto part for now. 2020-11-20 20:35:48 +01:00
Damir Jelić
6509e72a74 Revert "base: Don't handle the wildcard case for member events anymore."
Using the exhaustive feature in ruma enables the appservice/federation
apis, adding some 10 more crates to our dependencies. Disable that
feature for now.

This reverts commit 41529a6bff.
2020-11-20 20:35:48 +01:00
Damir Jelić
9edf8657d0 base: WIP lazy loading support. 2020-11-20 20:17:59 +01:00
Alejandro Domínguez
95243003c4 Update ruma 2020-11-20 20:14:18 +01:00
Damir Jelić
3da1d3cf8f store: Use streams so we don't load all members at once. 2020-11-16 18:11:12 +01:00
Damir Jelić
8ed8929788 base: Fix the storing of invited and joined user ids. 2020-11-12 12:59:43 +01:00
Damir Jelić
133b230964 base: Change the way we're saving our room summary updates. 2020-11-12 11:21:37 +01:00
Damir Jelić
3a1eeb6a16 Merge branch 'crypto-improvements' into new-state-store 2020-11-11 14:43:49 +01:00
Damir Jelić
3f57ba57d0 base: WIP start to split out the steps collect changes, save changes,
apply changes.
2020-11-11 14:37:04 +01:00
Damir Jelić
dc57873687 base: WIP more work on the new state store. 2020-10-25 21:03:03 +01:00
Damir Jelić
962f725d63 Merge branch 'crypto-improvements' into new-state-store 2020-10-24 20:16:59 +02:00
Damir Jelić
c1e679147d base: First working version of the new state store. 2020-10-24 20:01:39 +02:00
Damir Jelić
9ce7feea1a base: Wip. 2020-10-23 09:39:08 +02:00
Damir Jelić
bdf32eecc7 base: More work on the new state store. 2020-10-22 09:46:12 +02:00
Damir Jelić
5323e6e270 store: More work, add the ability to store member events. 2020-10-21 09:38:13 +02:00
Damir Jelić
045ab25fb7 base: Add initial state store based on sled. 2020-10-20 17:36:21 +02:00
Damir Jelić
cd3d90df3f base: Remove a bunch of stuff and add sled. 2020-10-20 17:36:21 +02:00
Damir Jelić
7cab7cadc9 crypto: Rework the cryptostore.
This modifies the cryptostore and storage logic in two ways:
    * The cryptostore trait has only one main save method.
    * The receive_sync method tries to save all the objects in one
    `save_changes()` call.

This means that all the changes a sync makes get commited to the store
in one transaction, leaving us in a consistent state.

This also means that we can pass the Changes struct the receive sync
method collects to our caller if the caller wishes to store the room
state and crypto state changes in a single transaction.
2020-10-20 17:19:37 +02:00
Damir Jelić
c85fe6bc21 crypto: Initial support for private cross signing identities. 2020-10-14 15:35:06 +02:00
Damir Jelić
1c6a67d864 matrix-sdk: Bump our deps. 2020-10-13 13:01:18 +02:00
Denis Kasak
7519bec9a3 Tweak descriptions given by Describe impls. 2020-10-12 20:45:47 +02:00
Damir Jelić
bf7070b8f2 Merge branch 'client-get-session' into master 2020-10-12 15:45:55 +02:00
Denis Kasak
d81a6e6872 cargo fmt 2020-10-12 15:17:46 +02:00
Denis Kasak
2afc0c7661 Implement BaseClient::get_session to retrieve the login session.
Closes #100.
2020-10-12 15:12:23 +02:00
Denis Kasak
f349811020 Add Serialize/Deserialize impls for matrix_sdk::Session. 2020-10-12 14:56:08 +02:00
Damir Jelić
661f182382 Merge branch 'master' into crypto-improvements 2020-10-08 18:28:04 +02:00
Dominique Martinet
2602c36ad0 matrix_sdk_base: save room states after successfully parsed account events 2020-10-08 16:10:58 +02:00
Dominique Martinet
d858940342 matrix_sdk_base: handle response.account_data events
"m.direct" events are not in room account data events but in main one
2020-10-08 16:10:58 +02:00
Dominique Martinet
883183324f matrix_sdk_base: room: add direct_target field
Rooms marked as "direct" are associated a user_id in "m.direct" events.
Clients could want to handle these separately
2020-10-08 16:10:58 +02:00
Dominique Martinet
f7039d9a8d matrix_sdk_base: expose RoomMember 2020-10-08 13:16:33 +02:00
Damir Jelić
17d23eb9e5 matrix-sdk: Add automatic key claiming support. 2020-10-07 14:07:47 +02:00
Damir Jelić
02c765f903 crypto: Don't mark outbound group sessions automatically as shared. 2020-10-01 16:31:24 +02:00
Damir Jelić
8fe1eda169 crypto: Test the full key share flow. 2020-09-29 14:18:03 +02:00
Damir Jelić
a357536ade crypto: Initial scaffolding for incoming key share handling. 2020-09-28 09:27:16 +02:00
Alejandro Domínguez
3070c98d26 Export "unstable-synapse-quirks" feature from ruma 2020-09-22 21:03:12 +02:00
Damir Jelić
41529a6bff base: Don't handle the wildcard case for member events anymore. 2020-09-17 17:31:17 +02:00
Damir Jelić
f603696ff4 crypto: Expose the olm machine only if the encryption feature is enabled. 2020-09-11 17:06:45 +02:00
Damir Jelić
ffd2843b0a matrix-sdk: Expose the import/export keys methods. 2020-09-11 16:34:39 +02:00
Damir Jelić
217543ef38 matrix-sdk: Bump the versions of our deps. 2020-09-05 18:03:47 +02:00
Damir Jelić
22daf0d81e Merge branch 'to-device-txn-uuid' into crypto-improvements 2020-09-04 12:54:40 +02:00
Damir Jelić
adf8905d9f crypto: Rename the memory stores into caches and reorder the store module. 2020-09-04 12:42:40 +02:00
Jonas Platte
73c104cac1
Replace IncomingToDeviceRequest with customized request type 2020-09-03 20:02:55 +02:00
Damir Jelić
977e29c3af matrix-sdk: Fix the wasm bot example. 2020-08-26 16:19:39 +02:00
Damir Jelić
39628a308b matrix-sdk: Allow any event content to be sent out with room_send(). 2020-08-26 15:41:27 +02:00
Damir Jelić
6760f81498 matrix-sdk: Update Ruma. 2020-08-26 13:40:38 +02:00
Damir Jelić
95c8708995 crypto: Document and rename the mark_requests_as_sent() method. 2020-08-24 14:49:57 +02:00
Devin Ragotzy
2b389b920d matrix_sdk_base: Add test for update_member_power overflow 2020-08-23 20:57:59 -04:00
Devin Ragotzy
72614e4252 matrix_sdk_crypto: Appease clippy 2020-08-22 08:00:32 -04:00
Devin Ragotzy
8a71cec81a matrix_sdk_base: Member power level math from Int -> i64 2020-08-22 07:52:12 -04:00
Damir Jelić
de90da4adc crypto: Make the verification machine compatible with how we queue up requests. 2020-08-21 16:26:34 +02:00
Damir Jelić
e38bfc64f4 crypto: Streamline the key claiming so we use the new mark request as sent method. 2020-08-21 14:40:49 +02:00
Damir Jelić
93e1967119 crypto: Initial refactor to switch to the outgoing_requests queue. 2020-08-21 13:35:01 +02:00
Damir Jelić
9fe23227af base: Fix the encryption settings Into implementation. 2020-08-21 12:44:14 +02:00