From: AsamK Date: Sun, 5 Sep 2021 09:41:38 +0000 (+0200) Subject: Add possibility to update the device name X-Git-Tag: v0.9.0~19 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/299671480fb79f0abcc67ec5f9ec89fac9605345?ds=inline Add possibility to update the device name --- diff --git a/CHANGELOG.md b/CHANGELOG.md index e2ba6843..fa27507d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ### Added - New global parameter `--trust-new-identities=always` to allow trusting any new identity key without verification +- New parameter `--device-name` for `updateAccount` command to update the device name ## [0.8.5] - 2021-08-07 ### Added diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index c4c77b34..366fb371 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -311,7 +311,7 @@ public class Manager implements Closeable { if (account.getUuid() == null) { account.setUuid(dependencies.getAccountManager().getOwnUuid()); } - updateAccountAttributes(); + updateAccountAttributes(null); } /** @@ -343,14 +343,21 @@ public class Manager implements Closeable { })); } - public void updateAccountAttributes() throws IOException { + public void updateAccountAttributes(String deviceName) throws IOException { + final String encryptedDeviceName; + if (deviceName == null) { + encryptedDeviceName = account.getEncryptedDeviceName(); + } else { + final var privateKey = account.getIdentityKeyPair().getPrivateKey(); + encryptedDeviceName = DeviceNameUtil.encryptDeviceName(deviceName, privateKey); + account.setEncryptedDeviceName(encryptedDeviceName); + } dependencies.getAccountManager() - .setAccountAttributes(account.getEncryptedDeviceName(), + .setAccountAttributes(encryptedDeviceName, null, account.getLocalRegistrationId(), true, - // set legacy pin only if no KBS master key is set - account.getPinMasterKey() == null ? account.getRegistrationLockPin() : null, + null, account.getPinMasterKey() == null ? null : account.getPinMasterKey().deriveRegistrationLock(), account.getSelfUnidentifiedAccessKey(), account.isUnrestrictedUnidentifiedAccess(), 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 e75996c5..efdcf798 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 @@ -818,6 +818,11 @@ public class SignalAccount implements Closeable { return encryptedDeviceName; } + public void setEncryptedDeviceName(final String encryptedDeviceName) { + this.encryptedDeviceName = encryptedDeviceName; + save(); + } + public int getDeviceId() { return deviceId; } diff --git a/man/signal-cli.1.adoc b/man/signal-cli.1.adoc index b8251eb1..b52612be 100644 --- a/man/signal-cli.1.adoc +++ b/man/signal-cli.1.adoc @@ -110,6 +110,9 @@ CAUTION: Only delete your account if you won't use this number again! Update the account attributes on the signal server. Can fix problems with receiving messages. +*-n* NAME, *--device-name* NAME:: +Set a new device name for the main or linked device + === setPin Set a registration lock pin, to prevent others from registering this number. diff --git a/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java b/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java index f2ed6a98..600a38c4 100644 --- a/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java +++ b/src/main/java/org/asamk/signal/commands/UpdateAccountCommand.java @@ -20,14 +20,16 @@ public class UpdateAccountCommand implements JsonRpcLocalCommand { @Override public void attachToSubparser(final Subparser subparser) { subparser.help("Update the account attributes on the signal server."); + subparser.addArgument("-n", "--device-name").help("Specify a name to describe this device."); } @Override public void handleCommand( final Namespace ns, final Manager m, final OutputWriter outputWriter ) throws CommandException { + var deviceName = ns.getString("device-name"); try { - m.updateAccountAttributes(); + m.updateAccountAttributes(deviceName); } catch (IOException e) { throw new IOErrorException("UpdateAccount error: " + e.getMessage()); }