]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/storage/SignalAccount.java
Use SignalServiceAddress in more places
[signal-cli] / src / main / java / org / asamk / signal / storage / SignalAccount.java
index 151835cb6afb3ab810e41281ee4d7f63018d61e3..08ed5139561fc4008050fb2dc255c81e40a86a2b 100644 (file)
@@ -16,6 +16,8 @@ import org.asamk.signal.storage.protocol.JsonSignalProtocolStore;
 import org.asamk.signal.storage.threads.JsonThreadStore;
 import org.asamk.signal.util.IOUtils;
 import org.asamk.signal.util.Util;
+import org.signal.zkgroup.InvalidInputException;
+import org.signal.zkgroup.profiles.ProfileKey;
 import org.whispersystems.libsignal.IdentityKeyPair;
 import org.whispersystems.libsignal.state.PreKeyRecord;
 import org.whispersystems.libsignal.state.SignedPreKeyRecord;
@@ -30,6 +32,7 @@ import java.nio.channels.Channels;
 import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
 import java.util.Collection;
+import java.util.UUID;
 
 public class SignalAccount {
 
@@ -37,12 +40,13 @@ public class SignalAccount {
     private FileChannel fileChannel;
     private FileLock lock;
     private String username;
+    private UUID uuid;
     private int deviceId = SignalServiceAddress.DEFAULT_DEVICE_ID;
     private boolean isMultiDevice = false;
     private String password;
     private String registrationLockPin;
     private String signalingKey;
-    private byte[] profileKey;
+    private ProfileKey profileKey;
     private int preKeyIdOffset;
     private int nextSignedPreKeyId;
 
@@ -70,7 +74,7 @@ public class SignalAccount {
         return account;
     }
 
-    public static SignalAccount create(String dataPath, String username, IdentityKeyPair identityKey, int registrationId, byte[] profileKey) throws IOException {
+    public static SignalAccount create(String dataPath, String username, IdentityKeyPair identityKey, int registrationId, ProfileKey profileKey) throws IOException {
         IOUtils.createPrivateDirectories(dataPath);
 
         SignalAccount account = new SignalAccount();
@@ -87,7 +91,7 @@ public class SignalAccount {
         return account;
     }
 
-    public static SignalAccount createLinkedAccount(String dataPath, String username, String password, int deviceId, IdentityKeyPair identityKey, int registrationId, String signalingKey, byte[] profileKey) throws IOException {
+    public static SignalAccount createLinkedAccount(String dataPath, String username, String password, int deviceId, IdentityKeyPair identityKey, int registrationId, String signalingKey, ProfileKey profileKey) throws IOException {
         IOUtils.createPrivateDirectories(dataPath);
 
         SignalAccount account = new SignalAccount();
@@ -161,7 +165,11 @@ public class SignalAccount {
             nextSignedPreKeyId = 0;
         }
         if (rootNode.has("profileKey")) {
-            profileKey = Base64.decode(Util.getNotNullNode(rootNode, "profileKey").asText());
+            try {
+                profileKey = new ProfileKey(Base64.decode(Util.getNotNullNode(rootNode, "profileKey").asText()));
+            } catch (InvalidInputException e) {
+                throw new IOException("Config file contains an invalid profileKey, needs to be base64 encoded array of 32 bytes", e);
+            }
         }
 
         signalProtocolStore = jsonProcessor.convertValue(Util.getNotNullNode(rootNode, "axolotlStore"), JsonSignalProtocolStore.class);
@@ -203,7 +211,7 @@ public class SignalAccount {
                 .put("signalingKey", signalingKey)
                 .put("preKeyIdOffset", preKeyIdOffset)
                 .put("nextSignedPreKeyId", nextSignedPreKeyId)
-                .put("profileKey", Base64.encodeBytes(profileKey))
+                .put("profileKey", Base64.encodeBytes(profileKey.serialize()))
                 .put("registered", registered)
                 .putPOJO("axolotlStore", signalProtocolStore)
                 .putPOJO("groupStore", groupStore)
@@ -271,8 +279,12 @@ public class SignalAccount {
         return username;
     }
 
+    public UUID getUuid() {
+        return uuid;
+    }
+
     public SignalServiceAddress getSelfAddress() {
-        return new SignalServiceAddress(null, username);
+        return new SignalServiceAddress(uuid, username);
     }
 
     public int getDeviceId() {
@@ -307,11 +319,11 @@ public class SignalAccount {
         this.signalingKey = signalingKey;
     }
 
-    public byte[] getProfileKey() {
+    public ProfileKey getProfileKey() {
         return profileKey;
     }
 
-    public void setProfileKey(final byte[] profileKey) {
+    public void setProfileKey(final ProfileKey profileKey) {
         this.profileKey = profileKey;
     }