mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
fix: User Verification dialog #2283
This commit is contained in:
@@ -21,11 +21,13 @@ package com.kunzisoft.keepass.activities.dialogs
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.text.InputFilter
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import com.kunzisoft.keepass.R
|
||||
import com.kunzisoft.keepass.database.element.MasterCredential
|
||||
import com.kunzisoft.keepass.utils.UriUtil.openUrl
|
||||
import com.kunzisoft.keepass.viewmodels.UserVerificationViewModel
|
||||
|
||||
@@ -39,12 +41,14 @@ class CheckDatabaseCredentialDialogFragment : DatabaseDialogFragment() {
|
||||
val builder = AlertDialog.Builder(activity)
|
||||
val inflater = activity.layoutInflater
|
||||
val rootView = inflater.inflate(R.layout.fragment_check_database_credential, null)
|
||||
val editText = rootView.findViewById<TextView>(R.id.setup_check_password_edit_text)
|
||||
editText.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(
|
||||
MasterCredential.CHECK_KEY_PASSWORD_LENGTH)
|
||||
)
|
||||
builder.setView(rootView)
|
||||
.setPositiveButton(R.string.check) { _, _ ->
|
||||
userVerificationViewModel.checkMainCredential(
|
||||
rootView
|
||||
.findViewById<TextView>(R.id.setup_check_password_edit_text)
|
||||
.text.toString(),
|
||||
editText.text.toString()
|
||||
)
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel) { _, _ ->
|
||||
|
||||
@@ -103,6 +103,9 @@ class UserVerificationHelper {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a dialog to verify the user
|
||||
*/
|
||||
fun FragmentActivity.checkUserVerification(
|
||||
userVerificationViewModel: UserVerificationViewModel,
|
||||
dataToVerify: UserVerificationData
|
||||
@@ -114,6 +117,9 @@ class UserVerificationHelper {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a dialog for entering the device credential to be checked
|
||||
*/
|
||||
fun FragmentActivity.showUserVerificationDeviceCredential(
|
||||
userVerificationViewModel: UserVerificationViewModel,
|
||||
dataToVerify: UserVerificationData
|
||||
@@ -162,14 +168,22 @@ class UserVerificationHelper {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a dialog for entering the database credential to be checked
|
||||
*/
|
||||
fun FragmentActivity.showUserVerificationDatabaseCredential(
|
||||
userVerificationViewModel: UserVerificationViewModel,
|
||||
dataToVerify: UserVerificationData
|
||||
) {
|
||||
userVerificationViewModel.dataToVerify = dataToVerify
|
||||
CheckDatabaseCredentialDialogFragment
|
||||
.getInstance()
|
||||
.show(this.supportFragmentManager, "checkDatabaseCredentialDialog")
|
||||
val fragmentTag = "checkDatabaseCredentialDialog"
|
||||
var fragment: CheckDatabaseCredentialDialogFragment? =
|
||||
supportFragmentManager.findFragmentByTag(fragmentTag)
|
||||
as? CheckDatabaseCredentialDialogFragment?
|
||||
if (fragment == null) {
|
||||
fragment = CheckDatabaseCredentialDialogFragment.getInstance()
|
||||
fragment.show(this.supportFragmentManager, fragmentTag)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,7 +79,6 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:focusable="true"
|
||||
android:focusedByDefault="true"
|
||||
android:maxLength="4"
|
||||
android:inputType="textPassword"
|
||||
android:importantForAccessibility="no"
|
||||
android:importantForAutofill="no"
|
||||
|
||||
@@ -777,7 +777,7 @@
|
||||
<string name="error_passkey_credential_id">No passkey found with relying party %1$s and credentialIds %2$s</string>
|
||||
<string name="content_description_user_verification_information">User verification info</string>
|
||||
<string name="user_verification_required_title">User Verification</string>
|
||||
<string name="user_verification_required_description">User verification is required to use and edit passkeys</string>
|
||||
<string name="user_verification_required_description">Access to this data requires verification</string>
|
||||
<string name="user_verification_database_credential">Enter the first four characters of your database password</string>
|
||||
<string name="first_chars">First chars</string>
|
||||
<string name="check">Check</string>
|
||||
|
||||
@@ -102,7 +102,7 @@ data class MasterCredential(
|
||||
fun getCheckKey(password: String?): ByteArray {
|
||||
return retrievePasswordKey(
|
||||
try {
|
||||
password?.substring(0, 3) ?: ""
|
||||
password?.substring(0, CHECK_KEY_PASSWORD_LENGTH) ?: ""
|
||||
} catch (_: Exception) { "" },
|
||||
Charsets.UTF_8
|
||||
)
|
||||
@@ -273,5 +273,7 @@ data class MasterCredential(
|
||||
private const val XML_NODE_KEY_NAME = "Key"
|
||||
private const val XML_NODE_DATA_NAME = "Data"
|
||||
private const val XML_ATTRIBUTE_DATA_HASH = "Hash"
|
||||
|
||||
const val CHECK_KEY_PASSWORD_LENGTH = 4
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user