]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/internal/RegistrationManagerImpl.java
Reformat files
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / internal / RegistrationManagerImpl.java
index 597b15c06b0f93a94a938b25dbedb99c20f3bfc8..5faf13710900be823ea1984a115475a6b153395e 100644 (file)
@@ -48,8 +48,8 @@ import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 import org.whispersystems.signalservice.api.push.exceptions.AlreadyVerifiedException;
 import org.whispersystems.signalservice.api.push.exceptions.DeprecatedVersionException;
 import org.whispersystems.signalservice.api.svr.SecureValueRecovery;
+import org.whispersystems.signalservice.internal.push.PushServiceSocket;
 import org.whispersystems.signalservice.internal.push.VerifyAccountResponse;
-import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider;
 
 import java.io.IOException;
 import java.util.function.Consumer;
@@ -65,9 +65,8 @@ public class RegistrationManagerImpl implements RegistrationManager {
     private final ServiceEnvironmentConfig serviceEnvironmentConfig;
     private final String userAgent;
     private final Consumer<Manager> newManagerListener;
-    private final GroupsV2Operations groupsV2Operations;
 
-    private final SignalServiceAccountManager accountManager;
+    private final SignalServiceAccountManager unauthenticatedAccountManager;
     private final PinHelper pinHelper;
     private final AccountFileUpdater accountFileUpdater;
 
@@ -86,25 +85,29 @@ public class RegistrationManagerImpl implements RegistrationManager {
         this.userAgent = userAgent;
         this.newManagerListener = newManagerListener;
 
-        groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.signalServiceConfiguration()),
-                ServiceConfig.GROUP_MAX_SIZE);
-        this.accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.signalServiceConfiguration(),
-                new DynamicCredentialsProvider(
-                        // Using empty UUID, because registering doesn't work otherwise
-                        null, null, account.getNumber(), account.getPassword(), SignalServiceAddress.DEFAULT_DEVICE_ID),
+        this.unauthenticatedAccountManager = SignalServiceAccountManager.createWithStaticCredentials(
+                serviceEnvironmentConfig.signalServiceConfiguration(),
+                // Using empty UUID, because registering doesn't work otherwise
+                null,
+                null,
+                account.getNumber(),
+                SignalServiceAddress.DEFAULT_DEVICE_ID,
+                account.getPassword(),
                 userAgent,
-                groupsV2Operations,
-                ServiceConfig.AUTOMATIC_NETWORK_RETRY);
-        final var secureValueRecoveryV2 = serviceEnvironmentConfig.svr2Mrenclaves()
+                ServiceConfig.AUTOMATIC_NETWORK_RETRY,
+                ServiceConfig.GROUP_MAX_SIZE);
+        final var secureValueRecovery = serviceEnvironmentConfig.svr2Mrenclaves()
                 .stream()
-                .map(mr -> (SecureValueRecovery) accountManager.getSecureValueRecoveryV2(mr))
+                .map(mr -> (SecureValueRecovery) this.unauthenticatedAccountManager.getSecureValueRecoveryV2(mr))
                 .toList();
-        this.pinHelper = new PinHelper(secureValueRecoveryV2);
+        this.pinHelper = new PinHelper(secureValueRecovery);
     }
 
     @Override
     public void register(
-            boolean voiceVerification, String captcha, final boolean forceRegister
+            boolean voiceVerification,
+            String captcha,
+            final boolean forceRegister
     ) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException, RateLimitException, VerificationMethodNotAvailableException {
         if (account.isRegistered()
                 && account.getServiceEnvironment() != null
@@ -128,12 +131,13 @@ public class RegistrationManagerImpl implements RegistrationManager {
                 return;
             }
 
-            String sessionId = NumberVerificationUtils.handleVerificationSession(accountManager,
+            final var registrationApi = unauthenticatedAccountManager.getRegistrationApi();
+            String sessionId = NumberVerificationUtils.handleVerificationSession(registrationApi,
                     account.getSessionId(account.getNumber()),
                     id -> account.setSessionId(account.getNumber(), id),
                     voiceVerification,
                     captcha);
-            NumberVerificationUtils.requestVerificationCode(accountManager, sessionId, voiceVerification);
+            NumberVerificationUtils.requestVerificationCode(registrationApi, sessionId, voiceVerification);
             account.setRegistered(false);
         } catch (DeprecatedVersionException e) {
             logger.debug("Signal-Server returned deprecated version exception", e);
@@ -143,7 +147,8 @@ public class RegistrationManagerImpl implements RegistrationManager {
 
     @Override
     public void verifyAccount(
-            String verificationCode, String pin
+            String verificationCode,
+            String pin
     ) throws IOException, PinLockedException, IncorrectPinException {
         if (account.isRegistered()) {
             throw new IOException("Account is already registered");
@@ -193,7 +198,8 @@ public class RegistrationManagerImpl implements RegistrationManager {
 
             final var aciPreKeys = generatePreKeysForType(account.getAccountData(ServiceIdType.ACI));
             final var pniPreKeys = generatePreKeysForType(account.getAccountData(ServiceIdType.PNI));
-            final var response = Utils.handleResponseException(accountManager.registerAccount(null,
+            final var registrationApi = unauthenticatedAccountManager.getRegistrationApi();
+            final var response = Utils.handleResponseException(registrationApi.registerAccount(null,
                     recoveryPassword,
                     account.getAccountAttributes(null),
                     aciPreKeys,
@@ -215,11 +221,7 @@ public class RegistrationManagerImpl implements RegistrationManager {
 
     private boolean attemptReactivateAccount() {
         try {
-            final var accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.signalServiceConfiguration(),
-                    account.getCredentialsProvider(),
-                    userAgent,
-                    groupsV2Operations,
-                    ServiceConfig.AUTOMATIC_NETWORK_RETRY);
+            final var accountManager = createAuthenticatedSignalServiceAccountManager();
             accountManager.setAccountAttributes(account.getAccountAttributes(null));
             account.setRegistered(true);
             logger.info("Reactivated existing account, verify is not necessary.");
@@ -239,6 +241,17 @@ public class RegistrationManagerImpl implements RegistrationManager {
         return false;
     }
 
+    private SignalServiceAccountManager createAuthenticatedSignalServiceAccountManager() {
+        final var clientZkOperations = ClientZkOperations.create(serviceEnvironmentConfig.signalServiceConfiguration());
+        final var pushServiceSocket = new PushServiceSocket(serviceEnvironmentConfig.signalServiceConfiguration(),
+                account.getCredentialsProvider(),
+                userAgent,
+                clientZkOperations.getProfileOperations(),
+                ServiceConfig.AUTOMATIC_NETWORK_RETRY);
+        final var groupsV2Operations = new GroupsV2Operations(clientZkOperations, ServiceConfig.GROUP_MAX_SIZE);
+        return new SignalServiceAccountManager(pushServiceSocket, null, groupsV2Operations);
+    }
+
     private VerifyAccountResponse verifyAccountWithCode(
             final String sessionId,
             final String verificationCode,
@@ -246,12 +259,13 @@ public class RegistrationManagerImpl implements RegistrationManager {
             final PreKeyCollection aciPreKeys,
             final PreKeyCollection pniPreKeys
     ) throws IOException {
+        final var registrationApi = unauthenticatedAccountManager.getRegistrationApi();
         try {
-            Utils.handleResponseException(accountManager.verifyAccount(verificationCode, sessionId));
+            Utils.handleResponseException(registrationApi.verifyAccount(sessionId, verificationCode));
         } catch (AlreadyVerifiedException e) {
             // Already verified so can continue registering
         }
-        return Utils.handleResponseException(accountManager.registerAccount(sessionId,
+        return Utils.handleResponseException(registrationApi.registerAccount(sessionId,
                 null,
                 account.getAccountAttributes(registrationLock),
                 aciPreKeys,