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