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