X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/ae8479df8ca04262e54c105bed72ba93a127e48e..4d83d2168ae78fd414a4dcce5aa630df240aedb8:/src/main/java/cli/JsonPreKeyStore.java diff --git a/src/main/java/cli/JsonPreKeyStore.java b/src/main/java/cli/JsonPreKeyStore.java index a0133ec8..1ae297ec 100644 --- a/src/main/java/cli/JsonPreKeyStore.java +++ b/src/main/java/cli/JsonPreKeyStore.java @@ -1,7 +1,9 @@ package cli; -import org.json.JSONArray; -import org.json.JSONObject; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.*; import org.whispersystems.libaxolotl.InvalidKeyIdException; import org.whispersystems.libaxolotl.state.PreKeyRecord; import org.whispersystems.libaxolotl.state.PreKeyStore; @@ -14,27 +16,13 @@ class JsonPreKeyStore implements PreKeyStore { private final Map store = new HashMap<>(); - public JsonPreKeyStore() { - } + public JsonPreKeyStore() { - public JsonPreKeyStore(JSONArray list) { - for (int i = 0; i < list.length(); i++) { - JSONObject k = list.getJSONObject(i); - try { - store.put(k.getInt("id"), Base64.decode(k.getString("record"))); - } catch (IOException e) { - System.out.println("Error while decoding prekey for: " + k.getString("name")); - } - } } - public JSONArray getJson() { - JSONArray result = new JSONArray(); - for (Integer id : store.keySet()) { - result.put(new JSONObject().put("id", id.toString()).put("record", Base64.encodeBytes(store.get(id)))); - } - return result; + public void addPreKeys(Map preKeys) { + store.putAll(preKeys); } @Override @@ -64,4 +52,46 @@ class JsonPreKeyStore implements PreKeyStore { public void removePreKey(int preKeyId) { store.remove(preKeyId); } + + public static class JsonPreKeyStoreDeserializer extends JsonDeserializer { + + @Override + public JsonPreKeyStore deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + JsonNode node = jsonParser.getCodec().readTree(jsonParser); + + + Map preKeyMap = new HashMap<>(); + if (node.isArray()) { + for (JsonNode preKey : node) { + Integer preKeyId = preKey.get("id").asInt(); + try { + preKeyMap.put(preKeyId, Base64.decode(preKey.get("record").asText())); + } catch (IOException e) { + System.out.println(String.format("Error while decoding prekey for: %s", preKeyId)); + } + } + } + + JsonPreKeyStore keyStore = new JsonPreKeyStore(); + keyStore.addPreKeys(preKeyMap); + + return keyStore; + + } + } + + public static class JsonPreKeyStoreSerializer extends JsonSerializer { + + @Override + public void serialize(JsonPreKeyStore jsonPreKeyStore, JsonGenerator json, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { + json.writeStartArray(); + for (Map.Entry preKey : jsonPreKeyStore.store.entrySet()) { + json.writeStartObject(); + json.writeNumberField("id", preKey.getKey()); + json.writeStringField("record", Base64.encodeBytes(preKey.getValue())); + json.writeEndObject(); + } + json.writeEndArray(); + } + } }