Skip to content

Commit

Permalink
feat: handle incoming verification
Browse files Browse the repository at this point in the history
  • Loading branch information
matthiasn committed Feb 27, 2024
1 parent c3241ae commit c24be65
Show file tree
Hide file tree
Showing 4 changed files with 180 additions and 178 deletions.
32 changes: 26 additions & 6 deletions lib/sync/matrix/key_verification_runner.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:matrix/encryption/utils/key_verification.dart';
import 'package:matrix/matrix.dart';

class KeyVerificationRunner {
KeyVerificationRunner(
Expand All @@ -11,27 +12,32 @@ class KeyVerificationRunner {
lastStep = keyVerification.lastStep ?? '';
startedVerification = keyVerification.startedVerification;
lastStepHistory.add(lastStep);
controller.add(this);
publishState();

_timer = Timer.periodic(
const Duration(milliseconds: 100),
(timer) {
final newLastStep = keyVerification.lastStep;
debugPrint('KeyVerificationRunner newLastStep: $newLastStep ');
// debugPrint('KeyVerificationRunner newLastStep: $newLastStep ');
if (newLastStep != null && newLastStep != lastStep) {
lastStep = newLastStep;
lastStepHistory.add(newLastStep);
debugPrint('KeyVerificationRunner newLastStep: $newLastStep ');
controller.add(this);
publishState();

if (lastStep == 'm.key.verification.key') {
acceptEmojiVerification();
//acceptEmojiVerification();
readEmojis();
}

if (lastStep == 'm.key.verification.done') {
if (lastStep == EventTypes.KeyVerificationDone) {
stopTimer();
}

if (lastStep == 'm.key.verification.mac') {
//keyVerification.acceptVerification();
}

if (lastStep == 'm.key.verification.cancel') {
stopTimer();
}
Expand All @@ -52,13 +58,27 @@ class KeyVerificationRunner {
_timer?.cancel();
}

Future<void> acceptVerification() async {
await keyVerification.acceptVerification();
}

Future<List<KeyVerificationEmoji>?> acceptEmojiVerification() async {
await keyVerification.acceptSas();
emojis = keyVerification.sasEmojis;
controller.add(this);
publishState();
return emojis;
}

Future<List<KeyVerificationEmoji>?> readEmojis() async {
emojis = keyVerification.sasEmojis;
publishState();
return emojis;
}

void publishState() {
controller.add(this);
}

Future<void> cancelVerification() async {
await keyVerification.cancel();
stopTimer();
Expand Down
44 changes: 24 additions & 20 deletions lib/sync/matrix/matrix_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,33 @@ class MatrixService {
: _client = createClient(),
_keyVerificationController =
StreamController<KeyVerificationRunner>.broadcast() {
_incomingKeyVerificationRunnerController =
StreamController<KeyVerificationRunner>.broadcast(
onListen: publishIncomingRunnerState,
);

keyVerificationStream = _keyVerificationController.stream;
incomingKeyVerificationStream =
_incomingKeyVerificationRunnerController.stream;
loginAndListen();
}

void publishIncomingRunnerState() {
incomingKeyVerificationRunner?.publishState();
}

Client _client;
final LoggingDb _loggingDb = getIt<LoggingDb>();
MatrixConfig? _matrixConfig;
LoginResponse? _loginResponse;
KeyVerificationRunner? keyVerificationRunner;
KeyVerificationRunner? incomingKeyVerificationRunner;
final StreamController<KeyVerificationRunner> _keyVerificationController;
late final StreamController<KeyVerificationRunner>
_incomingKeyVerificationRunnerController;
late final Stream<KeyVerificationRunner> keyVerificationStream;
late final Stream<KeyVerificationRunner> incomingKeyVerificationStream;

KeyVerification? _incomingKeyVerification;
final _incomingKeyVerificationController =
StreamController<KeyVerification>.broadcast();

Expand Down Expand Up @@ -113,6 +127,10 @@ class MatrixService {
);
}

if (isLoggedIn()) {
await loadArchive();
}

final joinRes = await _client.joinRoom(matrixConfig.roomId).onError((
error,
stackTrace,
Expand Down Expand Up @@ -157,24 +175,6 @@ class MatrixService {
);
}

Future<void> continueIncomingVerification() async {
debugPrint('continueIncomingVerification started');
await _incomingKeyVerification?.continueVerification('m.sas.v1');
debugPrint('continueIncomingVerification finished');
}

Future<void> acceptIncomingVerification() async {
await _incomingKeyVerification?.acceptVerification();
}

Future<List<KeyVerificationEmoji>?> acceptIncomingEmojiVerification() async {
debugPrint('acceptIncomingEmojiVerification started');
await _incomingKeyVerification?.acceptSas();
final emojis = _incomingKeyVerification?.sasEmojis;
debugPrint('acceptIncomingEmojiVerification $emojis');
return emojis;
}

Future<void> deleteDevice(DeviceKeys deviceKeys) async {
final deviceId = deviceKeys.deviceId;
if (deviceId != null) {
Expand Down Expand Up @@ -203,7 +203,11 @@ class MatrixService {
_client.onKeyVerificationRequest.stream.listen((
KeyVerification keyVerification,
) {
_incomingKeyVerification = keyVerification;
incomingKeyVerificationRunner = KeyVerificationRunner(
keyVerification,
controller: _incomingKeyVerificationRunnerController,
);

debugPrint('Key Verification Request from ${keyVerification.deviceId}');
_incomingKeyVerificationController.add(keyVerification);
});
Expand Down
Loading

0 comments on commit c24be65

Please sign in to comment.