]> nmode's Git Repositories - signal-cli/commitdiff
Update self identifiers after whoAmI request
authorAsamK <asamk@gmx.de>
Fri, 11 Feb 2022 16:09:09 +0000 (17:09 +0100)
committerAsamK <asamk@gmx.de>
Fri, 11 Feb 2022 20:03:54 +0000 (21:03 +0100)
lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java
lib/src/main/java/org/asamk/signal/manager/helper/UnidentifiedAccessHelper.java
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java

index 3e60ce74281ba8e5b9d91aaf1743ddf446340dae..6b7f68f40ea6dd8b94506bd4cd5e74d0a2d770be 100644 (file)
@@ -52,9 +52,7 @@ public class AccountHelper {
         try {
             context.getPreKeyHelper().refreshPreKeysIfNecessary();
             if (account.getAci() == null) {
-                final var aci = ACI.parseOrNull(dependencies.getAccountManager().getWhoAmI().getAci());
-                account.setAci(aci);
-                context.getAccountFileUpdater().updateAccountIdentifiers(account.getNumber(), aci);
+                checkWhoAmiI();
             }
             updateAccountAttributes();
         } catch (AuthorizationFailedException e) {
@@ -63,6 +61,27 @@ public class AccountHelper {
         }
     }
 
+    public void checkWhoAmiI() throws IOException {
+        final var whoAmI = dependencies.getAccountManager().getWhoAmI();
+        final var number = whoAmI.getNumber();
+        final var aci = ACI.parseOrNull(whoAmI.getAci());
+        if (number.equals(account.getNumber()) && aci.equals(account.getAci())) {
+            return;
+        }
+
+        updateSelfIdentifiers(number, aci);
+    }
+
+    private void updateSelfIdentifiers(final String number, final ACI aci) {
+        account.setNumber(number);
+        account.setAci(aci);
+        account.getRecipientStore().resolveRecipientTrusted(account.getSelfRecipientAddress());
+        context.getAccountFileUpdater().updateAccountIdentifiers(account.getNumber(), account.getAci());
+        // TODO check and update remote storage
+        context.getUnidentifiedAccessHelper().rotateSenderCertificates();
+        dependencies.getSignalWebSocket().forceNewWebSockets();
+    }
+
     public void setDeviceName(String deviceName) {
         final var privateKey = account.getIdentityKeyPair().getPrivateKey();
         final var encryptedDeviceName = DeviceNameUtil.encryptDeviceName(deviceName, privateKey);
index cc419beaad668d90cc88a6aacce1be9919f9bcd9..36e1893916542c3a5865a74ff6e9262dfff87089 100644 (file)
@@ -37,6 +37,11 @@ public class UnidentifiedAccessHelper {
         this.context = context;
     }
 
+    public void rotateSenderCertificates() {
+        privacySenderCertificate = null;
+        senderCertificate = null;
+    }
+
     public List<Optional<UnidentifiedAccessPair>> getAccessFor(List<RecipientId> recipients) {
         return recipients.stream().map(this::getAccessFor).toList();
     }
index cbe542a99e3abccd3f7ecc56c784b311173b3df5..b95a087ded1115945e080d8a1fee90667eebe246 100644 (file)
@@ -930,6 +930,11 @@ public class SignalAccount implements Closeable {
         return number;
     }
 
+    public void setNumber(final String number) {
+        this.number = number;
+        save();
+    }
+
     public ACI getAci() {
         return aci;
     }