]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java
7b2ba140de7cfce44235c80fc579e857dde9d784
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / config / ServiceConfig.java
1 package org.asamk.signal.manager.config;
2
3 import org.asamk.signal.manager.api.ServiceEnvironment;
4 import org.signal.libsignal.protocol.util.Medium;
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 import java.util.concurrent.TimeUnit;
15
16 import okhttp3.Interceptor;
17
18 public class ServiceConfig {
19
20 public final static int PREKEY_MINIMUM_COUNT = 10;
21 public final static int PREKEY_BATCH_SIZE = 100;
22 public final static int PREKEY_MAXIMUM_ID = Medium.MAX_VALUE;
23 public static final long PREKEY_ARCHIVE_AGE = TimeUnit.DAYS.toMillis(30);
24 public static final long PREKEY_STALE_AGE = TimeUnit.DAYS.toMillis(90);
25 public static final long SIGNED_PREKEY_ROTATE_AGE = TimeUnit.DAYS.toMillis(2);
26
27 public final static int MAX_ATTACHMENT_SIZE = 150 * 1024 * 1024;
28 public final static long MAX_ENVELOPE_SIZE = 0;
29 public final static long AVATAR_DOWNLOAD_FAILSAFE_MAX_SIZE = 10 * 1024 * 1024;
30 public final static boolean AUTOMATIC_NETWORK_RETRY = true;
31 public final static int GROUP_MAX_SIZE = 1001;
32
33 private final static KeyStore iasKeyStore;
34
35 static {
36 try {
37 TrustStore contactTrustStore = new IasTrustStore();
38
39 var keyStore = KeyStore.getInstance("BKS");
40 keyStore.load(contactTrustStore.getKeyStoreInputStream(),
41 contactTrustStore.getKeyStorePassword().toCharArray());
42
43 iasKeyStore = keyStore;
44 } catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) {
45 throw new AssertionError(e);
46 }
47 }
48
49 public static AccountAttributes.Capabilities getCapabilities(boolean isPrimaryDevice) {
50 final var giftBadges = !isPrimaryDevice;
51 return new AccountAttributes.Capabilities(false, true, true, true, true, giftBadges, false, false);
52 }
53
54 public static KeyStore getIasKeyStore() {
55 return iasKeyStore;
56 }
57
58 public static ServiceEnvironmentConfig getServiceEnvironmentConfig(
59 ServiceEnvironment serviceEnvironment, String userAgent
60 ) {
61 final Interceptor userAgentInterceptor = chain -> chain.proceed(chain.request()
62 .newBuilder()
63 .header("User-Agent", userAgent)
64 .build());
65
66 final var interceptors = List.of(userAgentInterceptor);
67
68 return switch (serviceEnvironment) {
69 case LIVE -> new ServiceEnvironmentConfig(serviceEnvironment,
70 LiveConfig.createDefaultServiceConfiguration(interceptors),
71 LiveConfig.getUnidentifiedSenderTrustRoot(),
72 LiveConfig.createKeyBackupConfig(),
73 LiveConfig.createFallbackKeyBackupConfigs(),
74 LiveConfig.getCdsiMrenclave(),
75 LiveConfig.getSvr2Mrenclave());
76 case STAGING -> new ServiceEnvironmentConfig(serviceEnvironment,
77 StagingConfig.createDefaultServiceConfiguration(interceptors),
78 StagingConfig.getUnidentifiedSenderTrustRoot(),
79 StagingConfig.createKeyBackupConfig(),
80 StagingConfig.createFallbackKeyBackupConfigs(),
81 StagingConfig.getCdsiMrenclave(),
82 StagingConfig.getSvr2Mrenclave());
83 };
84 }
85 }