Prevent manual creation of existing field name #718

This commit is contained in:
J-Jamet
2020-11-18 19:39:53 +01:00
parent 9ff4f395b5
commit 2a3dafe07f
7 changed files with 43 additions and 3 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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)
*/

View File

@@ -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
}

View File

@@ -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>

View File

@@ -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

View File

@@ -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