mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Prevent manual creation of existing field name #718
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
KeePassDX(2.9.2)
|
||||
* Prevent manual creation of existing field name #718
|
||||
* Fix search in OTP #780
|
||||
* Fix empty OTP field after selection #781
|
||||
* Fix same save shared info #783
|
||||
|
||||
@@ -452,14 +452,35 @@ class EntryEditActivity : LockingActivity(),
|
||||
EntryCustomFieldDialogFragment.getInstance(field).show(supportFragmentManager, "customFieldDialog")
|
||||
}
|
||||
|
||||
private fun verifyNameField(field: Field,
|
||||
actionIfNewName: () -> Unit) {
|
||||
var extraFieldAlreadyContainsName = false
|
||||
entryEditFragment?.getExtraFields()?.forEach {
|
||||
if (it.name.equals(field.name, true))
|
||||
extraFieldAlreadyContainsName = true
|
||||
}
|
||||
|
||||
if (!extraFieldAlreadyContainsName
|
||||
&& mEntry?.newExtraFieldNameAllowed(field) == true) {
|
||||
actionIfNewName.invoke()
|
||||
} else {
|
||||
Log.e(TAG, "Unable to create the new field, field name already exists")
|
||||
coordinatorLayout?.let {
|
||||
Snackbar.make(it, R.string.error_field_name_already_exists, Snackbar.LENGTH_LONG).asError().show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onNewCustomFieldApproved(newField: Field) {
|
||||
entryEditFragment?.apply {
|
||||
putExtraField(newField)
|
||||
verifyNameField(newField) {
|
||||
entryEditFragment?.putExtraField(newField)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onEditCustomFieldApproved(oldField: Field, newField: Field) {
|
||||
entryEditFragment?.replaceExtraField(oldField, newField)
|
||||
verifyNameField(newField) {
|
||||
entryEditFragment?.replaceExtraField(oldField, newField)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDeleteCustomFieldApproved(oldField: Field) {
|
||||
|
||||
@@ -296,6 +296,13 @@ class Entry : Node, EntryVersionedInterface<Group> {
|
||||
return extraFields
|
||||
}
|
||||
|
||||
/**
|
||||
* True if [field] name is not a standard field name
|
||||
*/
|
||||
fun newExtraFieldNameAllowed(field: Field): Boolean {
|
||||
return entryKDBX?.newCustomNameAllowed(field.name) == true
|
||||
}
|
||||
|
||||
/**
|
||||
* Update or add an extra field to the list (standard or custom)
|
||||
*/
|
||||
|
||||
@@ -321,6 +321,14 @@ class EntryKDBX : EntryVersioned<UUID, UUID, GroupKDBX, EntryKDBX>, NodeKDBXInte
|
||||
return size
|
||||
}
|
||||
|
||||
fun newCustomNameAllowed(name: String): Boolean {
|
||||
return !(name.equals(STR_TITLE, true)
|
||||
|| name.equals(STR_USERNAME, true)
|
||||
|| name.equals(STR_PASSWORD, true)
|
||||
|| name.equals(STR_URL, true)
|
||||
|| name.equals(STR_NOTES, true))
|
||||
}
|
||||
|
||||
override fun putCustomData(key: String, value: String) {
|
||||
customData[key] = value
|
||||
}
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
<string name="error_otp_digits">Token must contain %1$d to %2$d digits.</string>
|
||||
<string name="error_string_type">This text does not match the requested item.</string>
|
||||
<string name="error_registration_read_only">Saving a new item is not allowed in a read-only database</string>
|
||||
<string name="error_field_name_already_exists">The field name already exists.</string>
|
||||
<string name="field_name">Field name</string>
|
||||
<string name="field_value">Field value</string>
|
||||
<string name="file_not_found_content">Could not find file. Try reopening it from your file browser.</string>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
* Prevent manual creation of existing field name #718
|
||||
* Fix search in OTP #780
|
||||
* Fix empty OTP field after selection #781
|
||||
* Fix same save shared info #783
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
* Préviens la création manuelle d'un nom de champ existant #718
|
||||
* Correction de la recherche de l'OTP #780
|
||||
* Correction de champ OTP vide après sélection #781
|
||||
* Correction de la sauvegarde d'une même info partagée #783
|
||||
|
||||
Reference in New Issue
Block a user