1 package org
.asamk
.signal
.manager
.storage
.protocol
;
3 import com
.fasterxml
.jackson
.core
.JsonParser
;
4 import com
.fasterxml
.jackson
.databind
.DeserializationContext
;
5 import com
.fasterxml
.jackson
.databind
.JsonDeserializer
;
6 import com
.fasterxml
.jackson
.databind
.JsonNode
;
8 import org
.asamk
.signal
.manager
.storage
.Utils
;
9 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientAddress
;
10 import org
.whispersystems
.signalservice
.api
.push
.ServiceId
.ACI
;
11 import org
.whispersystems
.signalservice
.api
.util
.UuidUtil
;
13 import java
.io
.IOException
;
14 import java
.util
.ArrayList
;
15 import java
.util
.Base64
;
16 import java
.util
.List
;
18 public class LegacyJsonSessionStore
{
20 private final List
<LegacySessionInfo
> sessions
;
22 private LegacyJsonSessionStore(final List
<LegacySessionInfo
> sessions
) {
23 this.sessions
= sessions
;
26 public List
<LegacySessionInfo
> getSessions() {
30 public static class JsonSessionStoreDeserializer
extends JsonDeserializer
<LegacyJsonSessionStore
> {
33 public LegacyJsonSessionStore
deserialize(
34 JsonParser jsonParser
, DeserializationContext deserializationContext
35 ) throws IOException
{
36 JsonNode node
= jsonParser
.getCodec().readTree(jsonParser
);
38 var sessions
= new ArrayList
<LegacySessionInfo
>();
41 for (var session
: node
) {
42 var sessionName
= session
.hasNonNull("name") ? session
.get("name").asText() : null;
43 if (UuidUtil
.isUuid(sessionName
)) {
44 // Ignore sessions that were incorrectly created with UUIDs as name
48 var uuid
= session
.hasNonNull("uuid") ? UuidUtil
.parseOrNull(session
.get("uuid").asText()) : null;
49 final var address
= uuid
== null
50 ? Utils
.getRecipientAddressFromLegacyIdentifier(sessionName
)
51 : new RecipientAddress(ACI
.from(uuid
), sessionName
);
52 final var deviceId
= session
.get("deviceId").asInt();
53 final var record = Base64
.getDecoder().decode(session
.get("record").asText());
54 var sessionInfo
= new LegacySessionInfo(address
, deviceId
, record);
55 sessions
.add(sessionInfo
);
59 return new LegacyJsonSessionStore(sessions
);