From: AsamK Date: Tue, 12 Oct 2021 18:48:56 +0000 (+0200) Subject: Refactor to remove ProfileKeyProvider and UnidentifiedAccessSenderCertificateProvider X-Git-Tag: v0.9.1~12 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/e977f38bdd9d955eafe557d1135d36fdf3056306 Refactor to remove ProfileKeyProvider and UnidentifiedAccessSenderCertificateProvider --- diff --git a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java index 8ccab36b..f88469ac 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/ManagerImpl.java @@ -176,14 +176,13 @@ public class ManagerImpl implements Manager { this.attachmentHelper = new AttachmentHelper(dependencies, attachmentStore); this.pinHelper = new PinHelper(dependencies.getKeyBackupService()); - final var unidentifiedAccessHelper = new UnidentifiedAccessHelper(account::getProfileKey, - account.getProfileStore()::getProfileKey, - this::getRecipientProfile, - this::getSenderCertificate); + final var unidentifiedAccessHelper = new UnidentifiedAccessHelper(account, + dependencies, + account::getProfileKey, + this::getRecipientProfile); this.profileHelper = new ProfileHelper(account, dependencies, avatarStore, - account.getProfileStore()::getProfileKey, unidentifiedAccessHelper::getAccessFor, this::resolveSignalServiceAddress); final GroupV2Helper groupV2Helper = new GroupV2Helper(profileHelper::getRecipientProfileKeyCredential, @@ -782,22 +781,6 @@ public class ManagerImpl implements Manager { } } - private byte[] getSenderCertificate() { - byte[] certificate; - try { - if (account.isPhoneNumberShared()) { - certificate = dependencies.getAccountManager().getSenderCertificate(); - } else { - certificate = dependencies.getAccountManager().getSenderCertificateForPhoneNumberPrivacy(); - } - } catch (IOException e) { - logger.warn("Failed to get sender certificate, ignoring: {}", e.getMessage()); - return null; - } - // TODO cache for a day - return certificate; - } - private RecipientId refreshRegisteredUser(RecipientId recipientId) throws IOException { final var address = resolveSignalServiceAddress(recipientId); if (!address.getNumber().isPresent()) { diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/ProfileHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/ProfileHelper.java index e24d41fa..7a492d9f 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/ProfileHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/ProfileHelper.java @@ -45,7 +45,6 @@ public final class ProfileHelper { private final SignalAccount account; private final SignalDependencies dependencies; private final AvatarStore avatarStore; - private final ProfileKeyProvider profileKeyProvider; private final UnidentifiedAccessProvider unidentifiedAccessProvider; private final SignalServiceAddressResolver addressResolver; @@ -53,14 +52,12 @@ public final class ProfileHelper { final SignalAccount account, final SignalDependencies dependencies, final AvatarStore avatarStore, - final ProfileKeyProvider profileKeyProvider, final UnidentifiedAccessProvider unidentifiedAccessProvider, final SignalServiceAddressResolver addressResolver ) { this.account = account; this.dependencies = dependencies; this.avatarStore = avatarStore; - this.profileKeyProvider = profileKeyProvider; this.unidentifiedAccessProvider = unidentifiedAccessProvider; this.addressResolver = addressResolver; } @@ -296,7 +293,7 @@ public final class ProfileHelper { RecipientId recipientId, SignalServiceProfile.RequestType requestType ) { var unidentifiedAccess = getUnidentifiedAccess(recipientId); - var profileKey = Optional.fromNullable(profileKeyProvider.getProfileKey(recipientId)); + var profileKey = Optional.fromNullable(account.getProfileStore().getProfileKey(recipientId)); final var address = addressResolver.resolveSignalServiceAddress(recipientId); return retrieveProfile(address, profileKey, unidentifiedAccess, requestType); diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/ProfileKeyProvider.java b/lib/src/main/java/org/asamk/signal/manager/helper/ProfileKeyProvider.java deleted file mode 100644 index b98d674e..00000000 --- a/lib/src/main/java/org/asamk/signal/manager/helper/ProfileKeyProvider.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.asamk.signal.manager.helper; - -import org.asamk.signal.manager.storage.recipients.RecipientId; -import org.signal.zkgroup.profiles.ProfileKey; - -public interface ProfileKeyProvider { - - ProfileKey getProfileKey(RecipientId address); -} diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java index 87e23c1b..661a7f96 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java @@ -1,11 +1,16 @@ package org.asamk.signal.manager.helper; +import org.asamk.signal.manager.SignalDependencies; +import org.asamk.signal.manager.storage.SignalAccount; import org.asamk.signal.manager.storage.recipients.RecipientId; import org.signal.libsignal.metadata.certificate.InvalidCertificateException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; +import java.io.IOException; import java.util.List; import java.util.stream.Collectors; @@ -13,24 +18,39 @@ import static org.whispersystems.signalservice.internal.util.Util.getSecretBytes public class UnidentifiedAccessHelper { - private final SelfProfileKeyProvider selfProfileKeyProvider; - - private final ProfileKeyProvider profileKeyProvider; + private final static Logger logger = LoggerFactory.getLogger(UnidentifiedAccessHelper.class); + private final SignalAccount account; + private final SignalDependencies dependencies; + private final SelfProfileKeyProvider selfProfileKeyProvider; private final ProfileProvider profileProvider; - private final UnidentifiedAccessSenderCertificateProvider senderCertificateProvider; - public UnidentifiedAccessHelper( + final SignalAccount account, + final SignalDependencies dependencies, final SelfProfileKeyProvider selfProfileKeyProvider, - final ProfileKeyProvider profileKeyProvider, - final ProfileProvider profileProvider, - final UnidentifiedAccessSenderCertificateProvider senderCertificateProvider + final ProfileProvider profileProvider ) { + this.account = account; + this.dependencies = dependencies; this.selfProfileKeyProvider = selfProfileKeyProvider; - this.profileKeyProvider = profileKeyProvider; this.profileProvider = profileProvider; - this.senderCertificateProvider = senderCertificateProvider; + } + + private byte[] getSenderCertificate() { + byte[] certificate; + try { + if (account.isPhoneNumberShared()) { + certificate = dependencies.getAccountManager().getSenderCertificate(); + } else { + certificate = dependencies.getAccountManager().getSenderCertificateForPhoneNumberPrivacy(); + } + } catch (IOException e) { + logger.warn("Failed to get sender certificate, ignoring: {}", e.getMessage()); + return null; + } + // TODO cache for a day + return certificate; } private byte[] getSelfUnidentifiedAccessKey() { @@ -45,7 +65,7 @@ public class UnidentifiedAccessHelper { switch (targetProfile.getUnidentifiedAccessMode()) { case ENABLED: - var theirProfileKey = profileKeyProvider.getProfileKey(recipient); + var theirProfileKey = account.getProfileStore().getProfileKey(recipient); if (theirProfileKey == null) { return null; } @@ -60,7 +80,7 @@ public class UnidentifiedAccessHelper { public Optional getAccessForSync() { var selfUnidentifiedAccessKey = getSelfUnidentifiedAccessKey(); - var selfUnidentifiedAccessCertificate = senderCertificateProvider.getSenderCertificate(); + var selfUnidentifiedAccessCertificate = getSenderCertificate(); if (selfUnidentifiedAccessKey == null || selfUnidentifiedAccessCertificate == null) { return Optional.absent(); @@ -82,7 +102,7 @@ public class UnidentifiedAccessHelper { public Optional getAccessFor(RecipientId recipient) { var recipientUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipient); var selfUnidentifiedAccessKey = getSelfUnidentifiedAccessKey(); - var selfUnidentifiedAccessCertificate = senderCertificateProvider.getSenderCertificate(); + var selfUnidentifiedAccessCertificate = getSenderCertificate(); if (recipientUnidentifiedAccessKey == null || selfUnidentifiedAccessKey == null diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessSenderCertificateProvider.java b/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessSenderCertificateProvider.java deleted file mode 100644 index b0597346..00000000 --- a/lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessSenderCertificateProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.asamk.signal.manager.helper; - -public interface UnidentifiedAccessSenderCertificateProvider { - - byte[] getSenderCertificate(); -}