]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/protocol/LegacyJsonPreKeyStore.java
7412f95ad87ee0919bfc57becec460c750fb9fdc
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / protocol / LegacyJsonPreKeyStore.java
1 package org.asamk.signal.manager.storage.protocol;
2
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;
7
8 import java.io.IOException;
9 import java.util.Base64;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 public class LegacyJsonPreKeyStore {
14
15 private final Map<Integer, byte[]> preKeys;
16
17 private LegacyJsonPreKeyStore(final Map<Integer, byte[]> preKeys) {
18 this.preKeys = preKeys;
19 }
20
21 public Map<Integer, byte[]> getPreKeys() {
22 return preKeys;
23 }
24
25 public static class JsonPreKeyStoreDeserializer extends JsonDeserializer<LegacyJsonPreKeyStore> {
26
27 @Override
28 public LegacyJsonPreKeyStore deserialize(
29 JsonParser jsonParser, DeserializationContext deserializationContext
30 ) throws IOException {
31 JsonNode node = jsonParser.getCodec().readTree(jsonParser);
32
33 var preKeyMap = new HashMap<Integer, byte[]>();
34 if (node.isArray()) {
35 for (var preKey : node) {
36 final var preKeyId = preKey.get("id").asInt();
37 final var preKeyRecord = Base64.getDecoder().decode(preKey.get("record").asText());
38 preKeyMap.put(preKeyId, preKeyRecord);
39 }
40 }
41
42 return new LegacyJsonPreKeyStore(preKeyMap);
43 }
44 }
45 }