]> nmode's Git Repositories - signal-cli/blob - src/main/java/cli/JsonSignedPreKeyStore.java
Add version to user agent string
[signal-cli] / src / main / java / cli / JsonSignedPreKeyStore.java
1 package cli;
2
3 import org.json.JSONArray;
4 import org.json.JSONObject;
5 import org.whispersystems.libaxolotl.InvalidKeyIdException;
6 import org.whispersystems.libaxolotl.state.SignedPreKeyRecord;
7 import org.whispersystems.libaxolotl.state.SignedPreKeyStore;
8
9 import java.io.IOException;
10 import java.util.HashMap;
11 import java.util.LinkedList;
12 import java.util.List;
13 import java.util.Map;
14
15 class JsonSignedPreKeyStore implements SignedPreKeyStore {
16
17 private final Map<Integer, byte[]> store = new HashMap<>();
18
19 public JsonSignedPreKeyStore() {
20
21 }
22
23 public JsonSignedPreKeyStore(JSONArray list) {
24 for (int i = 0; i < list.length(); i++) {
25 JSONObject k = list.getJSONObject(i);
26 try {
27 store.put(k.getInt("id"), Base64.decode(k.getString("record")));
28 } catch (IOException e) {
29 System.out.println("Error while decoding prekey for: " + k.getString("name"));
30 }
31 }
32 }
33
34 public JSONArray getJson() {
35 JSONArray result = new JSONArray();
36 for (Integer id : store.keySet()) {
37 result.put(new JSONObject().put("id", id.toString()).put("record", Base64.encodeBytes(store.get(id))));
38 }
39 return result;
40 }
41
42 @Override
43 public SignedPreKeyRecord loadSignedPreKey(int signedPreKeyId) throws InvalidKeyIdException {
44 try {
45 if (!store.containsKey(signedPreKeyId)) {
46 throw new InvalidKeyIdException("No such signedprekeyrecord! " + signedPreKeyId);
47 }
48
49 return new SignedPreKeyRecord(store.get(signedPreKeyId));
50 } catch (IOException e) {
51 throw new AssertionError(e);
52 }
53 }
54
55 @Override
56 public List<SignedPreKeyRecord> loadSignedPreKeys() {
57 try {
58 List<SignedPreKeyRecord> results = new LinkedList<>();
59
60 for (byte[] serialized : store.values()) {
61 results.add(new SignedPreKeyRecord(serialized));
62 }
63
64 return results;
65 } catch (IOException e) {
66 throw new AssertionError(e);
67 }
68 }
69
70 @Override
71 public void storeSignedPreKey(int signedPreKeyId, SignedPreKeyRecord record) {
72 store.put(signedPreKeyId, record.serialize());
73 }
74
75 @Override
76 public boolean containsSignedPreKey(int signedPreKeyId) {
77 return store.containsKey(signedPreKeyId);
78 }
79
80 @Override
81 public void removeSignedPreKey(int signedPreKeyId) {
82 store.remove(signedPreKeyId);
83 }
84 }