1 package org.asamk.signal.manager.storage.recipients; 2 3 import com.fasterxml.jackson.annotation.JsonProperty; 4 import com.fasterxml.jackson.core.JsonParser; 5 import com.fasterxml.jackson.databind.DeserializationContext; 6 import com.fasterxml.jackson.databind.JsonDeserializer; 7 import com.fasterxml.jackson.databind.JsonNode; 8 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 9 10 import org.whispersystems.signalservice.api.util.UuidUtil; 11 12 import java.io.IOException; 13 import java.util.ArrayList; 14 import java.util.List; 15 16 public class LegacyRecipientStore { 17 18 @JsonProperty("recipientStore") 19 @JsonDeserialize(using = RecipientStoreDeserializer.class) 20 private final List<RecipientAddress> addresses = new ArrayList<>(); 21 getAddresses()22 public List<RecipientAddress> getAddresses() { 23 return addresses; 24 } 25 26 public static class RecipientStoreDeserializer extends JsonDeserializer<List<RecipientAddress>> { 27 28 @Override deserialize( JsonParser jsonParser, DeserializationContext deserializationContext )29 public List<RecipientAddress> deserialize( 30 JsonParser jsonParser, DeserializationContext deserializationContext 31 ) throws IOException { 32 JsonNode node = jsonParser.getCodec().readTree(jsonParser); 33 34 var addresses = new ArrayList<RecipientAddress>(); 35 36 if (node.isArray()) { 37 for (var recipient : node) { 38 var recipientName = recipient.get("name").asText(); 39 var uuid = UuidUtil.parseOrThrow(recipient.get("uuid").asText()); 40 addresses.add(new RecipientAddress(uuid, recipientName)); 41 } 42 } 43 44 return addresses; 45 } 46 } 47 } 48