]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java
Refactor contact and profile store
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / UnidentifiedAccessHelper.java
index a3b8e3b556dcd1e5529de412934c7b7948228928..0b82fb18ef03b83b041bc08c202f6b5e658651b7 100644 (file)
@@ -1,10 +1,10 @@
 package org.asamk.signal.manager.helper;
 
+import org.asamk.signal.manager.storage.recipients.RecipientId;
 import org.signal.libsignal.metadata.certificate.InvalidCertificateException;
 import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
-import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 
 import java.util.Collection;
 import java.util.List;
@@ -38,22 +38,25 @@ public class UnidentifiedAccessHelper {
         return UnidentifiedAccess.deriveAccessKeyFrom(selfProfileKeyProvider.getProfileKey());
     }
 
-    public byte[] getTargetUnidentifiedAccessKey(SignalServiceAddress recipient) {
-        var theirProfileKey = profileKeyProvider.getProfileKey(recipient);
-        if (theirProfileKey == null) {
-            return null;
-        }
-
+    public byte[] getTargetUnidentifiedAccessKey(RecipientId recipient) {
         var targetProfile = profileProvider.getProfile(recipient);
-        if (targetProfile == null || targetProfile.getUnidentifiedAccess() == null) {
+        if (targetProfile == null) {
             return null;
         }
 
-        if (targetProfile.isUnrestrictedUnidentifiedAccess()) {
-            return createUnrestrictedUnidentifiedAccess();
+        switch (targetProfile.getUnidentifiedAccessMode()) {
+            case ENABLED:
+                var theirProfileKey = profileKeyProvider.getProfileKey(recipient);
+                if (theirProfileKey == null) {
+                    return null;
+                }
+
+                return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey);
+            case UNRESTRICTED:
+                return createUnrestrictedUnidentifiedAccess();
+            default:
+                return null;
         }
-
-        return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey);
     }
 
     public Optional<UnidentifiedAccessPair> getAccessForSync() {
@@ -73,11 +76,11 @@ public class UnidentifiedAccessHelper {
         }
     }
 
-    public List<Optional<UnidentifiedAccessPair>> getAccessFor(Collection<SignalServiceAddress> recipients) {
+    public List<Optional<UnidentifiedAccessPair>> getAccessFor(Collection<RecipientId> recipients) {
         return recipients.stream().map(this::getAccessFor).collect(Collectors.toList());
     }
 
-    public Optional<UnidentifiedAccessPair> getAccessFor(SignalServiceAddress recipient) {
+    public Optional<UnidentifiedAccessPair> getAccessFor(RecipientId recipient) {
         var recipientUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipient);
         var selfUnidentifiedAccessKey = getSelfUnidentifiedAccessKey();
         var selfUnidentifiedAccessCertificate = senderCertificateProvider.getSenderCertificate();