X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/c72aeed8bba4d5ca873b36b4edb2b8eda9c24ec7..de273586b4106171a3940ce5ec2c2b3712430c8c:/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java diff --git a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java index 0c26cf77..0ce43bb9 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java @@ -16,6 +16,9 @@ */ package org.asamk.signal.manager; +import org.asamk.signal.manager.config.ServiceConfig; +import org.asamk.signal.manager.config.ServiceEnvironment; +import org.asamk.signal.manager.config.ServiceEnvironmentConfig; import org.asamk.signal.manager.storage.SignalAccount; import org.asamk.signal.manager.util.KeyUtils; import org.signal.zkgroup.InvalidInputException; @@ -31,7 +34,6 @@ import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.util.SleepTimer; import org.whispersystems.signalservice.api.util.UptimeSleepTimer; -import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider; import java.io.File; @@ -43,7 +45,7 @@ public class ProvisioningManager { private final static Logger logger = LoggerFactory.getLogger(ProvisioningManager.class); private final PathConfig pathConfig; - private final SignalServiceConfiguration serviceConfiguration; + private final ServiceEnvironmentConfig serviceEnvironmentConfig; private final String userAgent; private final SignalServiceAccountManager accountManager; @@ -51,9 +53,9 @@ public class ProvisioningManager { private final int registrationId; private final String password; - public ProvisioningManager(File settingsPath, SignalServiceConfiguration serviceConfiguration, String userAgent) { - this.pathConfig = PathConfig.createDefault(settingsPath); - this.serviceConfiguration = serviceConfiguration; + ProvisioningManager(PathConfig pathConfig, ServiceEnvironmentConfig serviceEnvironmentConfig, String userAgent) { + this.pathConfig = pathConfig; + this.serviceEnvironmentConfig = serviceEnvironmentConfig; this.userAgent = userAgent; identityKey = KeyUtils.generateIdentityKeyPair(); @@ -62,42 +64,45 @@ public class ProvisioningManager { final SleepTimer timer = new UptimeSleepTimer(); GroupsV2Operations groupsV2Operations; try { - groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceConfiguration)); + groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration())); } catch (Throwable ignored) { groupsV2Operations = null; } - accountManager = new SignalServiceAccountManager(serviceConfiguration, - new DynamicCredentialsProvider(null, null, password, null, SignalServiceAddress.DEFAULT_DEVICE_ID), + accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(), + new DynamicCredentialsProvider(null, null, password, SignalServiceAddress.DEFAULT_DEVICE_ID), userAgent, groupsV2Operations, ServiceConfig.AUTOMATIC_NETWORK_RETRY, timer); } + public static ProvisioningManager init( + File settingsPath, ServiceEnvironment serviceEnvironment, String userAgent + ) { + var pathConfig = PathConfig.createDefault(settingsPath); + + final var serviceConfiguration = ServiceConfig.getServiceEnvironmentConfig(serviceEnvironment, userAgent); + + return new ProvisioningManager(pathConfig, serviceConfiguration, userAgent); + } + public String getDeviceLinkUri() throws TimeoutException, IOException { - String deviceUuid = accountManager.getNewDeviceUuid(); + var deviceUuid = accountManager.getNewDeviceUuid(); return new DeviceLinkInfo(deviceUuid, identityKey.getPublicKey().getPublicKey()).createDeviceLinkUri(); } public String finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists { - String signalingKey = KeyUtils.createSignalingKey(); - SignalServiceAccountManager.NewDeviceRegistrationReturn ret = accountManager.finishNewDeviceRegistration( - identityKey, - signalingKey, - false, - true, - registrationId, - deviceName); + var ret = accountManager.finishNewDeviceRegistration(identityKey, false, true, registrationId, deviceName); - String username = ret.getNumber(); + var username = ret.getNumber(); // TODO do this check before actually registering if (SignalAccount.userExists(pathConfig.getDataPath(), username)) { throw new UserAlreadyExists(username, SignalAccount.getFileName(pathConfig.getDataPath(), username)); } // Create new account with the synced identity - byte[] profileKeyBytes = ret.getProfileKey(); + var profileKeyBytes = ret.getProfileKey(); ProfileKey profileKey; if (profileKeyBytes == null) { profileKey = KeyUtils.createProfileKey(); @@ -109,18 +114,17 @@ public class ProvisioningManager { } } - try (SignalAccount account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), + try (var account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), username, ret.getUuid(), password, ret.getDeviceId(), ret.getIdentity(), registrationId, - signalingKey, profileKey)) { account.save(); - try (Manager m = new Manager(account, pathConfig, serviceConfiguration, userAgent)) { + try (var m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) { try { m.refreshPreKeys();