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