]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/senderKeys/LegacySenderKeySharedStore.java
87c298f405a1f94694bb4fe10bca420cffd20550
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / senderKeys / LegacySenderKeySharedStore.java
1 package org.asamk.signal.manager.storage.senderKeys;
2
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;
9
10 import java.io.File;
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;
17 import java.util.Set;
18
19 public class LegacySenderKeySharedStore {
20
21 private final static Logger logger = LoggerFactory.getLogger(LegacySenderKeySharedStore.class);
22
23 public static void migrate(
24 final File file, final RecipientResolver resolver, SenderKeyStore senderKeyStore
25 ) {
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) {
33 continue;
34 }
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<>();
40 }
41 entries.add(entry);
42 sharedSenderKeys.put(distributionId, entries);
43 }
44
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);
49 }
50 }
51
52 private record Storage(List<SharedSenderKey> sharedSenderKeys) {
53
54 private record SharedSenderKey(long recipientId, int deviceId, String distributionId) {}
55 }
56 }