feat: Warning when overwriting existing passkey #2124

This commit is contained in:
J-Jamet
2025-10-07 13:27:46 +02:00
parent 02c514272e
commit 90b3b56893
9 changed files with 129 additions and 38 deletions

View File

@@ -204,18 +204,20 @@ class EntryInfo : NodeInfo {
}
/**
* Add registerInfo to current EntryInfo
* Add registerInfo to current EntryInfo,
* return true if data has been overwrite
*/
fun saveRegisterInfo(database: Database?, registerInfo: RegisterInfo) {
fun saveRegisterInfo(database: Database?, registerInfo: RegisterInfo): Boolean {
saveSearchInfo(database, registerInfo.searchInfo)
registerInfo.username?.let { username = it }
registerInfo.password?.let { password = it }
setCreditCard(registerInfo.creditCard)
setPasskey(registerInfo.passkey)
val dataOverwrite: Boolean = setPasskey(registerInfo.passkey)
saveAppOrigin(database, registerInfo.appOrigin)
if (title.isEmpty()) {
title = registerInfo.toString().toTitle()
}
return dataOverwrite
}
/**

View File

@@ -40,8 +40,24 @@ object PasskeyEntryFields {
)
}
fun EntryInfo.setPasskey(passkey: Passkey?) {
fun EntryInfo.containsPasskey(): Boolean {
return this.tags.contains(PASSKEY_TAG)
|| this.containsCustomField(FIELD_USERNAME)
|| this.containsCustomField(FIELD_PRIVATE_KEY)
|| this.containsCustomField(FIELD_CREDENTIAL_ID)
|| this.containsCustomField(FIELD_USER_HANDLE)
|| this.containsCustomField(FIELD_RELYING_PARTY)
}
/**
* Set a passkey in an entry,
* return true if data has been overwritten
*/
fun EntryInfo.setPasskey(passkey: Passkey?): Boolean {
var overwrite = false
if (passkey != null) {
if (containsPasskey())
overwrite = true
tags.put(PASSKEY_TAG)
if (this.username.isEmpty())
this.username = passkey.username
@@ -76,6 +92,7 @@ object PasskeyEntryFields {
)
)
}
return overwrite
}
/**
@@ -132,4 +149,6 @@ object PasskeyEntryFields {
fun Field.isRelyingParty(): Boolean {
return name == FIELD_RELYING_PARTY
}
class AlreadyExistPasskey(): SecurityException("Entry already contains a passkey")
}