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