import java.io.File;
import java.io.IOException;
+import java.net.URI;
import java.util.concurrent.TimeoutException;
public class ProvisioningManager {
groupsV2Operations = null;
}
accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(),
- new DynamicCredentialsProvider(null, null, password, null, SignalServiceAddress.DEFAULT_DEVICE_ID),
+ new DynamicCredentialsProvider(null, null, password, SignalServiceAddress.DEFAULT_DEVICE_ID),
userAgent,
groupsV2Operations,
ServiceConfig.AUTOMATIC_NETWORK_RETRY,
public static ProvisioningManager init(
File settingsPath, ServiceEnvironment serviceEnvironment, String userAgent
) {
- PathConfig pathConfig = PathConfig.createDefault(settingsPath);
+ var pathConfig = PathConfig.createDefault(settingsPath);
- final ServiceEnvironmentConfig serviceConfiguration = ServiceConfig.getServiceEnvironmentConfig(
- serviceEnvironment,
- userAgent);
+ final var serviceConfiguration = ServiceConfig.getServiceEnvironmentConfig(serviceEnvironment, userAgent);
return new ProvisioningManager(pathConfig, serviceConfiguration, userAgent);
}
- public String getDeviceLinkUri() throws TimeoutException, IOException {
- String deviceUuid = accountManager.getNewDeviceUuid();
+ public URI getDeviceLinkUri() throws TimeoutException, IOException {
+ 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);
-
- String username = ret.getNumber();
+ public Manager finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists {
+ var ret = accountManager.finishNewDeviceRegistration(identityKey, false, true, registrationId, deviceName);
+
+ 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();
}
}
- try (SignalAccount account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(),
- username,
- ret.getUuid(),
- password,
- ret.getDeviceId(),
- ret.getIdentity(),
- registrationId,
- signalingKey,
- profileKey)) {
+ SignalAccount account = null;
+ try {
+ account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(),
+ username,
+ ret.getUuid(),
+ password,
+ ret.getDeviceId(),
+ ret.getIdentity(),
+ registrationId,
+ profileKey);
account.save();
- try (Manager m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) {
+ Manager m = null;
+ try {
+ m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent);
try {
m.refreshPreKeys();
throw e;
}
- m.close(false);
- }
+ account.save();
- account.save();
- }
+ final var result = m;
+ account = null;
+ m = null;
- return username;
+ return result;
+ } finally {
+ if (m != null) {
+ m.close();
+ }
+ }
+ } finally {
+ if (account != null) {
+ account.close();
+ }
+ }
}
}