diff --git a/lib/matrix_api_lite.dart b/lib/matrix_api_lite.dart index 0583e2ef..407c8b2f 100644 --- a/lib/matrix_api_lite.dart +++ b/lib/matrix_api_lite.dart @@ -81,6 +81,7 @@ export 'src/model/auth/authentication_types.dart'; export 'src/model/auth/authentication_user_identifier.dart'; export 'src/model/events/room_encrypted_content.dart'; export 'src/model/events/room_encryption_content.dart'; +export 'src/model/events/room_key_content.dart'; export 'src/model/events/secret_storage_default_key_content.dart'; export 'src/model/events/secret_storage_key_content.dart'; export 'src/model/events/tombstone_content.dart'; diff --git a/lib/src/model/events/room_encrypted_content.dart b/lib/src/model/events/room_encrypted_content.dart index f5f98e4d..86eb7298 100644 --- a/lib/src/model/events/room_encrypted_content.dart +++ b/lib/src/model/events/room_encrypted_content.dart @@ -21,10 +21,14 @@ class RoomEncryptedContent { senderKey = json.tryGet('sender_key', ''), deviceId = json.tryGet('device_id'), sessionId = json.tryGet('session_id'), - ciphertextMegolm = json.tryGet('ciphertext'), - ciphertextOlm = json - .tryGet>('ciphertext') - ?.map((k, v) => MapEntry(k, CiphertextInfo.fromJson(v))); + ciphertextMegolm = json['ciphertext'] is String + ? json.tryGet('ciphertext') + : null, + ciphertextOlm = json['ciphertext'] is Map + ? json + .tryGet>('ciphertext') + ?.map((k, v) => MapEntry(k, CiphertextInfo.fromJson(v))) + : null; Map toJson() { final data = {}; diff --git a/lib/src/model/events/room_key_content.dart b/lib/src/model/events/room_key_content.dart new file mode 100644 index 00000000..8b76dd68 --- /dev/null +++ b/lib/src/model/events/room_key_content.dart @@ -0,0 +1,28 @@ +import '../basic_event.dart'; +import '../../utils/try_get_map_extension.dart'; + +extension RoomKeyContentBasicEventExtension on BasicEvent { + RoomKeyContent get parsedRoomKeyContent => RoomKeyContent.fromJson(content); +} + +class RoomKeyContent { + String algorithm; + String roomId; + String sessionId; + String sessionKey; + + RoomKeyContent.fromJson(Map json) + : algorithm = json.tryGet('algorithm', ''), + roomId = json.tryGet('room_id', ''), + sessionId = json.tryGet('session_id', ''), + sessionKey = json.tryGet('session_key', ''); + + Map toJson() { + final data = {}; + data['algorithm'] = algorithm; + data['room_id'] = roomId; + data['session_id'] = sessionId; + data['session_key'] = sessionKey; + return data; + } +} diff --git a/test/event_content_test.dart b/test/event_content_test.dart index e1fee0d0..c4ab99e2 100644 --- a/test/event_content_test.dart +++ b/test/event_content_test.dart @@ -78,5 +78,18 @@ void main() { expect(MatrixEvent.fromJson(json).parsedRoomEncryptedContent.toJson(), json['content']); }); + test('Room Key Content', () { + var json = { + 'content': { + 'algorithm': 'm.megolm.v1.aes-sha2', + 'room_id': '!Cuyf34gef24t:localhost', + 'session_id': 'X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ', + 'session_key': 'AgAAAADxKHa9uFxcXzwYoNueL5Xqi69IkD4sni8LlfJL7qNBEY...' + }, + 'type': 'm.room_key' + }; + expect(BasicEvent.fromJson(json).parsedRoomKeyContent.toJson(), + json['content']); + }); }); } diff --git a/test/try_get_map_extension_test.dart b/test/try_get_map_extension_test.dart index 886700e3..40ee0098 100644 --- a/test/try_get_map_extension_test.dart +++ b/test/try_get_map_extension_test.dart @@ -16,11 +16,13 @@ * along with this program. If not, see . */ +import 'package:logger/logger.dart'; import 'package:matrix_api_lite/matrix_api_lite.dart'; import 'package:test/test.dart'; void main() { group('Try-get-map-extension', () { + Logs().level = Level.error; test('it should work', () { final data = { 'str': 'foxies',