mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Don't send sync message for our own device.
Don't send an auto generated friend request to our own device.
This commit is contained in:
parent
cfb3040b72
commit
1786569584
4 changed files with 39 additions and 8 deletions
2
Pods
2
Pods
|
@ -1 +1 @@
|
|||
Subproject commit 04c71c59e4c3b060f8ff96b072efca3a74c4980f
|
||||
Subproject commit a10cec6cd837552a4b0a88462636cf06494644c4
|
|
@ -108,6 +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)
|
||||
// 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)
|
||||
|
@ -116,9 +118,7 @@ public final class FriendRequestProtocol : NSObject {
|
|||
if friendRequestStatus == .requestReceived {
|
||||
storage.setFriendRequestStatus(.friends, for: device, transaction: transaction)
|
||||
sendFriendRequestAcceptanceMessage(to: device, using: 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 {
|
||||
} else if (friendRequestStatus == .none || friendRequestStatus == .requestExpired) && !ourDevices.contains(device) {
|
||||
// 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
|
||||
|
@ -127,10 +127,12 @@ public final class FriendRequestProtocol : NSObject {
|
|||
}
|
||||
}
|
||||
}
|
||||
// Send a contact sync message
|
||||
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
|
||||
let syncManager = SSKEnvironment.shared.syncManager
|
||||
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
|
||||
// Send a contact sync message if we became friends with another user
|
||||
if (!ourDevices.contains(hexEncodedPublicKey)) {
|
||||
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
|
||||
let syncManager = SSKEnvironment.shared.syncManager
|
||||
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
|
||||
}
|
||||
}
|
||||
|
||||
@objc(sendFriendRequestAcceptanceMessageToHexEncodedPublicKey:using:)
|
||||
|
|
|
@ -447,6 +447,31 @@ class FriendRequestProtocolTests : XCTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
func test_acceptFriendRequestShouldNotSendAFriendRequestMessageToOurOwnDevice() {
|
||||
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 messageSender = self.messageSender
|
||||
messageSender.sendMessageWasCalledBlock = { sentMessage in
|
||||
XCTFail("Expected message to not be sent")
|
||||
}
|
||||
|
||||
storage.dbReadWriteConnection.readWrite { transaction in
|
||||
FriendRequestProtocol.acceptFriendRequest(from: ourDevice, using: transaction)
|
||||
}
|
||||
|
||||
expectation.fulfillAfter(2)
|
||||
wait(for: [ expectation ], timeout: 2)
|
||||
messageSender.sendMessageWasCalledBlock = nil
|
||||
}
|
||||
}
|
||||
|
||||
func test_acceptFriendRequestShouldNotDoAnythingIfRequestHasBeenSent() {
|
||||
// Case: We sent Bob a friend request.
|
||||
// We can't accept because we don't have keys to communicate with Bob.
|
||||
|
|
|
@ -23,6 +23,10 @@ enum LokiTestUtilities {
|
|||
return Curve25519.generateKeyPair()
|
||||
}
|
||||
|
||||
public static func getCurrentUserHexEncodedPublicKey() -> String {
|
||||
return OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey
|
||||
}
|
||||
|
||||
public static func generateHexEncodedPublicKey() -> String {
|
||||
return generateKeyPair().hexEncodedPublicKey
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue