Commit graph

651 commits

Author SHA1 Message Date
Bruno Windels
3a6268f0c1 basic PoC of image decryption working
needs looooaaads of cleanup still
2020-10-23 17:25:11 +02:00
Bruno Windels
f214c53fa9 add @internal and other comments to Session 2020-10-23 12:59:40 +02:00
Bruno Windels
df8eed14aa expose whether we already have a 4s key,to show the 4s setup in settings
it's a tri-state of null/false/true with null meaning we need to
go online first to know as only then we try to setup session backup
2020-10-23 12:57:47 +02:00
Bruno Windels
df72e829bf setup session backup as part of start method, so we know we're online
also don't upload OTKs in case of existing account until
catchup sync has happened
2020-10-23 12:22:52 +02:00
Bruno Windels
a7a922680d request persisted storage when logging in/restoring a session 2020-10-20 17:02:34 +02:00
Bruno Windels
6f82d81f39 better session backup ui 2020-10-19 18:29:13 +02:00
Bruno Windels
974f77a71d WIP 2020-10-16 18:06:20 +02:00
Bruno Windels
0d622164df close session db in other tabs when opening 2020-10-16 12:50:37 +02:00
Bruno Windels
8122d76e73 Merge branch 'master' into bwindels/url-routing 2020-10-14 12:45:49 +02:00
Bruno Windels
b00db1af3e only keep 20 outbound olm sessions in memory at once to prevent OOM 2020-10-14 12:44:27 +02:00
Bruno Windels
07701117cd reduce megolm sync cache size to 1 session
as this is kept around for every e2ee room, and we only have
limited olm memory
2020-10-14 12:43:35 +02:00
Bruno Windels
b29b776e9f fix olm session cache being leaked when closing session 2020-10-14 11:25:49 +02:00
Bruno Windels
c8dd7b42e7 encountered this very unlikely race while testing, so prevent it 2020-10-13 13:10:35 +02:00
Bruno Windels
927e8134d3 use url navigation in root view model
also track all view models as it is
important everything is properly disposed now
2020-10-09 17:03:38 +02:00
Bruno Windels
00bd4364f0 early draft of loading session via url scheme 2020-10-08 18:23:37 +02:00
Bruno Windels
a7db44eabf
Merge pull request #138 from vector-im/bwindels/filter-room-list
Room list filtering
2020-10-06 11:08:39 +00:00
Bruno Windels
b1cb797919 fix refactor error in xhr, breaking it 2020-10-06 13:02:35 +02:00
Bruno Windels
7def542e21 fix test 2020-10-06 12:19:47 +02:00
Bruno Windels
5ae1be9a9c ignore invalid json on error pages 2020-10-05 17:18:05 +02:00
Bruno Windels
c8e4dbc1b3 this should be a map 2020-10-05 17:06:29 +02:00
Bruno Windels
e93b091566 dont use no-cache in fetch, as it doesn't play well with CORS on Safari 2020-10-02 14:02:59 +02:00
Bruno Windels
07eee8fac1 only create fragments when we will really write events to the timeline store 2020-10-01 17:01:33 +02:00
Bruno Windels
bebdaad7d4 log when we can't abort 2020-10-01 16:23:15 +02:00
Bruno Windels
c1df371a14 add some documentation for our idb investigations 2020-10-01 16:14:58 +02:00
Bruno Windels
9a4d47820d change this back as well 2020-10-01 14:46:30 +02:00
Bruno Windels
cb7da2ba4a dont need this anymore 2020-10-01 14:45:09 +02:00
Bruno Windels
f402e8c6c4 typo/thinko in docs 2020-10-01 14:39:23 +02:00
Bruno Windels
300529b7c5 write sync token first
in case we get a TransactionInactiveError,
we have at least written the sync token
and won't repeat the same sync request
2020-10-01 14:38:54 +02:00
Bruno Windels
1117c77d05 note for future optimisation 2020-10-01 14:36:00 +02:00
Bruno Windels
d5a6a4d350 todo comment 2020-10-01 14:35:46 +02:00
Bruno Windels
3c7125bb88 add (optional) logging for idb requests 2020-10-01 14:35:33 +02:00
Bruno Windels
93a7f9959e Safari doesn't like the prepare txn still open when opening the sync txn
Waiting for it to close magically solves the TransactionInactiveError
we were seeing on some incremental sync request when
reading from roomMembers.

Still unsure what this is about, and if we should wait for all read txns
to close or not.
2020-10-01 14:31:38 +02:00
Bruno Windels
ddb14f48bf we actually don't need to track write requests
as errors will bubble up to the txn
2020-10-01 14:31:08 +02:00
Bruno Windels
d5a52c32d6 these don't return a promise anymore 2020-09-29 11:51:14 +02:00
Bruno Windels
37690cffe3 track storage write requests internally, as we never await their promise 2020-09-29 11:50:37 +02:00
Bruno Windels
482b5f4d22 allow passing message to IDBRequestError 2020-09-29 11:50:10 +02:00
Bruno Windels
43d430fc98 remove unused storage modification functions 2020-09-29 11:47:49 +02:00
Bruno Windels
f993048a2b Merge branch 'master' into bwindels/idb-promises-txn 2020-09-29 11:33:58 +02:00
Bruno Windels
e5b1cbbcd3 prevent endless loop when restoring messages that were already sent 2020-09-29 11:32:49 +02:00
Bruno Windels
7627a2bda2 add comment 2020-09-29 10:53:02 +02:00
Bruno Windels
163ca12854 ignore abort error 2020-09-29 10:52:52 +02:00
Bruno Windels
919357b474 more broken imports after refactor 2020-09-29 09:57:48 +02:00
Bruno Windels
c529df179b also import this 2020-09-29 09:56:46 +02:00
Bruno Windels
c1ecaffbae fix refactor typo 2020-09-29 09:54:51 +02:00
Bruno Windels
07fcf7e75b also do this in try catch 2020-09-29 09:43:25 +02:00
Bruno Windels
b1f9cfd972 cleanup storage errors a bit 2020-09-29 09:17:03 +02:00
Bruno Windels
ee4c132fb4 add todo 2020-09-28 16:06:41 +02:00
Bruno Windels
76381fbca1 open storage transactions synchronously
this (almost) makes it work in some browsers that otherwise
have throw a TransactionInactiveError on the first operation
you try to do on a store.
2020-09-28 16:06:41 +02:00
Bruno Windels
d759e1429f set error before changing state to stopped 2020-09-28 16:06:19 +02:00
Bruno Windels
3440823981
Merge pull request #117 from vector-im/bwindels/idb-promises
Prevent transaction from closing on IE11/Win7
2020-09-28 13:37:34 +00:00
Bruno Windels
dd30f51ffe add copyright 2020-09-28 15:28:51 +02:00
Bruno Windels
8366b44d8c dont assume global is window 2020-09-28 14:52:12 +02:00
Bruno Windels
98a6d82820 detect when sync promise hack is needed 2020-09-28 14:51:41 +02:00
Bruno Windels
706ec97296 change method name 2020-09-28 13:25:44 +02:00
Bruno Windels
64290d5ae6 flush promises manually in idb event handler 2020-09-25 16:53:19 +02:00
Bruno Windels
27a8ef4604 add comment how timeouts interact with the reconnector 2020-09-25 10:45:41 +02:00
Bruno Windels
e175e9ac8b cleanup 2020-09-25 10:45:34 +02:00
Bruno Windels
134b04c782 make flushing room key shares reentrant
as it can be called from Room.start while still running.
2020-09-25 10:45:00 +02:00
Bruno Windels
bcca23bac9 retry sync on timeout, even for incremental sync 2020-09-25 10:44:36 +02:00
Bruno Windels
7f0d36cf79 remove double negation 2020-09-25 10:44:19 +02:00
Bruno Windels
86df4993e1 prevent room summary from being updated every time it is in /sync resp 2020-09-24 16:45:28 +02:00
Bruno Windels
46abafdccc ensure cloned is always set to false for this._data
by making all assignments of this._data go through applyChanges
2020-09-24 16:40:51 +02:00
Bruno Windels
4a0173e90f only run decryptPending if needed 2020-09-24 10:53:51 +02:00
Bruno Windels
4d616ce281 add todo for future optimisation 2020-09-24 10:35:09 +02:00
Bruno Windels
ece4840653 don't mark rooms as unread after retrying decryption for now
this will not mark e2ee rooms as unread if their room key is delayed
though. We should really only do this for back-filled events but that
is hard to do right now, as we don't know the original source here.
2020-09-23 19:11:11 +02:00
Bruno Windels
eb4237f6f4 tell caller if an update was done from summery.writeAndApplyData
so room actually emits an update
2020-09-23 19:10:25 +02:00
Bruno Windels
17f84ab314 fix "this" still being used in readRawTimelineEntries ... 2020-09-23 19:09:44 +02:00
Bruno Windels
086bdafe9a no need for async 2020-09-23 18:28:21 +02:00
Bruno Windels
7cad3b2bdb some tabs in here 2020-09-23 18:22:51 +02:00
Bruno Windels
64f657e5a2 fix test 2020-09-23 18:20:29 +02:00
Bruno Windels
6e77ebb160 undo obsolete changes 2020-09-23 18:06:16 +02:00
Bruno Windels
d53b5eefb3 fill in the blanks 2020-09-23 17:59:42 +02:00
Bruno Windels
9d41e122a0 draft of falling back to reading entries since last decrypted event key
this change notifyRoomKey(s) to only take one room key at a time
to simplify things
2020-09-23 17:34:25 +02:00
Bruno Windels
a8392dc684 also decrypt messages in the sync response that enabled encryption
like initial sync
2020-09-23 14:26:14 +02:00
Bruno Windels
241176d6fb WIP 2020-09-22 18:22:37 +02:00
Bruno Windels
137f55b44d manage request scheduler in session container
so we can start it before sync does its first request,
which otherwise gets aborted because the scheduler hasn't started yet
2020-09-22 16:39:41 +02:00
Bruno Windels
150f06b9bf also move to Stopped for aborts 2020-09-22 16:39:04 +02:00
Bruno Windels
85b451ffa1 can't rename named params like this 2020-09-22 15:49:43 +02:00
Bruno Windels
5660e0f4f0 rename send scheduler to request scheduler 2020-09-22 15:49:35 +02:00
Bruno Windels
0a00d4c865 use hsApi wrapper that handles rate-limiting instead of send scheduler 2020-09-22 13:43:18 +02:00
Bruno Windels
d7c25e3106 move MediaRepository out of HomeServerApi
so HomeServerApi becomes easier to wrap, only having methods
that return a RequestResult.
2020-09-22 13:40:38 +02:00
Bruno Windels
6cd227b82d only prompt after waiting 10s for sync UTD 2020-09-22 09:30:25 +02:00
Bruno Windels
e6a46874c4 wrap olm error for creating session in DecryptionError
so we can relate it back to the event that caused it
2020-09-21 17:58:13 +02:00
Bruno Windels
c9ee5a5db2 stay in catchup mode as long as there are device messages
this implements https://github.com/vector-im/element-web/issues/2782

it also implements 0 timeout for catchup, getting rid of the
catching up with your convo banner for 30s upon reconnection.
2020-09-21 17:57:01 +02:00
Bruno Windels
015c6b1c70 interpret unreported signed_curve25519 as 0 OTKs 2020-09-21 17:56:23 +02:00
Bruno Windels
4dfbd3f3cd don't run afterSyncCompleted and next sync request in parallel
as the otk count the next sync request reports will be outdated
if afterSyncCompleted uploaded OTKs, and the next afterSyncCompleted
, having the wrong server OTK count, will again upload OTKs.

This will overwrite existing OTK keys which will
throw BAD_MESSAGE_KEY_ID when creating new sessions with those OTKs
2020-09-21 17:53:29 +02:00
Bruno Windels
c7370d7b01 Use continue in for loop rather than return
this was running in a Promise.all(array.map)) closure before
2020-09-21 14:11:28 +02:00
Bruno Windels
2c6a3a7ce7 fix afterSyncCompleted not being run after a sync error occurs
the error was not cleared when calling start again.

Also we should better look at the sync status to decide whether to run
afterSyncCompleted.

This prevented the room keys from being applied once you
had a connection error or other error at some point
since you started the app.
2020-09-21 13:55:35 +02:00
Bruno Windels
8cf29e344b don't send access token on /versions
as it's not a good idea, and some CORS configs might not be happy with
an Authorization header on that path
2020-09-18 18:13:20 +02:00
Bruno Windels
4d604f7357 log all sync errors 2020-09-18 13:11:18 +02:00
Bruno Windels
3704de1a26 more dispose 2020-09-18 13:11:10 +02:00
Bruno Windels
da780d0aa2 delay backup 10s if missing session event came from sync 2020-09-18 13:11:02 +02:00
Bruno Windels
3aead4eae2 createEnum does not take an array 2020-09-18 13:08:35 +02:00
Bruno Windels
ed913ca24b add dispose to room encryption 2020-09-18 13:08:18 +02:00
Bruno Windels
6c46cc98de be more specific in error message 2020-09-18 12:12:52 +02:00
Bruno Windels
f58a3ee975 use olm from param 2020-09-17 18:56:02 +02:00
Bruno Windels
7d6fcfafa8 pass olm, better naming, don't reuse var 2020-09-17 18:55:39 +02:00
Bruno Windels
494c5cbcf0 notify UI when we need session backup 2020-09-17 18:00:00 +02:00
Bruno Windels
06ccd74680 this should be read-write, oops 2020-09-17 17:59:35 +02:00
Bruno Windels
1b8e481559 keys from backup need to be imported with import_session, not create 2020-09-17 17:59:02 +02:00
Bruno Windels
915925d6ee don't throw when trying to restore session from backup, check sender key 2020-09-17 17:57:52 +02:00
Bruno Windels
a205ae8841 fixes 2020-09-17 17:57:12 +02:00
Bruno Windels
5752cca69c go back to bs58 and use other base64 decoder
as base-x isn't meant for base64
2020-09-17 17:56:05 +02:00
Bruno Windels
9d622434fb integrate session backup with session class 2020-09-17 15:58:46 +02:00
Bruno Windels
3cebd17cbe adjust paths 2020-09-17 15:17:46 +02:00
Bruno Windels
c9d8d40242 move ssss out of e2ee dir as not really e2ee related 2020-09-17 15:17:00 +02:00
Bruno Windels
33aa475e18 add function to create key from either passphrase or recovery key 2020-09-17 15:16:01 +02:00
Bruno Windels
7f97c540fb obsolete comment, this is already the case 2020-09-17 14:20:42 +02:00
Bruno Windels
092547bfc8 renaming 2020-09-17 14:20:36 +02:00
Bruno Windels
17fc249fa8 integrate session backup with room encryption and megolm decryption 2020-09-17 14:20:15 +02:00
Bruno Windels
3941af93d2 more impl of SessionBackup 2020-09-17 14:19:57 +02:00
Bruno Windels
fff8308259 first draft of SessionBackup 2020-09-17 12:34:39 +02:00
Bruno Windels
1a105d391b cleanup: rename session name to hydrogen as well
as we'll need people to resync because of account data as well
2020-09-17 12:34:10 +02:00
Bruno Windels
b7401a148c some ssss cleanup 2020-09-17 12:33:57 +02:00
Bruno Windels
8204e942d9 first draft of reading a ssss secret 2020-09-17 11:39:40 +02:00
Bruno Windels
c44ab3e55e derive ssss key from recovery key 2020-09-17 11:39:25 +02:00
Bruno Windels
7c4c266fe0 derive ssss key from passphrase 2020-09-17 11:39:07 +02:00
Bruno Windels
45c62eb0e5 common types and storage for ssss 2020-09-17 11:38:53 +02:00
Bruno Windels
7412b3aae8 forgot to commit account data store 2020-09-17 11:38:44 +02:00
Bruno Windels
abfde76e24 store account data in storage
needs a resync, need to think how to handle this
2020-09-17 10:39:51 +02:00
Bruno Windels
00eade1c16 add crypto driver with primitives needed for 4S & session backup 2020-09-17 10:19:09 +02:00
Bruno Windels
12262f2824 actually use correct method to get all device ids for a user 2020-09-14 18:31:54 +02:00
Bruno Windels
75bff228ec fix data not being passed on, caused crash on initial sync 2020-09-14 17:45:13 +02:00
Bruno Windels
49f330279b also pass timeline entries to summary after initial decryption failed 2020-09-14 16:34:07 +02:00
Bruno Windels
f3f07a0672 centralize update emitting in room 2020-09-14 16:33:43 +02:00
Bruno Windels
bce46daa9c this is shorter 2020-09-14 16:33:30 +02:00
Bruno Windels
3325f12092 remove devices not present in /keys/query response 2020-09-14 15:47:00 +02:00
Bruno Windels
504371eaf3 this is outdated (and not really needed) 2020-09-14 15:47:00 +02:00
Bruno Windels
8c4d68def9 show decryption errors in timeline 2020-09-14 15:47:00 +02:00
Bruno Windels
a2f8731a23 Keep room key with earliest index 2020-09-14 15:47:00 +02:00
Bruno Windels
0c3ea90ab4 also update room list when encrypted events come in 2020-09-14 15:46:58 +02:00
Bruno Windels
fb69688d47 also update room list when encrypted events come in 2020-09-14 14:01:47 +02:00
Bruno Windels
2855166239 migrate encryption flag so old sessions dont send unencrypted events 2020-09-11 16:48:04 +02:00
Bruno Windels
e763771cc2 cleanup 2020-09-11 14:45:38 +02:00
Bruno Windels
96119b4e58 load all pending operations when starting the session, pass to room 2020-09-11 14:41:40 +02:00
Bruno Windels
ab1fe711ad implement room key sharing with operations store 2020-09-11 14:41:12 +02:00
Bruno Windels
b00865510f add operation store 2020-09-11 14:40:05 +02:00
Bruno Windels
9f6822f362 remove needsRoomKey flag on member 2020-09-11 14:38:36 +02:00
Bruno Windels
bba53b3477 dont store duplicated key values for replay detection 2020-09-11 12:08:06 +02:00
Bruno Windels
0dece5b04f make continuation logic work well with pending events
- don't use display name to compare but user id
   (pending doesn't have display name yet)
 - use current time as timestamp
2020-09-11 11:43:40 +02:00
Bruno Windels
e0d9d703b7 offload olm account creation in worker 2020-09-11 10:43:17 +02:00
Bruno Windels
0b26e6f53a compress new e2ee stores into one new idb version 2020-09-11 08:40:43 +02:00
Bruno Windels
78fecd003a cleanup 2020-09-10 18:57:29 +02:00
Bruno Windels
af36c71a59 load worker in main and pass paths so it works both on compiled and non-compiled 2020-09-10 18:41:23 +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