From: AsamK Date: Fri, 11 Sep 2020 07:16:31 +0000 (+0200) Subject: Support saving profiles for users without uuids X-Git-Tag: v0.6.10~4 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/2ccff8f51deff3f16d3af75ea230a095c0d46b0f Support saving profiles for users without uuids Fixes #347 --- diff --git a/src/main/java/org/asamk/signal/storage/profiles/ProfileStore.java b/src/main/java/org/asamk/signal/storage/profiles/ProfileStore.java index 691ac0ec..43a39671 100644 --- a/src/main/java/org/asamk/signal/storage/profiles/ProfileStore.java +++ b/src/main/java/org/asamk/signal/storage/profiles/ProfileStore.java @@ -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> { @@ -49,17 +49,21 @@ public class ProfileStore { Map 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()); diff --git a/src/main/java/org/asamk/signal/storage/protocol/JsonIdentityKeyStore.java b/src/main/java/org/asamk/signal/storage/protocol/JsonIdentityKeyStore.java index fcb71c5e..45c4024c 100644 --- a/src/main/java/org/asamk/signal/storage/protocol/JsonIdentityKeyStore.java +++ b/src/main/java/org/asamk/signal/storage/protocol/JsonIdentityKeyStore.java @@ -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; diff --git a/src/main/java/org/asamk/signal/storage/protocol/JsonSessionStore.java b/src/main/java/org/asamk/signal/storage/protocol/JsonSessionStore.java index 1505f1b0..b1ca622a 100644 --- a/src/main/java/org/asamk/signal/storage/protocol/JsonSessionStore.java +++ b/src/main/java/org/asamk/signal/storage/protocol/JsonSessionStore.java @@ -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)) {