]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/protocol/JsonSignalProtocolStore.java
d47f7a1a2890ef6add8d05c03b7079e12e6783fd
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / protocol / JsonSignalProtocolStore.java
1 package org.asamk.signal.manager.storage.protocol;
2
3 import com.fasterxml.jackson.annotation.JsonProperty;
4 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6
7 import org.asamk.signal.manager.TrustLevel;
8 import org.whispersystems.libsignal.IdentityKey;
9 import org.whispersystems.libsignal.IdentityKeyPair;
10 import org.whispersystems.libsignal.InvalidKeyIdException;
11 import org.whispersystems.libsignal.SignalProtocolAddress;
12 import org.whispersystems.libsignal.state.PreKeyRecord;
13 import org.whispersystems.libsignal.state.SessionRecord;
14 import org.whispersystems.libsignal.state.SignedPreKeyRecord;
15 import org.whispersystems.signalservice.api.SignalServiceProtocolStore;
16 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
17
18 import java.util.List;
19
20 public class JsonSignalProtocolStore implements SignalServiceProtocolStore {
21
22 @JsonProperty("preKeys")
23 @JsonDeserialize(using = JsonPreKeyStore.JsonPreKeyStoreDeserializer.class)
24 @JsonSerialize(using = JsonPreKeyStore.JsonPreKeyStoreSerializer.class)
25 private JsonPreKeyStore preKeyStore;
26
27 @JsonProperty("sessionStore")
28 @JsonDeserialize(using = JsonSessionStore.JsonSessionStoreDeserializer.class)
29 @JsonSerialize(using = JsonSessionStore.JsonSessionStoreSerializer.class)
30 private JsonSessionStore sessionStore;
31
32 @JsonProperty("signedPreKeyStore")
33 @JsonDeserialize(using = JsonSignedPreKeyStore.JsonSignedPreKeyStoreDeserializer.class)
34 @JsonSerialize(using = JsonSignedPreKeyStore.JsonSignedPreKeyStoreSerializer.class)
35 private JsonSignedPreKeyStore signedPreKeyStore;
36
37 @JsonProperty("identityKeyStore")
38 @JsonDeserialize(using = JsonIdentityKeyStore.JsonIdentityKeyStoreDeserializer.class)
39 @JsonSerialize(using = JsonIdentityKeyStore.JsonIdentityKeyStoreSerializer.class)
40 private JsonIdentityKeyStore identityKeyStore;
41
42 public JsonSignalProtocolStore() {
43 }
44
45 public JsonSignalProtocolStore(
46 JsonPreKeyStore preKeyStore,
47 JsonSessionStore sessionStore,
48 JsonSignedPreKeyStore signedPreKeyStore,
49 JsonIdentityKeyStore identityKeyStore
50 ) {
51 this.preKeyStore = preKeyStore;
52 this.sessionStore = sessionStore;
53 this.signedPreKeyStore = signedPreKeyStore;
54 this.identityKeyStore = identityKeyStore;
55 }
56
57 public JsonSignalProtocolStore(IdentityKeyPair identityKeyPair, int registrationId) {
58 preKeyStore = new JsonPreKeyStore();
59 sessionStore = new JsonSessionStore();
60 signedPreKeyStore = new JsonSignedPreKeyStore();
61 this.identityKeyStore = new JsonIdentityKeyStore(identityKeyPair, registrationId);
62 }
63
64 public void setResolver(final SignalServiceAddressResolver resolver) {
65 sessionStore.setResolver(resolver);
66 identityKeyStore.setResolver(resolver);
67 }
68
69 @Override
70 public IdentityKeyPair getIdentityKeyPair() {
71 return identityKeyStore.getIdentityKeyPair();
72 }
73
74 @Override
75 public int getLocalRegistrationId() {
76 return identityKeyStore.getLocalRegistrationId();
77 }
78
79 @Override
80 public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
81 return identityKeyStore.saveIdentity(address, identityKey);
82 }
83
84 public void saveIdentity(SignalServiceAddress serviceAddress, IdentityKey identityKey, TrustLevel trustLevel) {
85 identityKeyStore.saveIdentity(serviceAddress, identityKey, trustLevel, null);
86 }
87
88 public void setIdentityTrustLevel(
89 SignalServiceAddress serviceAddress, IdentityKey identityKey, TrustLevel trustLevel
90 ) {
91 identityKeyStore.setIdentityTrustLevel(serviceAddress, identityKey, trustLevel);
92 }
93
94 public void removeIdentity(SignalServiceAddress serviceAddress, IdentityKey identityKey) {
95 identityKeyStore.removeIdentity(serviceAddress, identityKey);
96 }
97
98 public List<IdentityInfo> getIdentities() {
99 return identityKeyStore.getIdentities();
100 }
101
102 public List<IdentityInfo> getIdentities(SignalServiceAddress serviceAddress) {
103 return identityKeyStore.getIdentities(serviceAddress);
104 }
105
106 @Override
107 public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey, Direction direction) {
108 return identityKeyStore.isTrustedIdentity(address, identityKey, direction);
109 }
110
111 @Override
112 public IdentityKey getIdentity(SignalProtocolAddress address) {
113 return identityKeyStore.getIdentity(address);
114 }
115
116 public IdentityInfo getIdentity(SignalServiceAddress serviceAddress) {
117 return identityKeyStore.getIdentity(serviceAddress);
118 }
119
120 @Override
121 public PreKeyRecord loadPreKey(int preKeyId) throws InvalidKeyIdException {
122 return preKeyStore.loadPreKey(preKeyId);
123 }
124
125 @Override
126 public void storePreKey(int preKeyId, PreKeyRecord record) {
127 preKeyStore.storePreKey(preKeyId, record);
128 }
129
130 @Override
131 public boolean containsPreKey(int preKeyId) {
132 return preKeyStore.containsPreKey(preKeyId);
133 }
134
135 @Override
136 public void removePreKey(int preKeyId) {
137 preKeyStore.removePreKey(preKeyId);
138 }
139
140 @Override
141 public SessionRecord loadSession(SignalProtocolAddress address) {
142 return sessionStore.loadSession(address);
143 }
144
145 public List<SessionInfo> getSessions() {
146 return sessionStore.getSessions();
147 }
148
149 @Override
150 public List<Integer> getSubDeviceSessions(String name) {
151 return sessionStore.getSubDeviceSessions(name);
152 }
153
154 @Override
155 public void storeSession(SignalProtocolAddress address, SessionRecord record) {
156 sessionStore.storeSession(address, record);
157 }
158
159 @Override
160 public boolean containsSession(SignalProtocolAddress address) {
161 return sessionStore.containsSession(address);
162 }
163
164 @Override
165 public void deleteSession(SignalProtocolAddress address) {
166 sessionStore.deleteSession(address);
167 }
168
169 @Override
170 public void deleteAllSessions(String name) {
171 sessionStore.deleteAllSessions(name);
172 }
173
174 public void deleteAllSessions(SignalServiceAddress serviceAddress) {
175 sessionStore.deleteAllSessions(serviceAddress);
176 }
177
178 @Override
179 public void archiveSession(final SignalProtocolAddress address) {
180 sessionStore.archiveSession(address);
181 }
182
183 public void archiveAllSessions() {
184 sessionStore.archiveAllSessions();
185 }
186
187 @Override
188 public SignedPreKeyRecord loadSignedPreKey(int signedPreKeyId) throws InvalidKeyIdException {
189 return signedPreKeyStore.loadSignedPreKey(signedPreKeyId);
190 }
191
192 @Override
193 public List<SignedPreKeyRecord> loadSignedPreKeys() {
194 return signedPreKeyStore.loadSignedPreKeys();
195 }
196
197 @Override
198 public void storeSignedPreKey(int signedPreKeyId, SignedPreKeyRecord record) {
199 signedPreKeyStore.storeSignedPreKey(signedPreKeyId, record);
200 }
201
202 @Override
203 public boolean containsSignedPreKey(int signedPreKeyId) {
204 return signedPreKeyStore.containsSignedPreKey(signedPreKeyId);
205 }
206
207 @Override
208 public void removeSignedPreKey(int signedPreKeyId) {
209 signedPreKeyStore.removeSignedPreKey(signedPreKeyId);
210 }
211 }