Skip to content

Commit

Permalink
Remove SignalServiceContent.
Browse files Browse the repository at this point in the history
  • Loading branch information
cody-signal committed Aug 17, 2023
1 parent 2397cb5 commit 15204a2
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 1,688 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,23 @@
import androidx.annotation.NonNull;

import org.signal.core.util.logging.Log;
import org.signal.libsignal.zkgroup.InvalidInputException;
import org.signal.libsignal.zkgroup.groups.GroupMasterKey;
import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.jobmanager.JsonJobData;
import org.thoughtcrime.securesms.jobmanager.JobMigration;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.Base64;
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import org.whispersystems.signalservice.internal.serialize.protos.SignalServiceContentProto;

import java.io.IOException;
import java.util.Optional;

/**
* We changed the format of the queue key for {@link org.thoughtcrime.securesms.jobs.PushProcessMessageJob}
* We changed the format of the queue key for legacy PushProcessMessageJob
* to have the recipient ID in it, so this migrates existing jobs to be in that format.
*/
public class PushProcessMessageQueueJobMigration extends JobMigration {
Expand All @@ -36,32 +41,36 @@ public PushProcessMessageQueueJobMigration(@NonNull Context context) {
Log.i(TAG, "Found a PushProcessMessageJob to migrate.");
try {
return migratePushProcessMessageJob(context, jobData);
} catch (IOException e) {
} catch (IOException | InvalidInputException e) {
Log.w(TAG, "Failed to migrate message job.", e);
return jobData;
}
}
return jobData;
}

private static @NonNull JobData migratePushProcessMessageJob(@NonNull Context context, @NonNull JobData jobData) throws IOException {
private static @NonNull JobData migratePushProcessMessageJob(@NonNull Context context, @NonNull JobData jobData) throws IOException, InvalidInputException {
JsonJobData data = JsonJobData.deserialize(jobData.getData());

String suffix = "";

if (data.getInt("message_state") == 0) {
SignalServiceContent content = SignalServiceContent.deserialize(Base64.decode(data.getString("message_content")));
SignalServiceContentProto proto = SignalServiceContentProto.parseFrom(Base64.decode(data.getString("message_content")));

if (content != null && content.getDataMessage().isPresent() && content.getDataMessage().get().getGroupContext().isPresent()) {
if (proto != null && proto.hasContent() && proto.getContent().hasDataMessage() && proto.getContent().getDataMessage().hasGroupV2()) {
Log.i(TAG, "Migrating a group message.");

GroupId groupId = GroupId.v2(content.getDataMessage().get().getGroupContext().get().getMasterKey());
GroupId groupId = GroupId.v2(new GroupMasterKey(proto.getContent().getDataMessage().getGroupV2().getMasterKey().toByteArray()));
Recipient recipient = Recipient.externalGroupExact(groupId);

suffix = recipient.getId().toQueueKey();
} else if (content != null) {
} else if (proto != null && proto.hasMetadata() && proto.getMetadata().hasAddress()) {
Log.i(TAG, "Migrating an individual message.");
suffix = RecipientId.from(content.getSender()).toQueueKey();
ServiceId senderServiceId = ServiceId.parseOrThrow(proto.getMetadata().getAddress().getUuid());
String senderE164 = proto.getMetadata().getAddress().getE164();
SignalServiceAddress sender = new SignalServiceAddress(senderServiceId, Optional.ofNullable(senderE164));

suffix = RecipientId.from(sender).toQueueKey();
}
} else {
Log.i(TAG, "Migrating an exception message.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,8 @@ import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.recipients.RecipientId
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment
import org.whispersystems.signalservice.api.messages.SignalServiceContent
import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2
import java.util.Optional
import java.util.UUID

class IncomingMediaMessage(
val from: RecipientId?,
Expand Down Expand Up @@ -144,28 +142,4 @@ class IncomingMediaMessage(
isPaymentsActivated = paymentsActivated,
messageRanges = messageRanges
)

companion object {
@JvmStatic
fun createIncomingPaymentNotification(
from: RecipientId,
content: SignalServiceContent,
receivedTime: Long,
expiresIn: Long,
paymentUuid: UUID
): IncomingMediaMessage {
return IncomingMediaMessage(
from = from,
body = paymentUuid.toString(),
sentTimeMillis = content.timestamp,
serverTimeMillis = content.serverReceivedTimestamp,
receivedTimeMillis = receivedTime,
expiresIn = expiresIn,
isUnidentified = content.isNeedsReceipt,
serverGuid = content.serverUuid,
isPushMessage = true,
isPaymentsNotification = true
)
}
}
}
35 changes: 0 additions & 35 deletions app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,12 @@
import org.thoughtcrime.securesms.mms.MessageGroupContext;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.whispersystems.signalservice.api.messages.SignalServiceContent;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2;
import org.whispersystems.signalservice.internal.push.SignalServiceProtos;

import java.io.IOException;
import java.util.List;
import java.util.Optional;

public final class GroupUtil {

Expand All @@ -35,28 +33,6 @@ private GroupUtil() {

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

/**
* @return The group context present on the content if one exists, otherwise null.
*/
public static @Nullable SignalServiceGroupV2 getGroupContextIfPresent(@Nullable SignalServiceContent content) {
if (content == null) {
return null;
} else if (content.getDataMessage().isPresent() && content.getDataMessage().get().getGroupContext().isPresent()) {
return content.getDataMessage().get().getGroupContext().get();
} else if (content.getSyncMessage().isPresent() &&
content.getSyncMessage().get().getSent().isPresent() &&
content.getSyncMessage().get().getSent().get().getDataMessage().isPresent() &&
content.getSyncMessage().get().getSent().get().getDataMessage().get().getGroupContext().isPresent())
{
return content.getSyncMessage().get().getSent().get().getDataMessage().get().getGroupContext().get();
} else if (content.getStoryMessage().isPresent() && content.getStoryMessage().get().getGroupContext().isPresent()) {
return content.getStoryMessage().get().getGroupContext().get();
} else {
return null;
}
}


public static @Nullable SignalServiceProtos.GroupContextV2 getGroupContextIfPresent(@NonNull SignalServiceProtos.Content content) {
if (content.hasDataMessage() && SignalServiceProtoUtil.INSTANCE.getHasGroupContext(content.getDataMessage())) {
return content.getDataMessage().getGroupV2();
Expand All @@ -73,17 +49,6 @@ private GroupUtil() {
}
}

/**
* Result may be a v1 or v2 GroupId.
*/
public static @NonNull Optional<GroupId> idFromGroupContext(@NonNull Optional<SignalServiceGroupV2> groupContext) {
if (groupContext.isPresent()) {
return Optional.of(GroupId.v2(groupContext.get().getMasterKey()));
} else {
return Optional.empty();
}
}

public static @NonNull GroupMasterKey requireMasterKey(@NonNull byte[] masterKey) {
try {
return new GroupMasterKey(masterKey);
Expand Down

0 comments on commit 15204a2

Please sign in to comment.