Commit graph

300 commits

Author SHA1 Message Date
Bruno Windels
78fecd003a cleanup 2020-09-10 18:57:29 +02:00
Bruno Windels
de1cc0d739 abort decrypt requests when changing room 2020-09-10 17:43:01 +02:00
Bruno Windels
0bf1723d99 Worker WIP 2020-09-10 15:40:30 +01:00
Bruno Windels
fdbc5f3c1d WIP worker work 2020-09-10 13:00:11 +02:00
Bruno Windels
17412bbb2f more validation 2020-09-10 12:12:39 +02:00
Bruno Windels
94b0cfbd72 add prepareSync and afterPrepareSync steps to sync, run decryption in it 2020-09-10 12:11:43 +02:00
Bruno Windels
1c77c3b876 expose multi-step decryption from RoomEncryption, adjust room timeline
sync code hasn't been adjusted yet
2020-09-10 12:11:25 +02:00
Bruno Windels
a18d2c0e78 update comment 2020-09-09 09:51:48 +02:00
Bruno Windels
212efe823c fix memberlist not containing all members
we were using the prev_batch of the last sync to pass to
/members, but this points at the timeline *before* the last
sync, so wouldn't contain all members. Use the sync token instead.
2020-09-09 09:50:03 +02:00
Bruno Windels
65660a1e3b remove double jsdoc 2020-09-08 15:06:44 +02:00
Bruno Windels
650df6fea8 forgot await 2020-09-08 15:00:29 +02:00
Bruno Windels
5a8aac57ac there might not be a member yet 2020-09-08 15:00:20 +02:00
Bruno Windels
5e65eb10ef docs 2020-09-08 14:39:33 +02:00
Bruno Windels
1aa044667c try sending out pending room keys after first sync 2020-09-08 14:39:07 +02:00
Bruno Windels
31d4b6f75d send room keys to newly joined members in afterSyncCompleted stage 2020-09-08 14:38:27 +02:00
Bruno Windels
bbaf3a5605 write needsRoomKey flag when new members joins to tracked e2ee room 2020-09-08 14:22:11 +02:00
Bruno Windels
d184be2d22 rotate outbound megolm session when somebody leaves the room 2020-09-08 11:09:09 +02:00
Bruno Windels
4cf3b3569d storage method takes EventKey actually 2020-09-08 10:51:28 +02:00
Bruno Windels
c32ac2c764 use decryption result to show message verification status in timeline 2020-09-08 10:50:39 +02:00
Bruno Windels
9137d5dcbb make decryption algorithms return DecryptionResult
which contains curve25519 key and claimed ed25519 key as well as payload
2020-09-08 10:48:11 +02:00
Bruno Windels
a817a9aaf9 return decrypted type and content 2020-09-04 16:41:03 +02:00
Bruno Windels
8e5d5db32b add event prop on entry 2020-09-04 16:40:15 +02:00
Bruno Windels
e06cb1eb5f fix param order 2020-09-04 16:29:20 +02:00
Bruno Windels
1af118a443 don't assume we have a timeline 2020-09-04 16:27:39 +02:00
Bruno Windels
dc0576f2db cleanup 2020-09-04 15:31:45 +02:00
Bruno Windels
5a731903da implement decrypting when loading timeline 2020-09-04 15:30:06 +02:00
Bruno Windels
62bcb27784 implement decryption retrying and decrypting of gap/load entries
turns out we do have to always check for replay attacks because
failing to decrypt doesn't prevent an item from being stored,
so if you reload and then load you might be decrypting it
for the first time
2020-09-04 15:29:58 +02:00
Bruno Windels
fe9245dd04 first draft of retrying decryption when receiving room keys 2020-09-04 12:10:12 +02:00
Bruno Windels
502ba5deea first draft of decryption in Room and RoomEncryption 2020-09-04 12:09:19 +02:00
Bruno Windels
c5efa582b1 check algorithm 2020-09-03 17:51:00 +02:00
Bruno Windels
b1226d9220 add infrastructure to encrypt while sending 2020-09-03 15:36:48 +02:00
Bruno Windels
5cafef96f5 add RoomEncryption to room 2020-09-03 15:36:17 +02:00
Bruno Windels
007333628a add todo for /sync <-> /members race 2020-08-31 16:10:18 +02:00
Bruno Windels
15ae35bbbc add future todo 2020-08-31 16:09:38 +02:00
Bruno Windels
703c89e276 make membership available on member 2020-08-31 16:07:29 +02:00
Bruno Windels
374dce638d these are assumed to be getters 2020-08-31 16:07:18 +02:00
Bruno Windels
4fd3e2ab20 response is a method 2020-08-31 16:07:04 +02:00
Bruno Windels
2e67b2b6b8 handle prev_content location ambiguity 2020-08-31 14:21:18 +02:00
Bruno Windels
8b358379e8 first draft of device tracker
mainly missing race protection with /sync and actually running the code
2020-08-31 14:12:12 +02:00
Bruno Windels
8482bc95ec pass memberchanges around instead of members
so we can easily tell how their membership changes, (e.g. join -> left)
which we'll need for device tracking.

Not adding this to RoomMember because RoomMember also needs to be
able to represent a member loaded from storage which doesn't contain
this error. A MemberChange exists only within a sync.
2020-08-31 09:50:57 +02:00
Bruno Windels
164384f312 forgot memberlist member 2020-08-31 08:54:27 +02:00
Bruno Windels
8da00f9a03 add isTrackingMembers flag to know if EncryptionUsers have been written
for this room
2020-08-31 08:53:47 +02:00
Bruno Windels
d813e6d932 store encryption event content rather than just flag in room summary 2020-08-31 08:53:10 +02:00
Bruno Windels
6a9cbf7f33 store and sort by m.lowpriority tag 2020-08-27 20:52:51 +02:00
Bruno Windels
25f3dfbb75 fix failing test 2020-08-27 14:22:59 +02:00
Bruno Windels
3e8e1bab67 remove logging 2020-08-27 10:38:22 +02:00
Bruno Windels
1fe496eeea fix crash when state is not set (erroneously?) on gap response
this seems to happen when the only event in the room is
a m.room.create
2020-08-27 09:52:30 +02:00
Bruno Windels
34ec96c1b8 look for displayname/avatar in prev content as well
as synapse doesn't set them on content for leave memberships

this caused these props to be removed in storage
2020-08-27 09:51:44 +02:00
Bruno Windels
bd9cb5aae5 add RoomMember.name which falls back to userId
this will prevent the crash when left members
have their displayname removed (another issue)
2020-08-27 09:51:00 +02:00
Bruno Windels
5d21ae3fb7 fix error on conduit with state field that is missing when empty 2020-08-21 19:10:28 +02:00
Bruno Windels
a64d49a8a2 prevent an empty array being passed to Heroes 2020-08-21 19:03:21 +02:00
Bruno Windels
3d5b69f60a remove obsolete comment 2020-08-21 18:14:57 +02:00
Bruno Windels
70e89a3dd6 expose name/avatar on member 2020-08-21 18:13:53 +02:00
Bruno Windels
2c14373b13 allow falling back to heroes name if we don't have one 2020-08-21 18:12:11 +02:00
Bruno Windels
acec7c8f33 remove alt_aliases, as we should not use it for the room name 2020-08-21 18:11:53 +02:00
Bruno Windels
d5d0154873 join and invited count were mixed up... oops 2020-08-21 18:11:26 +02:00
Bruno Windels
e5cdf061cb create, update and remove heroes as they come from sync 2020-08-21 18:11:07 +02:00
Bruno Windels
ddfdbf9777 implement heroes logic to calculate the room name 2020-08-21 17:59:24 +02:00
Bruno Windels
831f4188f7 also expose highlight count 2020-08-21 15:50:32 +02:00
Bruno Windels
0d8ff34c55 don't fail to clear unread state when offline
also update UI before network request
2020-08-21 15:23:25 +02:00
Bruno Windels
2bfbb41ee7 send receipt to server when clearing unread state so notif count clears 2020-08-21 15:16:57 +02:00
Bruno Windels
1a61752ace process state events separately from timeline events 2020-08-21 14:35:23 +02:00
Bruno Windels
d3ea8c747a ignore own messages for unread state, and don't set unread while open 2020-08-21 14:26:51 +02:00
Bruno Windels
879c4ff951 default for all flags should be false 2020-08-21 14:11:53 +02:00
Bruno Windels
2742162c8e only clear unread if needed 2020-08-21 14:11:42 +02:00
Bruno Windels
4969009b2b default should be false, so comparison in the sorter is stable 2020-08-21 14:10:53 +02:00
Bruno Windels
4fb3010676 only set unread for incremental syncs 2020-08-21 13:45:38 +02:00
Bruno Windels
7458465ef6 expose props on Room 2020-08-21 11:56:45 +02:00
Bruno Windels
739d74bf9c add method to clear unread state 2020-08-21 11:56:36 +02:00
Bruno Windels
4419b3366e store isUnread and lastMessageTimestamp 2020-08-21 11:55:47 +02:00
Bruno Windels
53720f56df some cleanup 2020-08-21 11:55:25 +02:00
Bruno Windels
00718c582a render avatar img in room list 2020-08-20 17:32:55 +02:00
Bruno Windels
7992607442 also store notif counts while at it 2020-08-20 17:07:02 +02:00
Bruno Windels
da947fa0d0 store room avatar url in summary 2020-08-20 17:02:51 +02:00
Bruno Windels
f5acee02be add comment why we do things in this order 2020-08-20 16:20:35 +02:00
Bruno Windels
5d0ee21267 move mxcUrl functions to media repo class 2020-08-20 15:40:43 +02:00
Bruno Windels
fafdf669db use prev_content from later events before state 2020-08-20 15:23:56 +02:00
Bruno Windels
830c300102 fix typo that broke the txn 2020-08-20 15:23:29 +02:00
Bruno Windels
514d1d9579 first draft of adding profile info while filling gap 2020-08-20 14:39:03 +02:00
Bruno Windels
229502ca43 remove logging 2020-08-20 10:48:59 +02:00
Bruno Windels
4b275529f7 fixup: writing member info during sync 2020-08-20 10:47:14 +02:00
Bruno Windels
d31a1b5fff render display name in timeline 2020-08-20 10:26:28 +02:00
Bruno Windels
41c00ce44a write display name and avatar on event during sync 2020-08-20 10:26:08 +02:00
Bruno Windels
ba3a4ab8b2 process state events in the timeline together with other timeline events
so member info gets overwritten after all the previous events
have already been written
2020-08-20 09:39:19 +02:00
Bruno Windels
a90cebcabb document access levels 2020-08-19 16:58:28 +02:00
Bruno Windels
113c9e13b3 fix typo 2020-08-19 16:58:19 +02:00
Bruno Windels
faaabd1837 fix changed member scenario (no need to fetch from storage) and errors 2020-08-19 16:51:16 +02:00
Bruno Windels
4144b0b281 move memberlist load code out of Room 2020-08-19 16:44:09 +02:00
Bruno Windels
f7314990e4 add copyright header 2020-08-19 16:30:05 +02:00
Bruno Windels
463b9b745e base impl of member list 2020-08-19 16:29:54 +02:00
Bruno Windels
f84c9d51b4 store last pagination token 2020-08-19 16:29:08 +02:00
Bruno Windels
d08297d1e0 move RoomMembers to own dir 2020-08-19 16:28:09 +02:00
Bruno Windels
6abdcd6b58 finish draft of member list loading method 2020-08-19 16:13:47 +02:00
Bruno Windels
bfc5eb3ee5 return changed members from sync writer
we will use it to handle race between /sync and /members
and to update the member list if it loaded
2020-08-19 16:12:49 +02:00
Bruno Windels
2ad9b17ad7 no need to update members, as all the info is in the member event
as we won't store deviceTrackingStatus in the member
2020-08-19 16:10:07 +02:00
Bruno Windels
9ff4f3839c Merge branch 'master' into bwindels/memberlist 2020-08-19 12:13:38 +02:00
Bruno Windels
2526198251 replace usage of readPath with ?. 2020-08-19 11:36:43 +02:00
Bruno Windels
37597e2acb mark fragment in storage when start of timeline is reached
so we don't keep looping to fetch more messages
when scrolled all the way up
2020-08-17 17:41:10 +02:00
Bruno Windels
56efd7eee0 don't load timeline past gaps 2020-08-17 15:22:25 +02:00
Bruno Windels
306309c4f8 wrap error and expose room id
this makes it easier to track down a (storage) error to a room
2020-08-17 10:48:00 +02:00
Bruno Windels
00a85697ab add license header in all source files 2020-08-05 18:38:55 +02:00
Bruno Windels
f5d3092031 WIP 2020-06-26 23:26:24 +02:00
Bruno Windels
7f221cda65 show images intimeline 2020-05-09 20:02:08 +02:00
Bruno Windels
f56b96b0ff add some ideas for relations 2020-05-07 19:14:53 +02:00
Bruno Windels
f9c0b4b53e add logging in case #45 would happen again 2020-05-07 19:14:30 +02:00
Bruno Windels
24cb9e3f5c only increment sent counter after successful send
otherwise the message doesn't get sent after coming back online
2020-05-07 18:46:16 +02:00
Bruno Windels
28bed56b5a prevent closing more than once 2020-05-04 22:21:56 +02:00
Bruno Windels
a097929dbd rename lowercase filenames of classes to camelcase like class 2020-04-20 21:41:10 +02:00
Bruno Windels
31f3886eba move EventEmitter to utils 2020-04-20 21:35:53 +02:00
Bruno Windels
c379caf4c0 remove obsolete ifdef comments 2020-04-20 21:31:27 +02:00
Bruno Windels
001dbefbcf stop using default exports
because it becomes hard to remember where you used them and where not
2020-04-20 21:26:39 +02:00
Bruno Windels
8c56ac3e4f rename NetworkError to ConnectionError 2020-04-19 19:05:12 +02:00
Bruno Windels
e4563135bf look at prev_content when handling member events 2020-03-30 21:59:44 +02:00
Bruno Windels
c830f50325 catch errors while persisting a new message 2020-03-30 21:33:04 +02:00
Bruno Windels
234c260339 dont modify fragments in comparer until txn succeeds 2020-03-30 20:46:52 +02:00
Bruno Windels
73ea09f668 Handle sync ordering vs back-fill ordering (see synapse #7164) resulting in dupe events
Also extra robustness while filling a gap

ignore duplicate events from synapse instead considering them an
overlapping event with the adjacent fragment
2020-03-30 20:37:36 +02:00
Bruno Windels
8354c58c07 also look for remote echos based on event_id 2020-03-23 23:00:33 +01:00
Bruno Windels
f02641c808 look for transaction_id in /messages response to delete pending events 2020-03-22 00:07:37 +01:00
Bruno Windels
6d68ec1bac move fillGap to room 2020-03-21 23:40:40 +01:00
Bruno Windels
44760a9f82 Revert "add logging related to fragments"
This reverts commit 2f355cabef.
2020-03-21 10:47:35 +01:00
Bruno Windels
c4a5de20c0 update previous fragment in comparer when appending a new line fragment 2020-03-21 10:45:09 +01:00
Bruno Windels
2f355cabef add logging related to fragments
both when rebuilding and when sorting will be used
2020-03-20 20:23:07 +01:00
Bruno Windels
7e8cc7ae00 need to return the response here, not the request wrapper
we were reading back a remote id of undefined because of this,
so when for some reason we never receive the message down from sync,
the pending message keeps sending on every load. The server ignores
the send though, because the transaction id is already used, and it returns
the remote id of the event that was already sent the previous time, but
as we were not storing this remote id, we'd just try again and again.

not receiving it through sync could have happened when we were sending a bunch of events
and then receiving (this is how we encountered this bug, while trying to repro another) the
response, but not yet the sync for the message that got wedged. Then we typed stuff on another client
so we would get a limited response for that room, and boom, we would not get the remote echo of the
event that was already sent (but because of this bug we didn't store the remote id) but no echo received yet (when we remove the pending event),
so it gets wedged!
2020-03-17 00:11:50 +01:00
Bruno Windels
06e43d9ee3 fix all tests 2020-03-14 21:38:37 +01:00
Bruno Windels
56c87b3966 better naming 2020-03-14 20:49:15 +01:00
Bruno Windels
ac4a7f971b only apply sync changes in room summary once txn is committed
- also remove m.room.aliases support as they were wrongly implemented
   and now obsolete
 - don't count invited and joined members according to m.room.member
   events anymore as it was also wrongly implemented
   (only when prev!==new membership, but on initial sync we only get
   last member event, which might have been a nick change
2020-03-14 20:46:49 +01:00
Bruno Windels
224d56698a only set new live key when creating a fragment after the txn succeeds
when doing a limited sync, and a new fragment is created,
this._lastLiveKey is updated immediately. If the transaction
would then fail, the fragmentId in this._lastLiveKey was incremented
but the fragment wasn't written to the store, so if sync is resumed
and would subsequently succeed, fragmentIds would be assigned to events
that don't have a corresponding fragment in the timelineFragment store.

This would throw errors when trying to load the timeline,
breaking the whole app.

This changes SyncWriter to only update this._lastLiveKey in
the emit phase, when the transactions has been committed already.
2020-01-04 20:06:49 +01:00
Bruno Windels
bdc2c3d9ad cleanup: storage is not used in SyncWriter
as the transaction is now always passed as an argument, it never
creates one on its own.
2020-01-04 20:04:57 +01:00
Bruno Windels
8a55778c32 make sure aliases and heroes aren't empty when picking name 2019-11-22 09:29:18 +01:00
Bruno Windels
ad7a150aaa use aliases and heroes to fall back room name to 2019-10-13 07:48:33 +02:00
Bruno Windels
201b70ee4f fix failing to sync new rooms 2019-10-12 22:18:36 +02:00
Bruno Windels
d367037332 very basic support for lazy loading 2019-10-12 20:24:09 +02:00
Bruno Windels
2b2b4232e9 moar send logging 2019-09-15 12:25:14 +02:00
Bruno Windels
45cd85ead1 fixup: check for event entry with eventType, event isn't exposed anymore 2019-07-29 19:58:35 +02:00
Bruno Windels
8665bcb897 concat synced events in timeline with pending events for local echo 2019-07-29 19:53:58 +02:00
Bruno Windels
9b94c4bb61 don't expose raw event object from entry, pending event doesn't have it
it only has content and *some* of the meta fields,
but we want to threat pendingevententry and evententry as one
and the same in the rest of the application, so don't give access
to entire event object.
2019-07-29 10:27:12 +02:00
Bruno Windels
56cee450d1 return syncing user id from PendingEventEntry.sender
add User class where we later can track display name, avatar, ...
2019-07-29 10:24:34 +02:00
Bruno Windels
b26f7df689 pending events are not certain to be sorted here 2019-07-29 09:54:34 +02:00
Bruno Windels
3ed72df620 put everything together to make it roughly work
no local echo yet, and send errors are being swallowed
2019-07-27 10:51:51 +02:00
Bruno Windels
851100b88a send unsent messages after first sync 2019-07-26 22:40:39 +02:00
Bruno Windels
707988f806 better handle remote echos and hookup in session and room 2019-07-26 22:33:33 +02:00
Bruno Windels
ccb722d766 more WIP 2019-07-26 22:03:57 +02:00
Bruno Windels
f3d1128f28 WIP 2019-07-01 10:00:29 +02:00
Bruno Windels
c5b2d0c8b2 WIP 2019-06-28 00:52:54 +02:00
Bruno Windels
90a38078e0 unused import 2019-06-26 22:19:40 +02:00
Bruno Windels
106146660c define storage keys to be 32bit for idb / web platform
as a preparation to serialize the eventIndex and fragmentId
as a 8 character string, part of a concatenated string PK,
as lumia doesn't support array keys.
2019-06-26 21:52:41 +02:00
Bruno Windels
9cd5257959 load more events when scrolled to top 2019-06-16 17:29:33 +02:00
Bruno Windels
0524f06722 remove logging 2019-06-03 00:31:21 +02:00
Bruno Windels
6bdf44d114 adjust comment 2019-06-03 00:30:37 +02:00
Bruno Windels
45528580ed fix comparator/comparer mismatch 2019-06-03 00:30:16 +02:00