Merge branch 'master' into soru/cross-signing
This commit is contained in:
commit
5334266529
|
@ -124,8 +124,11 @@ class Encryption {
|
|||
canRequestSession = true;
|
||||
throw (DecryptError.UNKNOWN_SESSION);
|
||||
}
|
||||
// decrypt errors here may mean we have a bad session key - others might have a better one
|
||||
canRequestSession = true;
|
||||
final decryptResult = inboundGroupSession.inboundGroupSession
|
||||
.decrypt(event.content['ciphertext']);
|
||||
canRequestSession = false;
|
||||
final messageIndexKey = event.eventId +
|
||||
event.originServerTs.millisecondsSinceEpoch.toString();
|
||||
var haveIndex = inboundGroupSession.indexes.containsKey(messageIndexKey);
|
||||
|
@ -148,8 +151,6 @@ class Encryption {
|
|||
roomId,
|
||||
sessionId);
|
||||
}
|
||||
// decrypt errors here may mean we have a bad session key - others might have a better one
|
||||
canRequestSession = true;
|
||||
decryptedPayload = json.decode(decryptResult.plaintext);
|
||||
} catch (exception) {
|
||||
// alright, if this was actually by our own outbound group session, we might as well clear it
|
||||
|
|
|
@ -295,7 +295,7 @@ class Database extends _$Database {
|
|||
final chatId = eventUpdate.roomID;
|
||||
|
||||
// Get the state_key for state events
|
||||
var stateKey = '';
|
||||
String stateKey;
|
||||
if (eventContent['state_key'] is String) {
|
||||
stateKey = eventContent['state_key'];
|
||||
}
|
||||
|
@ -353,7 +353,10 @@ class Database extends _$Database {
|
|||
|
||||
if (type == 'history') return;
|
||||
|
||||
if (type != 'account_data') {
|
||||
if (type != 'account_data' &&
|
||||
((stateKey is String) ||
|
||||
[EventTypes.Message, EventTypes.Sticker, EventTypes.Encrypted]
|
||||
.contains(eventUpdate.eventType))) {
|
||||
final now = DateTime.now();
|
||||
await storeRoomState(
|
||||
clientId,
|
||||
|
@ -369,7 +372,7 @@ class Database extends _$Database {
|
|||
json.encode(eventContent['unsigned'] ?? ''),
|
||||
json.encode(eventContent['content']),
|
||||
json.encode(eventContent['prev_content'] ?? ''),
|
||||
stateKey,
|
||||
stateKey ?? '',
|
||||
);
|
||||
} else if (type == 'account_data') {
|
||||
await storeRoomAccountData(
|
||||
|
|
|
@ -115,7 +115,15 @@ class Room {
|
|||
print('[LibOlm] Could not decrypt room state: ' + e.toString());
|
||||
}
|
||||
}
|
||||
if ((getState(state.type)?.originServerTs?.millisecondsSinceEpoch ?? 0) >
|
||||
if (!(state.stateKey is String) &&
|
||||
![EventTypes.Message, EventTypes.Sticker, EventTypes.Encrypted]
|
||||
.contains(state.type)) {
|
||||
return;
|
||||
}
|
||||
if ((getState(state.type, state.stateKey ?? '')
|
||||
?.originServerTs
|
||||
?.millisecondsSinceEpoch ??
|
||||
0) >
|
||||
(state.originServerTs?.millisecondsSinceEpoch ?? 1)) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -447,6 +447,45 @@ void main() {
|
|||
await room.setHistoryVisibility(HistoryVisibility.joined);
|
||||
});
|
||||
|
||||
test('setState', () async {
|
||||
// not set non-state-events
|
||||
room.setState(Event.fromJson({
|
||||
'content': {'history_visibility': 'shared'},
|
||||
'event_id': '\$143273582443PhrSn:example.org',
|
||||
'origin_server_ts': 1432735824653,
|
||||
'room_id': '!jEsUZKDJdhlrceRyVU:example.org',
|
||||
'sender': '@example:example.org',
|
||||
'type': 'm.custom',
|
||||
'unsigned': {'age': 1234}
|
||||
}, room));
|
||||
expect(room.getState('m.custom') != null, false);
|
||||
|
||||
// set state events
|
||||
room.setState(Event.fromJson({
|
||||
'content': {'history_visibility': 'shared'},
|
||||
'event_id': '\$143273582443PhrSn:example.org',
|
||||
'origin_server_ts': 1432735824653,
|
||||
'room_id': '!jEsUZKDJdhlrceRyVU:example.org',
|
||||
'sender': '@example:example.org',
|
||||
'state_key': '',
|
||||
'type': 'm.custom',
|
||||
'unsigned': {'age': 1234}
|
||||
}, room));
|
||||
expect(room.getState('m.custom') != null, true);
|
||||
|
||||
// sets messages as state events
|
||||
room.setState(Event.fromJson({
|
||||
'content': {'history_visibility': 'shared'},
|
||||
'event_id': '\$143273582443PhrSn:example.org',
|
||||
'origin_server_ts': 1432735824653,
|
||||
'room_id': '!jEsUZKDJdhlrceRyVU:example.org',
|
||||
'sender': '@example:example.org',
|
||||
'type': 'm.room.message',
|
||||
'unsigned': {'age': 1234}
|
||||
}, room));
|
||||
expect(room.getState('m.room.message') != null, true);
|
||||
});
|
||||
|
||||
test('logout', () async {
|
||||
await matrix.logout();
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue