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