Skip to content

Commit 8c1e059

Browse files
Merge branch 'keepassxreboot:develop' into feature/safari-web-extension
2 parents 5ebcb6f + 3c7c3b0 commit 8c1e059

23 files changed

+135
-108
lines changed

docs/GettingStarted.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ KeePassXC Team <[email protected]>
77
:imagesdir: images
88
:stylesheet: styles/dark.css
99
:toc: left
10+
:experimental:
1011
ifdef::backend-pdf[]
1112
:title-page:
1213
:title-logo-image: {imagesdir}/kpxc_logo.png

docs/UserGuide.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ KeePassXC Team <[email protected]>
77
:stylesheet: styles/dark.css
88
:toc: left
99
:sectanchors:
10+
:experimental:
1011
ifdef::backend-pdf[]
1112
:title-page:
1213
:title-logo-image: {imagesdir}/kpxc_logo.png

docs/topics/.sharedheader

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ KeePassXC Team <[email protected]>
44
:stylesheet: ../styles/dark.css
55
:icons: font
66
:toc: left
7+
:experimental:

docs/topics/AutoType.adoc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ You can also set the time to remember the last used entry between presses of the
2424
=== Configure Auto-Type Sequences
2525
Each entry in your database can have multiple Auto-Type sequences associated with various window titles. Simulated key presses can be sent to any other currently open window of your choice (web browser windows, login dialogs boxes, and so on). When the Global Auto-Type hotkey is pressed, KeePassXC will search your database for entries matching the current selected window title.
2626

27-
NOTE: The default Auto-Type sequence is `{USERNAME}{TAB}{PASSWORD}{ENTER}`. This means that it first types the username of the selected entry, then presses the `Tab` key, then types the password of the entry and finally presses the `Enter` key.
27+
NOTE: The default Auto-Type sequence is `{USERNAME}{TAB}{PASSWORD}{ENTER}`. This means that it first types the username of the selected entry, then presses the kbd:[Tab] key, then types the password of the entry and finally presses the kbd:[Enter] key.
2828

2929
TIP: To change the default Auto-Type sequence for all entries of your database, edit the root (top-most) group of your database and set a specific sequence. Child groups and entries will inherit this sequence by default.
3030

3131
To configure Auto-Type sequences for your entries, perform the following steps:
3232

33-
1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the `+` button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*.
33+
1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the kbd:[+] button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*.
3434
+
3535
TIP: You can use an asterisk (`\*`) to match any value (e.g., when a window title contains a dynamic filename or website name). Set the window title to `*` to match all windows. Leave the window title blank to offer additional default Auto-Type sequences, such as custom attributes.
3636
+
@@ -60,7 +60,7 @@ image::autotype_entry_sequences.png[]
6060
|Press the corresponding keyboard key
6161

6262
|{UP}, {DOWN}, {LEFT}, {RIGHT} |Press the corresponding arrow key
63-
|{LEFTBRACE}, {RIGHTBRACE} |Press `{` or `}`, respectively
63+
|{LEFTBRACE}, {RIGHTBRACE} |Press kbd:[{] or kbd:[}], respectively
6464
|{&lt;KEY&gt; X} |Repeat &lt;KEY&gt; X times (e.g., {SPACE 5} inserts five spaces)
6565
|{DELAY=X} |Set delay between key presses to X milliseconds
6666
|{DELAY X} |Pause typing for X milliseconds
@@ -89,7 +89,7 @@ When you press the global Auto-Type hotkey, KeePassXC searches all unlocked data
8989
.Auto-Type sequence selection
9090
image::autotype_selection_dialog.png[,70%]
9191

92-
Perform the selected Auto-Type sequence by double clicking the desired row or pressing _Enter_. Press the up and down arrows to navigate the list. Sequences can be filtered through the text edit field.
92+
Perform the selected Auto-Type sequence by double clicking the desired row or pressing kbd:[Enter]. Press the up and down arrows to navigate the list. Sequences can be filtered through the text edit field.
9393

9494
.Auto-Type search database
9595
image::autotype_selection_dialog_search.png[,70%]
@@ -104,7 +104,7 @@ The option to type just the username, password, or current TOTP value is availab
104104
TIP: On Windows, you will see an option to use a virtual keyboard in this sub-menu. This is an experimental feature that allows you to type into virtual machines by simulating actual keyboard presses. Some international keyboards may be unsupported due to limitations in the Windows API.
105105

106106
=== Performing Entry-Level Auto-Type
107-
You can quickly activate the default Auto-Type sequence for a particular entry using Entry-Level Auto-Type. For this operation, the KeePassXC window will be minimized and the Auto-Type sequence occurs in the previously selected window. You can perform Entry-Level Auto-Type from the toolbar icon *(A)*, entry context menu *(B)*, or by pressing `Ctrl+Shift+V`.
107+
You can quickly activate the default Auto-Type sequence for a particular entry using Entry-Level Auto-Type. For this operation, the KeePassXC window will be minimized and the Auto-Type sequence occurs in the previously selected window. You can perform Entry-Level Auto-Type from the toolbar icon *(A)*, entry context menu *(B)*, or by pressing kbd:[Ctrl+Shift+V].
108108

109109
WARNING: Be careful when using Entry-Level Auto-Type as you can inadvertently type into the wrong window. For example, a chat window or email.
110110

docs/topics/DatabaseOperations.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ NOTE: On Windows, you will be prompted to authenticate to Windows Hello after un
7575
.Windows Hello example
7676
image::quick_unlock_windows_hello.png[]
7777

78-
When your database is locked, you will see the following unlock dialog. Simply press _Enter_ or click on _Unlock Database_ to initiate the biometric authentication process. If you are using a hardware key (e.g. Yubikey), it must be connected to your computer to complete the unlock.
78+
When your database is locked, you will see the following unlock dialog. Simply press kbd:[Enter] or click on _Unlock Database_ to initiate the biometric authentication process. If you are using a hardware key (e.g. Yubikey), it must be connected to your computer to complete the unlock.
7979

8080
.Quick Unlock
8181
image::quick_unlock.png[]
@@ -92,7 +92,7 @@ All the details such as usernames, passwords, URLs, attachments, notes, and so o
9292

9393
To add an entry, perform the following step:
9494

95-
1. Navigate to Entries > New Entry (Or, press Ctrl+N). The following screen appears:
95+
1. Navigate to Entries > New Entry (or press kbd:[Ctrl+N]). The following screen appears:
9696
+
9797
.Adding a new entry
9898
image::edit_entry.png[]
@@ -115,7 +115,7 @@ To edit the details in an entry, perform the following steps:
115115

116116
1. Select the entry you want to edit.
117117

118-
2. Press `Enter`, click the edit toolbar icon, or right-click and select Edit Entry from the menu.
118+
2. Press kbd:[Enter], click the edit toolbar icon, or right-click and select Edit Entry from the menu.
119119

120120
3. Make the desired changes.
121121

@@ -156,21 +156,21 @@ TIP: Each KeePass application has different default icons. If you use a mobile a
156156
==== Deleting an Entry
157157
To delete an entry, perform the following steps:
158158

159-
1. Select the entry you want to delete and press the `Delete` button on your keyboard.
159+
1. Select the entry you want to delete and press the kbd:[Del] button on your keyboard.
160160

161161
2. You will be prompted to move the entry to the Recycle Bin (if enabled).
162162
+
163163
NOTE: You can disable the recycle bin within the Database Settings. If the recycle bin is disabled then deleted entries will be permanently removed from the database.
164164

165-
3. To permanently delete the entry, navigate to the Recycle Bin, select the entry you want to delete and press the `Delete` button on your keyboard.
165+
3. To permanently delete the entry, navigate to the Recycle Bin, select the entry you want to delete and press the kbd:[Del] button on your keyboard.
166166

167167
// tag::advanced[]
168168
==== Clone an Entry
169169
Creating a clone of an entry provides you a ready-to-use template for creating new entries with similar details of a master entry.
170170

171171
To create a clone of an existing entry, perform the following steps:
172172

173-
1. Right-click on the entry for which you want to create a clone and select _Clone Entry_. Alternatively, select the desired entry and press `Ctrl+K`.
173+
1. Right-click on the entry for which you want to create a clone and select _Clone Entry_. Alternatively, select the desired entry and press kbd:[Ctrl+K].
174174
+
175175
.Clone entry from context menu
176176
image::clone_entry.png[]

docs/topics/KeyboardShortcuts.adoc

Lines changed: 53 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,62 @@ include::.sharedheader[]
33
:imagesdir: ../images
44

55
// tag::content[]
6-
NOTE: On macOS please substitute `Ctrl` with `Cmd` (aka `⌘`).
6+
NOTE: On macOS please substitute kbd:[Ctrl] with kbd:[Cmd] (AKA kbd:[⌘]).
77

88
[grid=rows, frame=none, width=75%]
99
|===
10-
|Action | Keyboard Shortcut
10+
|Action | Keyboard Shortcut
1111

12-
|Settings | Ctrl + ,
13-
|Open Database | Ctrl + O
14-
|Save Database | Ctrl + S
15-
|Save Database As | Ctrl + Shift + S
16-
|New Database | Ctrl + Shift + N
17-
|Close Database | Ctrl + W ; Ctrl + F4
18-
|Lock Current Database | Ctrl + L
19-
|Lock All Databases | Ctrl + Shift + L
20-
|Database Settings | Ctrl + Shift + ,
21-
|Database Reports | Ctrl + Shift + R
22-
|Quit | Ctrl + Q
23-
|New Entry | Ctrl + N
24-
|Edit Entry | Enter ; Ctrl + E
25-
|Delete Entry | Delete
26-
|Clone Entry | Ctrl + D
27-
|Copy Username | Ctrl + B
28-
|Copy Password | Ctrl + C
29-
|Copy URL | Ctrl + U
30-
|Open URL | Ctrl + Shift + U
31-
|Copy TOTP | Ctrl + T
32-
|Copy Password and TOTP | Ctrl + Y
33-
|Show TOTP | Ctrl + Shift + T
34-
|Trigger AutoType | Ctrl + Shift + V
35-
|Add key to SSH Agent | Ctrl + H
36-
|Remove key from SSH Agent | Ctrl + Shift + H
37-
|Move entry up (if unsorted) | Ctrl + Alt + Up
38-
|Move entry down (if unsorted) | Ctrl + Alt + Down
39-
|Sort Groups A-Z | Ctrl + Down
40-
|Sort Groups Z-A | Ctrl + Up
41-
|Minimize Window | Ctrl + M
42-
|Hide Window | Ctrl + Shift + M
43-
|Select Next Database Tab | Ctrl + Tab ; Ctrl + PageDn
44-
|Select Previous Database Tab | Ctrl + Shift + Tab ; Ctrl + PageUp
45-
|Select the nth database | Ctrl + n, where n is the number of the database tab
46-
|Toggle Passwords Hidden | Ctrl + Shift + C
47-
|Toggle Usernames Hidden | Ctrl + Shift + B
48-
|Focus Groups (edit if focused) | F1
49-
|Focus Entries (edit if focused) | F2
50-
|Focus Search | F3 ; Ctrl + F
51-
|Clear Search | Escape
52-
|Show Keyboard Shortcuts | Ctrl + /
12+
|Settings | kbd:[Ctrl + ,]
13+
|Open Database | kbd:[Ctrl + O]
14+
|Save Database | kbd:[Ctrl + S]
15+
|Save Database As | kbd:[Ctrl + Shift + S]
16+
|New Database | kbd:[Ctrl + Shift + N]
17+
|Close Database | kbd:[Ctrl + W] +
18+
_or_ +
19+
kbd:[Ctrl + F4]
20+
|Lock Current Database | kbd:[Ctrl + L]
21+
|Lock All Databases | kbd:[Ctrl + Shift + L]
22+
|Database Settings | kbd:[Ctrl + Shift + ,]
23+
|Database Reports | kbd:[Ctrl + Shift + R]
24+
|Quit | kbd:[Ctrl + Q]
25+
|New Entry | kbd:[Ctrl + N]
26+
|Edit Entry | kbd:[Enter] +
27+
_or_ +
28+
kbd:[Ctrl + E]
29+
|Delete Entry | kbd:[Del]
30+
|Clone Entry | kbd:[Ctrl + D]
31+
|Copy Username | kbd:[Ctrl + B]
32+
|Copy Password | kbd:[Ctrl + C]
33+
|Copy URL | kbd:[Ctrl + U]
34+
|Open URL | kbd:[Ctrl + Shift + U]
35+
|Copy TOTP | kbd:[Ctrl + T]
36+
|Copy Password and TOTP | kbd:[Ctrl + Y]
37+
|Show TOTP | kbd:[Ctrl + Shift + T]
38+
|Trigger AutoType | kbd:[Ctrl + Shift + V]
39+
|Add key to SSH Agent | kbd:[Ctrl + H]
40+
|Remove key from SSH Agent | kbd:[Ctrl + Shift + H]
41+
|Move entry up (if unsorted) | kbd:[Ctrl + Alt + Up]
42+
|Move entry down (if unsorted) | kbd:[Ctrl + Alt + Down]
43+
|Sort Groups A-Z | kbd:[Ctrl + Down]
44+
|Sort Groups Z-A | kbd:[Ctrl + Up]
45+
|Minimize Window | kbd:[Ctrl + M]
46+
|Hide Window | kbd:[Ctrl + Shift + M]
47+
|Select Next Database Tab | kbd:[Ctrl + Tab] +
48+
_or_ +
49+
kbd:[Ctrl + PgDn]
50+
|Select Previous Database Tab | kbd:[Ctrl + Shift + Tab] +
51+
_or_ +
52+
kbd:[Ctrl + PgUp]
53+
|Select the nth database | kbd:[Ctrl + &lt;n&gt;], where kbd:[&lt;n&gt;] is the number of the database tab
54+
|Toggle Passwords Hidden | kbd:[Ctrl + Shift + C]
55+
|Toggle Usernames Hidden | kbd:[Ctrl + Shift + B]
56+
|Focus Groups (edit if focused) | kbd:[F1]
57+
|Focus Entries (edit if focused) | kbd:[F2]
58+
|Focus Search | kbd:[F3] +
59+
_or_ +
60+
kbd:[Ctrl + F]
61+
|Clear Search | kbd:[Esc]
62+
|Show Keyboard Shortcuts | kbd:[Ctrl + /]
5363
|===
5464
// end::content[]

docs/topics/PasswordGenerator.adoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ image::password_generator.png[]
1919

2020
3. Select the length of the desired password by dragging the Length slider.
2121
4. Select the character-sets that you want to include in your password.
22-
5. Use the regenerate button (Ctrl + R) to make a new password using the chosen options.
23-
6. Use the clipboard button (Ctrl + C) to copy the generated password to the clipboard.
22+
5. Use the regenerate button (kbd:[Ctrl + R]) to make a new password using the chosen options.
23+
6. Use the clipboard button (kbd:[Ctrl + C]) to copy the generated password to the clipboard.
2424
7. Click the Advanced button to specify additional conditions for your desired password.
2525
+
2626
.Advanced Password Generator Options
@@ -39,6 +39,6 @@ Word Count slider.
3939
3. In the Word Separator field, enter a character, word, number, or space that you want to use as a separator between the words in your passphrase.
4040
4. _(Optional)_ You can choose a word case between lower, upper, and title case options.
4141
5. _(Optional)_ You can also load your own custom word lists. Click the plus sign button to the right of the wordlist selection dialog to choose a custom word list. You can download alternative lists from the https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases[EFF's Website] or from https://github.com/redacted/XKCD-password-generator#additional-languages[GitHub].
42-
6. Click the Regenerate button (Ctrl + R) to generate a new random passphrase.
43-
7. Click the Clipboard button (Ctrl + C) to copy the passphrase to the clipboard.
42+
6. Click the Regenerate button (kbd:[Ctrl + R]) to generate a new random passphrase.
43+
7. Click the Clipboard button (kbd:[Ctrl + C]) to copy the passphrase to the clipboard.
4444
// end::content[]

docs/topics/Reference.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ Examples: +
7777
|Press the corresponding keyboard key
7878

7979
|{UP}, {DOWN}, {LEFT}, {RIGHT} |Press the corresponding arrow key
80-
|{F1}, {F2}, ..., {F16} |Press F1, F2, etc.
81-
|{LEFTBRACE}, {RIGHTBRACE} |Press `{` or `}`, respectively
80+
|{F1}, {F2}, ..., {F16} |Press kbd:[F1], kbd:[F2], etc.
81+
|{LEFTBRACE}, {RIGHTBRACE} |Press kbd:[{] or kbd:[}], respectively
8282
|{&lt;KEY&gt; X} |Repeat &lt;KEY&gt; X times (e.g., {SPACE 5} inserts five spaces)
8383
|{DELAY=X} |Set delay between key presses to X milliseconds
8484
|{DELAY X} |Pause typing for X milliseconds
@@ -90,10 +90,10 @@ Examples: +
9090
|===
9191
|Modifier |Description
9292

93-
|+ |SHIFT
94-
|^ |CTRL
95-
|% |ALT
96-
|# |WIN/CMD
93+
|+ |kbd:[Shift]
94+
|^ |kbd:[Ctrl]
95+
|% |kbd:[Alt]
96+
|# |kbd:[Win]/kbd:[Cmd]
9797
|===
9898
*Text Conversions:*
9999

src/browser/BrowserPasskeys.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2024 KeePassXC Team <[email protected]>
2+
* Copyright (C) 2025 KeePassXC Team <[email protected]>
33
*
44
* This program is free software: you can redistribute it and/or modify
55
* it under the terms of the GNU General Public License as published by
@@ -71,7 +71,7 @@ PublicKeyCredential BrowserPasskeys::buildRegisterPublicKeyCredential(const QJso
7171
}
7272

7373
const auto authenticatorAttachment = credentialCreationOptions["authenticatorAttachment"];
74-
const auto clientDataJson = credentialCreationOptions["clientDataJSON"].toObject();
74+
const auto clientDataJson = credentialCreationOptions["clientDataJSON"].toString();
7575
const auto extensions = credentialCreationOptions["extensions"].toString();
7676
const auto credentialId = testingVariables.credentialId.isEmpty()
7777
? browserMessageBuilder()->getRandomBytesAsBase64(ID_BYTES)
@@ -98,7 +98,7 @@ PublicKeyCredential BrowserPasskeys::buildRegisterPublicKeyCredential(const QJso
9898
// Response
9999
QJsonObject responseObject;
100100
responseObject["attestationObject"] = browserMessageBuilder()->getBase64FromArray(attestationObject);
101-
responseObject["clientDataJSON"] = browserMessageBuilder()->getBase64FromJson(clientDataJson);
101+
responseObject["clientDataJSON"] = browserMessageBuilder()->getBase64FromArray(clientDataJson.toUtf8());
102102
responseObject["clientExtensionResults"] = credentialCreationOptions["clientExtensionResults"];
103103

104104
// Additions for extension side functions
@@ -130,8 +130,8 @@ QJsonObject BrowserPasskeys::buildGetPublicKeyCredential(const QJsonObject& asse
130130

131131
const auto authenticatorData =
132132
buildAuthenticatorData(assertionOptions["rpId"].toString(), assertionOptions["extensions"].toString());
133-
const auto clientDataJson = assertionOptions["clientDataJson"].toObject();
134-
const auto clientDataArray = QJsonDocument(clientDataJson).toJson(QJsonDocument::Compact);
133+
const auto clientDataJson = assertionOptions["clientDataJson"].toString();
134+
const auto clientDataArray = clientDataJson.toUtf8();
135135

136136
const auto signature = buildSignature(authenticatorData, clientDataArray, privateKeyPem);
137137
if (signature.isEmpty()) {
@@ -140,7 +140,7 @@ QJsonObject BrowserPasskeys::buildGetPublicKeyCredential(const QJsonObject& asse
140140

141141
QJsonObject responseObject;
142142
responseObject["authenticatorData"] = browserMessageBuilder()->getBase64FromArray(authenticatorData);
143-
responseObject["clientDataJSON"] = browserMessageBuilder()->getBase64FromJson(clientDataJson);
143+
responseObject["clientDataJSON"] = browserMessageBuilder()->getBase64FromArray(clientDataArray);
144144
responseObject["clientExtensionResults"] = assertionOptions["clientExtensionResults"];
145145
responseObject["signature"] = browserMessageBuilder()->getBase64FromArray(signature);
146146
responseObject["userHandle"] = userHandle;

src/browser/BrowserService.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName, bool isPass
330330
}
331331
#endif
332332
name = newGroup->name();
333+
newGroup->setCustomDataTriState(BrowserService::OPTION_HIDE_ENTRY, Group::Disable);
333334
uuid = Tools::uuidToHex(newGroup->uuid());
334335
previousGroup = newGroup;
335336
continue;

0 commit comments

Comments
 (0)