Merge pull request #2346 from keepassxreboot/feature/passkeys_modify_default_group

Add configuration option for modifying the passkeys default group
This commit is contained in:
Sami Vänttinen 2024-10-01 17:20:29 +03:00 committed by GitHub
commit 5efa5155a7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 51 additions and 4 deletions

View file

@ -714,6 +714,10 @@
"message": "Separate the group with slashes, for example: Group/ChildGroup.",
"description": "Default group help text."
},
"optionsLabelDefaultPasskeyGroup": {
"message": "Default group for saving new passkeys:",
"description": "Default passkey group options text."
},
"optionsLabelDefaultGroupCheckboxText": {
"message": "Always ask where to save new credentials",
"description": "Default group checkbox help text."

View file

@ -608,15 +608,13 @@ keepass.passkeysRegister = async function(tab, args = []) {
const kpAction = kpActions.PASSKEYS_REGISTER;
const nonce = keepassClient.getNonce();
// Parse publicKey
const publicKey = args[0];
const origin = args[1];
const [ publicKey, origin ] = args;
const messageData = {
action: kpAction,
publicKey: JSON.parse(JSON.stringify(publicKey)),
origin: origin,
groupName: page?.settings?.defaultPasskeyGroup,
keys: keepass.getCryptoKeys()
};

View file

@ -16,6 +16,7 @@ const defaultSettings = {
credentialSorting: SORT_BY_GROUP_AND_TITLE,
debugLogging: false,
defaultGroup: '',
defaultPasskeyGroup: '',
defaultGroupAlwaysAsk: false,
downloadFaviconAfterSave: false,
passkeys: false,

View file

@ -368,6 +368,23 @@
<div class="form-text help-text" data-i18n="optionsPasskeysEnableFallbackHelpText"></div>
</div>
</div>
<!-- Default group for saving passkeys -->
<div class="form-group pb-2" id="passkeysDefaultGroup">
<label for="defaultPasskeyGroup" class="pb-2" data-i18n="optionsLabelDefaultPasskeyGroup"></label>
<div class="input-group w-75">
<input class="form-control form-control-sm" type="text" id="defaultPasskeyGroup" placeholder="KeePassXC-Browser Passkeys">
<button class="btn btn-sm btn-primary" type="button" id="defaultPasskeyGroupButton">
<i class="fa fa-save" aria-hidden="true"></i>
<span data-i18n="optionsButtonSave"></span>
</button>
<button class="btn btn-sm btn-danger" type="button" id="defaultPasskeyGroupButtonReset">
<i class="fa fa-remove" aria-hidden="true"></i>
<span data-i18n="optionsButtonReset"></span>
</button>
</div>
<div class="form-text help-text" data-i18n="optionsDefaultGroupHelpText"></div>
</div>
</div>
</div>

View file

@ -112,6 +112,7 @@ options.initGeneralSettings = async function() {
$('#tab-general-settings select#afterFillSorting').value = options.settings['afterFillSorting'];
$('#tab-general-settings select#afterFillSortingTotp').value = options.settings['afterFillSortingTotp'];
$('#tab-general-settings input#defaultGroup').value = options.settings['defaultGroup'];
$('#tab-general-settings input#defaultPasskeyGroup').value = options.settings['defaultPasskeyGroup'];
$('#tab-general-settings input#clearCredentialTimeout').value = options.settings['clearCredentialsTimeout'];
const generalSettingsRadioInputs = document.querySelectorAll('#tab-general-settings input[type=radio]');
@ -203,6 +204,7 @@ options.initGeneralSettings = async function() {
});
});
// Default group
$('#defaultGroupButton').addEventListener('click', async function() {
const value = $('#defaultGroup').value;
options.settings['defaultGroup'] = (value.length > 0 ? value : '');
@ -215,6 +217,19 @@ options.initGeneralSettings = async function() {
await options.saveSettings();
});
// Default passkey group
$('#defaultPasskeyGroupButton').addEventListener('click', async function() {
const value = $('#defaultPasskeyGroup').value;
options.settings['defaultPasskeyGroup'] = (value.length > 0 ? value : '');
await options.saveSettings();
});
$('#defaultPasskeyGroupButtonReset').addEventListener('click', async function() {
$('#defaultPasskeyGroup').value = '';
options.settings['defaultPasskeyGroup'] = '';
await options.saveSettings();
});
let temporarySettings;
const dialogImportSettingsModal = new bootstrap.Modal('#dialogImportSettings',
{ keyboard: true, focus: false, backdrop: true });
@ -340,6 +355,17 @@ options.showKeePassXCVersions = async function(response) {
if (!version277Result) {
$('#tab-general-settings #passkeysOptionsCard').hide();
}
const version2710Result = await browser.runtime.sendMessage({
action: 'compare_version',
args: [ '2.7.10', response.current ]
});
// Hide passkeys default group option with KeePassXC version < 2.7.10
if (!version2710Result) {
$('#tab-general-settings #passkeysDefaultGroup').hide();
}
};
options.getPartiallyHiddenKey = function(key) {

View file

@ -483,6 +483,7 @@ Unencrypted message:
"action": "passkeys-register",
"publicKey": PublicKeyCredentialCreationOptions,
"origin": "tZvLrBzkQ9GxXq9PvKJj4iAnfPT0VZ3Q",
"groupName": "<optional, KeePassXC 2.7.10 and newer>",
"keys: [
{
"id": "<saved database identifier received from associate>",