X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/4a1af0786c938f887a109a17dcc879da21704a8b..fa5c09d23b830f2999a52421c189a3e4661da99f:/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java diff --git a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java index 669034d1..24f0d5ba 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java @@ -51,6 +51,8 @@ import java.io.File; import java.io.IOException; import java.util.function.Consumer; +import static org.asamk.signal.manager.config.ServiceConfig.capabilities; + public class RegistrationManager implements Closeable { private final static Logger logger = LoggerFactory.getLogger(RegistrationManager.class); @@ -86,7 +88,7 @@ public class RegistrationManager implements Closeable { this.accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(), new DynamicCredentialsProvider( // Using empty UUID, because registering doesn't work otherwise - null, account.getUsername(), account.getPassword(), SignalServiceAddress.DEFAULT_DEVICE_ID), + null, account.getAccount(), account.getPassword(), SignalServiceAddress.DEFAULT_DEVICE_ID), userAgent, groupsV2Operations, ServiceConfig.AUTOMATIC_NETWORK_RETRY); @@ -136,6 +138,38 @@ public class RegistrationManager implements Closeable { public void register(boolean voiceVerification, String captcha) throws IOException, CaptchaRequiredException { captcha = captcha == null ? null : captcha.replace("signalcaptcha://", ""); + if (account.getAci() != null) { + try { + final var accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(), + new DynamicCredentialsProvider(account.getAci(), + account.getAccount(), + account.getPassword(), + account.getDeviceId()), + userAgent, + null, + ServiceConfig.AUTOMATIC_NETWORK_RETRY); + accountManager.setAccountAttributes(account.getEncryptedDeviceName(), + null, + account.getLocalRegistrationId(), + true, + null, + account.getPinMasterKey() == null ? null : account.getPinMasterKey().deriveRegistrationLock(), + account.getSelfUnidentifiedAccessKey(), + account.isUnrestrictedUnidentifiedAccess(), + capabilities, + account.isDiscoverableByPhoneNumber()); + account.setRegistered(true); + logger.info("Reactivated existing account, verify is not necessary."); + if (newManagerListener != null) { + final var m = new ManagerImpl(account, pathConfig, serviceEnvironmentConfig, userAgent); + account = null; + newManagerListener.accept(m); + } + return; + } catch (IOException e) { + logger.debug("Failed to reactivate account"); + } + } final ServiceResponse response; if (voiceVerification) { response = accountManager.requestVoiceVerificationCode(Utils.getDefaultLocale(),