famedlysdk/lib/src/utils/room_key_request.dart

38 lines
1.2 KiB
Dart
Raw Normal View History

2020-02-21 15:05:19 +00:00
import 'package:famedlysdk/famedlysdk.dart';
class RoomKeyRequest extends ToDeviceEvent {
Client client;
RoomKeyRequest.fromToDeviceEvent(ToDeviceEvent toDeviceEvent, Client client) {
this.client = client;
sender = toDeviceEvent.sender;
content = toDeviceEvent.content;
type = toDeviceEvent.type;
2020-02-21 15:05:19 +00:00
}
Room get room => client.getRoomById(content['body']['room_id']);
2020-02-21 15:05:19 +00:00
DeviceKeys get requestingDevice =>
client.userDeviceKeys[sender].deviceKeys[content['requesting_device_id']];
2020-02-21 15:05:19 +00:00
Future<void> forwardKey() async {
var room = this.room;
2020-05-17 07:54:34 +00:00
await room.loadInboundGroupSessionKey(content['body']['session_id']);
2020-05-15 18:40:17 +00:00
final session = room.inboundGroupSessions[content['body']['session_id']];
var forwardedKeys = <dynamic>[client.identityKey];
2020-02-21 15:05:19 +00:00
for (final key in session.forwardingCurve25519KeyChain) {
forwardedKeys.add(key);
}
2020-03-31 15:18:37 +00:00
await requestingDevice?.setVerified(true, client);
var message = session.content;
message['forwarding_curve25519_key_chain'] = forwardedKeys;
2020-05-22 10:12:18 +00:00
message['session_key'] = session.inboundGroupSession
.export_session(session.inboundGroupSession.first_known_index());
2020-02-21 15:05:19 +00:00
await client.sendToDevice(
[requestingDevice],
'm.forwarded_room_key',
2020-02-21 15:05:19 +00:00
message,
);
}
}