Only mark username corrupted after repeated failures.

This commit is contained in:
Greyson Parrelli
2023-11-16 22:54:19 -05:00
committed by Cody Henthorne
parent 1aa7175006
commit 8023285b9d
5 changed files with 68 additions and 25 deletions

View File

@@ -83,7 +83,8 @@ object UsernameRepository {
private val URL_REGEX = """(https://)?signal.me/?#eu/([a-zA-Z0-9+\-_/]+)""".toRegex()
val BASE_URL = "https://signal.me/#eu/"
private const val BASE_URL = "https://signal.me/#eu/"
private const val USERNAME_SYNC_ERROR_THRESHOLD = 3
private val accountManager: SignalServiceAccountManager get() = ApplicationDependencies.getSignalServiceAccountManager()
@@ -153,6 +154,7 @@ object UsernameRepository {
if (SignalStore.account().usernameSyncState == AccountValues.UsernameSyncState.LINK_CORRUPTED) {
SignalStore.account().usernameSyncState = AccountValues.UsernameSyncState.IN_SYNC
SignalStore.account().usernameSyncErrorCount = 0
}
SignalDatabase.recipients.markNeedsSync(Recipient.self().id)
@@ -251,6 +253,44 @@ object UsernameRepository {
return BASE_URL + base64
}
@JvmStatic
fun onUsernameConsistencyValidated() {
SignalStore.account().usernameSyncState = AccountValues.UsernameSyncState.IN_SYNC
if (SignalStore.account().usernameSyncErrorCount > 0) {
Log.i(TAG, "Username consistency validated. There were previously ${SignalStore.account().usernameSyncErrorCount} error(s).")
SignalStore.account().usernameSyncErrorCount = 0
}
}
@JvmStatic
fun onUsernameMismatchDetected() {
SignalStore.account().usernameSyncErrorCount++
if (SignalStore.account().usernameSyncErrorCount >= USERNAME_SYNC_ERROR_THRESHOLD) {
Log.w(TAG, "We've now seen ${SignalStore.account().usernameSyncErrorCount} mismatches in a row. Marking username and link as corrupted.")
SignalStore.account().usernameSyncState = AccountValues.UsernameSyncState.USERNAME_AND_LINK_CORRUPTED
SignalStore.account().usernameSyncErrorCount = 0
} else {
Log.w(TAG, "Username mismatch reported. At ${SignalStore.account().usernameSyncErrorCount} / $USERNAME_SYNC_ERROR_THRESHOLD tries.")
}
}
@JvmStatic
fun onUsernameLinkMismatchDetected() {
SignalStore.account().usernameSyncErrorCount++
if (SignalStore.account().usernameSyncErrorCount >= USERNAME_SYNC_ERROR_THRESHOLD) {
Log.w(TAG, "We've now seen ${SignalStore.account().usernameSyncErrorCount} mismatches in a row. Marking link as corrupted.")
SignalStore.account().usernameSyncState = AccountValues.UsernameSyncState.LINK_CORRUPTED
SignalStore.account().usernameLink = null
SignalStore.account().usernameSyncErrorCount = 0
StorageSyncHelper.scheduleSyncForDataChange()
} else {
Log.w(TAG, "Link mismatch reported. At ${SignalStore.account().usernameSyncErrorCount} / $USERNAME_SYNC_ERROR_THRESHOLD tries.")
}
}
@WorkerThread
private fun reserveUsernameInternal(nickname: String): Result<UsernameState.Reserved, UsernameSetResult> {
return try {
@@ -293,6 +333,7 @@ object UsernameRepository {
SignalStore.account().usernameLink = null
SignalDatabase.recipients.setUsername(Recipient.self().id, reserved.username)
SignalStore.account().usernameSyncState = AccountValues.UsernameSyncState.IN_SYNC
SignalStore.account().usernameSyncErrorCount = 0
SignalDatabase.recipients.markNeedsSync(Recipient.self().id)
StorageSyncHelper.scheduleSyncForDataChange()
@@ -345,6 +386,7 @@ object UsernameRepository {
SignalStore.account().username = null
SignalStore.account().usernameLink = null
SignalStore.account().usernameSyncState = AccountValues.UsernameSyncState.IN_SYNC
SignalStore.account().usernameSyncErrorCount = 0
SignalDatabase.recipients.markNeedsSync(Recipient.self().id)
StorageSyncHelper.scheduleSyncForDataChange()
Log.i(TAG, "[deleteUsername] Successfully deleted the username.")