Skip to content

Commit

Permalink
Prefer ServiceIds over SignalServiceAddresses.
Browse files Browse the repository at this point in the history
  • Loading branch information
greyson-signal authored and alex-signal committed Jul 11, 2022
1 parent 6d4dade commit 3beb730
Show file tree
Hide file tree
Showing 18 changed files with 108 additions and 122 deletions.
Expand Up @@ -111,7 +111,7 @@ public void onRun() throws IOException, UntrustedIdentityException {
if (recipient.isGroup()) {
response = MessageRequestResponseMessage.forGroup(recipient.getGroupId().get().getDecodedId(), localToRemoteType(type));
} else if (recipient.isMaybeRegistered()) {
response = MessageRequestResponseMessage.forIndividual(RecipientUtil.toSignalServiceAddress(context, recipient), localToRemoteType(type));
response = MessageRequestResponseMessage.forIndividual(RecipientUtil.getOrFetchServiceId(context, recipient), localToRemoteType(type));
} else {
response = null;
}
Expand Down
Expand Up @@ -15,9 +15,11 @@
import org.thoughtcrime.securesms.net.NotPushRegisteredException;
import org.thoughtcrime.securesms.payments.proto.PaymentMetaData;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.signalservice.api.messages.multidevice.OutgoingPaymentMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException;
Expand Down Expand Up @@ -89,9 +91,9 @@ protected void onRun() throws Exception {

boolean defrag = payment.isDefrag();

Optional<SignalServiceAddress> uuid;
Optional<ServiceId> uuid;
if (!defrag && payment.getPayee().hasRecipientId()) {
uuid = Optional.of(new SignalServiceAddress(Recipient.resolved(payment.getPayee().requireRecipientId()).requireServiceId()));
uuid = Optional.of(RecipientUtil.getOrFetchServiceId(context, Recipient.resolved(payment.getPayee().requireRecipientId())));
} else {
uuid = Optional.empty();
}
Expand Down
Expand Up @@ -115,7 +115,7 @@ public void onRun() throws IOException, UntrustedIdentityException {
for (SerializableSyncMessageId messageId : messageIds) {
Recipient recipient = Recipient.resolved(RecipientId.from(messageId.recipientId));
if (!recipient.isGroup() && !recipient.isDistributionList() && recipient.isMaybeRegistered()) {
readMessages.add(new ReadMessage(RecipientUtil.toSignalServiceAddress(context, recipient), messageId.timestamp));
readMessages.add(new ReadMessage(RecipientUtil.getOrFetchServiceId(context, recipient), messageId.timestamp));
}
}

Expand Down
Expand Up @@ -89,7 +89,7 @@ public void onRun() throws IOException, UntrustedIdentityException {
return;
}

ViewOnceOpenMessage openMessage = new ViewOnceOpenMessage(RecipientUtil.toSignalServiceAddress(context, recipient), messageId.timestamp);
ViewOnceOpenMessage openMessage = new ViewOnceOpenMessage(RecipientUtil.getOrFetchServiceId(context, recipient), messageId.timestamp);

messageSender.sendSyncMessage(SignalServiceSyncMessage.forViewOnceOpen(openMessage), UnidentifiedAccessUtil.getAccessForSync(context));
}
Expand Down
Expand Up @@ -115,7 +115,7 @@ public void onRun() throws IOException, UntrustedIdentityException {
for (SerializableSyncMessageId messageId : messageIds) {
Recipient recipient = Recipient.resolved(RecipientId.from(messageId.recipientId));
if (!recipient.isGroup() && recipient.isMaybeRegistered()) {
viewedMessages.add(new ViewedMessage(RecipientUtil.toSignalServiceAddress(context, recipient), messageId.timestamp));
viewedMessages.add(new ViewedMessage(RecipientUtil.getOrFetchServiceId(context, recipient), messageId.timestamp));
}
}

Expand Down
Expand Up @@ -355,8 +355,7 @@ protected Optional<SignalServiceDataMessage.Quote> getQuoteFor(OutgoingMediaMess
Recipient quoteAuthorRecipient = Recipient.resolved(quoteAuthor);

if (quoteAuthorRecipient.isMaybeRegistered()) {
SignalServiceAddress quoteAddress = RecipientUtil.toSignalServiceAddress(context, quoteAuthorRecipient);
return Optional.of(new SignalServiceDataMessage.Quote(quoteId, quoteAddress, quoteBody, quoteAttachments, quoteMentions, quoteType.getDataMessageType()));
return Optional.of(new SignalServiceDataMessage.Quote(quoteId, RecipientUtil.getOrFetchServiceId(context, quoteAuthorRecipient), quoteBody, quoteAttachments, quoteMentions, quoteType.getDataMessageType()));
} else {
return Optional.empty();
}
Expand Down Expand Up @@ -386,10 +385,10 @@ protected Optional<SignalServiceDataMessage.Sticker> getStickerFor(OutgoingMedia

protected Optional<SignalServiceDataMessage.Reaction> getStoryReactionFor(@NonNull OutgoingMediaMessage message, @NonNull SignalServiceDataMessage.StoryContext storyContext) {
if (message.isStoryReaction()) {
return Optional.of(new SignalServiceDataMessage.Reaction(
message.getBody(),
false,
new SignalServiceAddress(storyContext.getAuthorServiceId()), storyContext.getSentTimestamp()));
return Optional.of(new SignalServiceDataMessage.Reaction(message.getBody(),
false,
storyContext.getAuthorServiceId(),
storyContext.getSentTimestamp()));
} else {
return Optional.empty();
}
Expand Down
Expand Up @@ -260,7 +260,7 @@ private static SignalServiceDataMessage.Reaction buildReaction(@NonNull Context
{
return new SignalServiceDataMessage.Reaction(reaction.getEmoji(),
remove,
RecipientUtil.toSignalServiceAddress(context, targetAuthor),
RecipientUtil.getOrFetchServiceId(context, targetAuthor),
targetSentTimestamp);
}

Expand Down
Expand Up @@ -2305,7 +2305,7 @@ private void updateGroupReceiptStatus(@NonNull SentTranscriptMessage message, lo
}

List<org.signal.libsignal.protocol.util.Pair<RecipientId, Boolean>> unidentifiedStatus = Stream.of(members)
.map(m -> new org.signal.libsignal.protocol.util.Pair<>(m.getId(), message.isUnidentified(m.requireServiceId().toString())))
.map(m -> new org.signal.libsignal.protocol.util.Pair<>(m.getId(), message.isUnidentified(m.requireServiceId())))
.toList();
receiptDatabase.setUnidentified(unidentifiedStatus, messageId);
}
Expand Down Expand Up @@ -3132,16 +3132,11 @@ private void forceStickerDownloadIfNecessary(long messageId, List<DatabaseAttach
}

private static boolean isUnidentified(@NonNull SentTranscriptMessage message, @NonNull Recipient recipient) {
boolean unidentified = false;

if (recipient.hasE164()) {
unidentified |= message.isUnidentified(recipient.requireE164());
}
if (recipient.hasServiceId()) {
unidentified |= message.isUnidentified(recipient.requireServiceId());
return message.isUnidentified(recipient.requireServiceId());
} else {
return false;
}

return unidentified;
}

private static void log(@NonNull String message) {
Expand Down
Expand Up @@ -27,6 +27,7 @@
import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.storage.StorageSyncHelper;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.api.push.exceptions.NotFoundException;

Expand All @@ -39,6 +40,16 @@ public class RecipientUtil {

private static final String TAG = Log.tag(RecipientUtil.class);

/**
* This method will do it's best to get a {@link ServiceId} for the provided recipient. This includes performing
* a possible network request if no ServiceId is available. If the request to get a ServiceId fails or the user is
* not registered, an IOException is thrown.
*/
@WorkerThread
public static @NonNull ServiceId getOrFetchServiceId(@NonNull Context context, @NonNull Recipient recipient) throws IOException {
return toSignalServiceAddress(context, recipient).getServiceId();
}

/**
* This method will do it's best to craft a fully-populated {@link SignalServiceAddress} based on
* the provided recipient. This includes performing a possible network request if no UUID is
Expand Down
Expand Up @@ -868,7 +868,7 @@ private Content createMessageContent(SignalServiceDataMessage message) throws IO
DataMessage.Quote.Builder quoteBuilder = DataMessage.Quote.newBuilder()
.setId(message.getQuote().get().getId())
.setText(message.getQuote().get().getText())
.setAuthorUuid(message.getQuote().get().getAuthor().getServiceId().toString())
.setAuthorUuid(message.getQuote().get().getAuthor().toString())
.setType(message.getQuote().get().getType().getProtoType());

if (!message.getQuote().get().getMentions().isEmpty()) {
Expand Down Expand Up @@ -951,7 +951,7 @@ private Content createMessageContent(SignalServiceDataMessage message) throws IO
.setEmoji(message.getReaction().get().getEmoji())
.setRemove(message.getReaction().get().isRemove())
.setTargetSentTimestamp(message.getReaction().get().getTargetSentTimestamp())
.setTargetAuthorUuid(message.getReaction().get().getTargetAuthor().getServiceId().toString());
.setTargetAuthorUuid(message.getReaction().get().getTargetAuthor().toString());

builder.setReaction(reactionBuilder.build());
builder.setRequiredProtocolVersion(Math.max(DataMessage.ProtocolVersion.REACTIONS_VALUE, builder.getRequiredProtocolVersion()));
Expand Down Expand Up @@ -1209,7 +1209,7 @@ private Content createMultiDeviceReadContent(List<ReadMessage> readMessages) {
for (ReadMessage readMessage : readMessages) {
builder.addRead(SyncMessage.Read.newBuilder()
.setTimestamp(readMessage.getTimestamp())
.setSenderUuid(readMessage.getSender().getServiceId().toString()));
.setSenderUuid(readMessage.getSender().toString()));
}

return container.setSyncMessage(builder).build();
Expand All @@ -1222,7 +1222,7 @@ private Content createMultiDeviceViewedContent(List<ViewedMessage> readMessages)
for (ViewedMessage readMessage : readMessages) {
builder.addViewed(SyncMessage.Viewed.newBuilder()
.setTimestamp(readMessage.getTimestamp())
.setSenderUuid(readMessage.getSender().getServiceId().toString()));
.setSenderUuid(readMessage.getSender().toString()));
}

return container.setSyncMessage(builder).build();
Expand All @@ -1234,7 +1234,7 @@ private Content createMultiDeviceViewOnceOpenContent(ViewOnceOpenMessage readMes

builder.setViewOnceOpen(SyncMessage.ViewOnceOpen.newBuilder()
.setTimestamp(readMessage.getTimestamp())
.setSenderUuid(readMessage.getSender().getServiceId().toString()));
.setSenderUuid(readMessage.getSender().toString()));

return container.setSyncMessage(builder).build();
}
Expand Down Expand Up @@ -1345,7 +1345,7 @@ private Content createMultiDeviceMessageRequestResponseContent(MessageRequestRes
}

if (message.getPerson().isPresent()) {
responseMessage.setThreadUuid(message.getPerson().get().getServiceId().toString());
responseMessage.setThreadUuid(message.getPerson().get().toString());
}

switch (message.getType()) {
Expand Down Expand Up @@ -1378,7 +1378,7 @@ private Content createMultiDeviceOutgoingPaymentContent(OutgoingPaymentMessage m
SyncMessage.OutgoingPayment.Builder paymentMessage = SyncMessage.OutgoingPayment.newBuilder();

if (message.getRecipient().isPresent()) {
paymentMessage.setRecipientUuid(message.getRecipient().get().getServiceId().toString());
paymentMessage.setRecipientUuid(message.getRecipient().get().toString());
}

if (message.getNote().isPresent()) {
Expand Down Expand Up @@ -1629,7 +1629,7 @@ private SignalServiceSyncMessage createSelfSendSyncMessageForStory(SignalService
sentTimestamp,
Optional.empty(),
0,
Collections.singletonMap(localAddress, false),
Collections.singletonMap(localAddress.getServiceId(), false),
false,
Optional.of(message),
manifest);
Expand All @@ -1642,7 +1642,7 @@ private SignalServiceSyncMessage createSelfSendSyncMessage(SignalServiceDataMess
message.getTimestamp(),
Optional.of(message),
message.getExpiresInSeconds(),
Collections.singletonMap(localAddress, false),
Collections.singletonMap(localAddress.getServiceId(), false),
false,
Optional.empty(),
Collections.emptySet());
Expand Down

0 comments on commit 3beb730

Please sign in to comment.