fix: ProtectField #2283

This commit is contained in:
J-Jamet
2025-12-03 12:43:27 +01:00
parent b394a99e40
commit eb41233e57
3 changed files with 35 additions and 21 deletions

View File

@@ -59,6 +59,7 @@ import com.kunzisoft.keepass.credentialprovider.SpecialMode
import com.kunzisoft.keepass.credentialprovider.UserVerificationData import com.kunzisoft.keepass.credentialprovider.UserVerificationData
import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.checkUserVerification import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.checkUserVerification
import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.isUserVerificationNeeded import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.isUserVerificationNeeded
import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.requestUnprotectField
import com.kunzisoft.keepass.credentialprovider.magikeyboard.MagikeyboardService import com.kunzisoft.keepass.credentialprovider.magikeyboard.MagikeyboardService
import com.kunzisoft.keepass.database.ContextualDatabase import com.kunzisoft.keepass.database.ContextualDatabase
import com.kunzisoft.keepass.database.element.Attachment import com.kunzisoft.keepass.database.element.Attachment
@@ -329,15 +330,11 @@ class EntryActivity : DatabaseLockActivity() {
when (entryState) { when (entryState) {
is EntryViewModel.EntryState.Loading -> {} is EntryViewModel.EntryState.Loading -> {}
is EntryViewModel.EntryState.RequestUnprotectField -> { is EntryViewModel.EntryState.RequestUnprotectField -> {
val fieldView = entryState.protectedFieldView requestUnprotectField(
if (fieldView.isCurrentlyProtected()) { userVerificationViewModel = mUserVerificationViewModel,
checkUserVerification( database = mDatabase,
userVerificationViewModel = mUserVerificationViewModel, protectedFieldView = entryState.protectedFieldView
dataToVerify = UserVerificationData(protectedFieldView = fieldView) )
)
} else {
fieldView.protect()
}
mEntryViewModel.actionPerformed() mEntryViewModel.actionPerformed()
} }
} }

View File

@@ -63,8 +63,7 @@ import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.buildSpecia
import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveRegisterInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveRegisterInfo
import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveSearchInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveSearchInfo
import com.kunzisoft.keepass.credentialprovider.TypeMode import com.kunzisoft.keepass.credentialprovider.TypeMode
import com.kunzisoft.keepass.credentialprovider.UserVerificationData import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.requestUnprotectField
import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.checkUserVerification
import com.kunzisoft.keepass.credentialprovider.passkey.util.PasskeyHelper.buildPasskeyResponseAndSetResult import com.kunzisoft.keepass.credentialprovider.passkey.util.PasskeyHelper.buildPasskeyResponseAndSetResult
import com.kunzisoft.keepass.database.ContextualDatabase import com.kunzisoft.keepass.database.ContextualDatabase
import com.kunzisoft.keepass.database.element.Attachment import com.kunzisoft.keepass.database.element.Attachment
@@ -100,6 +99,7 @@ import com.kunzisoft.keepass.view.asError
import com.kunzisoft.keepass.view.hideByFading import com.kunzisoft.keepass.view.hideByFading
import com.kunzisoft.keepass.view.setTransparentNavigationBar import com.kunzisoft.keepass.view.setTransparentNavigationBar
import com.kunzisoft.keepass.view.showActionErrorIfNeeded import com.kunzisoft.keepass.view.showActionErrorIfNeeded
import com.kunzisoft.keepass.view.showError
import com.kunzisoft.keepass.view.updateLockPaddingStart import com.kunzisoft.keepass.view.updateLockPaddingStart
import com.kunzisoft.keepass.viewmodels.ColorPickerViewModel import com.kunzisoft.keepass.viewmodels.ColorPickerViewModel
import com.kunzisoft.keepass.viewmodels.EntryEditViewModel import com.kunzisoft.keepass.viewmodels.EntryEditViewModel
@@ -403,15 +403,11 @@ class EntryEditActivity : DatabaseLockActivity(),
mEntryEditViewModel.actionPerformed() mEntryEditViewModel.actionPerformed()
} }
is EntryEditViewModel.EntryEditState.RequestUnprotectField -> { is EntryEditViewModel.EntryEditState.RequestUnprotectField -> {
val fieldView = uiState.protectedFieldView requestUnprotectField(
if (fieldView.isCurrentlyProtected()) { userVerificationViewModel = mUserVerificationViewModel,
checkUserVerification( database = mDatabase,
userVerificationViewModel = mUserVerificationViewModel, protectedFieldView = uiState.protectedFieldView
dataToVerify = UserVerificationData(protectedFieldView = fieldView) )
)
} else {
fieldView.protect()
}
mEntryEditViewModel.actionPerformed() mEntryEditViewModel.actionPerformed()
} }
} }
@@ -424,6 +420,7 @@ class EntryEditActivity : DatabaseLockActivity(),
when (uVState) { when (uVState) {
is UserVerificationViewModel.UIState.Loading -> {} is UserVerificationViewModel.UIState.Loading -> {}
is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> { is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> {
coordinatorLayout?.showError(uVState.error)
mUserVerificationViewModel.onUserVerificationReceived() mUserVerificationViewModel.onUserVerificationReceived()
} }
is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> { is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> {

View File

@@ -14,10 +14,12 @@ import androidx.fragment.app.FragmentActivity
import com.kunzisoft.keepass.R import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.dialogs.CheckDatabaseCredentialDialogFragment import com.kunzisoft.keepass.activities.dialogs.CheckDatabaseCredentialDialogFragment
import com.kunzisoft.keepass.credentialprovider.passkey.data.UserVerificationRequirement import com.kunzisoft.keepass.credentialprovider.passkey.data.UserVerificationRequirement
import com.kunzisoft.keepass.database.ContextualDatabase
import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.EntryInfo
import com.kunzisoft.keepass.settings.PreferencesUtil.isUserVerificationDeviceCredential import com.kunzisoft.keepass.settings.PreferencesUtil.isUserVerificationDeviceCredential
import com.kunzisoft.keepass.utils.getEnumExtra import com.kunzisoft.keepass.utils.getEnumExtra
import com.kunzisoft.keepass.utils.putEnumExtra import com.kunzisoft.keepass.utils.putEnumExtra
import com.kunzisoft.keepass.view.ProtectedFieldView
import com.kunzisoft.keepass.view.toastError import com.kunzisoft.keepass.view.toastError
import com.kunzisoft.keepass.viewmodels.UserVerificationViewModel import com.kunzisoft.keepass.viewmodels.UserVerificationViewModel
@@ -102,6 +104,24 @@ class UserVerificationHelper {
activity?.checkUserVerification(userVerificationViewModel, dataToVerify) activity?.checkUserVerification(userVerificationViewModel, dataToVerify)
} }
fun FragmentActivity.requestUnprotectField(
userVerificationViewModel: UserVerificationViewModel,
database: ContextualDatabase?,
protectedFieldView: ProtectedFieldView
) {
if (protectedFieldView.isCurrentlyProtected()) {
checkUserVerification(
userVerificationViewModel = userVerificationViewModel,
dataToVerify = UserVerificationData(
database = database,
protectedFieldView = protectedFieldView
)
)
} else {
protectedFieldView.protect()
}
}
/** /**
* Displays a dialog to verify the user * Displays a dialog to verify the user
*/ */
@@ -111,7 +131,7 @@ class UserVerificationHelper {
) { ) {
if (isAuthenticatorsAllowed() && isUserVerificationDeviceCredential(this)) { if (isAuthenticatorsAllowed() && isUserVerificationDeviceCredential(this)) {
showUserVerificationDeviceCredential(userVerificationViewModel, dataToVerify) showUserVerificationDeviceCredential(userVerificationViewModel, dataToVerify)
} else { } else if (dataToVerify.database != null) {
showUserVerificationDatabaseCredential(userVerificationViewModel, dataToVerify) showUserVerificationDatabaseCredential(userVerificationViewModel, dataToVerify)
} }
} }