package org.asamk.signal.manager.helper;
-import org.asamk.signal.manager.JobExecutor;
import org.asamk.signal.manager.Manager;
import org.asamk.signal.manager.SignalDependencies;
import org.asamk.signal.manager.TrustLevel;
import org.asamk.signal.manager.storage.groups.GroupInfoV1;
import org.asamk.signal.manager.storage.recipients.Profile;
import org.asamk.signal.manager.storage.recipients.RecipientId;
-import org.asamk.signal.manager.storage.recipients.RecipientResolver;
import org.asamk.signal.manager.storage.stickers.Sticker;
import org.asamk.signal.manager.storage.stickers.StickerPackId;
import org.signal.libsignal.metadata.ProtocolInvalidKeyException;
private final SignalAccount account;
private final SignalDependencies dependencies;
- private final RecipientResolver recipientResolver;
- private final SignalServiceAddressResolver addressResolver;
- private final GroupHelper groupHelper;
- private final ContactHelper contactHelper;
- private final AttachmentHelper attachmentHelper;
- private final SyncHelper syncHelper;
- private final ProfileProvider profileProvider;
- private final JobExecutor jobExecutor;
-
- public IncomingMessageHandler(
- final SignalAccount account,
- final SignalDependencies dependencies,
- final RecipientResolver recipientResolver,
- final SignalServiceAddressResolver addressResolver,
- final GroupHelper groupHelper,
- final ContactHelper contactHelper,
- final AttachmentHelper attachmentHelper,
- final SyncHelper syncHelper,
- final ProfileProvider profileProvider,
- final JobExecutor jobExecutor
- ) {
- this.account = account;
- this.dependencies = dependencies;
- this.recipientResolver = recipientResolver;
- this.addressResolver = addressResolver;
- this.groupHelper = groupHelper;
- this.contactHelper = contactHelper;
- this.attachmentHelper = attachmentHelper;
- this.syncHelper = syncHelper;
- this.profileProvider = profileProvider;
- this.jobExecutor = jobExecutor;
+ private final Context context;
+
+ public IncomingMessageHandler(final Context context) {
+ this.account = context.getAccount();
+ this.dependencies = context.getDependencies();
+ this.context = context;
}
public Pair<List<HandleAction>, Exception> handleRetryEnvelope(
.resolveRecipientAddress(recipientId), e.getSenderDevice());
} catch (ProtocolInvalidKeyIdException | ProtocolInvalidKeyException | ProtocolNoSessionException | ProtocolInvalidMessageException e) {
final var sender = account.getRecipientStore().resolveRecipient(e.getSender());
- final var senderProfile = profileProvider.getProfile(sender);
- final var selfProfile = profileProvider.getProfile(account.getSelfRecipientId());
+ final var senderProfile = context.getProfileHelper().getRecipientProfile(sender);
+ final var selfProfile = context.getProfileHelper().getRecipientProfile(account.getSelfRecipientId());
if (e.getSenderDevice() != account.getDeviceId()
&& senderProfile != null
&& senderProfile.getCapabilities().contains(Profile.Capability.senderKey)
}
handler.handleMessage(MessageEnvelope.from(envelope,
content,
- recipientResolver,
+ account.getRecipientStore(),
account.getRecipientStore()::resolveRecipientAddress,
- attachmentHelper::getAttachmentFile), exception);
+ context.getAttachmentHelper()::getAttachmentFile), exception);
return actions;
}
}
final RecipientId sender;
final int senderDeviceId;
if (!envelope.isUnidentifiedSender() && envelope.hasSourceUuid()) {
- sender = recipientResolver.resolveRecipient(envelope.getSourceAddress());
+ sender = context.getRecipientHelper().resolveRecipient(envelope.getSourceAddress());
senderDeviceId = envelope.getSourceDevice();
} else {
- sender = recipientResolver.resolveRecipient(content.getSender());
+ sender = context.getRecipientHelper().resolveRecipient(content.getSender());
senderDeviceId = content.getSenderDevice();
}
if (content.getSenderKeyDistributionMessage().isPresent()) {
final var message = content.getSenderKeyDistributionMessage().get();
- final var protocolAddress = new SignalProtocolAddress(addressResolver.resolveSignalServiceAddress(sender)
+ final var protocolAddress = new SignalProtocolAddress(context.getRecipientHelper()
+ .resolveSignalServiceAddress(sender)
.getIdentifier(), senderDeviceId);
logger.debug("Received a sender key distribution message for distributionId {} from {}",
message.getDistributionId(),
actions.addAll(handleSignalServiceDataMessage(message.getMessage(),
true,
sender,
- destination == null ? null : recipientResolver.resolveRecipient(destination),
+ destination == null ? null : context.getRecipientHelper().resolveRecipient(destination),
ignoreAttachments));
}
if (syncMessage.getRequest().isPresent() && account.isMasterDevice()) {
if (syncMessage.getBlockedList().isPresent()) {
final var blockedListMessage = syncMessage.getBlockedList().get();
for (var address : blockedListMessage.getAddresses()) {
- contactHelper.setContactBlocked(recipientResolver.resolveRecipient(address), true);
+ context.getContactHelper()
+ .setContactBlocked(context.getRecipientHelper().resolveRecipient(address), true);
}
for (var groupId : blockedListMessage.getGroupIds()
.stream()
.map(GroupId::unknownVersion)
.collect(Collectors.toSet())) {
try {
- groupHelper.setGroupBlocked(groupId, true);
+ context.getGroupHelper().setGroupBlocked(groupId, true);
} catch (GroupNotFoundException e) {
logger.warn("BlockedListMessage contained groupID that was not found in GroupStore: {}",
groupId.toBase64());
if (syncMessage.getContacts().isPresent()) {
try {
final var contactsMessage = syncMessage.getContacts().get();
- attachmentHelper.retrieveAttachment(contactsMessage.getContactsStream(),
- syncHelper::handleSyncDeviceContacts);
+ context.getAttachmentHelper()
+ .retrieveAttachment(contactsMessage.getContactsStream(),
+ context.getSyncHelper()::handleSyncDeviceContacts);
} catch (Exception e) {
logger.warn("Failed to handle received sync contacts, ignoring: {}", e.getMessage());
}
sticker = new Sticker(stickerPackId, m.getPackKey().get());
}
if (installed) {
- jobExecutor.enqueueJob(new RetrieveStickerPackJob(stickerPackId, m.getPackKey().get()));
+ context.getJobExecutor()
+ .enqueueJob(new RetrieveStickerPackJob(stickerPackId, m.getPackKey().get()));
}
}
} else {
return false;
}
- final var recipientId = recipientResolver.resolveRecipient(source);
- if (contactHelper.isContactBlocked(recipientId)) {
+ final var recipientId = context.getRecipientHelper().resolveRecipient(source);
+ if (context.getContactHelper().isContactBlocked(recipientId)) {
return true;
}
var message = content.getDataMessage().get();
if (message.getGroupContext().isPresent()) {
var groupId = GroupUtils.getGroupId(message.getGroupContext().get());
- return groupHelper.isGroupBlocked(groupId);
+ return context.getGroupHelper().isGroupBlocked(groupId);
}
}
}
var groupId = GroupUtils.getGroupId(message.getGroupContext().get());
- var group = groupHelper.getGroup(groupId);
+ var group = context.getGroupHelper().getGroup(groupId);
if (group == null) {
return false;
}
- final var recipientId = recipientResolver.resolveRecipient(source);
+ final var recipientId = context.getRecipientHelper().resolveRecipient(source);
if (!group.isMember(recipientId) && !(group.isPendingMember(recipientId) && message.isGroupV2Update())) {
return true;
}
if (message.getGroupContext().get().getGroupV1().isPresent()) {
var groupInfo = message.getGroupContext().get().getGroupV1().get();
var groupId = GroupId.v1(groupInfo.getGroupId());
- var group = groupHelper.getGroup(groupId);
+ var group = context.getGroupHelper().getGroup(groupId);
if (group == null || group instanceof GroupInfoV1) {
var groupV1 = (GroupInfoV1) group;
switch (groupInfo.getType()) {
if (groupInfo.getAvatar().isPresent()) {
var avatar = groupInfo.getAvatar().get();
- groupHelper.downloadGroupAvatar(groupV1.getGroupId(), avatar);
+ context.getGroupHelper().downloadGroupAvatar(groupV1.getGroupId(), avatar);
}
if (groupInfo.getName().isPresent()) {
groupV1.addMembers(groupInfo.getMembers()
.get()
.stream()
- .map(recipientResolver::resolveRecipient)
+ .map(context.getRecipientHelper()::resolveRecipient)
.collect(Collectors.toSet()));
}
final var groupContext = message.getGroupContext().get().getGroupV2().get();
final var groupMasterKey = groupContext.getMasterKey();
- groupHelper.getOrMigrateGroup(groupMasterKey,
- groupContext.getRevision(),
- groupContext.hasSignedGroupChange() ? groupContext.getSignedGroupChange() : null);
+ context.getGroupHelper()
+ .getOrMigrateGroup(groupMasterKey,
+ groupContext.getRevision(),
+ groupContext.hasSignedGroupChange() ? groupContext.getSignedGroupChange() : null);
}
}
// disappearing message timer already stored in the DecryptedGroup
}
} else if (conversationPartnerAddress != null) {
- contactHelper.setExpirationTimer(conversationPartnerAddress, message.getExpiresInSeconds());
+ context.getContactHelper()
+ .setExpirationTimer(conversationPartnerAddress, message.getExpiresInSeconds());
}
}
if (!ignoreAttachments) {
if (message.getAttachments().isPresent()) {
for (var attachment : message.getAttachments().get()) {
- attachmentHelper.downloadAttachment(attachment);
+ context.getAttachmentHelper().downloadAttachment(attachment);
}
}
if (message.getSharedContacts().isPresent()) {
for (var contact : message.getSharedContacts().get()) {
if (contact.getAvatar().isPresent()) {
- attachmentHelper.downloadAttachment(contact.getAvatar().get().getAttachment());
+ context.getAttachmentHelper().downloadAttachment(contact.getAvatar().get().getAttachment());
}
}
}
final var previews = message.getPreviews().get();
for (var preview : previews) {
if (preview.getImage().isPresent()) {
- attachmentHelper.downloadAttachment(preview.getImage().get());
+ context.getAttachmentHelper().downloadAttachment(preview.getImage().get());
}
}
}
for (var quotedAttachment : quote.getAttachments()) {
final var thumbnail = quotedAttachment.getThumbnail();
if (thumbnail != null) {
- attachmentHelper.downloadAttachment(thumbnail);
+ context.getAttachmentHelper().downloadAttachment(thumbnail);
}
}
}
sticker = new Sticker(stickerPackId, messageSticker.getPackKey());
account.getStickerStore().updateSticker(sticker);
}
- jobExecutor.enqueueJob(new RetrieveStickerPackJob(stickerPackId, messageSticker.getPackKey()));
+ context.getJobExecutor().enqueueJob(new RetrieveStickerPackJob(stickerPackId, messageSticker.getPackKey()));
}
return actions;
}