1 package org
.asamk
.signal
.manager
.storage
.senderKeys
;
3 import org
.asamk
.signal
.manager
.helper
.RecipientAddressResolver
;
4 import org
.asamk
.signal
.manager
.storage
.Utils
;
5 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientResolver
;
6 import org
.asamk
.signal
.manager
.storage
.senderKeys
.SenderKeySharedStore
.SenderKeySharedEntry
;
7 import org
.slf4j
.Logger
;
8 import org
.slf4j
.LoggerFactory
;
9 import org
.whispersystems
.signalservice
.api
.push
.DistributionId
;
10 import org
.whispersystems
.signalservice
.api
.push
.ServiceId
;
13 import java
.io
.FileInputStream
;
14 import java
.io
.IOException
;
15 import java
.nio
.file
.Files
;
16 import java
.util
.HashMap
;
17 import java
.util
.HashSet
;
18 import java
.util
.List
;
21 public class LegacySenderKeySharedStore
{
23 private final static Logger logger
= LoggerFactory
.getLogger(LegacySenderKeySharedStore
.class);
25 public static void migrate(
27 final RecipientResolver resolver
,
28 final RecipientAddressResolver addressResolver
,
29 final SenderKeyStore senderKeyStore
31 final var objectMapper
= Utils
.createStorageObjectMapper();
32 try (var inputStream
= new FileInputStream(file
)) {
33 final var storage
= objectMapper
.readValue(inputStream
, Storage
.class);
34 final var sharedSenderKeys
= new HashMap
<DistributionId
, Set
<SenderKeySharedEntry
>>();
35 for (final var senderKey
: storage
.sharedSenderKeys
) {
36 final var recipientId
= resolver
.resolveRecipient(senderKey
.recipientId
);
37 if (recipientId
== null) {
40 final var uuid
= addressResolver
.resolveRecipientAddress(recipientId
).uuid();
44 final var entry
= new SenderKeySharedEntry(ServiceId
.from(uuid
.get()), senderKey
.deviceId
);
45 final var distributionId
= DistributionId
.from(senderKey
.distributionId
);
46 var entries
= sharedSenderKeys
.get(distributionId
);
47 if (entries
== null) {
48 entries
= new HashSet
<>();
51 sharedSenderKeys
.put(distributionId
, entries
);
54 senderKeyStore
.addLegacySenderKeysShared(sharedSenderKeys
);
55 } catch (IOException e
) {
56 logger
.info("Failed to load shared sender key store, ignoring", e
);
59 Files
.delete(file
.toPath());
60 } catch (IOException e
) {
61 logger
.info("Failed to load shared sender key store, ignoring", e
);
65 private record Storage(List
<SharedSenderKey
> sharedSenderKeys
) {
67 private record SharedSenderKey(long recipientId
, int deviceId
, String distributionId
) {}