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
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).")
|
print("[Loki] Invalid Session ID: \(hexEncodedPublicKey).")
|
||||||
return
|
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
|
// 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.
|
// subset of their devices that haven't sent a friend request.
|
||||||
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
|
let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction)
|
||||||
|
@ -116,9 +118,7 @@ public final class FriendRequestProtocol : NSObject {
|
||||||
if friendRequestStatus == .requestReceived {
|
if friendRequestStatus == .requestReceived {
|
||||||
storage.setFriendRequestStatus(.friends, for: device, transaction: transaction)
|
storage.setFriendRequestStatus(.friends, for: device, transaction: transaction)
|
||||||
sendFriendRequestAcceptanceMessage(to: device, using: transaction)
|
sendFriendRequestAcceptanceMessage(to: device, using: transaction)
|
||||||
} else if friendRequestStatus == .requestSent {
|
} else if (friendRequestStatus == .none || friendRequestStatus == .requestExpired) && !ourDevices.contains(device) {
|
||||||
// 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 {
|
|
||||||
// TODO: We should track these so that we can expire them and resend if needed
|
// TODO: We should track these so that we can expire them and resend if needed
|
||||||
MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction)
|
MultiDeviceProtocol.getAutoGeneratedMultiDeviceFRMessageSend(for: device, in: transaction)
|
||||||
.done(on: OWSDispatch.sendingQueue()) { autoGeneratedFRMessageSend in
|
.done(on: OWSDispatch.sendingQueue()) { autoGeneratedFRMessageSend in
|
||||||
|
@ -127,10 +127,12 @@ public final class FriendRequestProtocol : NSObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Send a contact sync message
|
// Send a contact sync message if we became friends with another user
|
||||||
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
|
if (!ourDevices.contains(hexEncodedPublicKey)) {
|
||||||
let syncManager = SSKEnvironment.shared.syncManager
|
let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: hexEncodedPublicKey, in: transaction) ?? hexEncodedPublicKey
|
||||||
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
|
let syncManager = SSKEnvironment.shared.syncManager
|
||||||
|
syncManager.syncContact(masterHexEncodedPublicKey, transaction: transaction)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc(sendFriendRequestAcceptanceMessageToHexEncodedPublicKey:using:)
|
@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() {
|
func test_acceptFriendRequestShouldNotDoAnythingIfRequestHasBeenSent() {
|
||||||
// Case: We sent Bob a friend request.
|
// Case: We sent Bob a friend request.
|
||||||
// We can't accept because we don't have keys to communicate with Bob.
|
// We can't accept because we don't have keys to communicate with Bob.
|
||||||
|
|
|
@ -23,6 +23,10 @@ enum LokiTestUtilities {
|
||||||
return Curve25519.generateKeyPair()
|
return Curve25519.generateKeyPair()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static func getCurrentUserHexEncodedPublicKey() -> String {
|
||||||
|
return OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey
|
||||||
|
}
|
||||||
|
|
||||||
public static func generateHexEncodedPublicKey() -> String {
|
public static func generateHexEncodedPublicKey() -> String {
|
||||||
return generateKeyPair().hexEncodedPublicKey
|
return generateKeyPair().hexEncodedPublicKey
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue