import org.asamk.signal.manager.storage.groups.GroupInfo;
import org.asamk.signal.manager.storage.recipients.RecipientId;
import org.asamk.signal.manager.storage.sendLog.MessageSendLogEntry;
+import org.jetbrains.annotations.Nullable;
import org.signal.libsignal.protocol.InvalidKeyException;
import org.signal.libsignal.protocol.InvalidRegistrationIdException;
import org.signal.libsignal.protocol.NoSessionException;
import org.slf4j.LoggerFactory;
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
import org.whispersystems.signalservice.api.crypto.ContentHint;
+import org.whispersystems.signalservice.api.crypto.SealedSenderAccess;
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
-import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
+import org.whispersystems.signalservice.api.groupsv2.GroupSendEndorsements;
import org.whispersystems.signalservice.api.messages.SendMessageResult;
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
import org.whispersystems.signalservice.api.messages.SignalServiceEditMessage;
return SendMessageResult.success(account.getSelfAddress(), List.of(), false, false, 0, Optional.empty());
}
try {
- return messageSender.sendSyncMessage(message, context.getUnidentifiedAccessHelper().getAccessForSync());
+ return messageSender.sendSyncMessage(message);
} catch (UnregisteredUserException e) {
var address = context.getRecipientHelper().resolveSignalServiceAddress(account.getSelfRecipientId());
return SendMessageResult.unregisteredFailure(address);
() -> false,
urgent,
editTargetTimestamp.get());
- final SenderKeySenderHandler senderKeySender = (distId, recipients, unidentifiedAccess, isRecipientUpdate) -> messageSender.sendGroupDataMessage(
+ final SenderKeySenderHandler senderKeySender = (distId, recipients, unidentifiedAccess, groupSendEndorsements, isRecipientUpdate) -> messageSender.sendGroupDataMessage(
distId,
recipients,
unidentifiedAccess,
+ groupSendEndorsements,
isRecipientUpdate,
contentHint,
message,
unidentifiedAccess,
message,
() -> false),
- (distId, recipients, unidentifiedAccess, isRecipientUpdate) -> messageSender.sendGroupTyping(distId,
+ (distId, recipients, unidentifiedAccess, groupSendEndorsements, isRecipientUpdate) -> messageSender.sendGroupTyping(
+ distId,
recipients,
unidentifiedAccess,
+ groupSendEndorsements,
message),
recipientIds,
distributionId);
final var senderKeyTargets = new HashSet<RecipientId>();
final var recipientList = new ArrayList<>(recipientIds);
for (final var recipientId : recipientList) {
- final var access = context.getUnidentifiedAccessHelper().getAccessFor(recipientId);
- if (access.isEmpty() || access.get().getTargetUnidentifiedAccess().isEmpty()) {
+ final var access = context.getUnidentifiedAccessHelper().getSealedSenderAccessFor(recipientId);
+ if (access != null) {
continue;
}
final var addresses = recipientIdList.stream()
.map(context.getRecipientHelper()::resolveSignalServiceAddress)
.toList();
- final var unidentifiedAccesses = context.getUnidentifiedAccessHelper().getAccessFor(recipientIdList);
+ final var unidentifiedAccesses = context.getUnidentifiedAccessHelper()
+ .getSealedSenderAccessFor(recipientIdList);
try {
final var results = sender.send(addresses, unidentifiedAccesses, isRecipientUpdate);
List<UnidentifiedAccess> unidentifiedAccesses = context.getUnidentifiedAccessHelper()
.getAccessFor(recipientIdList)
.stream()
- .map(Optional::get)
- .map(UnidentifiedAccessPair::getTargetUnidentifiedAccess)
- .map(Optional::get)
.toList();
+ final GroupSendEndorsements groupSendEndorsements = null;//TODO
try {
List<SendMessageResult> results = sender.send(distributionId,
addresses,
unidentifiedAccesses,
+ groupSendEndorsements,
isRecipientUpdate);
final var successCount = results.stream().filter(SendMessageResult::isSuccess).count();
try {
return s.send(messageSender,
address,
- context.getUnidentifiedAccessHelper().getAccessFor(recipientId),
+ context.getUnidentifiedAccessHelper().getSealedSenderAccessFor(recipientId),
includePniSignature);
} catch (UnregisteredUserException e) {
final RecipientId newRecipientId;
address = context.getRecipientHelper().resolveSignalServiceAddress(newRecipientId);
return s.send(messageSender,
address,
- context.getUnidentifiedAccessHelper().getAccessFor(newRecipientId),
+ context.getUnidentifiedAccessHelper().getSealedSenderAccessFor(newRecipientId),
includePniSignature);
}
} catch (UnregisteredUserException e) {
SendMessageResult send(
SignalServiceMessageSender messageSender,
SignalServiceAddress address,
- Optional<UnidentifiedAccessPair> unidentifiedAccess,
+ @Nullable SealedSenderAccess unidentifiedAccess,
boolean includePniSignature
) throws IOException, UnregisteredUserException, ProofRequiredException, RateLimitException, org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
}
DistributionId distributionId,
List<SignalServiceAddress> recipients,
List<UnidentifiedAccess> unidentifiedAccess,
+ GroupSendEndorsements groupSendEndorsements,
boolean isRecipientUpdate
) throws IOException, UntrustedIdentityException, NoSessionException, InvalidKeyException, InvalidRegistrationIdException;
}
List<SendMessageResult> send(
List<SignalServiceAddress> recipients,
- List<Optional<UnidentifiedAccessPair>> unidentifiedAccess,
+ List<SealedSenderAccess> unidentifiedAccess,
boolean isRecipientUpdate
) throws IOException, UntrustedIdentityException;
}