]> nmode's Git Repositories - signal-cli/commitdiff
Fix saving username link components
authorAsamK <asamk@gmx.de>
Sat, 10 Feb 2024 10:54:32 +0000 (11:54 +0100)
committerAsamK <asamk@gmx.de>
Sat, 10 Feb 2024 10:54:32 +0000 (11:54 +0100)
graalvm-config-dir/reflect-config.json
lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java

index d4548612ce40187a3a2e034d8efa2ee4253d848a..8be375768fb7a86c0f459c29b62703b726e7c24c 100644 (file)
   "allDeclaredFields":true,
   "queryAllDeclaredMethods":true,
   "queryAllDeclaredConstructors":true,
-  "methods":[{"name":"<init>","parameterTypes":["int","java.lang.String","boolean","java.lang.String","java.lang.String","java.lang.String","int","boolean","java.lang.String","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","java.lang.String","java.lang.String","java.lang.String","java.lang.String"] }, {"name":"aciAccountData","parameterTypes":[] }, {"name":"deviceId","parameterTypes":[] }, {"name":"encryptedDeviceName","parameterTypes":[] }, {"name":"isMultiDevice","parameterTypes":[] }, {"name":"number","parameterTypes":[] }, {"name":"password","parameterTypes":[] }, {"name":"pinMasterKey","parameterTypes":[] }, {"name":"pniAccountData","parameterTypes":[] }, {"name":"profileKey","parameterTypes":[] }, {"name":"registered","parameterTypes":[] }, {"name":"registrationLockPin","parameterTypes":[] }, {"name":"serviceEnvironment","parameterTypes":[] }, {"name":"storageKey","parameterTypes":[] }, {"name":"username","parameterTypes":[] }, {"name":"version","parameterTypes":[] }]
+  "methods":[{"name":"<init>","parameterTypes":["int","java.lang.String","boolean","java.lang.String","java.lang.String","java.lang.String","int","boolean","java.lang.String","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","java.lang.String","java.lang.String","java.lang.String","java.lang.String"] }, {"name":"<init>","parameterTypes":["int","java.lang.String","boolean","java.lang.String","java.lang.String","java.lang.String","int","boolean","java.lang.String","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String"] }, {"name":"aciAccountData","parameterTypes":[] }, {"name":"deviceId","parameterTypes":[] }, {"name":"encryptedDeviceName","parameterTypes":[] }, {"name":"isMultiDevice","parameterTypes":[] }, {"name":"number","parameterTypes":[] }, {"name":"password","parameterTypes":[] }, {"name":"pinMasterKey","parameterTypes":[] }, {"name":"pniAccountData","parameterTypes":[] }, {"name":"profileKey","parameterTypes":[] }, {"name":"registered","parameterTypes":[] }, {"name":"registrationLockPin","parameterTypes":[] }, {"name":"serviceEnvironment","parameterTypes":[] }, {"name":"storageKey","parameterTypes":[] }, {"name":"username","parameterTypes":[] }, {"name":"usernameLinkEntropy","parameterTypes":[] }, {"name":"usernameLinkServerId","parameterTypes":[] }, {"name":"version","parameterTypes":[] }]
 },
 {
   "name":"org.asamk.signal.manager.storage.SignalAccount$Storage$AccountData",
   "queryAllDeclaredMethods":true,
   "queryAllDeclaredConstructors":true
 },
+{
+  "name":"org.whispersystems.signalservice.internal.push.ConfirmUsernameResponse",
+  "allDeclaredFields":true,
+  "queryAllDeclaredMethods":true,
+  "queryAllDeclaredConstructors":true,
+  "methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.util.UUID"] }, {"name":"<init>","parameterTypes":["java.lang.String","java.util.UUID","int","kotlin.jvm.internal.DefaultConstructorMarker"] }]
+},
 {
   "name":"org.whispersystems.signalservice.internal.push.DeviceCode",
   "allDeclaredFields":true,
   "name":"org.whispersystems.signalservice.internal.storage.protos.AccountRecord$PinnedConversation$Contact",
   "fields":[{"name":"e164_"}, {"name":"serviceId_"}, {"name":"uuid_"}]
 },
+{
+  "name":"org.whispersystems.signalservice.internal.storage.protos.AccountRecord$UsernameLink",
+  "allDeclaredFields":true
+},
 {
   "name":"org.whispersystems.signalservice.internal.storage.protos.ContactRecord",
   "allDeclaredFields":true
index e0d6598e49f39ce6b150d52c6ec7294569a6dd5b..5f37c4026f4fc89d6b80b585503e67f035718bc3 100644 (file)
@@ -102,6 +102,7 @@ import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
+import java.util.UUID;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
@@ -499,7 +500,10 @@ public class SignalAccount implements Closeable {
                             e);
                 }
             }
-
+            if (storage.usernameLinkEntropy != null && storage.usernameLinkServerId != null) {
+                usernameLink = new UsernameLinkComponents(base64.decode(storage.usernameLinkEntropy),
+                        UUID.fromString(storage.usernameLinkServerId));
+            }
         }
 
         if (migratedLegacyConfig) {
@@ -964,7 +968,9 @@ public class SignalAccount implements Closeable {
                     registrationLockPin,
                     pinMasterKey == null ? null : base64.encodeToString(pinMasterKey.serialize()),
                     storageKey == null ? null : base64.encodeToString(storageKey.serialize()),
-                    profileKey == null ? null : base64.encodeToString(profileKey.serialize()));
+                    profileKey == null ? null : base64.encodeToString(profileKey.serialize()),
+                    usernameLink == null ? null : base64.encodeToString(usernameLink.getEntropy()),
+                    usernameLink == null ? null : usernameLink.getServerId().toString());
             try {
                 try (var output = new ByteArrayOutputStream()) {
                     // Write to memory first to prevent corrupting the file in case of serialization errors
@@ -1853,7 +1859,9 @@ public class SignalAccount implements Closeable {
             String registrationLockPin,
             String pinMasterKey,
             String storageKey,
-            String profileKey
+            String profileKey,
+            String usernameLinkEntropy,
+            String usernameLinkServerId
     ) {
 
         public record AccountData(