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
c158e3da77
support running afterSyncCompleted step on rooms as well
...
and make it in parallel with next sync request
2020-09-08 14:37:24 +02:00
Bruno Windels
52c3c7c03d
support sending out room key in room encryption for newly joined members
2020-09-08 14:36:50 +02:00
Bruno Windels
7b35a3c46c
memberChanges is a map, not array
2020-09-08 14:23:38 +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
cd172f6df2
log new room keys for debugging
2020-09-08 10:55:38 +02:00
Bruno Windels
dea9fd90b4
name devices at login "Hydrogen"
...
so you can somewhat identify them in a device list
2020-09-08 10:53:15 +02:00
Bruno Windels
2c5c3ac8e2
formatting
2020-09-08 10:53:02 +02:00
Bruno Windels
2b59c8bb7c
store ed25519 key from olm event rather than one in m.room_key payload
...
that's the docs/js-sdk do it, even though it probably
doesn't matter much as we verify the key anyway
2020-09-08 10:52:02 +02:00
Bruno Windels
40ed66dc5e
document return type
2020-09-08 10:51:45 +02:00
Bruno Windels
4cf3b3569d
storage method takes EventKey actually
2020-09-08 10:51:28 +02:00
Bruno Windels
3e100ff5ec
ensure /keys/query devices have the keys we need
2020-09-08 10:51:01 +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
fbb534fa16
add todo
2020-09-04 16:46:13 +02:00
Bruno Windels
a817a9aaf9
return decrypted type and content
2020-09-04 16:41:03 +02:00
Bruno Windels
7bfcfc9eed
correct store name
2020-09-04 16:40:51 +02:00
Bruno Windels
f31efe3e87
encode key with proper names
2020-09-04 16:40:39 +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
9b771120e4
actually accept megolm decryption dep
2020-09-04 16:27:14 +02:00
Bruno Windels
dc0576f2db
cleanup
2020-09-04 15:31:45 +02:00
Bruno Windels
baad4bd37f
hookup megolm decryption in session
2020-09-04 15:31:27 +02:00
Bruno Windels
32a399afec
implement storage changes for megolm decryption
2020-09-04 15:31:00 +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
565fdb0f8c
use proper error codes
2020-09-04 12:10:36 +02:00
Bruno Windels
28b46a1e5b
add some comments
2020-09-04 12:10:28 +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
fab58e8724
first draft of megolm decryption
2020-09-04 12:06:26 +02:00
Bruno Windels
80ede4f411
session will always be true here, we want to check sessionEntry
2020-09-04 12:05:58 +02:00
Bruno Windels
8ac80314c2
cleanup
2020-09-03 17:51:20 +02:00
Bruno Windels
c5efa582b1
check algorithm
2020-09-03 17:51:00 +02:00
Bruno Windels
c5c9505ce2
hookup megolm encryption in session
2020-09-03 17:50:28 +02:00
Bruno Windels
be4d887178
add outbound group session storage
2020-09-03 17:49:20 +02:00
Bruno Windels
6bc30bb824
implement megolm encryption
2020-09-03 17:48:59 +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
2a40c89a24
implement hsapi /keys/claim endpoint
2020-09-03 15:33:23 +02:00
Bruno Windels
dde8c66196
implement store changes for olm encryption
2020-09-03 15:33:03 +02:00
Bruno Windels
792f0cf9a0
log our identity keys after load
2020-09-03 15:32:33 +02:00
Bruno Windels
1d4a5cd6d4
instantiate olm encryption in session
2020-09-03 15:32:08 +02:00
Bruno Windels
4401012312
no need to call decrypt when there are no events
2020-09-03 15:30:54 +02:00
Bruno Windels
408ff3322d
content already exists here
2020-09-03 15:30:42 +02:00
Bruno Windels
620fc0d210
JSON stringify payload, olm_encrypt does not do objects
2020-09-03 15:30:18 +02:00
Bruno Windels
8676909a26
don't swallow errors!
2020-09-03 15:30:09 +02:00
Bruno Windels
a943467e71
await txns
2020-09-03 15:30:01 +02:00
Bruno Windels
71ba2dd714
name userId -> ownUserId as elsewhere
2020-09-03 15:29:35 +02:00
Bruno Windels
8d0d4570dd
fix import path
2020-09-03 15:29:09 +02:00
Bruno Windels
b2fffee037
give better error when olm plaintext is not json
2020-09-03 15:28:49 +02:00
Bruno Windels
1f8005cdfd
forgot to pass account
2020-09-03 15:28:38 +02:00
Bruno Windels
e22131bf57
don't store or return our own device
2020-09-03 15:28:20 +02:00
Bruno Windels
eda15e1141
forgot to remove this after extracting function
2020-09-03 15:27:40 +02:00
Bruno Windels
8d64fa54fe
using wrong method here
2020-09-03 15:27:00 +02:00
Bruno Windels
4f4808b94c
lock on senderKey while enc/decrypting olm sessions
2020-09-03 12:12:33 +02:00
Bruno Windels
4ecd853348
Merge branch 'bwindels/e2ee' into bwindels/olm-encrypt
2020-09-03 11:44:36 +02:00
Bruno Windels
279b55e8e6
fix test
2020-09-03 11:31:00 +02:00
Bruno Windels
1492b6b6f8
cleanup of olm encryption
2020-09-03 09:53:16 +02:00
Bruno Windels
e3daef5ca9
first draft of olm encryption
2020-09-02 17:58:01 +02:00
Bruno Windels
3cb46b38ff
extract olm/Session into own file
2020-09-02 17:38:46 +02:00
Bruno Windels
f1b78a5778
extract groupBy function from olm decryption into util
2020-09-02 17:38:25 +02:00
Bruno Windels
0545c1f0c5
extract verifying a signed object from the device tracker
2020-09-02 17:37:48 +02:00
Bruno Windels
bd64aaf029
create outbound olm session from account
...
also better error handling
2020-09-02 17:37:13 +02:00
Bruno Windels
1dbabf6240
cleanup ctor
2020-09-02 14:59:17 +02:00
Bruno Windels
1ab356cd9c
wrong store name
2020-09-02 14:53:50 +02:00
Bruno Windels
95fcbe1598
typo
2020-09-02 14:52:33 +02:00
Bruno Windels
14cba7ec6e
need to pass in olm
2020-09-02 14:52:19 +02:00
Bruno Windels
1f66868566
forgot to await
2020-09-02 14:52:02 +02:00
Bruno Windels
e09fbf566d
TODO
2020-09-02 14:30:49 +02:00
Bruno Windels
7d517eb700
wire up the olm decryption,megolm room key handler and to_device handler
2020-09-02 14:30:18 +02:00
Bruno Windels
0219932f50
typo
2020-09-02 14:29:18 +02:00
Bruno Windels
6d3aa219fa
implement storing room keys
2020-09-02 14:24:38 +02:00
Bruno Windels
f5c7b1b3ec
remove obsolete comment
2020-09-02 13:35:25 +02:00
Bruno Windels
6aad751611
fix wrong idb method used in session store
2020-09-02 13:35:08 +02:00
Bruno Windels
44e9f91d4c
to_device handler for encrypted messages
...
changes the api of the olm decryption to decrypt in batch
so we can isolate side-effects until we have a write-txn open
and we can parallelize the decryption of different sender keys.
2020-09-02 13:33:27 +02:00
Bruno Windels
6788a612fc
implement olm session storage
2020-09-01 17:59:59 +02:00
Bruno Windels
5fee7fedc3
implement olm decryption algorithm
2020-09-01 17:59:39 +02:00
Bruno Windels
81a1573e3b
make a shared olm util for the whole session
2020-09-01 17:57:59 +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
6580219b09
add userIdentities to sync txn
2020-08-31 16:09:24 +02:00
Bruno Windels
4077f57afb
fix typos in stores
2020-08-31 16:09:13 +02:00
Bruno Windels
aeb2f5402a
process own membership changes before device lists
2020-08-31 16:08:47 +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
d43cdfd889
don't crash when tracked user is not there
2020-08-31 16:06:40 +02:00
Bruno Windels
fef6586e5b
actually pass the room id
2020-08-31 16:06:31 +02:00
Bruno Windels
78c3157a5f
fix not taking into account Object.entries yields arrays for the pairs
2020-08-31 16:05:57 +02:00
Bruno Windels
561df45641
olm.Utility should be instanciated
2020-08-31 16:05:21 +02:00
Bruno Windels
0399562340
fix typo
2020-08-31 16:05:04 +02:00
Bruno Windels
8b7fdb2c61
create user & device identity stores
2020-08-31 14:38:03 +02:00
Bruno Windels
4ef5d4b3b8
implement hsapi /keys/query method
2020-08-31 14:24:09 +02:00
Bruno Windels
2e67b2b6b8
handle prev_content location ambiguity
2020-08-31 14:21:18 +02:00
Bruno Windels
09cb39b553
don't run afterSyncCompleted when there was an error
2020-08-31 14:13:36 +02:00
Bruno Windels
afb9ae4391
hook up device tracker with sync
2020-08-31 14:13:21 +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
693682f360
move e2ee constants to common file
2020-08-28 14:35:47 +02:00
Bruno Windels
e751333bbd
don't assume setting up a session went all the way through when stopping
2020-08-28 13:58:42 +02:00
Bruno Windels
a1ba5d7dba
between syncs, generate more otks if needed, and upload them
2020-08-28 13:58:17 +02:00
Bruno Windels
681dfdf62b
sync otk count to e2ee account
2020-08-28 13:56:44 +02:00
Bruno Windels
d64db185bd
await callback in case we need to read, then write from it
2020-08-28 13:54:42 +02:00
Bruno Windels
3ab5a72221
give e2ee account values a prefix so we can prevent from clearing them
2020-08-28 13:52:27 +02:00
Bruno Windels
d24be7ee55
extract constants out
2020-08-28 13:51:58 +02:00
Bruno Windels
d7d1d8c45a
Merge branch 'master' into bwindels/e2ee
2020-08-28 12:11:33 +02:00
Bruno Windels
6a9cbf7f33
store and sort by m.lowpriority tag
2020-08-27 20:52:51 +02:00
Bruno Windels
4c290f0394
upload identity and one-time keys
2020-08-27 19:13:24 +02:00
Bruno Windels
f98b3dd5fa
create/load olm account before first sync
2020-08-27 19:13:09 +02:00
Bruno Windels
3b24ea34f3
Merge branch 'master' into bwindels/e2ee
2020-08-27 14:40:57 +02:00
Bruno Windels
09a018ade1
store sync token and filter id under the same key in session
...
as they are updated together
2020-08-27 14:36:50 +02:00
Bruno Windels
14b27f81fe
store session values as individual values in store
...
so we don't have to write the whole object every time something changes
we'll use this to store the olm account
2020-08-27 14:28:40 +02:00
Bruno Windels
25f3dfbb75
fix failing test
2020-08-27 14:22:59 +02:00
Bruno Windels
fe0257bca1
load olm and pass it to session
2020-08-27 13:24:55 +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
e4758d0651
we need to read from members now during load, for the heroes
...
and were actually not reading from room state
2020-08-21 18:14:07 +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
fe7cc08287
add _selectWhile with proper "while" semantics
...
the existing _selectWhile method was more like _selectUntil,
which is what we want for _selectLimit but not for selectWhile(Reverse)
The changes we had made before also broke _selectLimit as it would
look at the results length before the value got added so you
always got 1 value more than requested, breaking sync.
2020-08-19 18:25:49 +02:00
Bruno Windels
79363ed1d7
use optional chaining
2020-08-19 18:25:38 +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
cc1f35a074
fix c/p error
2020-08-19 16:14:10 +02:00
Bruno Windels
6abdcd6b58
finish draft of member list loading method
2020-08-19 16:13:47 +02:00
Bruno Windels
9edd1bb0bb
implement loading all members
2020-08-19 16:13:30 +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
a5595570f9
members hs api call
2020-08-19 16:11:33 +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
5ad7b74b2b
keep string key since we have to support IE11
2020-08-19 16:08:42 +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
cc4c9d7893
Improve IDB error reporting
...
Hope this can help with
https://github.com/vector-im/hydrogen-web/issues/50
2020-08-18 17:27:40 +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
0d3ab21044
Merge pull request #19 from vector-im/bwindels/small-bits
...
Various small bits
2020-08-17 12:15:28 +00:00
Bruno Windels
59588dc8b5
ignore rooms with empty timelines during initial sync
2020-08-17 14:13:23 +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
1699600ffc
fix test
2020-08-05 19:06:54 +02:00
Bruno Windels
3154b047a6
Merge branch 'bwindels/ie11' of github.com:vector-im/hydrogen-web into bwindels/ie11
2020-08-05 19:02:42 +02:00
Bruno Windels
d0ba894e2d
apply new license headers in new code
2020-08-05 18:59:16 +02:00
Bruno Windels
5ddc02ebc8
XHR request support for legacy browsers
2020-08-05 18:56:06 +02:00
Bruno Windels
e8e9740521
Move timeout to fetch, as XHR has native timeout support
2020-08-05 18:56:06 +02:00
Bruno Windels
00a85697ab
add license header in all source files
2020-08-05 18:38:55 +02:00
Bruno Windels
69142909d9
XHR request support for legacy browsers
2020-08-05 15:37:37 +00:00
Bruno Windels
b26bc69042
Move timeout to fetch, as XHR has native timeout support
2020-08-05 15:36:44 +00:00
Bruno Windels
f5d3092031
WIP
2020-06-26 23:26:24 +02:00
Bruno Windels
9712b397ce
add TODO comment
2020-05-26 10:31:23 +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
6b453c1ec4
we need to start when online actually, so invert
2020-05-07 18:46:45 +02:00