]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java
Remove libsignal-service from manager lib API
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / config / ServiceConfig.java
1 package org.asamk.signal.manager.config;
2
3 import org.signal.zkgroup.internal.Native;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6 import org.whispersystems.signalservice.api.account.AccountAttributes;
7 import org.whispersystems.signalservice.api.push.TrustStore;
8
9 import java.io.IOException;
10 import java.security.KeyStore;
11 import java.security.KeyStoreException;
12 import java.security.NoSuchAlgorithmException;
13 import java.security.cert.CertificateException;
14 import java.util.List;
15
16 import okhttp3.Interceptor;
17
18 public class ServiceConfig {
19
20 private final static Logger logger = LoggerFactory.getLogger(ServiceConfig.class);
21
22 public final static int PREKEY_MINIMUM_COUNT = 20;
23 public final static int PREKEY_BATCH_SIZE = 100;
24 public final static int MAX_ATTACHMENT_SIZE = 150 * 1024 * 1024;
25 public final static long MAX_ENVELOPE_SIZE = 0;
26 public final static long AVATAR_DOWNLOAD_FAILSAFE_MAX_SIZE = 10 * 1024 * 1024;
27 public final static boolean AUTOMATIC_NETWORK_RETRY = true;
28
29 private final static KeyStore iasKeyStore;
30
31 public static final AccountAttributes.Capabilities capabilities;
32
33 static {
34 boolean zkGroupAvailable;
35 try {
36 Native.serverPublicParamsCheckValidContentsJNI(new byte[]{});
37 zkGroupAvailable = true;
38 } catch (Throwable e) {
39 logger.warn("Failed to call libzkgroup: {}", e.getMessage());
40 zkGroupAvailable = false;
41 }
42 capabilities = new AccountAttributes.Capabilities(false,
43 zkGroupAvailable,
44 false,
45 zkGroupAvailable,
46 true,
47 true,
48 false);
49
50 try {
51 TrustStore contactTrustStore = new IasTrustStore();
52
53 var keyStore = KeyStore.getInstance("BKS");
54 keyStore.load(contactTrustStore.getKeyStoreInputStream(),
55 contactTrustStore.getKeyStorePassword().toCharArray());
56
57 iasKeyStore = keyStore;
58 } catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) {
59 throw new AssertionError(e);
60 }
61 }
62
63 public static boolean isZkgroupAvailable() {
64 return ServiceConfig.getCapabilities().isGv2();
65 }
66
67 public static boolean isSignalClientAvailable() {
68 try {
69 org.signal.client.internal.Native.DeviceTransfer_GeneratePrivateKey();
70 return true;
71 } catch (UnsatisfiedLinkError e) {
72 logger.warn("Failed to call libsignal-client: {}", e.getMessage());
73 return false;
74 }
75 }
76
77 public static AccountAttributes.Capabilities getCapabilities() {
78 return capabilities;
79 }
80
81 public static KeyStore getIasKeyStore() {
82 return iasKeyStore;
83 }
84
85 public static ServiceEnvironmentConfig getServiceEnvironmentConfig(
86 ServiceEnvironment serviceEnvironment, String userAgent
87 ) {
88 final Interceptor userAgentInterceptor = chain -> chain.proceed(chain.request()
89 .newBuilder()
90 .header("User-Agent", userAgent)
91 .build());
92
93 final var interceptors = List.of(userAgentInterceptor);
94
95 return switch (serviceEnvironment) {
96 case LIVE -> new ServiceEnvironmentConfig(LiveConfig.createDefaultServiceConfiguration(interceptors),
97 LiveConfig.getUnidentifiedSenderTrustRoot(),
98 LiveConfig.createKeyBackupConfig(),
99 LiveConfig.getCdsMrenclave());
100 case SANDBOX -> new ServiceEnvironmentConfig(SandboxConfig.createDefaultServiceConfiguration(interceptors),
101 SandboxConfig.getUnidentifiedSenderTrustRoot(),
102 SandboxConfig.createKeyBackupConfig(),
103 SandboxConfig.getCdsMrenclave());
104 };
105 }
106 }