Clean
This commit is contained in:
parent
8fa7f66774
commit
62dbbf7d57
|
@ -108,8 +108,8 @@ public final class FriendRequestProtocol : NSObject {
|
|||
print("[Loki] Invalid Session ID: \(hexEncodedPublicKey).")
|
||||
return
|
||||
}
|
||||
let ourHexEncodedPublicKey = getUserHexEncodedPublicKey()
|
||||
let ourDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: ourHexEncodedPublicKey, in: transaction)
|
||||
let userHexEncodedPublicKey = getUserHexEncodedPublicKey()
|
||||
let userLinkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: userHexEncodedPublicKey, in: transaction)
|
||||
// Accept all outstanding friend requests associated with this user and try to establish sessions with the
|
||||
// subset of their devices that haven't sent a friend request.
|
||||
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
|
||||
|
@ -119,13 +119,13 @@ public final class FriendRequestProtocol : NSObject {
|
|||
storage.setFriendRequestStatus(.friends, for: device, transaction: transaction)
|
||||
sendFriendRequestAcceptanceMessage(to: device, using: transaction)
|
||||
// Send a contact sync message if needed
|
||||
guard !ourDevices.contains(hexEncodedPublicKey) else { return }
|
||||
guard !userLinkedDevices.contains(hexEncodedPublicKey) else { return }
|
||||
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
|
||||
let syncManager = SSKEnvironment.shared.syncManager
|
||||
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
|
||||
} else if friendRequestStatus == .requestSent {
|
||||
// We sent a friend request to this device before, how can we be sure that it hasn't expired?
|
||||
} else if friendRequestStatus == .none || friendRequestStatus == .requestExpired && !ourDevices.contains(device) {
|
||||
} else if friendRequestStatus == .none || friendRequestStatus == .requestExpired {
|
||||
// TODO: We should track these so that we can expire them and resend if needed
|
||||
MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction)
|
||||
.done(on: OWSDispatch.sendingQueue()) { autoGeneratedFRMessageSend in
|
||||
|
@ -169,10 +169,10 @@ public final class FriendRequestProtocol : NSObject {
|
|||
|
||||
@objc(shouldUpdateFriendRequestStatusFromMessage:)
|
||||
public static func shouldUpdateFriendRequestStatus(from message: TSOutgoingMessage) -> Bool {
|
||||
let isFriendRequestMessage = message is FriendRequestMessage
|
||||
let isSessionRequestMessage = message is SessionRequestMessage
|
||||
let isDeviceLinkRequestMessage = message is DeviceLinkMessage && (message as! DeviceLinkMessage).kind == .request
|
||||
return (isFriendRequestMessage && !isSessionRequestMessage) || isDeviceLinkRequestMessage;
|
||||
// The order of these checks matters
|
||||
if (message as? DeviceLinkMessage)?.kind == .request { return true }
|
||||
if message is SessionRequestMessage { return false }
|
||||
return message is FriendRequestMessage
|
||||
}
|
||||
|
||||
@objc(setFriendRequestStatusToSendingIfNeededForHexEncodedPublicKey:transaction:)
|
||||
|
|
|
@ -428,7 +428,7 @@ class FriendRequestProtocolTests : XCTestCase {
|
|||
self.storage.setFriendRequestStatus(status, for: bob, transaction: transaction)
|
||||
}
|
||||
|
||||
let expectation = self.expectation(description: "sent message")
|
||||
let expectation = self.expectation(description: "Send message")
|
||||
|
||||
let messageSender = self.messageSender
|
||||
messageSender.sendMessageWasCalledBlock = { sentMessage in
|
||||
|
@ -451,15 +451,16 @@ class FriendRequestProtocolTests : XCTestCase {
|
|||
let statuses: [LKFriendRequestStatus] = [ .none, .requestExpired ]
|
||||
for status in statuses {
|
||||
let ourDevice = LokiTestUtilities.getCurrentUserHexEncodedPublicKey()
|
||||
|
||||
storage.dbReadWriteConnection.readWrite { transaction in
|
||||
self.storage.setFriendRequestStatus(status, for: ourDevice, transaction: transaction)
|
||||
}
|
||||
|
||||
let expectation = self.expectation(description: "sent message")
|
||||
let expectation = self.expectation(description: "Send message")
|
||||
|
||||
let messageSender = self.messageSender
|
||||
messageSender.sendMessageWasCalledBlock = { sentMessage in
|
||||
XCTFail("Expected message to not be sent")
|
||||
XCTFail("Expected message not to be sent.")
|
||||
}
|
||||
|
||||
storage.dbReadWriteConnection.readWrite { transaction in
|
||||
|
@ -625,7 +626,7 @@ class FriendRequestProtocolTests : XCTestCase {
|
|||
let thread = LokiTestUtilities.createContactThread(for: LokiTestUtilities.generateHexEncodedPublicKey())
|
||||
|
||||
let message = TSOutgoingMessage(in: thread, messageBody: nil, attachmentId: nil)
|
||||
let friendRequest = FriendRequestMessage(outgoingMessageWithTimestamp: 1, in: thread, messageBody: "")
|
||||
let friendRequest = FriendRequestMessage(timestamp: 1, thread: thread, body: "")
|
||||
let sessionRequest = SessionRequestMessage(thread: thread)
|
||||
guard let deviceLinkRequest = DeviceLinkMessage(in: thread, masterHexEncodedPublicKey: "", slaveHexEncodedPublicKey: "", masterSignature: nil, slaveSignature: Data(capacity: 0)),
|
||||
let deviceLinkAuthorisation = DeviceLinkMessage(in: thread, masterHexEncodedPublicKey: "", slaveHexEncodedPublicKey: "", masterSignature: Data(capacity: 0), slaveSignature: Data(capacity: 0)) else { return XCTFail() }
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
NS_SWIFT_NAME(FriendRequestMessage)
|
||||
@interface LKFriendRequestMessage : TSOutgoingMessage
|
||||
|
||||
- (_Nonnull instancetype)initOutgoingMessageWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
messageBody:(nullable NSString *)body;
|
||||
- (_Nonnull instancetype)initWithTimestamp:(uint64_t)timestamp thread:(nullable TSThread *)thread body:(nullable NSString *)body;
|
||||
|
||||
@end
|
||||
|
|
|
@ -9,19 +9,10 @@
|
|||
|
||||
@implementation LKFriendRequestMessage
|
||||
|
||||
- (instancetype)initOutgoingMessageWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
messageBody:(nullable NSString *)body {
|
||||
return [self initOutgoingMessageWithTimestamp:timestamp
|
||||
inThread:thread
|
||||
messageBody:body
|
||||
attachmentIds:@[]
|
||||
expiresInSeconds:0 expireStartedAt:0
|
||||
isVoiceMessage:false
|
||||
groupMetaMessage:TSGroupMetaMessageUnspecified
|
||||
quotedMessage:nil
|
||||
contactShare:nil
|
||||
linkPreview:nil];
|
||||
#pragma mark Initialization
|
||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp thread:(nullable TSThread *)thread body:(nullable NSString *)body {
|
||||
return [self initOutgoingMessageWithTimestamp:timestamp inThread:thread messageBody:body attachmentIds:@[] expiresInSeconds:0 expireStartedAt:0
|
||||
isVoiceMessage:false groupMetaMessage:TSGroupMetaMessageUnspecified quotedMessage:nil contactShare:nil linkPreview:nil];
|
||||
}
|
||||
|
||||
#pragma mark Building
|
||||
|
|
|
@ -151,7 +151,7 @@ public final class MultiDeviceProtocol : NSObject {
|
|||
@objc(getAutoGeneratedMultiDeviceFRMessageForHexEncodedPublicKey:in:)
|
||||
public static func getAutoGeneratedMultiDeviceFRMessage(for hexEncodedPublicKey: String, in transaction: YapDatabaseReadWriteTransaction) -> FriendRequestMessage {
|
||||
let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction)
|
||||
let result = FriendRequestMessage(outgoingMessageWithTimestamp: NSDate.ows_millisecondTimeStamp(), in: thread, messageBody: "Please accept to enable messages to be synced across devices")
|
||||
let result = FriendRequestMessage(timestamp: NSDate.ows_millisecondTimeStamp(), thread: thread, body: "Please accept to enable messages to be synced across devices")
|
||||
result.skipSave = true // TODO: Why is this necessary again?
|
||||
return result
|
||||
}
|
||||
|
|
|
@ -163,7 +163,6 @@ public final class SyncMessagesProtocol : NSObject {
|
|||
}
|
||||
|
||||
public static func handleContactSyncMessageData(_ data: Data, using transaction: YapDatabaseReadWriteTransaction) {
|
||||
|
||||
let parser = ContactParser(data: data)
|
||||
let hexEncodedPublicKeys = parser.parseHexEncodedPublicKeys()
|
||||
// Try to establish sessions
|
||||
|
|
|
@ -1178,13 +1178,13 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
uint64_t ttl = ((NSNumber *)signalMessageInfo[@"ttl"]).unsignedIntegerValue;
|
||||
BOOL isPing = ((NSNumber *)signalMessageInfo[@"isPing"]).boolValue;
|
||||
LKSignalMessage *signalMessage = [[LKSignalMessage alloc] initWithType:type timestamp:timestamp senderID:senderID senderDeviceID:senderDeviceID content:content recipientID:recipientID ttl:ttl isPing:isPing];
|
||||
BOOL shouldUpdateFriendRequest = [LKFriendRequestProtocol shouldUpdateFriendRequestStatusFromMessage:message];
|
||||
BOOL shouldUpdateFriendRequestStatus = [LKFriendRequestProtocol shouldUpdateFriendRequestStatusFromMessage:message];
|
||||
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
if (!message.skipSave) {
|
||||
// Update the PoW calculation status
|
||||
[message saveIsCalculatingProofOfWork:YES withTransaction:transaction];
|
||||
}
|
||||
if (shouldUpdateFriendRequest) {
|
||||
if (shouldUpdateFriendRequestStatus) {
|
||||
[LKFriendRequestProtocol setFriendRequestStatusToSendingIfNeededForHexEncodedPublicKey:recipientID transaction:transaction];
|
||||
}
|
||||
}];
|
||||
|
@ -1196,7 +1196,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
// Update the PoW calculation status
|
||||
[message saveIsCalculatingProofOfWork:NO withTransaction:transaction];
|
||||
}
|
||||
if (shouldUpdateFriendRequest) {
|
||||
if (shouldUpdateFriendRequestStatus) {
|
||||
[LKFriendRequestProtocol setFriendRequestStatusToFailedIfNeededForHexEncodedPublicKey:recipientID transaction:transaction];
|
||||
}
|
||||
}];
|
||||
|
@ -1216,7 +1216,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
if (isSuccess) { return; } // Succeed as soon as the first promise succeeds
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:NSNotification.messageSent object:[[NSNumber alloc] initWithUnsignedLongLong:signalMessage.timestamp]];
|
||||
isSuccess = YES;
|
||||
if (shouldUpdateFriendRequest) {
|
||||
if (shouldUpdateFriendRequestStatus) {
|
||||
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
if (!message.skipSave) {
|
||||
// Update the message
|
||||
|
|
Loading…
Reference in New Issue