From: Vincent Olivier Date: Tue, 20 Nov 2018 22:47:10 +0000 (-0500) Subject: Manager : removeLinkedDevices updates isMultiDevice and saves the account X-Git-Tag: v0.6.1~6 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/cf972e5b6c6ae51aeb8a3d4cad95d9da75b42968?hp=7e897fa6d0aaa87646b51efa3ee1a5ecfaa3865e Manager : removeLinkedDevices updates isMultiDevice and saves the account Manager : addDevice, getLinkedDevices save the account SignalAccount : save/load isMultiDevice SignalAccount : save profileKey SignalAccount : registrationLockPin doesn't automagically becomes the "null" string, and stays null if null --- diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index f8870a72..cb49d463 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -248,11 +248,15 @@ public class Manager implements Signal { public List getLinkedDevices() throws IOException { List devices = accountManager.getDevices(); account.setMultiDevice(devices.size() > 1); + account.save(); return devices; } public void removeLinkedDevices(int deviceId) throws IOException { accountManager.removeDevice(deviceId); + List devices = accountManager.getDevices(); + account.setMultiDevice(devices.size() > 1); + account.save(); } public void addDeviceLink(URI linkUri) throws IOException, InvalidKeyException { @@ -267,6 +271,7 @@ public class Manager implements Signal { accountManager.addDevice(deviceIdentifier, deviceKey, identityKeyPair, Optional.of(account.getProfileKey()), verificationCode); account.setMultiDevice(true); + account.save(); } private List generatePreKeys() { diff --git a/src/main/java/org/asamk/signal/storage/SignalAccount.java b/src/main/java/org/asamk/signal/storage/SignalAccount.java index cdc3efa5..4378d052 100644 --- a/src/main/java/org/asamk/signal/storage/SignalAccount.java +++ b/src/main/java/org/asamk/signal/storage/SignalAccount.java @@ -135,10 +135,11 @@ public class SignalAccount { if (node != null) { deviceId = node.asInt(); } + if (rootNode.has("isMultiDevice")) isMultiDevice = Util.getNotNullNode(rootNode, "isMultiDevice").asBoolean(); username = Util.getNotNullNode(rootNode, "username").asText(); password = Util.getNotNullNode(rootNode, "password").asText(); JsonNode pinNode = rootNode.get("registrationLockPin"); - registrationLockPin = pinNode == null ? null : pinNode.asText(); + registrationLockPin = pinNode == null || pinNode.isNull() ? null : pinNode.asText(); if (rootNode.has("signalingKey")) { signalingKey = Util.getNotNullNode(rootNode, "signalingKey").asText(); } @@ -189,11 +190,13 @@ public class SignalAccount { ObjectNode rootNode = jsonProcessor.createObjectNode(); rootNode.put("username", username) .put("deviceId", deviceId) + .put("isMultiDevice", isMultiDevice) .put("password", password) .put("registrationLockPin", registrationLockPin) .put("signalingKey", signalingKey) .put("preKeyIdOffset", preKeyIdOffset) .put("nextSignedPreKeyId", nextSignedPreKeyId) + .put("profileKey", Base64.encodeBytes(profileKey)) .put("registered", registered) .putPOJO("axolotlStore", signalProtocolStore) .putPOJO("groupStore", groupStore)