]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/config/ServiceConfig.java
bf45f8cd5e9570082e7bd4297e7e9644c58d934f
[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 public final static int MAXIMUM_ONE_OFF_REQUEST_SIZE = 3;
33
34 private final static KeyStore iasKeyStore;
35
36 static {
37 try {
38 TrustStore contactTrustStore = new IasTrustStore();
39
40 var keyStore = KeyStore.getInstance("BKS");
41 keyStore.load(contactTrustStore.getKeyStoreInputStream(),
42 contactTrustStore.getKeyStorePassword().toCharArray());
43
44 iasKeyStore = keyStore;
45 } catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) {
46 throw new AssertionError(e);
47 }
48 }
49
50 public static AccountAttributes.Capabilities getCapabilities(boolean isPrimaryDevice) {
51 final var giftBadges = !isPrimaryDevice;
52 return new AccountAttributes.Capabilities(false, true, true, true, true, giftBadges, false, false);
53 }
54
55 public static KeyStore getIasKeyStore() {
56 return iasKeyStore;
57 }
58
59 public static ServiceEnvironmentConfig getServiceEnvironmentConfig(
60 ServiceEnvironment serviceEnvironment, String userAgent
61 ) {
62 final Interceptor userAgentInterceptor = chain -> chain.proceed(chain.request()
63 .newBuilder()
64 .header("User-Agent", userAgent)
65 .build());
66
67 final var interceptors = List.of(userAgentInterceptor);
68
69 return switch (serviceEnvironment) {
70 case LIVE -> new ServiceEnvironmentConfig(serviceEnvironment,
71 LiveConfig.createDefaultServiceConfiguration(interceptors),
72 LiveConfig.getUnidentifiedSenderTrustRoot(),
73 LiveConfig.createKeyBackupConfig(),
74 LiveConfig.createFallbackKeyBackupConfigs(),
75 LiveConfig.getCdsiMrenclave(),
76 LiveConfig.getSvr2Mrenclave());
77 case STAGING -> new ServiceEnvironmentConfig(serviceEnvironment,
78 StagingConfig.createDefaultServiceConfiguration(interceptors),
79 StagingConfig.getUnidentifiedSenderTrustRoot(),
80 StagingConfig.createKeyBackupConfig(),
81 StagingConfig.createFallbackKeyBackupConfigs(),
82 StagingConfig.getCdsiMrenclave(),
83 StagingConfig.getSvr2Mrenclave());
84 };
85 }
86 }