From d387b55f88b9c54722c2f801aefc4643baa39cb5 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 9 May 2025 14:36:44 +0200 Subject: [PATCH] Handle token change during password update --- .../java/com/habitrpg/android/habitica/api/ApiService.kt | 2 +- .../java/com/habitrpg/android/habitica/data/ApiClient.kt | 2 +- .../com/habitrpg/android/habitica/data/UserRepository.kt | 3 ++- .../android/habitica/data/implementation/ApiClientImpl.kt | 2 +- .../ui/fragments/preferences/AccountPreferenceFragment.kt | 7 +++++-- .../habitica/ui/viewmodels/AuthenticationViewModel.kt | 2 +- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt index 8fbe233ef..f7d885009 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt @@ -661,7 +661,7 @@ interface ApiService { @PUT("user/auth/update-password") suspend fun updatePassword( @Body data: Map - ): HabitResponse + ): HabitResponse @POST("user/allocate") suspend fun allocatePoint( diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt index 52773b2d8..ddaf6c638 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt @@ -422,7 +422,7 @@ interface ApiClient { oldPassword: String, newPassword: String, newPasswordConfirmation: String - ): Void? + ): UserAuthResponse? suspend fun allocatePoint(stat: String): Stats? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt index b88abcc4f..fd3b59252 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt @@ -14,6 +14,7 @@ import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.UserQuestStatus import com.habitrpg.common.habitica.models.Notification +import com.habitrpg.common.habitica.models.auth.UserAuthResponse import com.habitrpg.shared.habitica.models.responses.VerifyUsernameResponse import com.habitrpg.shared.habitica.models.tasks.Attribute import kotlinx.coroutines.flow.Flow @@ -106,7 +107,7 @@ interface UserRepository : BaseRepository { oldPassword: String, newPassword: String, newPasswordConfirmation: String - ): Void? + ): UserAuthResponse? suspend fun verifyUsername(username: String): VerifyUsernameResponse? diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index 72991437d..fa126ae3a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -1033,7 +1033,7 @@ class ApiClientImpl( oldPassword: String, newPassword: String, newPasswordConfirmation: String - ): Void? { + ): UserAuthResponse? { val updateObject = HashMap() updateObject["password"] = oldPassword updateObject["newPassword"] = newPassword diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt index 05401f835..3186f812c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt @@ -291,11 +291,14 @@ class AccountPreferenceFragment : passwordRepeatEditText?.showErrorIfNecessary() if (passwordEditText?.isValid != true || passwordRepeatEditText?.isValid != true) return@addButton lifecycleScope.launchCatching { - userRepository.updatePassword( + val response = userRepository.updatePassword( oldPasswordEditText?.text ?: "", passwordEditText.text ?: "", passwordRepeatEditText.text ?: "", ) + response?.apiToken?.let { + viewModel.saveTokens(it, user?.id ?: "") + } (activity as? SnackbarActivity)?.showSnackbar( content = context.getString(R.string.password_changed), displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS, @@ -340,7 +343,7 @@ class AccountPreferenceFragment : val email = if (showEmail) emailEditText?.text else user?.authentication?.findFirstSocialEmail() lifecycleScope.launchCatching { - viewModel.register( + val response = viewModel.register( user?.username ?: "", email ?: "", passwordEditText.text ?: "", diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt index 25e5ae458..7561b0052 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/AuthenticationViewModel.kt @@ -148,7 +148,7 @@ class AuthenticationViewModel @Inject constructor( } @Throws(Exception::class) - private fun saveTokens( + fun saveTokens( api: String, user: String, ) {