Skip to content

Commit

Permalink
Refactor QR transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
Anderas committed Oct 11, 2022
1 parent 66aefba commit 66df019
Show file tree
Hide file tree
Showing 10 changed files with 38 additions and 31 deletions.
2 changes: 1 addition & 1 deletion MatrixSDK/Crypto/Verification/MXKeyVerificationManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ FOUNDATION_EXPORT NSString *const MXKeyVerificationManagerNotificationTransactio
@param transactionId The transaction id of the associated verification request event.
@return MXQRCodeTransaction instance if a transaction exist or nil.
*/
- (nullable MXQRCodeTransaction*)qrCodeTransactionWithTransactionId:(NSString*)transactionId;
- (nullable id<MXQRCodeTransaction>)qrCodeTransactionWithTransactionId:(NSString*)transactionId;

/**
Remove pending QR code transaction.
Expand Down
24 changes: 12 additions & 12 deletions MatrixSDK/Crypto/Verification/MXKeyVerificationManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ - (void)beginKeyVerificationWithUserId:(NSString*)userId

- (void)createQRCodeTransactionFromRequest:(id<MXKeyVerificationRequest>)request
qrCodeData:(nullable MXQRCodeData*)qrCodeData
success:(void(^)(MXQRCodeTransaction *transaction))success
success:(void(^)(MXLegacyQRCodeTransaction *transaction))success
failure:(void(^)(NSError *error))failure
{
MXLogDebug(@"[MXKeyVerification] createQRCodeTransactionFromRequest: event: %@", request.requestId);
Expand Down Expand Up @@ -431,15 +431,15 @@ - (void)createQRCodeTransactionWithQRCodeData:(nullable MXQRCodeData*)qrCodeData
transactionId:(nullable NSString*)transactionId
dmRoomId:(nullable NSString*)dmRoomId
dmEventId:(nullable NSString*)dmEventId
success:(void(^)(MXQRCodeTransaction *transaction))success
success:(void(^)(MXLegacyQRCodeTransaction *transaction))success
failure:(void(^)(NSError *error))failure
{
MXLogDebug(@"[MXKeyVerification] createQRCodeTransaction: device: %@:%@ roomId: %@", userId, deviceId, dmRoomId);

// Make sure we have other device keys
[self loadDeviceWithDeviceId:deviceId andUserId:userId success:^(MXDeviceInfo *otherDevice) {

MXQRCodeTransaction *transaction = [[MXQRCodeTransaction alloc] initWithOtherDevice:otherDevice qrCodeData:qrCodeData andManager:self];
MXLegacyQRCodeTransaction *transaction = [[MXLegacyQRCodeTransaction alloc] initWithOtherDevice:otherDevice qrCodeData:qrCodeData andManager:self];


if (transactionId)
Expand Down Expand Up @@ -484,7 +484,7 @@ - (void)createQRCodeTransactionWithQRCodeData:(nullable MXQRCodeData*)qrCodeData

- (void)removeQRCodeTransactionWithTransactionId:(NSString*)transactionId
{
MXQRCodeTransaction *qrCodeTransaction = [self qrCodeTransactionWithTransactionId:transactionId];
MXLegacyQRCodeTransaction *qrCodeTransaction = [self qrCodeTransactionWithTransactionId:transactionId];

if (qrCodeTransaction)
{
Expand Down Expand Up @@ -1059,9 +1059,9 @@ - (void)handleSASKeyVerificationStart:(MXSASKeyVerificationStart*)keyVerificatio

id<MXKeyVerificationTransaction> existingTransaction = [self transactionWithUser:event.sender andDevice:keyVerificationStart.fromDevice];

if ([existingTransaction isKindOfClass:MXQRCodeTransaction.class])
if ([existingTransaction isKindOfClass:MXLegacyQRCodeTransaction.class])
{
MXQRCodeTransaction *existingQRCodeTransaction = (MXQRCodeTransaction*)existingTransaction;
MXLegacyQRCodeTransaction *existingQRCodeTransaction = (MXLegacyQRCodeTransaction*)existingTransaction;

if (existingQRCodeTransaction.state == MXQRCodeTransactionStateUnknown)
{
Expand Down Expand Up @@ -1204,7 +1204,7 @@ - (void)handleDoneEvent:(MXEvent*)event

if (doneEvent)
{
MXQRCodeTransaction *qrCodeTransaction = [self qrCodeTransactionWithTransactionId:doneEvent.transactionId];
MXLegacyQRCodeTransaction *qrCodeTransaction = [self qrCodeTransactionWithTransactionId:doneEvent.transactionId];
if (qrCodeTransaction)
{
[qrCodeTransaction handleDone:doneEvent];
Expand Down Expand Up @@ -1274,7 +1274,7 @@ - (void)handleQRCodeKeyVerificationStart:(MXQRCodeKeyVerificationStart*)keyVerif
return;
}

MXQRCodeTransaction *qrCodeTransaction = [self qrCodeTransactionWithTransactionId:requestId];
MXLegacyQRCodeTransaction *qrCodeTransaction = [self qrCodeTransactionWithTransactionId:requestId];

// Verify existing transaction
if (!qrCodeTransaction)
Expand Down Expand Up @@ -1818,15 +1818,15 @@ - (MXLegacySASTransaction *)sasTransactionWithTransactionId:(NSString*)transacti
return sasTransaction;
}

- (MXQRCodeTransaction*)qrCodeTransactionWithTransactionId:(NSString*)transactionId
- (id<MXQRCodeTransaction>)qrCodeTransactionWithTransactionId:(NSString*)transactionId
{
MXQRCodeTransaction *qrCodeTransaction;
MXLegacyQRCodeTransaction *qrCodeTransaction;

id<MXKeyVerificationTransaction> transaction = [self transactionWithTransactionId:transactionId];

if ([transaction isKindOfClass:MXQRCodeTransaction.class])
if ([transaction isKindOfClass:MXLegacyQRCodeTransaction.class])
{
qrCodeTransaction = (MXQRCodeTransaction *)transaction;
qrCodeTransaction = (MXLegacyQRCodeTransaction *)transaction;
}

return qrCodeTransaction;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ NS_ASSUME_NONNULL_BEGIN
transactionId:(nullable NSString*)transactionId
dmRoomId:(nullable NSString*)dmRoomId
dmEventId:(nullable NSString*)dmEventId
success:(void(^)(MXQRCodeTransaction *transaction))success
success:(void(^)(MXLegacyQRCodeTransaction *transaction))success
failure:(void(^)(NSError *error))failure;

- (void)createQRCodeTransactionFromRequest:(id<MXKeyVerificationRequest>)request
qrCodeData:(nullable MXQRCodeData*)qrCodeData
success:(void(^)(MXQRCodeTransaction *transaction))success
success:(void(^)(MXLegacyQRCodeTransaction *transaction))success
failure:(void(^)(NSError *error))failure;

- (BOOL)isOtherQRCodeDataKeysValid:(MXQRCodeData*)otherQRCodeData otherUserId:(NSString*)otherUserId otherDevice:(MXDeviceInfo*)otherDevice;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ - (void)acceptWithMethods:(NSArray<NSString *> *)methods success:(dispatch_block

if (qrCodeData)
{
[self.manager createQRCodeTransactionFromRequest:self qrCodeData:qrCodeData success:^(MXQRCodeTransaction * _Nonnull transaction) {
[self.manager createQRCodeTransactionFromRequest:self qrCodeData:qrCodeData success:^(MXLegacyQRCodeTransaction * _Nonnull transaction) {
[self updateState:MXKeyVerificationRequestStateReady notifiy:YES];
dispatch_async(dispatch_get_main_queue(), ^{
success();
Expand Down Expand Up @@ -194,7 +194,7 @@ - (void)handleReady:(MXKeyVerificationReady*)readyContent

if ([readyContent.methods containsObject:MXKeyVerificationMethodReciprocate])
{
[self.manager createQRCodeTransactionFromRequest:self qrCodeData:qrCodeData success:^(MXQRCodeTransaction * _Nonnull transaction) {
[self.manager createQRCodeTransactionFromRequest:self qrCodeData:qrCodeData success:^(MXLegacyQRCodeTransaction * _Nonnull transaction) {

[self updateState:MXKeyVerificationRequestStateReady notifiy:YES];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,9 +340,9 @@ - (MXKeyVerificationState)stateFromRequest:(nullable id<MXKeyVerificationRequest

if (transaction)
{
if ([transaction isKindOfClass:MXQRCodeTransaction.class])
if ([transaction isKindOfClass:MXLegacyQRCodeTransaction.class])
{
MXQRCodeTransaction *qrCodeTransaction = (MXQRCodeTransaction*)transaction;
MXLegacyQRCodeTransaction *qrCodeTransaction = (MXLegacyQRCodeTransaction*)transaction;

switch (qrCodeTransaction.state) {
case MXQRCodeTransactionStateUnknown:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,10 @@ typedef NS_ENUM(NSInteger, MXQRCodeTransactionState) {
/**
An handler on an interactive device verification based on QR Code.
*/
@interface MXQRCodeTransaction : MXLegacyKeyVerificationTransaction

@property (nonatomic) MXQRCodeTransactionState state;
@protocol MXQRCodeTransaction <MXKeyVerificationTransaction>

@property (nonatomic, readonly) MXQRCodeTransactionState state;

@property (nonatomic, strong, nullable, readonly) MXQRCodeData *qrCodeData;

Expand All @@ -63,4 +64,8 @@ typedef NS_ENUM(NSInteger, MXQRCodeTransactionState) {

@end

@interface MXLegacyQRCodeTransaction : MXLegacyKeyVerificationTransaction <MXQRCodeTransaction>

@end

NS_ASSUME_NONNULL_END
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@

NSString * const MXKeyVerificationMethodReciprocate = @"m.reciprocate.v1";

@interface MXQRCodeTransaction()
@interface MXLegacyQRCodeTransaction()

@property (nonatomic, strong) MXQRCodeDataCoder *qrCodeDataCoder;
@property (nonatomic, strong) MXQRCodeData *scannedOtherQRCodeData;

@end


@implementation MXQRCodeTransaction
@implementation MXLegacyQRCodeTransaction

#pragma mark - Setup

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ NS_ASSUME_NONNULL_BEGIN
/**
The `MXQRCodeTransaction` extension exposes internal operations.
*/
@interface MXQRCodeTransaction ()
@interface MXLegacyQRCodeTransaction ()

@property (nonatomic) MXQRCodeTransactionState state;
@property (nonatomic, nullable) MXQRCodeKeyVerificationStart *startContent;
@property (nonatomic, strong, nullable) MXQRCodeData *qrCodeData; // Current user QR code, used to show, if support method MXKeyVerificationMethodQRCodeShow

Expand Down
14 changes: 7 additions & 7 deletions MatrixSDKTests/MXCrossSigningVerificationTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
@interface MXLegacyKeyVerificationManager (Testing)

- (id<MXKeyVerificationTransaction>)transactionWithTransactionId:(NSString*)transactionId;
- (MXQRCodeTransaction*)qrCodeTransactionWithTransactionId:(NSString*)transactionId;
- (MXLegacyQRCodeTransaction*)qrCodeTransactionWithTransactionId:(NSString*)transactionId;

@end

Expand Down Expand Up @@ -91,14 +91,14 @@ - (void)observeSASIncomingTransactionInSession:(MXSession*)session block:(void (
[observers addObject:observer];
}

- (void)observeNewQRCodeTransactionInSession:(MXSession*)session block:(void (^)(MXQRCodeTransaction * _Nullable transaction))block
- (void)observeNewQRCodeTransactionInSession:(MXSession*)session block:(void (^)(MXLegacyQRCodeTransaction * _Nullable transaction))block
{
id observer = [[NSNotificationCenter defaultCenter] addObserverForName:MXKeyVerificationManagerNewTransactionNotification object:session.crypto.keyVerificationManager queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {

id<MXKeyVerificationTransaction>transaction = notif.userInfo[MXKeyVerificationManagerNotificationTransactionKey];
if ([transaction isKindOfClass:MXQRCodeTransaction.class])
if ([transaction isKindOfClass:MXLegacyQRCodeTransaction.class])
{
block((MXQRCodeTransaction*)transaction);
block((MXLegacyQRCodeTransaction*)transaction);
}
else
{
Expand Down Expand Up @@ -646,7 +646,7 @@ - (void)testVerifyingAnotherUserQRCodeVerificationFullFlow
[expectation fulfill];
}];

__block MXQRCodeTransaction *qrCodeTransactionFromAlicePOV;
__block MXLegacyQRCodeTransaction *qrCodeTransactionFromAlicePOV;

// Alice gets the request in the timeline
[aliceSession listenToEventsOfTypes:@[kMXEventTypeStringRoomMessage]
Expand Down Expand Up @@ -687,7 +687,7 @@ - (void)testVerifyingAnotherUserQRCodeVerificationFullFlow
}];


[self observeNewQRCodeTransactionInSession:bobSession block:^(MXQRCodeTransaction * _Nullable qrCodeTransactionFromBobPOV) {
[self observeNewQRCodeTransactionInSession:bobSession block:^(MXLegacyQRCodeTransaction * _Nullable qrCodeTransactionFromBobPOV) {

// Final checks
void (^checkBothDeviceVerified)(void) = ^ void ()
Expand Down Expand Up @@ -829,7 +829,7 @@ - (void)testVerifyingAnotherUserQRCodeVerificationFullFlow
{
case MXKeyVerificationRequestStateReady:
{
MXQRCodeTransaction *qrCodeTransactionFromBobPOV = [bobSession.crypto.keyVerificationManager qrCodeTransactionWithTransactionId:request.requestId];
MXLegacyQRCodeTransaction *qrCodeTransactionFromBobPOV = [bobSession.crypto.keyVerificationManager qrCodeTransactionWithTransactionId:request.requestId];
XCTAssertNotNil(qrCodeTransactionFromBobPOV);
XCTAssertNil(qrCodeTransactionFromBobPOV.qrCodeData); // Bob cannot show QR code

Expand Down
1 change: 1 addition & 0 deletions changelog.d/pr-1602.change
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Crypto: Refactor QR transactions

0 comments on commit 66df019

Please sign in to comment.