Return a Manager from ProvisioningManager and RegistrationManager when finished

This commit is contained in:
AsamK 2021-03-07 14:48:02 +01:00
parent a7b414a870
commit 2935b96070
4 changed files with 49 additions and 23 deletions

View file

@ -92,7 +92,7 @@ public class ProvisioningManager {
return new DeviceLinkInfo(deviceUuid, identityKey.getPublicKey().getPublicKey()).createDeviceLinkUri();
}
public String finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists {
public Manager finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists {
var ret = accountManager.finishNewDeviceRegistration(identityKey, false, true, registrationId, deviceName);
var username = ret.getNumber();
@ -114,17 +114,21 @@ public class ProvisioningManager {
}
}
try (var account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(),
username,
ret.getUuid(),
password,
ret.getDeviceId(),
ret.getIdentity(),
registrationId,
profileKey)) {
SignalAccount account = null;
try {
account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(),
username,
ret.getUuid(),
password,
ret.getDeviceId(),
ret.getIdentity(),
registrationId,
profileKey);
account.save();
try (var m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) {
Manager m = null;
try {
m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent);
try {
m.refreshPreKeys();
@ -144,12 +148,22 @@ public class ProvisioningManager {
throw e;
}
m.close(false);
account.save();
final var result = m;
account = null;
m = null;
return result;
} finally {
if (m != null) {
m.close();
}
}
} finally {
if (account != null) {
account.close();
}
account.save();
}
return username;
}
}

View file

@ -128,7 +128,7 @@ public class RegistrationManager implements Closeable {
account.save();
}
public void verifyAccount(
public Manager verifyAccount(
String verificationCode, String pin
) throws IOException, KeyBackupSystemNoDataException, KeyBackupServicePinException {
verificationCode = verificationCode.replace("-", "");
@ -169,14 +169,24 @@ public class RegistrationManager implements Closeable {
account.getSignalProtocolStore().getIdentityKeyPair().getPublicKey(),
TrustLevel.TRUSTED_VERIFIED);
try (var m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) {
Manager m = null;
try {
m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent);
m.refreshPreKeys();
m.close(false);
}
account.save();
account.save();
final var result = m;
account = null;
m = null;
return result;
} finally {
if (m != null) {
m.close();
}
}
}
private VerifyAccountResponse verifyAccountWithCode(

View file

@ -38,8 +38,9 @@ public class LinkCommand implements ProvisioningCommand {
}
try {
writer.println("{}", m.getDeviceLinkUri());
var username = m.finishDeviceLink(deviceName);
writer.println("Associated with: {}", username);
try (var manager = m.finishDeviceLink(deviceName)) {
writer.println("Associated with: {}", manager.getUsername());
}
} catch (TimeoutException e) {
throw new UserErrorException("Link request timed out, please try again.");
} catch (IOException e) {

View file

@ -28,7 +28,8 @@ public class VerifyCommand implements RegistrationCommand {
var pin = ns.getString("pin");
try {
m.verifyAccount(verificationCode, pin);
final var manager = m.verifyAccount(verificationCode, pin);
manager.close();
} catch (LockedException e) {
throw new UserErrorException(
"Verification failed! This number is locked with a pin. Hours remaining until reset: "