Fallback to local reglock data if available when registering a previously verified session.

This commit is contained in:
Cody Henthorne
2025-04-10 09:34:07 -04:00
committed by Alex Hart
parent 556bcda58a
commit 721b70b7b7
2 changed files with 42 additions and 24 deletions

View File

@@ -833,22 +833,31 @@ class RegistrationViewModel : ViewModel() {
private suspend fun registerVerifiedSession(context: Context, sessionId: String) {
Log.v(TAG, "registerVerifiedSession()")
val registrationData = getRegistrationData()
val registrationResult: RegisterAccountResult = RegistrationRepository.registerAccount(context = context, sessionId = sessionId, registrationData = registrationData, recoveryPassword = null)
var result: RegisterAccountResult = RegistrationRepository.registerAccount(context = context, sessionId = sessionId, registrationData = registrationData, recoveryPassword = null)
val reglockEnabled = if (registrationResult is RegisterAccountResult.RegistrationLocked) {
Log.i(TAG, "Received a registration lock response when trying to register verified session. Retrying with master key.")
store.update {
it.copy(
svr2AuthCredentials = registrationResult.svr2Credentials,
svr3AuthCredentials = registrationResult.svr3Credentials
)
val reglockEnabled = result is RegisterAccountResult.RegistrationLocked
if (reglockEnabled) {
Log.i(TAG, "Registration lock response received.")
store.update { it.copy(lockedTimeRemaining = result.timeRemaining) }
if (SignalStore.svr.registrationLockToken != null) {
Log.d(TAG, "Retrying registration with stored credentials.")
result = RegistrationRepository.registerAccount(context = context, sessionId = sessionId, registrationData = registrationData, recoveryPassword = null, pin = SignalStore.svr.pin) { SignalStore.svr.masterKey }
}
if (result is RegisterAccountResult.RegistrationLocked && (result.svr2Credentials != null || result.svr3Credentials != null)) {
Log.i(TAG, "Saving registration lock received credentials (svr2: ${result.svr2Credentials != null}, svr3: ${result.svr3Credentials != null}).")
store.update {
it.copy(
svr2AuthCredentials = result.svr2Credentials,
svr3AuthCredentials = result.svr3Credentials
)
}
}
true
} else {
false
}
handleRegistrationResult(context, registrationData, registrationResult, reglockEnabled)
handleRegistrationResult(context, registrationData, result, reglockEnabled)
}
private suspend fun onSuccessfulRegistration(context: Context, registrationData: RegistrationData, remoteResult: AccountRegistrationResult, reglockEnabled: Boolean) {

View File

@@ -855,22 +855,31 @@ class RegistrationViewModel : ViewModel() {
private suspend fun registerVerifiedSession(context: Context, sessionId: String) {
Log.v(TAG, "registerVerifiedSession()")
val registrationData = getRegistrationData()
val registrationResult: RegisterAccountResult = RegistrationRepository.registerAccount(context = context, sessionId = sessionId, registrationData = registrationData)
var result: RegisterAccountResult = RegistrationRepository.registerAccount(context = context, sessionId = sessionId, registrationData = registrationData)
val reglockEnabled = if (registrationResult is RegisterAccountResult.RegistrationLocked) {
Log.i(TAG, "Received a registration lock response when trying to register verified session. Retrying with master key.")
store.update {
it.copy(
svr2AuthCredentials = registrationResult.svr2Credentials,
svr3AuthCredentials = registrationResult.svr3Credentials
)
val reglockEnabled = result is RegisterAccountResult.RegistrationLocked
if (reglockEnabled) {
Log.i(TAG, "Registration lock response received.")
store.update { it.copy(lockedTimeRemaining = result.timeRemaining) }
if (SignalStore.svr.registrationLockToken != null) {
Log.d(TAG, "Retrying registration with stored credentials.")
result = RegistrationRepository.registerAccount(context, sessionId, registrationData, SignalStore.svr.pin) { SignalStore.svr.masterKey }
}
if (result is RegisterAccountResult.RegistrationLocked && (result.svr2Credentials != null || result.svr3Credentials != null)) {
Log.i(TAG, "Saving registration lock received credentials (svr2: ${result.svr2Credentials != null}, svr3: ${result.svr3Credentials != null}).")
store.update {
it.copy(
svr2AuthCredentials = result.svr2Credentials,
svr3AuthCredentials = result.svr3Credentials
)
}
}
true
} else {
false
}
handleRegistrationResult(context, registrationData, registrationResult, reglockEnabled)
handleRegistrationResult(context, registrationData, result, reglockEnabled)
}
private suspend fun onSuccessfulRegistration(context: Context, registrationData: RegistrationData, remoteResult: AccountRegistrationResult, reglockEnabled: Boolean) = withContext(Dispatchers.IO) {