This commit is contained in:
Sorunome 2020-06-12 16:17:28 +02:00
parent 2a6a19e2b0
commit 3825f7292f
No known key found for this signature in database
GPG key ID: B19471D07FC9BE9C
4 changed files with 32 additions and 16 deletions

View file

@ -337,7 +337,8 @@ class KeyManager {
if (backupPubKey == null || if (backupPubKey == null ||
!(info.authData is RoomKeysAuthDataV1Curve25519AesSha2) || !(info.authData is RoomKeysAuthDataV1Curve25519AesSha2) ||
(info.authData as RoomKeysAuthDataV1Curve25519AesSha2).publicKey != backupPubKey) { (info.authData as RoomKeysAuthDataV1Curve25519AesSha2).publicKey !=
backupPubKey) {
return; return;
} }
for (final roomEntry in keys.rooms.entries) { for (final roomEntry in keys.rooms.entries) {
@ -378,7 +379,8 @@ class KeyManager {
Future<void> loadSingleKey(String roomId, String sessionId) async { Future<void> loadSingleKey(String roomId, String sessionId) async {
final info = await client.api.getRoomKeysBackup(); final info = await client.api.getRoomKeysBackup();
final ret = await client.api.getRoomKeysSingleKey(roomId, sessionId, info.version); final ret =
await client.api.getRoomKeysSingleKey(roomId, sessionId, info.version);
final keys = RoomKeys.fromJson({ final keys = RoomKeys.fromJson({
'rooms': { 'rooms': {
roomId: { roomId: {

View file

@ -2041,7 +2041,8 @@ class MatrixApi {
/// Create room keys backup /// Create room keys backup
/// https://matrix.org/docs/spec/client_server/unstable#post-matrix-client-r0-room-keys-version /// https://matrix.org/docs/spec/client_server/unstable#post-matrix-client-r0-room-keys-version
Future<String> createRoomKeysBackup(RoomKeysAlgorithmType algorithm, RoomKeysAuthData authData) async { Future<String> createRoomKeysBackup(
RoomKeysAlgorithmType algorithm, RoomKeysAuthData authData) async {
final ret = await request( final ret = await request(
RequestType.POST, RequestType.POST,
'/client/unstable/room_keys/version', '/client/unstable/room_keys/version',
@ -2069,7 +2070,8 @@ class MatrixApi {
/// Updates a room key backup /// Updates a room key backup
/// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-version-version /// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-version-version
Future<void> updateRoomKeysBackup(String version, RoomKeysAlgorithmType algorithm, RoomKeysAuthData authData) async { Future<void> updateRoomKeysBackup(String version,
RoomKeysAlgorithmType algorithm, RoomKeysAuthData authData) async {
await request( await request(
RequestType.PUT, RequestType.PUT,
'/client/unstable/room_keys/version/${Uri.encodeComponent(version)}', '/client/unstable/room_keys/version/${Uri.encodeComponent(version)}',
@ -2092,7 +2094,8 @@ class MatrixApi {
/// Stores a single room key /// Stores a single room key
/// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-keys-roomid-sessionid /// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-keys-roomid-sessionid
Future<RoomKeysUpdateResponse> storeRoomKeysSingleKey(String roomId, String sessionId, String version, RoomKeysSingleKey session) async { Future<RoomKeysUpdateResponse> storeRoomKeysSingleKey(String roomId,
String sessionId, String version, RoomKeysSingleKey session) async {
final ret = await request( final ret = await request(
RequestType.PUT, RequestType.PUT,
'/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}/${Uri.encodeComponent(sessionId)}?version=${Uri.encodeComponent(version)}', '/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}/${Uri.encodeComponent(sessionId)}?version=${Uri.encodeComponent(version)}',
@ -2103,7 +2106,8 @@ class MatrixApi {
/// Gets a single room key /// Gets a single room key
/// https://matrix.org/docs/spec/client_server/unstable#get-matrix-client-r0-room-keys-keys-roomid-sessionid /// https://matrix.org/docs/spec/client_server/unstable#get-matrix-client-r0-room-keys-keys-roomid-sessionid
Future<RoomKeysSingleKey> getRoomKeysSingleKey(String roomId, String sessionId, String version) async { Future<RoomKeysSingleKey> getRoomKeysSingleKey(
String roomId, String sessionId, String version) async {
final ret = await request( final ret = await request(
RequestType.GET, RequestType.GET,
'/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}/${Uri.encodeComponent(sessionId)}?version=${Uri.encodeComponent(version)}', '/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}/${Uri.encodeComponent(sessionId)}?version=${Uri.encodeComponent(version)}',
@ -2113,7 +2117,8 @@ class MatrixApi {
/// Deletes a single room key /// Deletes a single room key
/// https://matrix.org/docs/spec/client_server/unstable#delete-matrix-client-r0-room-keys-keys-roomid-sessionid /// https://matrix.org/docs/spec/client_server/unstable#delete-matrix-client-r0-room-keys-keys-roomid-sessionid
Future<RoomKeysUpdateResponse> deleteRoomKeysSingleKey(String roomId, String sessionId, String version) async { Future<RoomKeysUpdateResponse> deleteRoomKeysSingleKey(
String roomId, String sessionId, String version) async {
final ret = await request( final ret = await request(
RequestType.DELETE, RequestType.DELETE,
'/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}/${Uri.encodeComponent(sessionId)}?version=${Uri.encodeComponent(version)}', '/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}/${Uri.encodeComponent(sessionId)}?version=${Uri.encodeComponent(version)}',
@ -2123,7 +2128,8 @@ class MatrixApi {
/// Stores room keys for a room /// Stores room keys for a room
/// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-keys-roomid /// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-keys-roomid
Future<RoomKeysUpdateResponse> storeRoomKeysRoom(String roomId, String version, RoomKeysRoom keys) async { Future<RoomKeysUpdateResponse> storeRoomKeysRoom(
String roomId, String version, RoomKeysRoom keys) async {
final ret = await request( final ret = await request(
RequestType.PUT, RequestType.PUT,
'/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}?version=${Uri.encodeComponent(version)}', '/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}?version=${Uri.encodeComponent(version)}',
@ -2144,7 +2150,8 @@ class MatrixApi {
/// Deletes room ekys for a room /// Deletes room ekys for a room
/// https://matrix.org/docs/spec/client_server/unstable#delete-matrix-client-r0-room-keys-keys-roomid /// https://matrix.org/docs/spec/client_server/unstable#delete-matrix-client-r0-room-keys-keys-roomid
Future<RoomKeysUpdateResponse> deleteRoomKeysRoom(String roomId, String version) async { Future<RoomKeysUpdateResponse> deleteRoomKeysRoom(
String roomId, String version) async {
final ret = await request( final ret = await request(
RequestType.DELETE, RequestType.DELETE,
'/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}?version=${Uri.encodeComponent(version)}', '/client/unstable/room_keys/keys/${Uri.encodeComponent(roomId)}?version=${Uri.encodeComponent(version)}',
@ -2154,7 +2161,8 @@ class MatrixApi {
/// Store multiple room keys /// Store multiple room keys
/// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-keys /// https://matrix.org/docs/spec/client_server/unstable#put-matrix-client-r0-room-keys-keys
Future<RoomKeysUpdateResponse> storeRoomKeys(String version, RoomKeys keys) async { Future<RoomKeysUpdateResponse> storeRoomKeys(
String version, RoomKeys keys) async {
final ret = await request( final ret = await request(
RequestType.PUT, RequestType.PUT,
'/client/unstable/room_keys/keys?version=${Uri.encodeComponent(version)}', '/client/unstable/room_keys/keys?version=${Uri.encodeComponent(version)}',

View file

@ -55,7 +55,8 @@ class RoomKeysAuthDataV1Curve25519AesSha2 extends RoomKeysAuthData {
String publicKey; String publicKey;
Map<String, Map<String, String>> signatures; Map<String, Map<String, String>> signatures;
RoomKeysAuthDataV1Curve25519AesSha2.fromJson(Map<String, dynamic> json) : super.fromJson(json) { RoomKeysAuthDataV1Curve25519AesSha2.fromJson(Map<String, dynamic> json)
: super.fromJson(json) {
publicKey = json['public_key']; publicKey = json['public_key'];
signatures = json['signatures'] is Map signatures = json['signatures'] is Map
? Map<String, Map<String, String>>.from((json['signatures'] as Map) ? Map<String, Map<String, String>>.from((json['signatures'] as Map)
@ -82,16 +83,19 @@ class RoomKeysVersionResponse {
String version; String version;
RoomKeysVersionResponse.fromJson(Map<String, dynamic> json) { RoomKeysVersionResponse.fromJson(Map<String, dynamic> json) {
algorithm = RoomKeysAlgorithmTypeExtension.fromAlgorithmString(json['algorithm']); algorithm =
RoomKeysAlgorithmTypeExtension.fromAlgorithmString(json['algorithm']);
switch (algorithm) { switch (algorithm) {
case RoomKeysAlgorithmType.v1Curve25519AesSha2: case RoomKeysAlgorithmType.v1Curve25519AesSha2:
authData = RoomKeysAuthDataV1Curve25519AesSha2.fromJson(json['auth_data']); authData =
RoomKeysAuthDataV1Curve25519AesSha2.fromJson(json['auth_data']);
break; break;
default: default:
authData = null; authData = null;
} }
count = json['count']; count = json['count'];
etag = json['etag'].toString(); // synapse replies an int but docs say string? etag =
json['etag'].toString(); // synapse replies an int but docs say string?
version = json['version']; version = json['version'];
} }

View file

@ -43,7 +43,8 @@ class RoomKeysRoom {
Map<String, RoomKeysSingleKey> sessions; Map<String, RoomKeysSingleKey> sessions;
RoomKeysRoom.fromJson(Map<String, dynamic> json) { RoomKeysRoom.fromJson(Map<String, dynamic> json) {
sessions = (json['sessions'] as Map).map((k, v) => MapEntry(k, RoomKeysSingleKey.fromJson(v))); sessions = (json['sessions'] as Map)
.map((k, v) => MapEntry(k, RoomKeysSingleKey.fromJson(v)));
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -57,7 +58,8 @@ class RoomKeys {
Map<String, RoomKeysRoom> rooms; Map<String, RoomKeysRoom> rooms;
RoomKeys.fromJson(Map<String, dynamic> json) { RoomKeys.fromJson(Map<String, dynamic> json) {
rooms = (json['rooms'] as Map).map((k, v) => MapEntry(k, RoomKeysRoom.fromJson(v))); rooms = (json['rooms'] as Map)
.map((k, v) => MapEntry(k, RoomKeysRoom.fromJson(v)));
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {