Fix registration ID map construction when changing numbers

This commit is contained in:
Jon Chambers
2025-04-15 14:57:28 -04:00
committed by GitHub
parent 2f2ae7cec5
commit 3c40e72d27
3 changed files with 54 additions and 28 deletions

View File

@@ -693,7 +693,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
PushChallengeManager pushChallengeManager = new PushChallengeManager(pushNotificationManager,
pushChallengeDynamoDb);
ChangeNumberManager changeNumberManager = new ChangeNumberManager(messageSender, accountsManager);
ChangeNumberManager changeNumberManager = new ChangeNumberManager(messageSender, accountsManager, Clock.systemUTC());
HttpClient currencyClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).connectTimeout(Duration.ofSeconds(10)).build();
FixerClient fixerClient = config.getPaymentsServiceConfiguration().externalClients()

View File

@@ -5,6 +5,7 @@
package org.whispersystems.textsecuregcm.storage;
import com.google.protobuf.ByteString;
import java.time.Clock;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -29,12 +30,16 @@ public class ChangeNumberManager {
private static final Logger logger = LoggerFactory.getLogger(ChangeNumberManager.class);
private final MessageSender messageSender;
private final AccountsManager accountsManager;
private final Clock clock;
public ChangeNumberManager(
final MessageSender messageSender,
final AccountsManager accountsManager) {
final AccountsManager accountsManager,
final Clock clock) {
this.messageSender = messageSender;
this.accountsManager = accountsManager;
this.clock = clock;
}
public Account changeNumber(final Account account, final String number,
@@ -97,7 +102,7 @@ public class ChangeNumberManager {
final String senderUserAgent) throws MessageTooLargeException, MismatchedDevicesException {
try {
final long serverTimestamp = System.currentTimeMillis();
final long serverTimestamp = clock.millis();
final ServiceIdentifier serviceIdentifier = new AciServiceIdentifier(account.getUuid());
final Map<Byte, Envelope> messagesByDeviceId = deviceMessages.stream()
@@ -114,8 +119,8 @@ public class ChangeNumberManager {
.setEphemeral(false)
.build()));
final Map<Byte, Integer> registrationIdsByDeviceId = account.getDevices().stream()
.collect(Collectors.toMap(Device::getId, Device::getRegistrationId));
final Map<Byte, Integer> registrationIdsByDeviceId = deviceMessages.stream()
.collect(Collectors.toMap(IncomingMessage::destinationDeviceId, IncomingMessage::destinationRegistrationId));
messageSender.sendMessages(account,
serviceIdentifier,