Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add configuration option for modifying the passkeys default group #2346

Merged
merged 2 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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