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
;
12 import java
.io
.FileInputStream
;
13 import java
.io
.IOException
;
14 import java
.nio
.file
.Files
;
15 import java
.util
.HashMap
;
16 import java
.util
.HashSet
;
17 import java
.util
.List
;
20 public class LegacySenderKeySharedStore
{
22 private final static Logger logger
= LoggerFactory
.getLogger(LegacySenderKeySharedStore
.class);
24 public static void migrate(
26 final RecipientResolver resolver
,
27 final RecipientAddressResolver addressResolver
,
28 final SenderKeyStore senderKeyStore
30 final var objectMapper
= Utils
.createStorageObjectMapper();
31 try (var inputStream
= new FileInputStream(file
)) {
32 final var storage
= objectMapper
.readValue(inputStream
, Storage
.class);
33 final var sharedSenderKeys
= new HashMap
<DistributionId
, Set
<SenderKeySharedEntry
>>();
34 for (final var senderKey
: storage
.sharedSenderKeys
) {
35 final var recipientId
= resolver
.resolveRecipient(senderKey
.recipientId
);
36 if (recipientId
== null) {
39 final var serviceId
= addressResolver
.resolveRecipientAddress(recipientId
).serviceId();
40 if (serviceId
.isEmpty()) {
43 final var entry
= new SenderKeySharedEntry(serviceId
.get(), senderKey
.deviceId
);
44 final var distributionId
= DistributionId
.from(senderKey
.distributionId
);
45 var entries
= sharedSenderKeys
.get(distributionId
);
46 if (entries
== null) {
47 entries
= new HashSet
<>();
50 sharedSenderKeys
.put(distributionId
, entries
);
53 senderKeyStore
.addLegacySenderKeysShared(sharedSenderKeys
);
54 } catch (IOException e
) {
55 logger
.info("Failed to load shared sender key store, ignoring", e
);
58 Files
.delete(file
.toPath());
59 } catch (IOException e
) {
60 logger
.info("Failed to load shared sender key store, ignoring", e
);
64 private record Storage(List
<SharedSenderKey
> sharedSenderKeys
) {
66 private record SharedSenderKey(long recipientId
, int deviceId
, String distributionId
) {}