]>
nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/prekeys/PreKeyStore.java
ccdea42246b3ca0f79e3c3941c6baf3f62fba993
1 package org
.asamk
.signal
.manager
.storage
.prekeys
;
3 import org
.asamk
.signal
.manager
.util
.IOUtils
;
4 import org
.slf4j
.Logger
;
5 import org
.slf4j
.LoggerFactory
;
6 import org
.whispersystems
.libsignal
.InvalidKeyIdException
;
7 import org
.whispersystems
.libsignal
.state
.PreKeyRecord
;
10 import java
.io
.FileInputStream
;
11 import java
.io
.FileOutputStream
;
12 import java
.io
.IOException
;
13 import java
.nio
.file
.Files
;
15 public class PreKeyStore
implements org
.whispersystems
.libsignal
.state
.PreKeyStore
{
17 private final static Logger logger
= LoggerFactory
.getLogger(PreKeyStore
.class);
19 private final File preKeysPath
;
21 public PreKeyStore(final File preKeysPath
) {
22 this.preKeysPath
= preKeysPath
;
26 public PreKeyRecord
loadPreKey(int preKeyId
) throws InvalidKeyIdException
{
27 final var file
= getPreKeyFile(preKeyId
);
30 throw new InvalidKeyIdException("No such pre key record!");
32 try (var inputStream
= new FileInputStream(file
)) {
33 return new PreKeyRecord(inputStream
.readAllBytes());
34 } catch (IOException e
) {
35 logger
.error("Failed to load pre key: {}", e
.getMessage());
36 throw new AssertionError(e
);
41 public void storePreKey(int preKeyId
, PreKeyRecord
record) {
42 final var file
= getPreKeyFile(preKeyId
);
44 try (var outputStream
= new FileOutputStream(file
)) {
45 outputStream
.write(record.serialize());
47 } catch (IOException e
) {
48 logger
.warn("Failed to store pre key, trying to delete file and retry: {}", e
.getMessage());
50 Files
.delete(file
.toPath());
51 try (var outputStream
= new FileOutputStream(file
)) {
52 outputStream
.write(record.serialize());
54 } catch (IOException e2
) {
55 logger
.error("Failed to store pre key file {}: {}", file
, e2
.getMessage());
61 public boolean containsPreKey(int preKeyId
) {
62 final var file
= getPreKeyFile(preKeyId
);
68 public void removePreKey(int preKeyId
) {
69 final var file
= getPreKeyFile(preKeyId
);
75 Files
.delete(file
.toPath());
76 } catch (IOException e
) {
77 logger
.error("Failed to delete pre key file {}: {}", file
, e
.getMessage());
81 public void removeAllPreKeys() {
82 final var files
= preKeysPath
.listFiles();
87 for (var file
: files
) {
89 Files
.delete(file
.toPath());
90 } catch (IOException e
) {
91 logger
.error("Failed to delete pre key file {}: {}", file
, e
.getMessage());
96 private File
getPreKeyFile(int preKeyId
) {
98 IOUtils
.createPrivateDirectories(preKeysPath
);
99 } catch (IOException e
) {
100 throw new AssertionError("Failed to create pre keys path", e
);
102 return new File(preKeysPath
, String
.valueOf(preKeyId
));