From: AsamK Date: Fri, 11 Feb 2022 16:09:09 +0000 (+0100) Subject: Update self identifiers after whoAmI request X-Git-Tag: v0.10.4~19 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/8985cc26568884d9a365cf265f2761089fa7bd8b Update self identifiers after whoAmI request --- diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java index 3e60ce74..6b7f68f4 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java @@ -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); 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 cc419bea..36e18939 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 @@ -37,6 +37,11 @@ public class UnidentifiedAccessHelper { this.context = context; } + public void rotateSenderCertificates() { + privacySenderCertificate = null; + senderCertificate = null; + } + public List> getAccessFor(List recipients) { return recipients.stream().map(this::getAccessFor).toList(); } diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java index cbe542a9..b95a087d 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java @@ -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; }