1 package org
.asamk
.signal
.manager
;
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
;
27 import java
.util
.concurrent
.ExecutorService
;
29 import static org
.asamk
.signal
.manager
.config
.ServiceConfig
.capabilities
;
31 public class SignalDependencies
{
33 private final SignalServiceAccountManager accountManager
;
34 private final GroupsV2Api groupsV2Api
;
35 private final GroupsV2Operations groupsV2Operations
;
37 private final SignalWebSocket signalWebSocket
;
38 private final SignalServiceMessageReceiver messageReceiver
;
39 private final SignalServiceMessageSender messageSender
;
41 private final KeyBackupService keyBackupService
;
42 private final ProfileService profileService
;
43 private final SignalServiceCipher cipher
;
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
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(),
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(),
68 final ClientZkProfileOperations clientZkProfileOperations
= capabilities
.isGv2() ? ClientZkOperations
.create(
69 serviceEnvironmentConfig
.getSignalServiceConfiguration()).getProfileOperations() : null;
70 this.messageReceiver
= new SignalServiceMessageReceiver(serviceEnvironmentConfig
.getSignalServiceConfiguration(),
73 clientZkProfileOperations
,
74 ServiceConfig
.AUTOMATIC_NETWORK_RETRY
);
76 final var healthMonitor
= new SignalWebSocketHealthMonitor(timer
);
77 final WebSocketFactory webSocketFactory
= new WebSocketFactory() {
79 public WebSocketConnection
createWebSocket() {
80 return new WebSocketConnection("normal",
81 serviceEnvironmentConfig
.getSignalServiceConfiguration(),
82 Optional
.of(credentialsProvider
),
88 public WebSocketConnection
createUnidentifiedWebSocket() {
89 return new WebSocketConnection("unidentified",
90 serviceEnvironmentConfig
.getSignalServiceConfiguration(),
96 this.signalWebSocket
= new SignalWebSocket(webSocketFactory
);
97 healthMonitor
.monitor(signalWebSocket
);
98 this.profileService
= new ProfileService(clientZkProfileOperations
, messageReceiver
, signalWebSocket
);
100 final var certificateValidator
= new CertificateValidator(serviceEnvironmentConfig
.getUnidentifiedSenderTrustRoot());
101 this.cipher
= new SignalServiceCipher(selfAddress
, dataStore
, sessionLock
, certificateValidator
);
102 this.messageSender
= new SignalServiceMessageSender(serviceEnvironmentConfig
.getSignalServiceConfiguration(),
109 clientZkProfileOperations
,
111 ServiceConfig
.MAX_ENVELOPE_SIZE
,
112 ServiceConfig
.AUTOMATIC_NETWORK_RETRY
);
115 public SignalServiceAccountManager
getAccountManager() {
116 return accountManager
;
119 public GroupsV2Api
getGroupsV2Api() {
123 public GroupsV2Operations
getGroupsV2Operations() {
124 return groupsV2Operations
;
127 public SignalWebSocket
getSignalWebSocket() {
128 return signalWebSocket
;
131 public SignalServiceMessageReceiver
getMessageReceiver() {
132 return messageReceiver
;
135 public SignalServiceMessageSender
getMessageSender() {
136 return messageSender
;
139 public KeyBackupService
getKeyBackupService() {
140 return keyBackupService
;
143 public ProfileService
getProfileService() {
144 return profileService
;
147 public SignalServiceCipher
getCipher() {