Remove SignalServiceContent.

This commit is contained in:
Cody Henthorne
2023-08-17 14:43:42 -04:00
committed by GitHub
parent 2397cb5428
commit 15204a2c84
4 changed files with 18 additions and 1688 deletions

View File

@@ -5,18 +5,23 @@ import android.content.Context;
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 {
@@ -36,7 +41,7 @@ public class PushProcessMessageQueueJobMigration extends JobMigration {
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;
}
@@ -44,24 +49,28 @@ public class PushProcessMessageQueueJobMigration extends JobMigration {
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.");

View File

@@ -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?,
@@ -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
)
}
}
}

View File

@@ -19,14 +19,12 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil;
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 {
@@ -35,28 +33,6 @@ public final class 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();
@@ -73,17 +49,6 @@ public final class 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);