Skip to content

Commit

Permalink
Merge pull request #1528 from matrix-org/andy/1_verification_protocols
Browse files Browse the repository at this point in the history
Convert verification request and transaction to protocols
  • Loading branch information
Anderas committed Jul 18, 2022
2 parents b83b814 + 4079f24 commit 5d74d03
Show file tree
Hide file tree
Showing 23 changed files with 224 additions and 180 deletions.
14 changes: 7 additions & 7 deletions MatrixSDK/Crypto/Verification/MXKeyVerificationManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ FOUNDATION_EXPORT NSString *const MXKeyVerificationManagerNotificationTransactio
- (void)requestVerificationByToDeviceWithUserId:(NSString*)userId
deviceIds:(nullable NSArray<NSString*>*)deviceIds
methods:(NSArray<NSString*>*)methods
success:(void(^)(MXKeyVerificationRequest *request))success
success:(void(^)(id<MXKeyVerificationRequest> request))success
failure:(void(^)(NSError *error))failure;

/**
Expand All @@ -120,13 +120,13 @@ FOUNDATION_EXPORT NSString *const MXKeyVerificationManagerNotificationTransactio
roomId:(nullable NSString*)roomId
fallbackText:(NSString*)fallbackText
methods:(NSArray<NSString*>*)methods
success:(void(^)(MXKeyVerificationRequest *request))success
success:(void(^)(id<MXKeyVerificationRequest> request))success
failure:(void(^)(NSError *error))failure;

/**
All pending verification requests.
*/
@property (nonatomic, readonly) NSArray<MXKeyVerificationRequest*> *pendingRequests;
@property (nonatomic, readonly) NSArray<id<MXKeyVerificationRequest>> *pendingRequests;


#pragma mark - Transactions
Expand All @@ -143,7 +143,7 @@ FOUNDATION_EXPORT NSString *const MXKeyVerificationManagerNotificationTransactio
- (void)beginKeyVerificationWithUserId:(NSString*)userId
andDeviceId:(NSString*)deviceId
method:(NSString*)method
success:(void(^)(MXKeyVerificationTransaction *transaction))success
success:(void(^)(id<MXKeyVerificationTransaction> transaction))success
failure:(void(^)(NSError *error))failure __attribute__((deprecated("Start key verification with a request (requestVerificationByToDeviceWithUserId) instead")));

/**
Expand All @@ -153,17 +153,17 @@ FOUNDATION_EXPORT NSString *const MXKeyVerificationManagerNotificationTransactio
@param success a block called when the operation succeeds.
@param failure a block called when the operation fails.
*/
- (void)beginKeyVerificationFromRequest:(MXKeyVerificationRequest*)request
- (void)beginKeyVerificationFromRequest:(id<MXKeyVerificationRequest>)request
method:(NSString*)method
success:(void(^)(MXKeyVerificationTransaction *transaction))success
success:(void(^)(id<MXKeyVerificationTransaction> transaction))success
failure:(void(^)(NSError *error))failure;

/**
All transactions in progress.
@param complete a block called with all transactions.
*/
- (void)transactions:(void(^)(NSArray<MXKeyVerificationTransaction*> *transactions))complete;
- (void)transactions:(void(^)(NSArray<id<MXKeyVerificationTransaction>> *transactions))complete;


#pragma mark - Verification status
Expand Down
116 changes: 58 additions & 58 deletions MatrixSDK/Crypto/Verification/MXKeyVerificationManager.m

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions MatrixSDK/Crypto/Verification/MXKeyVerificationManager_Private.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ NS_ASSUME_NONNULL_BEGIN
@return a MXHTTPOperation instance.
*/
- (MXHTTPOperation*)sendToOtherInRequest:(MXKeyVerificationRequest*)request
- (MXHTTPOperation*)sendToOtherInRequest:(id<MXKeyVerificationRequest>)request
eventType:(NSString*)eventType
content:(NSDictionary*)content
success:(dispatch_block_t)success
Expand All @@ -68,11 +68,11 @@ NS_ASSUME_NONNULL_BEGIN
@param success a block called when the operation succeeds.
@param failure a block called when the operation fails.
*/
- (void)cancelVerificationRequest:(MXKeyVerificationRequest*)request
- (void)cancelVerificationRequest:(id<MXKeyVerificationRequest>)request
success:(void(^)(void))success
failure:(void(^)(NSError *error))failure;

- (BOOL)isRequestStillValid:(MXKeyVerificationRequest*)request;
- (BOOL)isRequestStillValid:(id<MXKeyVerificationRequest>)request;

- (void)removePendingRequestWithRequestId:(NSString*)requestId;

Expand All @@ -91,7 +91,7 @@ NS_ASSUME_NONNULL_BEGIN
success:(void(^)(MXQRCodeTransaction *transaction))success
failure:(void(^)(NSError *error))failure;

- (void)createQRCodeTransactionFromRequest:(MXKeyVerificationRequest*)request
- (void)createQRCodeTransactionFromRequest:(id<MXKeyVerificationRequest>)request
qrCodeData:(nullable MXQRCodeData*)qrCodeData
success:(void(^)(MXQRCodeTransaction *transaction))success
failure:(void(^)(NSError *error))failure;
Expand All @@ -112,7 +112,7 @@ NS_ASSUME_NONNULL_BEGIN
@return a MXHTTPOperation instance.
*/
- (MXHTTPOperation*)sendToOtherInTransaction:(MXKeyVerificationTransaction*)transaction
- (MXHTTPOperation*)sendToOtherInTransaction:(id<MXKeyVerificationTransaction>)transaction
eventType:(NSString*)eventType
content:(NSDictionary*)content
success:(void (^)(void))success
Expand All @@ -126,7 +126,7 @@ NS_ASSUME_NONNULL_BEGIN
@param success A block object called when the operation succeeds.
@param failure A block object called when the operation fails.
*/
- (void)cancelTransaction:(MXKeyVerificationTransaction*)transaction
- (void)cancelTransaction:(id<MXKeyVerificationTransaction>)transaction
code:(MXTransactionCancelCode*)code
success:(void (^)(void))success
failure:(void (^)(NSError *error))failure;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
An handler on an interactive request for verification by Direct Message.
*/
@interface MXKeyVerificationByDMRequest : MXKeyVerificationRequest
@interface MXKeyVerificationByDMRequest : MXDefaultKeyVerificationRequest

@property (nonatomic, readonly) NSString *roomId;
@property (nonatomic, readonly) NSString *eventId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
An handler on an interactive request for verification by to_device events.
*/
@interface MXKeyVerificationByToDeviceRequest : MXKeyVerificationRequest
@interface MXKeyVerificationByToDeviceRequest : MXDefaultKeyVerificationRequest

@property (nonatomic, readonly) MXKeyVerificationRequestByToDeviceJSONModel *request;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
An handler on an interactive verification request.
*/
@interface MXKeyVerificationRequest : NSObject
@protocol MXKeyVerificationRequest <NSObject>

/**
Accept an incoming key verification request.
Expand Down Expand Up @@ -107,4 +107,11 @@ Accept an incoming key verification request.

@end

/**
Default implementation of verification request used by the SDK
*/
@interface MXDefaultKeyVerificationRequest : NSObject <MXKeyVerificationRequest>

@end

NS_ASSUME_NONNULL_END
14 changes: 12 additions & 2 deletions MatrixSDK/Crypto/Verification/Requests/MXKeyVerificationRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,23 @@
#pragma mark - Constants
NSString * const MXKeyVerificationRequestDidChangeNotification = @"MXKeyVerificationRequestDidChangeNotification";

@interface MXKeyVerificationRequest()
@interface MXDefaultKeyVerificationRequest()

@property (nonatomic, readwrite) MXKeyVerificationRequestState state;

@end

@implementation MXKeyVerificationRequest
@implementation MXDefaultKeyVerificationRequest

@synthesize event = _event;
@synthesize fromDevice = _fromDevice;
@synthesize methods = _methods;
@synthesize otherDevice = _otherDevice;
@synthesize otherUser = _otherUser;
@synthesize reasonCancelCode = _reasonCancelCode;
@synthesize requestId = _requestId;
@synthesize timestamp = _timestamp;
@synthesize transport = _transport;

#pragma mark - SDK-Private methods -

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
/**
The `MXKeyVerificationRequest` extension exposes internal operations.
*/
@interface MXKeyVerificationRequest ()
@interface MXDefaultKeyVerificationRequest ()

@property (nonatomic, readonly, weak) MXKeyVerificationManager *manager;

Expand Down
4 changes: 2 additions & 2 deletions MatrixSDK/Crypto/Verification/Status/MXKeyVerification.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ typedef NS_ENUM(NSInteger, MXKeyVerificationState)
@property (nonatomic) MXKeyVerificationState state;

// Those values may be not provided if there are not in progress
@property (nonatomic, nullable) MXKeyVerificationRequest *request;
@property (nonatomic, nullable) MXKeyVerificationTransaction *transaction;
@property (nonatomic, nullable) id<MXKeyVerificationRequest> request;
@property (nonatomic, nullable) id<MXKeyVerificationTransaction> transaction;

@property (nonatomic, readonly) BOOL isRequestAccepted;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
success:(void(^)(MXKeyVerification *keyVerification))success
failure:(void(^)(NSError *error))failure;

- (nullable MXKeyVerification*)keyVerificationFromRequest:(nullable MXKeyVerificationRequest*)request andTransaction:(nullable MXKeyVerificationTransaction*)transaction;
- (nullable MXKeyVerification*)keyVerificationFromRequest:(nullable id<MXKeyVerificationRequest>)request andTransaction:(nullable id<MXKeyVerificationTransaction>)transaction;

@end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ - (nullable MXHTTPOperation *)keyVerificationWithKeyVerificationId:(NSString*)ke
return operation;
}

- (nullable MXKeyVerification*)keyVerificationFromRequest:(nullable MXKeyVerificationRequest*)request andTransaction:(nullable MXKeyVerificationTransaction*)transaction
- (nullable MXKeyVerification*)keyVerificationFromRequest:(nullable id<MXKeyVerificationRequest>)request andTransaction:(nullable id<MXKeyVerificationTransaction>)transaction
{
if (!request && !transaction)
{
Expand Down Expand Up @@ -140,7 +140,7 @@ - (nullable MXKeyVerification *)makeKeyVerificationFromOriginalDMEvent:(nullable
{
MXKeyVerification *keyVerification;

MXKeyVerificationRequest *request = [self verificationRequestInDMEvent:originalEvent events:events];
id<MXKeyVerificationRequest> request = [self verificationRequestInDMEvent:originalEvent events:events];

if (request)
{
Expand Down Expand Up @@ -334,7 +334,7 @@ - (MXKeyVerificationState)stateFromRequestState:(MXKeyVerificationRequestState)r
return state;
}

- (MXKeyVerificationState)stateFromRequest:(nullable MXKeyVerificationRequest*)request andTransaction:(nullable MXKeyVerificationTransaction*)transaction
- (MXKeyVerificationState)stateFromRequest:(nullable id<MXKeyVerificationRequest>)request andTransaction:(nullable id<MXKeyVerificationTransaction>)transaction
{
MXKeyVerificationState keyVerificationState = MXKeyVerificationStateRequestPending;

Expand Down Expand Up @@ -377,9 +377,9 @@ - (MXKeyVerificationState)stateFromRequest:(nullable MXKeyVerificationRequest*)r
break;
}
}
else if ([transaction isKindOfClass:MXSASTransaction.class])
else if ([transaction conformsToProtocol:@protocol(MXSASTransaction)])
{
MXSASTransaction *sasTransaction = (MXSASTransaction*)transaction;
id<MXSASTransaction> sasTransaction = (id<MXSASTransaction>)transaction;

switch (sasTransaction.state) {
case MXSASTransactionStateVerified:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,10 @@ typedef NS_ENUM(NSInteger, MXKeyVerificationTransport) {
MXKeyVerificationTransportDirectMessage,
};


/**
An handler on an interactive device verification.
*/
@interface MXKeyVerificationTransaction: NSObject
@protocol MXKeyVerificationTransaction <NSObject>

/**
The transaction id.
Expand Down Expand Up @@ -113,4 +112,11 @@ typedef NS_ENUM(NSInteger, MXKeyVerificationTransport) {

@end

/**
Default implementation of verification transaction used by the SDK
*/
@interface MXDefaultKeyVerificationTransaction: NSObject <MXKeyVerificationTransaction>

@end

NS_ASSUME_NONNULL_END
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,16 @@
NSString * const MXKeyVerificationTransactionDidChangeNotification = @"MXKeyVerificationTransactionDidChangeNotification";


@implementation MXKeyVerificationTransaction
@implementation MXDefaultKeyVerificationTransaction

@synthesize creationDate = _creationDate;
@synthesize dmEventId = _dmEventId;
@synthesize dmRoomId = _dmRoomId;
@synthesize error = _error;
@synthesize isIncoming = _isIncoming;
@synthesize otherDevice = _otherDevice;
@synthesize reasonCancelCode = _reasonCancelCode;
@synthesize transport = _transport;

- (instancetype)initWithOtherDevice:(MXDeviceInfo*)otherDevice andManager:(MXKeyVerificationManager*)manager;
{
Expand All @@ -36,7 +45,7 @@ - (instancetype)initWithOtherDevice:(MXDeviceInfo*)otherDevice andManager:(MXKey
{
_manager = manager;
_otherDevice = otherDevice;
_transactionId = [MXKeyVerificationTransaction createUniqueIdWithOtherUser:self.otherUserId otherDevice:self.otherDeviceId myUser:manager.crypto.mxSession.matrixRestClient.credentials];
_transactionId = [MXDefaultKeyVerificationTransaction createUniqueIdWithOtherUser:self.otherUserId otherDevice:self.otherDeviceId myUser:manager.crypto.mxSession.matrixRestClient.credentials];
_creationDate = [NSDate date];
}
return self;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
The `MXKeyVerificationTransaction` extension exposes internal operations.
*/
@interface MXKeyVerificationTransaction ()
@interface MXDefaultKeyVerificationTransaction ()

@property (nonatomic, readonly, weak) MXKeyVerificationManager *manager;
@property (nonatomic, readwrite) NSString *transactionId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ typedef NS_ENUM(NSInteger, MXQRCodeTransactionState) {
/**
An handler on an interactive device verification based on QR Code.
*/
@interface MXQRCodeTransaction : MXKeyVerificationTransaction
@interface MXQRCodeTransaction : MXDefaultKeyVerificationTransaction

@property (nonatomic) MXQRCodeTransactionState state;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
An handler on an incoming SAS device verification.
*/
@interface MXIncomingSASTransaction : MXSASTransaction
@interface MXIncomingSASTransaction : MXDefaultSASTransaction

/**
Accept the device verification request.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
An handler on an outgoing SAS device verification.
*/
@interface MXOutgoingSASTransaction : MXSASTransaction
@interface MXOutgoingSASTransaction : MXDefaultSASTransaction

/**
Start the device verification process.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ typedef enum : NSUInteger
/**
An handler on an interactive device verification based on Short Authentication Code.
*/
@interface MXSASTransaction : MXKeyVerificationTransaction
@protocol MXSASTransaction <MXKeyVerificationTransaction>

@property (nonatomic) MXSASTransactionState state;

Expand All @@ -75,4 +75,10 @@ typedef enum : NSUInteger

@end

/**
Default implementation of SAS transaction used by the SDK
*/
@interface MXDefaultSASTransaction : MXDefaultKeyVerificationTransaction <MXSASTransaction>
@end

NS_ASSUME_NONNULL_END
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,17 @@
static NSArray<MXEmojiRepresentation*> *kSasEmojis;


@implementation MXSASTransaction
@implementation MXDefaultSASTransaction

@synthesize state = _state;
@synthesize sasBytes = _sasBytes;

- (NSString *)sasDecimal
{
NSString *sasDecimal;
if (_sasBytes && [self.accepted.shortAuthenticationString containsObject:MXKeyVerificationSASModeDecimal])
{
sasDecimal = [[MXSASTransaction decimalRepresentationForSas:_sasBytes] componentsJoinedByString:@" "];
sasDecimal = [[MXDefaultSASTransaction decimalRepresentationForSas:_sasBytes] componentsJoinedByString:@" "];
}

return sasDecimal;
Expand All @@ -64,7 +67,7 @@ - (NSString *)sasDecimal
NSArray *sasEmoji;
if (_sasBytes && [self.accepted.shortAuthenticationString containsObject:MXKeyVerificationSASModeEmoji])
{
sasEmoji = [MXSASTransaction emojiRepresentationForSas:_sasBytes];
sasEmoji = [MXDefaultSASTransaction emojiRepresentationForSas:_sasBytes];
}

return sasEmoji;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ FOUNDATION_EXPORT NSArray<NSString*> *kKnownShortCodes;
/**
The `MXKeyVerificationTransaction` extension exposes internal operations.
*/
@interface MXSASTransaction ()
@interface MXDefaultSASTransaction ()

@property (nonatomic) OLMSAS *olmSAS;
@property (nonatomic, nullable) MXSASKeyVerificationStart *startContent;
Expand Down
Loading

0 comments on commit 5d74d03

Please sign in to comment.