feat: Implement room key request parsing
This commit is contained in:
parent
81c86a6c05
commit
fce7705243
|
|
@ -82,6 +82,7 @@ export 'src/model/auth/authentication_user_identifier.dart';
|
||||||
export 'src/model/events/room_encrypted_content.dart';
|
export 'src/model/events/room_encrypted_content.dart';
|
||||||
export 'src/model/events/room_encryption_content.dart';
|
export 'src/model/events/room_encryption_content.dart';
|
||||||
export 'src/model/events/room_key_content.dart';
|
export 'src/model/events/room_key_content.dart';
|
||||||
|
export 'src/model/events/room_key_request_content.dart';
|
||||||
export 'src/model/events/secret_storage_default_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/secret_storage_key_content.dart';
|
||||||
export 'src/model/events/tombstone_content.dart';
|
export 'src/model/events/tombstone_content.dart';
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
import '../basic_event.dart';
|
||||||
|
import '../../utils/try_get_map_extension.dart';
|
||||||
|
|
||||||
|
extension RoomKeyRequestContentBasicEventExtension on BasicEvent {
|
||||||
|
RoomKeyRequestContent get parsedRoomKeyRequestContent =>
|
||||||
|
RoomKeyRequestContent.fromJson(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
class RoomKeyRequestContent {
|
||||||
|
RequestedKeyInfo body;
|
||||||
|
String action;
|
||||||
|
String requestingDeviceId;
|
||||||
|
String requestId;
|
||||||
|
|
||||||
|
RoomKeyRequestContent.fromJson(Map<String, dynamic> json)
|
||||||
|
: body = RequestedKeyInfo.fromJson(
|
||||||
|
json.tryGet<Map<String, dynamic>>('body')),
|
||||||
|
action = json.tryGet<String>('action', ''),
|
||||||
|
requestingDeviceId = json.tryGet<String>('requesting_device_id', ''),
|
||||||
|
requestId = json.tryGet<String>('request_id', '');
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final data = <String, dynamic>{};
|
||||||
|
if (body != null) data['body'] = body.toJson();
|
||||||
|
data['action'] = action;
|
||||||
|
data['requesting_device_id'] = requestingDeviceId;
|
||||||
|
data['request_id'] = requestId;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RequestedKeyInfo {
|
||||||
|
String algorithm;
|
||||||
|
String roomId;
|
||||||
|
String sessionId;
|
||||||
|
String senderKey;
|
||||||
|
|
||||||
|
RequestedKeyInfo();
|
||||||
|
|
||||||
|
factory RequestedKeyInfo.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json == null) return null;
|
||||||
|
final requestKeyInfo = RequestedKeyInfo();
|
||||||
|
requestKeyInfo.algorithm = json.tryGet<String>('algorithm', '');
|
||||||
|
requestKeyInfo.roomId = json.tryGet<String>('room_id', '');
|
||||||
|
requestKeyInfo.sessionId = json.tryGet<String>('session_id', '');
|
||||||
|
requestKeyInfo.senderKey = json.tryGet<String>('sender_key', '');
|
||||||
|
return requestKeyInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final data = <String, dynamic>{};
|
||||||
|
data['algorithm'] = algorithm;
|
||||||
|
data['room_id'] = roomId;
|
||||||
|
data['session_id'] = sessionId;
|
||||||
|
data['sender_key'] = senderKey;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -91,5 +91,33 @@ void main() {
|
||||||
expect(BasicEvent.fromJson(json).parsedRoomKeyContent.toJson(),
|
expect(BasicEvent.fromJson(json).parsedRoomKeyContent.toJson(),
|
||||||
json['content']);
|
json['content']);
|
||||||
});
|
});
|
||||||
|
test('Room Key Request Content', () {
|
||||||
|
var json = <String, dynamic>{
|
||||||
|
'content': {
|
||||||
|
'action': 'request_cancellation',
|
||||||
|
'request_id': '1495474790150.19',
|
||||||
|
'requesting_device_id': 'RJYKSTBOIE'
|
||||||
|
},
|
||||||
|
'type': 'm.room_key_request'
|
||||||
|
};
|
||||||
|
expect(BasicEvent.fromJson(json).parsedRoomKeyRequestContent.toJson(),
|
||||||
|
json['content']);
|
||||||
|
json = <String, dynamic>{
|
||||||
|
'content': {
|
||||||
|
'action': 'request',
|
||||||
|
'body': {
|
||||||
|
'algorithm': 'm.megolm.v1.aes-sha2',
|
||||||
|
'room_id': '!Cuyf34gef24t:localhost',
|
||||||
|
'sender_key': 'RF3s+E7RkTQTGF2d8Deol0FkQvgII2aJDf3/Jp5mxVU',
|
||||||
|
'session_id': 'X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ'
|
||||||
|
},
|
||||||
|
'request_id': '1495474790150.19',
|
||||||
|
'requesting_device_id': 'RJYKSTBOIE'
|
||||||
|
},
|
||||||
|
'type': 'm.room_key_request'
|
||||||
|
};
|
||||||
|
expect(BasicEvent.fromJson(json).parsedRoomKeyRequestContent.toJson(),
|
||||||
|
json['content']);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue