Add Cross-Signing

This commit is contained in:
Sorunome 2020-06-25 14:29:06 +00:00 committed by Christian Pauly
commit c4a33e411a
13 changed files with 1149 additions and 74 deletions

View file

@ -1,6 +1,5 @@
import 'package:bubble/bubble.dart';
import 'package:famedlysdk/famedlysdk.dart';
import 'package:famedlysdk/encryption.dart';
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
import 'package:fluffychat/components/message_content.dart';
import 'package:fluffychat/components/reply_content.dart';
@ -122,7 +121,7 @@ class Message extends StatelessWidget {
),
if (event.type == EventTypes.Encrypted &&
event.messageType == MessageTypes.BadEncrypted &&
event.content['body'] == DecryptError.UNKNOWN_SESSION)
event.content['can_request_session'] == true)
RaisedButton(
color: color.withAlpha(100),
child: Text(

View file

@ -14,6 +14,8 @@ import '../l10n/l10n.dart';
import '../utils/beautify_string_extension.dart';
import '../utils/famedlysdk_store.dart';
import 'avatar.dart';
import '../views/key_verification.dart';
import '../utils/app_route.dart';
class Matrix extends StatefulWidget {
static const String callNamespace = 'chat.fluffy.jitsi_call';
@ -97,6 +99,7 @@ class MatrixState extends State<Matrix> {
};
StreamSubscription onRoomKeyRequestSub;
StreamSubscription onKeyVerificationRequestSub;
StreamSubscription onJitsiCallSub;
void onJitsiCall(EventUpdate eventUpdate) {
@ -159,7 +162,17 @@ class MatrixState extends State<Matrix> {
store = widget.store ?? Store();
if (widget.client == null) {
debugPrint('[Matrix] Init matrix client');
client = Client(widget.clientName, debug: false);
final Set verificationMethods = <KeyVerificationMethod>{
KeyVerificationMethod.numbers
};
if (!kIsWeb) {
// emojis don't show in web somehow
verificationMethods.add(KeyVerificationMethod.emoji);
}
client = Client(widget.clientName,
debug: false,
enableE2eeRecovery: true,
verificationMethods: verificationMethods);
onJitsiCallSub ??= client.onEvent.stream
.where((e) =>
e.type == 'timeline' &&
@ -184,6 +197,23 @@ class MatrixState extends State<Matrix> {
await request.forwardKey();
}
});
onKeyVerificationRequestSub ??= client.onKeyVerificationRequest.stream
.listen((KeyVerification request) async {
if (await SimpleDialogs(context).askConfirmation(
titleText: L10n.of(context).newVerificationRequest,
contentText: L10n.of(context).askVerificationRequest(request.userId),
)) {
await request.acceptVerification();
await Navigator.of(context).push(
AppRoute.defaultRoute(
context,
KeyVerificationView(request: request),
),
);
} else {
await request.rejectVerification();
}
});
_initWithStore();
} else {
client = widget.client;
@ -210,6 +240,7 @@ class MatrixState extends State<Matrix> {
@override
void dispose() {
onRoomKeyRequestSub?.cancel();
onKeyVerificationRequestSub?.cancel();
onJitsiCallSub?.cancel();
super.dispose();
}