From 3beb730edb966b1e7a7523e12e55b9b9927335e6 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 8 Jul 2022 09:09:27 -0400 Subject: [PATCH] Prefer ServiceIds over SignalServiceAddresses. --- .../MultiDeviceMessageRequestResponseJob.java | 2 +- .../MultiDeviceOutgoingPaymentSyncJob.java | 6 ++- .../jobs/MultiDeviceReadUpdateJob.java | 2 +- .../jobs/MultiDeviceViewOnceOpenJob.java | 2 +- .../jobs/MultiDeviceViewedUpdateJob.java | 2 +- .../securesms/jobs/PushSendJob.java | 11 +++-- .../securesms/jobs/ReactionSendJob.java | 2 +- .../messages/MessageContentProcessor.java | 13 ++---- .../securesms/recipients/RecipientUtil.java | 11 +++++ .../api/SignalServiceMessageSender.java | 18 ++++---- .../api/messages/SignalServiceContent.java | 41 +++++++++---------- .../messages/SignalServiceDataMessage.java | 18 ++++---- .../MessageRequestResponseMessage.java | 13 +++--- .../multidevice/OutgoingPaymentMessage.java | 25 +++++------ .../api/messages/multidevice/ReadMessage.java | 10 ++--- .../multidevice/SentTranscriptMessage.java | 32 +++------------ .../multidevice/ViewOnceOpenMessage.java | 10 ++--- .../messages/multidevice/ViewedMessage.java | 10 ++--- 18 files changed, 107 insertions(+), 121 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java index 74bb9292fd..b698e17f3d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java @@ -111,7 +111,7 @@ public class MultiDeviceMessageRequestResponseJob extends BaseJob { 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; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java index 673d80a517..d0acf006e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java @@ -15,9 +15,11 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; 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; @@ -89,9 +91,9 @@ public final class MultiDeviceOutgoingPaymentSyncJob extends BaseJob { boolean defrag = payment.isDefrag(); - Optional uuid; + Optional 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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java index f8a5127639..25992fa9af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java @@ -115,7 +115,7 @@ public class MultiDeviceReadUpdateJob extends BaseJob { 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)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java index d112f8c491..63f6e6272a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java @@ -89,7 +89,7 @@ public class MultiDeviceViewOnceOpenJob extends BaseJob { 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)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java index 1110a56770..b6d774bfdf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java @@ -115,7 +115,7 @@ public class MultiDeviceViewedUpdateJob extends BaseJob { 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)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java index 7176baef92..c93983c9de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java @@ -355,8 +355,7 @@ public abstract class PushSendJob extends SendJob { 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(); } @@ -386,10 +385,10 @@ public abstract class PushSendJob extends SendJob { protected Optional 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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java index e1d403f1a0..003c0502a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -260,7 +260,7 @@ public class ReactionSendJob extends BaseJob { { return new SignalServiceDataMessage.Reaction(reaction.getEmoji(), remove, - RecipientUtil.toSignalServiceAddress(context, targetAuthor), + RecipientUtil.getOrFetchServiceId(context, targetAuthor), targetSentTimestamp); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index 5455181d3c..e2a6d2bf85 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -2305,7 +2305,7 @@ public final class MessageContentProcessor { } List> 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); } @@ -3132,16 +3132,11 @@ public final class MessageContentProcessor { } 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) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index db4eb0a098..21f839454b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; 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; @@ -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 diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index 166ff59626..8bf454186c 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -868,7 +868,7 @@ public class SignalServiceMessageSender { 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()) { @@ -951,7 +951,7 @@ public class SignalServiceMessageSender { .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())); @@ -1209,7 +1209,7 @@ public class SignalServiceMessageSender { 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(); @@ -1222,7 +1222,7 @@ public class SignalServiceMessageSender { 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(); @@ -1234,7 +1234,7 @@ public class SignalServiceMessageSender { builder.setViewOnceOpen(SyncMessage.ViewOnceOpen.newBuilder() .setTimestamp(readMessage.getTimestamp()) - .setSenderUuid(readMessage.getSender().getServiceId().toString())); + .setSenderUuid(readMessage.getSender().toString())); return container.setSyncMessage(builder).build(); } @@ -1345,7 +1345,7 @@ public class SignalServiceMessageSender { } if (message.getPerson().isPresent()) { - responseMessage.setThreadUuid(message.getPerson().get().getServiceId().toString()); + responseMessage.setThreadUuid(message.getPerson().get().toString()); } switch (message.getType()) { @@ -1378,7 +1378,7 @@ public class SignalServiceMessageSender { 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()) { @@ -1629,7 +1629,7 @@ public class SignalServiceMessageSender { sentTimestamp, Optional.empty(), 0, - Collections.singletonMap(localAddress, false), + Collections.singletonMap(localAddress.getServiceId(), false), false, Optional.of(message), manifest); @@ -1642,7 +1642,7 @@ public class SignalServiceMessageSender { message.getTimestamp(), Optional.of(message), message.getExpiresInSeconds(), - Collections.singletonMap(localAddress, false), + Collections.singletonMap(localAddress.getServiceId(), false), false, Optional.empty(), Collections.emptySet()); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java index 74192472cc..594f753ec6 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java @@ -677,7 +677,7 @@ public final class SignalServiceContent { throws ProtocolInvalidKeyException, UnsupportedDataMessageException, InvalidMessageStructureException { if (content.hasSent()) { - Map unidentifiedStatuses = new HashMap<>(); + Map unidentifiedStatuses = new HashMap<>(); SignalServiceProtos.SyncMessage.Sent sentContent = content.getSent(); Optional dataMessage = sentContent.hasMessage() ? Optional.of(createSignalServiceMessage(metadata, sentContent.getMessage())) : Optional.empty(); Optional storyMessage = sentContent.hasStoryMessage() ? Optional.of(createStoryMessage(sentContent.getStoryMessage())) : Optional.empty(); @@ -697,8 +697,7 @@ public final class SignalServiceContent { for (SignalServiceProtos.SyncMessage.Sent.UnidentifiedDeliveryStatus status : sentContent.getUnidentifiedStatusList()) { if (SignalServiceAddress.isValidAddress(status.getDestinationUuid(), null)) { - SignalServiceAddress recipient = new SignalServiceAddress(ServiceId.parseOrThrow(status.getDestinationUuid())); - unidentifiedStatuses.put(recipient, status.getUnidentified()); + unidentifiedStatuses.put(ServiceId.parseOrNull(status.getDestinationUuid()), status.getUnidentified()); } else { Log.w(TAG, "Encountered an invalid UnidentifiedDeliveryStatus in a SentTranscript! Ignoring."); } @@ -722,9 +721,9 @@ public final class SignalServiceContent { List readMessages = new LinkedList<>(); for (SignalServiceProtos.SyncMessage.Read read : content.getReadList()) { - if (SignalServiceAddress.isValidAddress(read.getSenderUuid())) { - SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(read.getSenderUuid())); - readMessages.add(new ReadMessage(address, read.getTimestamp())); + ServiceId serviceId = ServiceId.parseOrNull(read.getSenderUuid()); + if (serviceId != null) { + readMessages.add(new ReadMessage(serviceId, read.getTimestamp())); } else { Log.w(TAG, "Encountered an invalid ReadMessage! Ignoring."); } @@ -737,9 +736,9 @@ public final class SignalServiceContent { List viewedMessages = new LinkedList<>(); for (SignalServiceProtos.SyncMessage.Viewed viewed : content.getViewedList()) { - if (SignalServiceAddress.isValidAddress(viewed.getSenderUuid())) { - SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(viewed.getSenderUuid())); - viewedMessages.add(new ViewedMessage(address, viewed.getTimestamp())); + ServiceId serviceId = ServiceId.parseOrNull(viewed.getSenderUuid()); + if (serviceId != null) { + viewedMessages.add(new ViewedMessage(serviceId, viewed.getTimestamp())); } else { Log.w(TAG, "Encountered an invalid ReadMessage! Ignoring."); } @@ -749,9 +748,9 @@ public final class SignalServiceContent { } if (content.hasViewOnceOpen()) { - if (SignalServiceAddress.isValidAddress(content.getViewOnceOpen().getSenderUuid())) { - SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(content.getViewOnceOpen().getSenderUuid())); - ViewOnceOpenMessage timerRead = new ViewOnceOpenMessage(address, content.getViewOnceOpen().getTimestamp()); + ServiceId serviceId = ServiceId.parseOrNull(content.getViewOnceOpen().getSenderUuid()); + if (serviceId != null) { + ViewOnceOpenMessage timerRead = new ViewOnceOpenMessage(serviceId, content.getViewOnceOpen().getTimestamp()); return SignalServiceSyncMessage.forViewOnceOpen(timerRead); } else { throw new InvalidMessageStructureException("ViewOnceOpen message has no sender!"); @@ -874,10 +873,9 @@ public final class SignalServiceContent { if (content.getMessageRequestResponse().hasGroupId()) { responseMessage = MessageRequestResponseMessage.forGroup(content.getMessageRequestResponse().getGroupId().toByteArray(), type); } else { - Optional address = SignalServiceAddress.fromRaw(content.getMessageRequestResponse().getThreadUuid(), null); - - if (address.isPresent()) { - responseMessage = MessageRequestResponseMessage.forIndividual(address.get(), type); + ServiceId serviceId = ServiceId.parseOrNull(content.getMessageRequestResponse().getThreadUuid()); + if (serviceId != null) { + responseMessage = MessageRequestResponseMessage.forIndividual(serviceId, type); } else { throw new InvalidMessageStructureException("Message request response has an invalid thread identifier!"); } @@ -894,7 +892,7 @@ public final class SignalServiceContent { Money.MobileCoin amount = Money.picoMobileCoin(mobileCoin.getAmountPicoMob()); Money.MobileCoin fee = Money.picoMobileCoin(mobileCoin.getFeePicoMob()); ByteString address = mobileCoin.getRecipientAddress(); - Optional recipient = SignalServiceAddress.fromRaw(outgoingPayment.getRecipientUuid(), null); + Optional recipient = Optional.ofNullable(ServiceId.parseOrNull(outgoingPayment.getRecipientUuid())); return SignalServiceSyncMessage.forOutgoingPayment(new OutgoingPaymentMessage(recipient, amount, @@ -1034,11 +1032,10 @@ public final class SignalServiceContent { attachment.hasThumbnail() ? createAttachmentPointer(attachment.getThumbnail()) : null)); } - if (SignalServiceAddress.isValidAddress(content.getQuote().getAuthorUuid())) { - SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(content.getQuote().getAuthorUuid())); - + ServiceId author = ServiceId.parseOrNull(content.getQuote().getAuthorUuid()); + if (author != null) { return new SignalServiceDataMessage.Quote(content.getQuote().getId(), - address, + author, content.getQuote().getText(), attachments, createMentions(content.getQuote().getBodyRangesList(), content.getQuote().getText(), isGroupV2), @@ -1139,7 +1136,7 @@ public final class SignalServiceContent { return new SignalServiceDataMessage.Reaction(reaction.getEmoji(), reaction.getRemove(), - new SignalServiceAddress(serviceId), + serviceId, reaction.getTargetSentTimestamp()); } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java index d937372e02..82443f6405 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java @@ -453,14 +453,14 @@ public class SignalServiceDataMessage { public static class Quote { private final long id; - private final SignalServiceAddress author; + private final ServiceId author; private final String text; private final List attachments; private final List mentions; private final Type type; public Quote(long id, - SignalServiceAddress author, + ServiceId author, String text, List attachments, List mentions, @@ -478,7 +478,7 @@ public class SignalServiceDataMessage { return id; } - public SignalServiceAddress getAuthor() { + public ServiceId getAuthor() { return author; } @@ -585,12 +585,12 @@ public class SignalServiceDataMessage { } public static class Reaction { - private final String emoji; - private final boolean remove; - private final SignalServiceAddress targetAuthor; - private final long targetSentTimestamp; + private final String emoji; + private final boolean remove; + private final ServiceId targetAuthor; + private final long targetSentTimestamp; - public Reaction(String emoji, boolean remove, SignalServiceAddress targetAuthor, long targetSentTimestamp) { + public Reaction(String emoji, boolean remove, ServiceId targetAuthor, long targetSentTimestamp) { this.emoji = emoji; this.remove = remove; this.targetAuthor = targetAuthor; @@ -605,7 +605,7 @@ public class SignalServiceDataMessage { return remove; } - public SignalServiceAddress getTargetAuthor() { + public ServiceId getTargetAuthor() { return targetAuthor; } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java index 5e1db09416..c98666afdf 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/MessageRequestResponseMessage.java @@ -2,17 +2,18 @@ package org.whispersystems.signalservice.api.messages.multidevice; +import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.Optional; public class MessageRequestResponseMessage { - private final Optional person; - private final Optional groupId; - private final Type type; + private final Optional person; + private final Optional groupId; + private final Type type; - public static MessageRequestResponseMessage forIndividual(SignalServiceAddress address, Type type) { + public static MessageRequestResponseMessage forIndividual(ServiceId address, Type type) { return new MessageRequestResponseMessage(Optional.of(address), Optional.empty(), type); } @@ -20,7 +21,7 @@ public class MessageRequestResponseMessage { return new MessageRequestResponseMessage(Optional.empty(), Optional.of(groupId), type); } - private MessageRequestResponseMessage(Optional person, + private MessageRequestResponseMessage(Optional person, Optional groupId, Type type) { @@ -29,7 +30,7 @@ public class MessageRequestResponseMessage { this.type = type; } - public Optional getPerson() { + public Optional getPerson() { return person; } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java index d0bcce70ef..eca07c2bfe 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/OutgoingPaymentMessage.java @@ -3,6 +3,7 @@ package org.whispersystems.signalservice.api.messages.multidevice; import com.google.protobuf.ByteString; import org.whispersystems.signalservice.api.payments.Money; +import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.List; @@ -10,18 +11,18 @@ import java.util.Optional; public final class OutgoingPaymentMessage { - private final Optional recipient; - private final Money.MobileCoin amount; - private final Money.MobileCoin fee; - private final ByteString receipt; - private final long blockIndex; - private final long blockTimestamp; - private final Optional address; - private final Optional note; - private final List publicKeys; - private final List keyImages; + private final Optional recipient; + private final Money.MobileCoin amount; + private final Money.MobileCoin fee; + private final ByteString receipt; + private final long blockIndex; + private final long blockTimestamp; + private final Optional address; + private final Optional note; + private final List publicKeys; + private final List keyImages; - public OutgoingPaymentMessage(Optional recipient, + public OutgoingPaymentMessage(Optional recipient, Money.MobileCoin amount, Money.MobileCoin fee, ByteString receipt, @@ -44,7 +45,7 @@ public final class OutgoingPaymentMessage { this.keyImages = keyImages; } - public Optional getRecipient() { + public Optional getRecipient() { return recipient; } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java index fe503fc133..bacba361ee 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ReadMessage.java @@ -6,14 +6,14 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import org.whispersystems.signalservice.api.push.ServiceId; public class ReadMessage { - private final SignalServiceAddress sender; - private final long timestamp; + private final ServiceId sender; + private final long timestamp; - public ReadMessage(SignalServiceAddress sender, long timestamp) { + public ReadMessage(ServiceId sender, long timestamp) { this.sender = sender; this.timestamp = timestamp; } @@ -22,7 +22,7 @@ public class ReadMessage { return timestamp; } - public SignalServiceAddress getSender() { + public ServiceId getSender() { return sender; } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java index a1b741f24c..ddd795ad47 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/SentTranscriptMessage.java @@ -24,9 +24,8 @@ public class SentTranscriptMessage { private final long timestamp; private final long expirationStartTimestamp; private final Optional message; - private final Map unidentifiedStatusBySid; - private final Map unidentifiedStatusByE164; - private final Set recipients; + private final Map unidentifiedStatusBySid; + private final Set recipients; private final boolean isRecipientUpdate; private final Optional storyMessage; private final Set storyMessageRecipients; @@ -35,7 +34,7 @@ public class SentTranscriptMessage { long timestamp, Optional message, long expirationStartTimestamp, - Map unidentifiedStatus, + Map unidentifiedStatus, boolean isRecipientUpdate, Optional storyMessage, Set storyMessageRecipients) @@ -44,20 +43,11 @@ public class SentTranscriptMessage { this.timestamp = timestamp; this.message = message; this.expirationStartTimestamp = expirationStartTimestamp; - this.unidentifiedStatusBySid = new HashMap<>(); - this.unidentifiedStatusByE164 = new HashMap<>(); + this.unidentifiedStatusBySid = new HashMap<>(unidentifiedStatus); this.recipients = unidentifiedStatus.keySet(); this.isRecipientUpdate = isRecipientUpdate; this.storyMessage = storyMessage; this.storyMessageRecipients = storyMessageRecipients; - - for (Map.Entry entry : unidentifiedStatus.entrySet()) { - unidentifiedStatusBySid.put(entry.getKey().getServiceId().toString(), entry.getValue()); - - if (entry.getKey().getNumber().isPresent()) { - unidentifiedStatusByE164.put(entry.getKey().getNumber().get(), entry.getValue()); - } - } } public Optional getDestination() { @@ -85,20 +75,10 @@ public class SentTranscriptMessage { } public boolean isUnidentified(ServiceId serviceId) { - return isUnidentified(serviceId.toString()); + return unidentifiedStatusBySid.getOrDefault(serviceId, false); } - public boolean isUnidentified(String destination) { - if (unidentifiedStatusBySid.containsKey(destination)) { - return unidentifiedStatusBySid.get(destination); - } else if (unidentifiedStatusByE164.containsKey(destination)) { - return unidentifiedStatusByE164.get(destination); - } else { - return false; - } - } - - public Set getRecipients() { + public Set getRecipients() { return recipients; } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java index 5e3491d735..e9989fe978 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewOnceOpenMessage.java @@ -1,13 +1,13 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import org.whispersystems.signalservice.api.push.ServiceId; public class ViewOnceOpenMessage { - private final SignalServiceAddress sender; - private final long timestamp; + private final ServiceId sender; + private final long timestamp; - public ViewOnceOpenMessage(SignalServiceAddress sender, long timestamp) { + public ViewOnceOpenMessage(ServiceId sender, long timestamp) { this.sender = sender; this.timestamp = timestamp; } @@ -16,7 +16,7 @@ public class ViewOnceOpenMessage { return timestamp; } - public SignalServiceAddress getSender() { + public ServiceId getSender() { return sender; } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java index 2ac989ce64..eeffdd835a 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/multidevice/ViewedMessage.java @@ -1,13 +1,13 @@ package org.whispersystems.signalservice.api.messages.multidevice; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import org.whispersystems.signalservice.api.push.ServiceId; public class ViewedMessage { - private final SignalServiceAddress sender; - private final long timestamp; + private final ServiceId sender; + private final long timestamp; - public ViewedMessage(SignalServiceAddress sender, long timestamp) { + public ViewedMessage(ServiceId sender, long timestamp) { this.sender = sender; this.timestamp = timestamp; } @@ -16,7 +16,7 @@ public class ViewedMessage { return timestamp; } - public SignalServiceAddress getSender() { + public ServiceId getSender() { return sender; } }