package org.asamk.signal.manager.config;
-import org.signal.zkgroup.internal.Native;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.asamk.signal.manager.api.ServiceEnvironment;
+import org.signal.libsignal.protocol.util.Medium;
import org.whispersystems.signalservice.api.account.AccountAttributes;
-import org.whispersystems.signalservice.api.push.TrustStore;
-import java.io.IOException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import okhttp3.Interceptor;
public class ServiceConfig {
- private final static Logger logger = LoggerFactory.getLogger(ServiceConfig.class);
-
- public final static int PREKEY_MINIMUM_COUNT = 20;
- public final static int PREKEY_BATCH_SIZE = 100;
- public final static int MAX_ATTACHMENT_SIZE = 150 * 1024 * 1024;
- public final static long MAX_ENVELOPE_SIZE = 0;
- public final static long AVATAR_DOWNLOAD_FAILSAFE_MAX_SIZE = 10 * 1024 * 1024;
- public final static boolean AUTOMATIC_NETWORK_RETRY = true;
-
- private final static KeyStore iasKeyStore;
-
- public static final AccountAttributes.Capabilities capabilities;
-
- static {
- boolean zkGroupAvailable;
- try {
- Native.serverPublicParamsCheckValidContentsJNI(new byte[]{});
- zkGroupAvailable = true;
- } catch (Throwable e) {
- logger.warn("Failed to call libzkgroup: {}", e.getMessage());
- zkGroupAvailable = false;
- }
- capabilities = new AccountAttributes.Capabilities(false, zkGroupAvailable, false, zkGroupAvailable, true, true);
-
- try {
- TrustStore contactTrustStore = new IasTrustStore();
-
- var keyStore = KeyStore.getInstance("BKS");
- keyStore.load(contactTrustStore.getKeyStoreInputStream(),
- contactTrustStore.getKeyStorePassword().toCharArray());
-
- iasKeyStore = keyStore;
- } catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) {
- throw new AssertionError(e);
- }
- }
-
- public static boolean isSignalClientAvailable() {
- try {
- org.signal.client.internal.Native.DeviceTransfer_GeneratePrivateKey();
- return true;
- } catch (UnsatisfiedLinkError e) {
- logger.warn("Failed to call libsignal-client: {}", e.getMessage());
- return false;
- }
- }
-
- public static AccountAttributes.Capabilities getCapabilities() {
- return capabilities;
- }
-
- public static KeyStore getIasKeyStore() {
- return iasKeyStore;
+ public static final int PREKEY_MINIMUM_COUNT = 10;
+ public static final int PREKEY_BATCH_SIZE = 100;
+ public static final int PREKEY_MAXIMUM_ID = Medium.MAX_VALUE;
+ public static final long PREKEY_ARCHIVE_AGE = TimeUnit.DAYS.toMillis(30);
+ public static final long PREKEY_STALE_AGE = TimeUnit.DAYS.toMillis(90);
+ public static final long SIGNED_PREKEY_ROTATE_AGE = TimeUnit.DAYS.toMillis(2);
+
+ public static final int MAX_ATTACHMENT_SIZE = 150 * 1024 * 1024;
+ public static final long MAX_ENVELOPE_SIZE = 0;
+ public static final int MAX_MESSAGE_BODY_SIZE = 2000;
+ public static final long AVATAR_DOWNLOAD_FAILSAFE_MAX_SIZE = 10 * 1024 * 1024;
+ public static final boolean AUTOMATIC_NETWORK_RETRY = true;
+ public static final int GROUP_MAX_SIZE = 1001;
+ public static final int MAXIMUM_ONE_OFF_REQUEST_SIZE = 3;
+ public static final long UNREGISTERED_LIFESPAN = TimeUnit.DAYS.toMillis(30);
+
+ public static AccountAttributes.Capabilities getCapabilities(boolean isPrimaryDevice) {
+ final var deleteSync = !isPrimaryDevice;
+ final var versionedExpirationTimer = !isPrimaryDevice;
+ return new AccountAttributes.Capabilities(true, deleteSync, versionedExpirationTimer);
}
public static ServiceEnvironmentConfig getServiceEnvironmentConfig(
final var interceptors = List.of(userAgentInterceptor);
- switch (serviceEnvironment) {
- case LIVE:
- return new ServiceEnvironmentConfig(LiveConfig.createDefaultServiceConfiguration(interceptors),
- LiveConfig.getUnidentifiedSenderTrustRoot(),
- LiveConfig.createKeyBackupConfig(),
- LiveConfig.getCdsMrenclave());
- case SANDBOX:
- return new ServiceEnvironmentConfig(SandboxConfig.createDefaultServiceConfiguration(interceptors),
- SandboxConfig.getUnidentifiedSenderTrustRoot(),
- SandboxConfig.createKeyBackupConfig(),
- SandboxConfig.getCdsMrenclave());
- default:
- throw new IllegalArgumentException("Unsupported environment");
- }
+ return switch (serviceEnvironment) {
+ case LIVE -> LiveConfig.getServiceEnvironmentConfig(interceptors);
+ case STAGING -> StagingConfig.getServiceEnvironmentConfig(interceptors);
+ };
}
}