Skip to content

Commit

Permalink
Merge pull request #2346 from keepassxreboot/feature/passkeys_modify_…
Browse files Browse the repository at this point in the history
…default_group

Add configuration option for modifying the passkeys default group
  • Loading branch information
Sami Vänttinen authored Oct 1, 2024
2 parents 69e2986 + 35d9adb commit 5efa515
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 4 deletions.
4 changes: 4 additions & 0 deletions keepassxc-browser/_locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down
6 changes: 2 additions & 4 deletions keepassxc-browser/background/keepass.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()
};

Expand Down
1 change: 1 addition & 0 deletions keepassxc-browser/background/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const defaultSettings = {
credentialSorting: SORT_BY_GROUP_AND_TITLE,
debugLogging: false,
defaultGroup: '',
defaultPasskeyGroup: '',
defaultGroupAlwaysAsk: false,
downloadFaviconAfterSave: false,
passkeys: false,
Expand Down
17 changes: 17 additions & 0 deletions keepassxc-browser/options/options.html
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,23 @@ <h2 class="pb-3 mt-0" data-i18n="optionsGeneralSettingsTab"></h2>
<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>

Expand Down
26 changes: 26 additions & 0 deletions keepassxc-browser/options/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -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]');
Expand Down Expand Up @@ -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 : '');
Expand All @@ -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 });
Expand Down Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions keepassxc-protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -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>",
Expand Down

0 comments on commit 5efa515

Please sign in to comment.