]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java
Don't handle blocked or forbidden messages
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / SignalDependencies.java
1 package org.asamk.signal.manager;
2
3 import org.asamk.signal.manager.config.ServiceConfig;
4 import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
5 import org.signal.libsignal.metadata.certificate.CertificateValidator;
6 import org.signal.zkgroup.profiles.ClientZkProfileOperations;
7 import org.whispersystems.libsignal.util.guava.Optional;
8 import org.whispersystems.signalservice.api.KeyBackupService;
9 import org.whispersystems.signalservice.api.SignalServiceAccountManager;
10 import org.whispersystems.signalservice.api.SignalServiceDataStore;
11 import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
12 import org.whispersystems.signalservice.api.SignalServiceMessageSender;
13 import org.whispersystems.signalservice.api.SignalSessionLock;
14 import org.whispersystems.signalservice.api.SignalWebSocket;
15 import org.whispersystems.signalservice.api.crypto.SignalServiceCipher;
16 import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations;
17 import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api;
18 import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
19 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
20 import org.whispersystems.signalservice.api.services.ProfileService;
21 import org.whispersystems.signalservice.api.util.SleepTimer;
22 import org.whispersystems.signalservice.api.util.UptimeSleepTimer;
23 import org.whispersystems.signalservice.api.websocket.WebSocketFactory;
24 import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider;
25 import org.whispersystems.signalservice.internal.websocket.WebSocketConnection;
26
27 import java.util.concurrent.ExecutorService;
28
29 import static org.asamk.signal.manager.config.ServiceConfig.capabilities;
30
31 public class SignalDependencies {
32
33 private final SignalServiceAccountManager accountManager;
34 private final GroupsV2Api groupsV2Api;
35 private final GroupsV2Operations groupsV2Operations;
36
37 private final SignalWebSocket signalWebSocket;
38 private final SignalServiceMessageReceiver messageReceiver;
39 private final SignalServiceMessageSender messageSender;
40
41 private final KeyBackupService keyBackupService;
42 private final ProfileService profileService;
43 private final SignalServiceCipher cipher;
44
45 public SignalDependencies(
46 final SignalServiceAddress selfAddress,
47 final ServiceEnvironmentConfig serviceEnvironmentConfig,
48 final String userAgent,
49 final DynamicCredentialsProvider credentialsProvider,
50 final SignalServiceDataStore dataStore,
51 final ExecutorService executor,
52 final SignalSessionLock sessionLock
53 ) {
54 this.groupsV2Operations = capabilities.isGv2() ? new GroupsV2Operations(ClientZkOperations.create(
55 serviceEnvironmentConfig.getSignalServiceConfiguration())) : null;
56 final SleepTimer timer = new UptimeSleepTimer();
57 this.accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(),
58 credentialsProvider,
59 userAgent,
60 groupsV2Operations,
61 ServiceConfig.AUTOMATIC_NETWORK_RETRY);
62 this.groupsV2Api = accountManager.getGroupsV2Api();
63 this.keyBackupService = accountManager.getKeyBackupService(ServiceConfig.getIasKeyStore(),
64 serviceEnvironmentConfig.getKeyBackupConfig().getEnclaveName(),
65 serviceEnvironmentConfig.getKeyBackupConfig().getServiceId(),
66 serviceEnvironmentConfig.getKeyBackupConfig().getMrenclave(),
67 10);
68 final ClientZkProfileOperations clientZkProfileOperations = capabilities.isGv2() ? ClientZkOperations.create(
69 serviceEnvironmentConfig.getSignalServiceConfiguration()).getProfileOperations() : null;
70 this.messageReceiver = new SignalServiceMessageReceiver(serviceEnvironmentConfig.getSignalServiceConfiguration(),
71 credentialsProvider,
72 userAgent,
73 clientZkProfileOperations,
74 ServiceConfig.AUTOMATIC_NETWORK_RETRY);
75
76 final var healthMonitor = new SignalWebSocketHealthMonitor(timer);
77 final WebSocketFactory webSocketFactory = new WebSocketFactory() {
78 @Override
79 public WebSocketConnection createWebSocket() {
80 return new WebSocketConnection("normal",
81 serviceEnvironmentConfig.getSignalServiceConfiguration(),
82 Optional.of(credentialsProvider),
83 userAgent,
84 healthMonitor);
85 }
86
87 @Override
88 public WebSocketConnection createUnidentifiedWebSocket() {
89 return new WebSocketConnection("unidentified",
90 serviceEnvironmentConfig.getSignalServiceConfiguration(),
91 Optional.absent(),
92 userAgent,
93 healthMonitor);
94 }
95 };
96 this.signalWebSocket = new SignalWebSocket(webSocketFactory);
97 healthMonitor.monitor(signalWebSocket);
98 this.profileService = new ProfileService(clientZkProfileOperations, messageReceiver, signalWebSocket);
99
100 final var certificateValidator = new CertificateValidator(serviceEnvironmentConfig.getUnidentifiedSenderTrustRoot());
101 this.cipher = new SignalServiceCipher(selfAddress, dataStore, sessionLock, certificateValidator);
102 this.messageSender = new SignalServiceMessageSender(serviceEnvironmentConfig.getSignalServiceConfiguration(),
103 credentialsProvider,
104 dataStore,
105 sessionLock,
106 userAgent,
107 signalWebSocket,
108 Optional.absent(),
109 clientZkProfileOperations,
110 executor,
111 ServiceConfig.MAX_ENVELOPE_SIZE,
112 ServiceConfig.AUTOMATIC_NETWORK_RETRY);
113 }
114
115 public SignalServiceAccountManager getAccountManager() {
116 return accountManager;
117 }
118
119 public GroupsV2Api getGroupsV2Api() {
120 return groupsV2Api;
121 }
122
123 public GroupsV2Operations getGroupsV2Operations() {
124 return groupsV2Operations;
125 }
126
127 public SignalWebSocket getSignalWebSocket() {
128 return signalWebSocket;
129 }
130
131 public SignalServiceMessageReceiver getMessageReceiver() {
132 return messageReceiver;
133 }
134
135 public SignalServiceMessageSender getMessageSender() {
136 return messageSender;
137 }
138
139 public KeyBackupService getKeyBackupService() {
140 return keyBackupService;
141 }
142
143 public ProfileService getProfileService() {
144 return profileService;
145 }
146
147 public SignalServiceCipher getCipher() {
148 return cipher;
149 }
150 }