Require ACI for ReadMessage sender field.

This commit is contained in:
Alex Hart
2025-10-09 13:32:06 -03:00
committed by Cody Henthorne
parent cbc547d322
commit 3f7b73cf5e
4 changed files with 13 additions and 9 deletions

View File

@@ -20,11 +20,11 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.util.JsonUtils;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException;
@@ -116,7 +116,12 @@ public class MultiDeviceReadUpdateJob extends BaseJob {
for (SerializableSyncMessageId messageId : messageIds) {
Recipient recipient = Recipient.resolved(RecipientId.from(messageId.recipientId));
if (!recipient.isGroup() && !recipient.isDistributionList() && recipient.isMaybeRegistered() && (recipient.getHasServiceId() || recipient.getHasE164())) {
readMessages.add(new ReadMessage(RecipientUtil.getOrFetchServiceId(context, recipient), messageId.timestamp));
ServiceId senderAci = RecipientUtil.getOrFetchServiceId(context, recipient);
if (senderAci instanceof ServiceId.ACI) {
readMessages.add(new ReadMessage((ServiceId.ACI) senderAci, messageId.timestamp));
} else {
Log.w(TAG, "Failed to add ReadMessage for sender without an ACI! { recipientId: " + messageId.recipientId + ", timestamp: " + messageId.timestamp + " }");
}
}
}

View File

@@ -1459,7 +1459,7 @@ public class SignalServiceMessageSender {
readMessages.stream()
.map(readMessage -> new SyncMessage.Read.Builder()
.timestamp(readMessage.getTimestamp())
.senderAci(readMessage.getSender().toString())
.senderAci(readMessage.getSenderAci().toString())
.build())
.collect(Collectors.toList())
);

View File

@@ -10,10 +10,10 @@ import org.whispersystems.signalservice.api.push.ServiceId;
public class ReadMessage {
private final ServiceId sender;
private final long timestamp;
private final ServiceId.ACI sender;
private final long timestamp;
public ReadMessage(ServiceId sender, long timestamp) {
public ReadMessage(ServiceId.ACI sender, long timestamp) {
this.sender = sender;
this.timestamp = timestamp;
}
@@ -22,7 +22,7 @@ public class ReadMessage {
return timestamp;
}
public ServiceId getSender() {
public ServiceId.ACI getSenderAci() {
return sender;
}

View File

@@ -5,8 +5,7 @@ import okio.ByteString.Companion.toByteString
import org.signal.libsignal.protocol.ServiceId.InvalidServiceIdException
import org.signal.libsignal.protocol.SignalProtocolAddress
import org.signal.libsignal.protocol.logging.Log
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import org.whispersystems.signalservice.api.push.ServiceId.PNI
import org.whispersystems.signalservice.api.push.ServiceId.Companion.parseOrThrow
import org.whispersystems.signalservice.api.util.UuidUtil
import org.whispersystems.signalservice.api.util.toByteArray
import java.util.UUID