]> nmode's Git Repositories - signal-cli/commitdiff
Support saving profiles for users without uuids
authorAsamK <asamk@gmx.de>
Fri, 11 Sep 2020 07:16:31 +0000 (09:16 +0200)
committerAsamK <asamk@gmx.de>
Fri, 11 Sep 2020 07:16:31 +0000 (09:16 +0200)
Fixes #347

src/main/java/org/asamk/signal/storage/profiles/ProfileStore.java
src/main/java/org/asamk/signal/storage/protocol/JsonIdentityKeyStore.java
src/main/java/org/asamk/signal/storage/protocol/JsonSessionStore.java

index 691ac0ece6e9dc3c7443d3c00e3b97907edffc0a..43a39671befdf4c16c91a015f1382e8d245daada 100644 (file)
@@ -36,8 +36,8 @@ public class ProfileStore {
         return profiles.get(serviceAddress);
     }
 
-    public SignalProfileEntry updateProfile(SignalServiceAddress serviceAddress, SignalProfileEntry profile) {
-        return profiles.put(serviceAddress, profile);
+    public void updateProfile(SignalServiceAddress serviceAddress, SignalProfileEntry profile) {
+        profiles.put(serviceAddress, profile);
     }
 
     public static class ProfileStoreDeserializer extends JsonDeserializer<Map<SignalServiceAddress, SignalProfileEntry>> {
@@ -49,17 +49,21 @@ public class ProfileStore {
             Map<SignalServiceAddress, SignalProfileEntry> addresses = new HashMap<>();
 
             if (node.isArray()) {
-                for (JsonNode recipient : node) {
-                    String recipientName = recipient.get("name").asText();
-                    UUID uuid = UuidUtil.parseOrThrow(recipient.get("uuid").asText());
-                    final SignalServiceAddress serviceAddress = new SignalServiceAddress(uuid, recipientName);
+                for (JsonNode entry : node) {
+                    String name = entry.hasNonNull("name")
+                            ? entry.get("name").asText()
+                            : null;
+                    UUID uuid = entry.hasNonNull("uuid")
+                            ? UuidUtil.parseOrNull(entry.get("uuid").asText())
+                            : null;
+                    final SignalServiceAddress serviceAddress = new SignalServiceAddress(uuid, name);
                     ProfileKey profileKey = null;
                     try {
-                        profileKey = new ProfileKey(Base64.decode(recipient.get("profileKey").asText()));
+                        profileKey = new ProfileKey(Base64.decode(entry.get("profileKey").asText()));
                     } catch (InvalidInputException ignored) {
                     }
-                    long lastUpdateTimestamp = recipient.get("lastUpdateTimestamp").asLong();
-                    SignalProfile profile = jsonProcessor.treeToValue(recipient.get("profile"), SignalProfile.class);
+                    long lastUpdateTimestamp = entry.get("lastUpdateTimestamp").asLong();
+                    SignalProfile profile = jsonProcessor.treeToValue(entry.get("profile"), SignalProfile.class);
                     addresses.put(serviceAddress, new SignalProfileEntry(profileKey, lastUpdateTimestamp, profile));
                 }
             }
@@ -77,8 +81,12 @@ public class ProfileStore {
                 final SignalServiceAddress address = entry.getKey();
                 final SignalProfileEntry profileEntry = entry.getValue();
                 json.writeStartObject();
-                json.writeStringField("name", address.getNumber().get());
-                json.writeStringField("uuid", address.getUuid().get().toString());
+                if (address.getNumber().isPresent()) {
+                    json.writeStringField("name", address.getNumber().get());
+                }
+                if (address.getUuid().isPresent()) {
+                    json.writeStringField("uuid", address.getUuid().get().toString());
+                }
                 json.writeStringField("profileKey", Base64.encodeBytes(profileEntry.getProfileKey().serialize()));
                 json.writeNumberField("lastUpdateTimestamp", profileEntry.getLastUpdateTimestamp());
                 json.writeObjectField("profile", profileEntry.getProfile());
index fcb71c5ef7f5b82a1b17ded652d0e8f3e7be1580..45c4024c355e3b2a04744c79da9af094686b0d2c 100644 (file)
@@ -190,7 +190,7 @@ public class JsonIdentityKeyStore implements IdentityKeyStore {
                 JsonNode trustedKeysNode = node.get("trustedKeys");
                 if (trustedKeysNode.isArray()) {
                     for (JsonNode trustedKey : trustedKeysNode) {
-                        String trustedKeyName = trustedKey.has("name")
+                        String trustedKeyName = trustedKey.hasNonNull("name")
                                 ? trustedKey.get("name").asText()
                                 : null;
 
index 1505f1b0db350db7f83bb70cbbaca69af6ae12ad..b1ca622af5af5ac02adb6fbbc8fcc3941a5c9e95 100644 (file)
@@ -133,7 +133,7 @@ class JsonSessionStore implements SessionStore {
 
             if (node.isArray()) {
                 for (JsonNode session : node) {
-                    String sessionName = session.has("name")
+                    String sessionName = session.hasNonNull("name")
                             ? session.get("name").asText()
                             : null;
                     if (UuidUtil.isUuid(sessionName)) {