1 package org
.asamk
.signal
.manager
.storage
.senderKeys
;
3 import org
.asamk
.signal
.manager
.storage
.Utils
;
4 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientResolver
;
5 import org
.asamk
.signal
.manager
.storage
.senderKeys
.SenderKeySharedStore
.SenderKeySharedEntry
;
6 import org
.slf4j
.Logger
;
7 import org
.slf4j
.LoggerFactory
;
8 import org
.whispersystems
.signalservice
.api
.push
.DistributionId
;
11 import java
.io
.FileInputStream
;
12 import java
.io
.IOException
;
13 import java
.nio
.file
.Files
;
14 import java
.util
.HashMap
;
15 import java
.util
.HashSet
;
16 import java
.util
.List
;
19 public class LegacySenderKeySharedStore
{
21 private final static Logger logger
= LoggerFactory
.getLogger(LegacySenderKeySharedStore
.class);
23 public static void migrate(
24 final File file
, final RecipientResolver resolver
, SenderKeyStore senderKeyStore
26 final var objectMapper
= Utils
.createStorageObjectMapper();
27 try (var inputStream
= new FileInputStream(file
)) {
28 final var storage
= objectMapper
.readValue(inputStream
, Storage
.class);
29 final var sharedSenderKeys
= new HashMap
<DistributionId
, Set
<SenderKeySharedEntry
>>();
30 for (final var senderKey
: storage
.sharedSenderKeys
) {
31 final var recipientId
= resolver
.resolveRecipient(senderKey
.recipientId
);
32 if (recipientId
== null) {
35 final var entry
= new SenderKeySharedEntry(recipientId
, senderKey
.deviceId
);
36 final var distributionId
= DistributionId
.from(senderKey
.distributionId
);
37 var entries
= sharedSenderKeys
.get(distributionId
);
38 if (entries
== null) {
39 entries
= new HashSet
<>();
42 sharedSenderKeys
.put(distributionId
, entries
);
45 senderKeyStore
.addLegacySenderKeysShared(sharedSenderKeys
);
46 Files
.delete(file
.toPath());
47 } catch (IOException e
) {
48 logger
.info("Failed to load shared sender key store, ignoring", e
);
52 private record Storage(List
<SharedSenderKey
> sharedSenderKeys
) {
54 private record SharedSenderKey(long recipientId
, int deviceId
, String distributionId
) {}