Compare commits

...

11 Commits

Author SHA1 Message Date
Juzu-O
592d553ff8 Add URL double-click action option to Settings (#12322)
* Closes #4717

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: juzu-o <3142026+juzu-o@users.noreply.github.com>
Co-authored-by: Jonathan White <support@dmapps.us>
2025-11-02 12:32:11 -05:00
MNarath
a709f14cf3 Fix KeeShare entries with references not updating (#11809)
A Entry that gets shared containing a reference Attribute would not write a history entry upon resolving said Attribute resulting in the import into the target database not beeing triggered despite the changes beeing written to the keeshare db.
2025-11-02 12:29:14 -05:00
Isaac Elliott
9031cb530e Allow read-only native message files (#12236)
* Allow read-only native message files

It's possible[^1] for a native message file to be both correct and read-only.
When current versions of `keepassxc` encounter this, it fails, because
it can't write to the file. In this situation it should only fail if
the read-only file's contents are different to those it's trying to
write.

[^1]: e.g. when using an immutable OS management system like NixOS or
   home-manager.

---------

Co-authored-by: Jonathan White <support@dmapps.us>
2025-11-02 10:17:06 -05:00
Jonathan White
ebf0676661 Fix Auto-Type Empty Window Behavior
* Fixes #9282
* Also improve documentation for window title matching behavior
2025-11-02 10:16:41 -05:00
Sebastian Livoni
6130a64be5 Add Window menu for macOS and specify Help menu to AppKit (#12357)
* Add Window menu for macOS and specify Help menu to AppKit
* Fix potential NSString dangling pointers of temporary QStrings
2025-11-02 10:16:22 -05:00
renner
9814037fd3 feat: refresh appdata.xml
* Adds donation, contact and up-to-date transifex URL
* Add features to appdata.xml for FlatHub
* Remove old releases to reduce file size
* Improve summary and description text
2025-11-02 09:08:07 -05:00
renner
8c8ae49240 chore: reformat xml with GUI tool 2025-11-02 09:08:07 -05:00
Chris Bednarski
1e370b8ab8 Change StartupNotify to false
StartupNotify causes KeepassXC to hang on startup until the notification timeout is reached, making the KeepassXC window unavailable in the application switcher (i.e. alt-tab) on various Linux distros.

Fixes https://github.com/keepassxreboot/keepassxc/issues/6423
Fixes https://github.com/keepassxreboot/keepassxc/issues/11664
2025-11-02 08:58:02 -05:00
Jonathan White
cd9bb483fe Fix saving "Search Wait for Enter" setting 2025-11-02 06:24:36 -05:00
Sertonix
2cc2c905b5 Fix uninitialized memory when --pw-stdin is used with a pipe 2025-11-01 19:56:11 -04:00
Siddhant Shekhar
d9ccf767d0 Sanitize username to prevent single-instance detection failure (#12559)
---------

Co-authored-by: Jonathan White <support@dmapps.us>
2025-11-01 10:25:10 -04:00
30 changed files with 1039 additions and 1305 deletions

View File

@@ -32,7 +32,9 @@ To configure Auto-Type sequences for your entries, perform the following steps:
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)*.
+
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.
TIP: You can use an asterisk (`\*`) as a wildcard (e.g., when a window title contains a dynamic file or website name). Set the window title to `*` to match all windows. Leave the window title blank to offer additional sequences for every matching window. This is useful for typing individual custom attributes, for example.
+
TIP: To use a standard regular expression for window title matching, the window title must start and end with two forward slashes (e.g., `//^Secure Login - .*$//`).
+
.Auto-Type entry sequences
image::autotype_entry_sequences.png[]

View File

@@ -1,65 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Copyright 2017 KeePassXC Team <team@keepassxc.org> -->
<?xml version='1.0' encoding='utf-8'?>
<!--Copyright 2025 KeePassXC Team <team@keepassxc.org> -->
<component type="desktop-application">
<!--Created with jdAppStreamEdit 9.2-->
<id>org.keepassxc.KeePassXC.desktop</id>
<name>KeePassXC</name>
<summary>Secure and Full-featured Password Manager</summary>
<summary xml:lang="de">Sicherer und voll ausgestatteter Passwort-Manager</summary>
<developer id="org.keepassxc">
<name>KeePassXC Team</name>
</developer>
<metadata_license>CC-BY-3.0</metadata_license>
<project_license>GPL-3.0+</project_license>
<summary>Community-driven port of the Windows application “KeePass Password Safe”</summary>
<summary xml:lang="de">Von der Community entwickelter Port der Windows Anwendung “KeePass Password Safe”</summary>
<developer_name>KeePassXC Team</developer_name>
<project_license>GPL-3.0-or-later</project_license>
<update_contact>team@keepassxc.org</update_contact>
<description>
<p>
KeePassXC is an application for people with extremely high demands on secure
personal data management. It has a light interface, is cross-platform and
published under the terms of the GNU General Public License.
</p>
<p xml:lang="de">
KeePassXC ist eine Anwendung für Menschen, die extrem hohe Anforderungen
an die sichere Verwaltung von persönlichen Daten stellen. Sie hat eine leichtgewichtige
Benutzeroberfläche, ist auf vielen verschiedenen Plattformen verfügbar und
wird unter den Bedingungen der GNU General Public License veröffentlicht.
</p>
<p>KeePassXC is a modern, secure, and open-source password manager for your most sensitive information.
Designed for people with extremely high demands of secure personal data management. You can store
many different types of information, such as usernames, passwords, URLs, attachments, and notes in
an offline, encrypted file. Major features include: Auto-Type into any window, browser integration,
password generator, advanced search, comprehensive reports, FDO Secret Service integration, SSH agent
key management, and many more!</p>
<p xml:lang="de">KeePassXC ist ein moderner, sicherer Open-Source-Passwortmanager für Ihre sensibelsten Daten,
entwickelt für Anwender mit höchsten Ansprüchen an die sichere Verwaltung persönlicher Daten.
Sie können verschiedenste Informationen wie Benutzernamen, Passwörter, URLs, Anhänge und Notizen offline in
einer verschlüsselten Datei speichern. Zu den wichtigsten Funktionen gehören: Automatisches
Einfügen in beliebige Fenster, Browserintegration, Passwortgenerator, umfangreiche Suche, umfassende Berichte,
Integration mit dem FDO-Secret-Service, SSH-Agent-Schlüsselverwaltung und vieles mehr!</p>
</description>
<launchable type="desktop-id">org.keepassxc.KeePassXC.desktop</launchable>
<url type="homepage">https://keepassxc.org</url>
<url type="bugtracker">https://github.com/keepassxreboot/keepassxc/issues</url>
<url type="faq">https://keepassxc.org/docs#faq</url>
<url type="help">https://keepassxc.org/docs</url>
<url type="translate">https://www.transifex.com/keepassxc/keepassxc</url>
<url type="vcs-browser">https://github.com/keepassxreboot/keepassxc</url>
<url type="contribute">https://keepassxc.org/docs#contribute</url>
<screenshots>
<screenshot type="default">
<image>https://keepassxc.org/assets/img/screenshots/database_view.png</image>
<caption>Organize with Groups and Entries</caption>
<image type="source">https://keepassxc.org/assets/img/screenshots/database_view.png</image>
</screenshot>
<screenshot>
<image>https://keepassxc.org/assets/img/screenshots/unlock_database.png</image>
<caption>Unlock database</caption>
<image type="source">https://keepassxc.org/assets/img/screenshots/unlock_database.png</image>
</screenshot>
<screenshot>
<image>https://keepassxc.org/assets/img/screenshots/edit_entry_icons.png</image>
<caption>Icon Selection for Entry</caption>
<image type="source">https://keepassxc.org/assets/img/screenshots/edit_entry_icons.png</image>
</screenshot>
<screenshot>
<image>https://keepassxc.org/assets/img/screenshots/password_generator_advanced.png</image>
<caption>Password Generator</caption>
<image type="source">https://keepassxc.org/assets/img/screenshots/password_generator_advanced.png</image>
</screenshot>
</screenshots>
<releases>
<release version="2.8.0" date="2025-01-01">
<release version="2.8.0" date="2025-01-01" type="development">
<description>
<ul>
<li>Placeholder for future release notes</li>
</ul>
</description>
</release>
<release version="2.7.10" date="2025-03-02">
<release version="2.7.10" date="2025-03-02" type="stable">
<description>
<ul>
<li>Allow adjusting application font size [#11567]</li>
@@ -122,7 +115,7 @@
</ul>
</description>
</release>
<release version="2.7.9" date="2024-06-19">
<release version="2.7.9" date="2024-06-19" type="stable">
<description>
<ul>
<li>Passkeys: Ability to easily remove a passkey from an entry [#10777]</li>
@@ -150,7 +143,7 @@
</ul>
</description>
</release>
<release version="2.7.8" date="2024-05-05">
<release version="2.7.8" date="2024-05-05" type="stable">
<description>
<ul>
<li>Add hotkey for showing search help [#10591]</li>
@@ -193,7 +186,7 @@
</ul>
</description>
</release>
<release version="2.7.7" date="2024-03-09">
<release version="2.7.7" date="2024-03-09" type="stable">
<description>
<ul>
<li>Support USB Hotplug for Hardware Key interface [#10092]</li>
@@ -218,7 +211,7 @@
</ul>
</description>
</release>
<release version="2.7.6" date="2023-08-15">
<release version="2.7.6" date="2023-08-15" type="stable">
<description>
<ul>
<li>Significant improvement to visual when drag/drop entries [#9698]</li>
@@ -243,7 +236,7 @@
</ul>
</description>
</release>
<release version="2.7.5" date="2023-05-14">
<release version="2.7.5" date="2023-05-14" type="stable">
<description>
<ul>
<li>Add menu option to allow screenshots [#8841]</li>
@@ -280,7 +273,7 @@
</ul>
</description>
</release>
<release version="2.7.4" date="2022-10-29">
<release version="2.7.4" date="2022-10-29" type="stable">
<description>
<ul>
<li>Add 2 months expiration preset [#8687]</li>
@@ -296,7 +289,7 @@
</ul>
</description>
</release>
<release version="2.7.3" date="2022-10-23">
<release version="2.7.3" date="2022-10-23" type="stable">
<description>
<ul>
<li>Enhance Tags Support and Add Saved Searches [#8435, #8607]</li>
@@ -349,7 +342,7 @@
</ul>
</description>
</release>
<release version="2.7.1" date="2022-04-05">
<release version="2.7.1" date="2022-04-05" type="stable">
<description>
<ul>
<li>Show when tags are changed in entry history [#7638]</li>
@@ -374,7 +367,7 @@
</ul>
</description>
</release>
<release version="2.7.0" date="2022-03-21">
<release version="2.7.0" date="2022-03-21" type="stable">
<description>
<ul>
<li>Implement KDBX 4.1 [#7114]</li>
@@ -465,7 +458,7 @@
</ul>
</description>
</release>
<release version="2.6.6" date="2021-06-11">
<release version="2.6.6" date="2021-06-11" type="stable">
<description>
<ul>
<li>Fix focusing search when pressing hotkey [#6603]</li>
@@ -475,7 +468,7 @@
</ul>
</description>
</release>
<release version="2.6.5" date="2021-06-07">
<release version="2.6.5" date="2021-06-07" type="stable">
<description>
<ul>
<li>Show search bar when toolbar is hidden or in overflow [#6279]</li>
@@ -501,7 +494,7 @@
</ul>
</description>
</release>
<release version="2.6.4" date="2021-01-31">
<release version="2.6.4" date="2021-01-31" type="stable">
<description>
<ul>
<li>Automatically adapt to light/dark system theme changes (Windows/macOS only) [#6034]</li>
@@ -518,7 +511,7 @@
</ul>
</description>
</release>
<release version="2.6.3" date="2021-01-12">
<release version="2.6.3" date="2021-01-12" type="stable">
<description>
<ul>
<li>Support Argon2id KDF [#5778]</li>
@@ -545,7 +538,7 @@
</ul>
</description>
</release>
<release version="2.6.2" date="2020-10-21">
<release version="2.6.2" date="2020-10-21" type="stable">
<description>
<ul>
<li>Add option to keep window always on top to view menu [#5542]</li>
@@ -580,7 +573,7 @@
</ul>
</description>
</release>
<release version="2.6.1" date="2020-08-19">
<release version="2.6.1" date="2020-08-19" type="stable">
<description>
<ul>
<li>Add menu entries for auto-typing only username or only password [#4891]</li>
@@ -618,7 +611,7 @@
</ul>
</description>
</release>
<release version="2.6.0" date="2020-07-06">
<release version="2.6.0" date="2020-07-06" type="stable">
<description>
<ul>
<li>Custom Light and Dark themes [#4110, #4769, #4791, #4892, #4915]</li>
@@ -692,564 +685,20 @@
</ul>
</description>
</release>
<release version="2.5.4" date="2020-04-09">
<description>
<ul>
<li>Return keyboard focus after saving database edits [#4287]</li>
<li>Windows: Use bare minimum settings in portable version [#4131]</li>
<li>Windows: Use SHA256 code signing [#4129]</li>
<li>macOS: Fix code signing incompatibility in latest macOS release [#4564]</li>
</ul>
</description>
</release>
<release version="2.5.3" date="2020-01-19">
<description>
<ul>
<li>Fix a possible database lockout when removing a YubiKey from a KDBX 3.1 database [#4147]</li>
<li>Fix crash if Auto-Type is performed on a new entry [#4150]</li>
<li>Fix crash when all entries are deleted from a group [#4156]</li>
<li>Improve the reliability of clipboard clearing on Gnome [#4165]</li>
<li>Do not check cmd:// URLs for valid URL syntax anymore [#4172]</li>
<li>Prevent unnecessary merges for databases on network shares [#4153]</li>
<li>Browser: Prevent native messaging proxy from blocking application shutdown [#4155]</li>
<li>Browser: Improve website URL matching [#4134, #4177]</li>
</ul>
</description>
</release>
<release version="2.5.2" date="2020-01-04">
<description>
<ul>
<li>Browser: Show UI warning when entering invalid URLs [#3912]</li>
<li>Browser: Option to use an entry only for HTTP auth [#3927]</li>
<li>Disable the user interface when merging or saving the database [#3991]</li>
<li>Ability to hide protected attribute after reveal [#3877]</li>
<li>Remove mention of "snaps" in Windows and macOS [#3879]</li>
<li>CLI: Merge parameter for source database key file (--key-file-from) [#3961]</li>
<li>Improve GUI tests reliability on Hi-DPI displays [#4075]</li>
<li>Disable deprecation warnings to allow building with Qt 5.14+ [#4075]</li>
<li>OPVault: Use 'otp' attribute for TOTP field imports [#4075]</li>
<li>Fix crashes when saving a database to cloud storage [#3991]</li>
<li>Fix crash when pressing enter twice while opening database [#3885]</li>
<li>Fix handling of HTML when displayed in the entry preview panel [#3910]</li>
<li>Fix start minimized to tray on Linux [#3899]</li>
<li>Fix Auto Open with key file only databases [#4075]</li>
<li>Fix escape key closing the standalone password generator [#3892]</li>
<li>macOS: Fix monospace font usage in password field and notes [#4075]</li>
<li>macOS: Fix building on macOS 10.9 to 10.11 [#3946]</li>
<li>Fix TOTP setup dialog not closing on database lock [#4075]</li>
<li>Browser: Fix condition where additional URLs are ignored [#4033]</li>
<li>Browser: Fix subdomain matching to return only relevant site entries [#3854]</li>
<li>Secret Service: Fix multiple crashes and incompatibilities [#3871, #4009, #4074]</li>
<li>Secret Service: Fix searching of entries [#4008, #4036]</li>
<li>Secret Service: Fix behavior when exposed group is recycled [#3914]</li>
<li>CLI: Release the database instance before exiting interactive mode [#3889]</li>
<li>Fix (most) memory leaks in tests [#3922]</li>
</ul>
</description>
</release>
<release version="2.5.1" date="2019-11-11">
<description>
<ul>
<li>Add programmatic use of the EntrySearcher [#3760]</li>
<li>Explicitly clear database memory upon locking even if the object is not deleted immediately [#3824]</li>
<li>macOS: Add ability to perform notarization of built package [#3827]</li>
<li>Reduce file hash checking to every 30 seconds to correct performance issues [#3724]</li>
<li>Correct formatting of notes in entry preview widget [#3727]</li>
<li>Improve performance and UX of database statistics page [#3780]</li>
<li>Improve interface for key file selection to discourage use of the database file [#3807]</li>
<li>Hide Auto-Type sequences column when not needed [#3794]</li>
<li>macOS: Revert back to using Carbon API for hotkey detection [#3794]</li>
<li>CLI: Do not show protected fields by default [#3710]</li>
<li>Secret Service: Correct issues interfacing with various applications [#3761]</li>
<li>Fix building without additional features [#3693]</li>
<li>Fix handling TOTP secret keys that require padding [#3764]</li>
<li>Fix database unlock dialog password field focus [#3764]</li>
<li>Correctly label open databases as locked on launch [#3764]</li>
<li>Prevent infinite recursion when two databases AutoOpen each other [#3764]</li>
<li>Browser: Fix incorrect matching of invalid URLs [#3759]</li>
<li>Properly stylize the application name on Linux [#3775]</li>
<li>Show application icon on Plasma Wayland sessions [#3777]</li>
<li>macOS: Check for Auto-Type permissions on use instead of at launch [#3794]</li>
</ul>
</description>
</release>
<release version="2.5.0" date="2019-10-26">
<description>
<ul>
<li>Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [#3277]</li>
<li>Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [#2034]</li>
<li>Add offline user manual accessible via the 'Help' menu [#3274]</li>
<li>Add support for importing 1Password OpVault files [#2292]</li>
<li>Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [#2726]</li>
<li>Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [#3352]</li>
<li>Add group sorting feature [#3282]</li>
<li>Add feature to download favicons for all entries at once [#3169]</li>
<li>Add word case option to passphrase generator [#3172]</li>
<li>Add support for RFC6238-compliant TOTP hashes [#2972]</li>
<li>Add UNIX man page for main program [#3665]</li>
<li>Add 'Monospaced font' option to the notes field [#3321]</li>
<li>Add support for key files in auto open [#3504]</li>
<li>Add search field for filtering entries in Auto-Type dialog [#2955]</li>
<li>Complete usernames based on known usernames from other entries [#3300]</li>
<li>Parse hyperlinks in the notes field of the entry preview pane [#3596]</li>
<li>Allow abbreviation of field names in entry search [#3440]</li>
<li>Allow setting group icons recursively [#3273]</li>
<li>Add copy context menu for username and password in Auto-Type dialog [#3038]</li>
<li>Drop to background after copying a password to the clipboard [#3253]</li>
<li>Add 'Lock databases' entry to tray icon menu [#2896]</li>
<li>Add option to minimize window after unlocking [#3439]</li>
<li>Add option to minimize window after opening a URL [#3302]</li>
<li>Request accessibility permissions for Auto-Type on macOS [#3624]</li>
<li>Browser: Add initial support for multiple URLs [#3558]</li>
<li>Browser: Add entry-specific browser integration settings [#3444]</li>
<li>Add offline HIBP checker (requires a downloaded HIBP dump) [#2707]</li>
<li>CLI: Add 'flatten' option to the 'ls' command [#3276]</li>
<li>CLI: Add password generation options to `Add` and `Edit` commands [#3275]</li>
<li>CLI: Add XML import [#3572]</li>
<li>CLI: Add CSV export to the 'export' command [#3278]</li>
<li>CLI: Add `-y --yubikey` option for YubiKey [#3416]</li>
<li>CLI: Add `--dry-run` option for merging databases [#3254]</li>
<li>CLI: Add group commands (mv, mkdir and rmdir) [#3313].</li>
<li>CLI: Add interactive shell mode command `open` [#3224]</li>
<li>Redesign database unlock dialog [ [#3287]</li>
<li>Rework the entry preview panel [ [#3306]</li>
<li>Move notes to General tab on Group Preview Panel [#3336]</li>
<li>Enable entry actions when editing an entry and cleanup entry context menu [#3641]</li>
<li>Improve detection of external database changes [#2389]</li>
<li>Warn if user is trying to use a KDBX file as a key file [#3625]</li>
<li>Add option to disable KeePassHTTP settings migrations prompt [#3349, #3344]</li>
<li>Re-enabled Wayland support (no Auto-Type yet) [#3520, #3341]</li>
<li>Add icon to 'Toggle Window' action in tray icon menu [[3244]</li>
<li>Merge custom data between databases only when necessary [#3475]</li>
<li>Improve various file-handling related issues when picking files using the system's file dialog [#3473]</li>
<li>Add 'New Entry' context menu when no entries are selected [#3671]</li>
<li>Reduce default Argon2 settings from 128 MiB and one thread per CPU core to 64 MiB and two threads to account for lower-spec mobile hardware [#3672]</li>
<li>Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [#3371]</li>
<li>Browser: Show database name when pairing with a new browser [#3638]</li>
<li>Browser: Show URL in allow access dialog [#3639]</li>
<li>CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [#3275]</li>
<li>CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [#3275]</li>
<li>CLI: Rename command `extract` to `export`. [#3277]</li>
<li>Improve accessibility for assistive technologies [#3409]</li>
<li>Correctly unlock all databases if `--pw-stdin` is provided [#2916]</li>
<li>Fix password generator issues with special characters [#3303]</li>
<li>Fix KeePassXC interrupting shutdown procedure [#3666]</li>
<li>Fix password visibility toggle button state on unlock dialog [#3312]</li>
<li>Fix potential data loss if database is reloaded while user is editing an entry [#3656]</li>
<li>Fix hard-coded background color in search help popup [#3001]</li>
<li>Fix font choice for password preview [#3425]</li>
<li>Fix handling of read-only files when autosave is enabled [#3408]</li>
<li>Handle symlinks correctly when atomic saves are disabled [#3463]</li>
<li>Enable HighDPI icon scaling on Linux [#3332]</li>
<li>Make Auto-Type on macOS more robust and remove old Carbon API calls [#3634, #3347]</li>
<li>Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [#3654, #3291, #3029, #3031, #3236]</li>
<li>Correctly bring window to the front when clicking tray icon on macOS [#3576]</li>
<li>Correct application shortcut created by MSI Installer on Windows [#3296]</li>
<li>Fix crash when removing custom data [#3508]</li>
<li>Fix placeholder resolution in URLs [#3281]</li>
<li>Fix various inconsistencies and platform-dependent compilation bugs [#3664, #3662, #3660, #3655, #3649, #3417, #3357, #3319, #3318, #3304]</li>
<li>Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [#3480]</li>
<li>Browser: Fix password entropy calculation [#3107]</li>
<li>Browser: Fix Windows registry settings for portable installation [#3603]</li>
</ul>
</description>
</release>
<release version="2.4.3" date="2019-06-12">
<description>
<ul>
<li>Fix library loading issues in the Snap and macOS releases [#3247]</li>
<li>Fix various keyboard navigation issues [#3248]</li>
<li>Fix main window toggling regression when clicking the tray icon on KDE [#3258]</li>
<li>Add documentation for keyboard shortcuts to source code distribution [#3215]</li>
</ul>
</description>
</release>
<release version="2.4.2" date="2019-05-31">
<description>
<ul>
<li>Improve resilience against memory attacks - overwrite memory before free [#3020]</li>
<li>Prevent infinite save loop when location is unavailable [#3026]</li>
<li>Attempt to fix quitting application when shutdown or logout issued [#3199]</li>
<li>Support merging database custom data [#3002]</li>
<li>Fix opening URL's with non-http schemes [#3153]</li>
<li>Fix data loss due to not reading all database attachments if duplicates exist [#3180]</li>
<li>Fix entry context menu disabling when using keyboard navigation [#3199]</li>
<li>Fix behaviors when canceling an entry edit [#3199]</li>
<li>Fix processing of tray icon click and doubleclick [#3112]</li>
<li>Update group in preview widget when focused [#3199]</li>
<li>Prefer DuckDuckGo service over direct icon download (increases resolution) [#2996]</li>
<li>Remove apply button in application settings [#3019]</li>
<li>Use winqtdeploy on Windows to correct deployment issues [#3025]</li>
<li>Don't mark entry edit as modified when attribute selection changes [#3041]</li>
<li>Use console code page CP_UTF8 on Windows if supported [#3050]</li>
<li>Snap: Fix locking database with session lock [#3046]</li>
<li>Snap: Fix theming across Linux distributions [#3057]</li>
<li>Snap: Use SNAP_USER_COMMON and SNAP_USER_DATA directories [#3131]</li>
<li>KeeShare: Automatically enable WITH_XC_KEESHARE_SECURE if quazip is found [#3088]</li>
<li>macOS: Fix toolbar text when in dark mode [#2998]</li>
<li>macOS: Lock database on switching user [#3097]</li>
<li>macOS: Fix global Auto-Type when the database is locked [#3138]</li>
<li>Browser: Close popups when database is locked [#3093]</li>
<li>Browser: Add tests [#3016]</li>
<li>Browser: Don't create default group if custom group is enabled [#3127]</li>
</ul>
</description>
</release>
<release version="2.4.1" date="2019-04-12">
<description>
<ul>
<li>Fix database deletion when using unsafe saves to a different file system [#2889]</li>
<li>Fix opening databases with legacy key files that contain '/' [#2872]</li>
<li>Fix opening database files from the command line [#2919]</li>
<li>Fix crash when editing master key [#2836]</li>
<li>Fix multiple issues with apply button behavior [#2947]</li>
<li>Fix issues on application startup (tab order, --pw-stdin, etc.) [#2830]</li>
<li>Fix building without WITH_XC_KEESHARE</li>
<li>Fix reference entry coloring on macOS dark mode [#2984]</li>
<li>Hide window when performing entry auto-type on macOS [#2969]</li>
<li>Improve UX of update checker; reduce checks to every 7 days [#2968]</li>
<li>KeeShare improvements [#2946, #2978, #2824]</li>
<li>Re-enable Ctrl+C to copy password from search box [#2947]</li>
<li>Add KeePassXC-Browser integration for Brave browser [#2933]</li>
<li>SSH Agent: Re-Add keys on database unlock [#2982]</li>
<li>SSH Agent: Only remove keys on app exit if they are removed on lock [#2985]</li>
<li>CLI: Add --no-password option [#2708]</li>
<li>CLI: Improve database extraction to XML [#2698]</li>
<li>CLI: Don't call mandb on build [#2774]</li>
<li>CLI: Add debug info [#2714]</li>
<li>Improve support for Snap theming [#2832]</li>
<li>Add support for building on Haiku OS [#2859]</li>
<li>Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous</li>
<li>Fix compiling on GCC 5 / Xenial [#2990]</li>
<li>Add .gitrev output to tarball for third-party builds [#2970]</li>
<li>Add WITH_XC_UPDATECHECK compile flag to enable/disable the update checker [#2968]</li>
</ul>
</description>
</release>
<release version="2.4.0" date="2019-03-19">
<description>
<ul>
<li>New Database Wizard [#1952]</li>
<li>Advanced Search [#1797]</li>
<li>Automatic update checker [#2648]</li>
<li>KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739]</li>
<li>Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439]</li>
<li>Remove KeePassHttp support [#1752]</li>
<li>CLI: output info to stderr for easier scripting [#2558]</li>
<li>CLI: Add --quiet option [#2507]</li>
<li>CLI: Add create command [#2540]</li>
<li>CLI: Add recursive listing of entries [#2345]</li>
<li>CLI: Fix stdin/stdout encoding on Windows [#2425]</li>
<li>SSH Agent: Support OpenSSH for Windows [#1994]</li>
<li>macOS: TouchID Quick Unlock [#1851]</li>
<li>macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583]</li>
<li>Linux: Prevent Klipper from storing secrets in clipboard [#1969]</li>
<li>Linux: Use polling based file watching for NFS [#2171]</li>
<li>Linux: Enable use of browser plugin in Snap build [#2802]</li>
<li>TOTP QR Code Generator [#1167]</li>
<li>High-DPI Scaling for 4k screens [#2404]</li>
<li>Make keyboard shortcuts more consistent [#2431]</li>
<li>Warn user if deleting referenced entries [#1744]</li>
<li>Allow toolbar to be hidden and repositioned [#1819, #2357]</li>
<li>Increase max allowed database timeout to 12 hours [#2173]</li>
<li>Password generator uses existing password length by default [#2318]</li>
<li>Improve alert message box button labels [#2376]</li>
<li>Show message when a database merge makes no changes [#2551]</li>
<li>Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790]</li>
<li>Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731]</li>
</ul>
</description>
</release>
<release version="2.3.4" date="2018-08-21">
<description>
<ul>
<li>Show all URL schemes in entry view [#1768]</li>
<li>Disable merge when database is locked [#1975]</li>
<li>Fix intermittent crashes with favorite icon downloads [#1980]</li>
<li>Provide potential crash warning to Qt 5.5.x users [#2211]</li>
<li>Disable apply button when creating new entry/group to prevent data loss [#2204]</li>
<li>Allow for 12 hour timeout to lock idle database [#2173]</li>
<li>Multiple SSH Agent fixes [#1981, #2117]</li>
<li>Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185]</li>
<li>Fix browser proxy application not closing properly [#2142]</li>
<li>Add real names and Patreon supporters to about dialog [#2214]</li>
<li>Add settings button to toolbar, Donate button, and Report a Bug button to help menu [#2214]</li>
<li>Enhancements to release-tool to appsign intermediate build products [#2101]</li>
</ul>
</description>
</release>
<release version="2.3.3" date="2018-05-09">
<description>
<ul>
<li>Fix crash when browser integration is enabled [#1923]</li>
</ul>
</description>
</release>
<release version="2.3.2" date="2018-05-07">
<description>
<ul>
<li>Enable high entropy ASLR on Windows [#1747]</li>
<li>Enhance favicon fetching [#1786]</li>
<li>Fix crash on Windows due to autotype [#1691]</li>
<li>Fix dark tray icon changing all icons [#1680]</li>
<li>Fix --pw-stdin not using getPassword function [#1686]</li>
<li>Fix placeholders being resolved in notes [#1907]</li>
<li>Enable auto-type start delay to be configurable [#1908]</li>
<li>Browser: Fix native messaging reply size [#1719]</li>
<li>Browser: Increase maximum buffer size [#1720]</li>
<li>Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906]</li>
<li>SSH Agent: Parse aes-256-cbc/ctr keys [#1682]</li>
<li>SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787]</li>
</ul>
</description>
</release>
<release version="2.3.1" date="2018-03-06">
<description>
<ul>
<li>Fix unnecessary automatic upgrade to KDBX 4.0 and prevent challenge-response key being stripped [#1568]</li>
<li>Abort saving and show an error message when challenge-response fails [#1659]</li>
<li>Support inner stream protection on all string attributes [#1646]</li>
<li>Fix favicon downloads not finishing on some websites [#1657]</li>
<li>Fix freeze due to invalid STDIN data [#1628]</li>
<li>Correct issue with encrypted RSA SSH keys [#1587]</li>
<li>Fix crash on macOS due to QTBUG-54832 [#1607]</li>
<li>Show error message if ssh-agent communication fails [#1614]</li>
<li>Fix --pw-stdin and filename parameters being ignored [#1608]</li>
<li>Fix Auto-Type syntax check not allowing spaces and special characters [#1626]</li>
<li>Fix reference placeholders in combination with Auto-Type [#1649]</li>
<li>Fix qtbase translations not being loaded [#1611]</li>
<li>Fix startup crash on Windows due to missing SVG libraries [#1662]</li>
<li>Correct database tab order regression [#1610]</li>
<li>Fix GCC 8 compilation error [#1612]</li>
<li>Fix copying of advanced attributes on KDE [#1640]</li>
<li>Fix member initialization of CategoryListWidgetDelegate [#1613]</li>
<li>Fix inconsistent toolbar icon sizes and provide higher-quality icons [#1616]</li>
<li>Improve preview panel geometry [#1609]</li>
</ul>
</description>
</release>
<release version="2.3.0" date="2018-02-27">
<description>
<ul>
<li>Add support for KDBX 4.0, Argon2 and ChaCha20 [#148, #1179, #1230, #1494]</li>
<li>Add SSH Agent feature [#1098, #1450, #1463]</li>
<li>Add preview panel with details of the selected entry [#879, #1338]</li>
<li>Add more and configurable columns to entry table and allow copying of values by double click [#1305]</li>
<li>Add KeePassXC-Browser API as a replacement for KeePassHTTP [#608]</li>
<li>Deprecate KeePassHTTP [#1392]</li>
<li>Add support for Steam one-time passwords [#1206]</li>
<li>Add support for multiple Auto-Type sequences for a single entry [#1390]</li>
<li>Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 [#1060]</li>
<li>Replace qHttp with cURL for website icon downloads [#1460]</li>
<li>Remove lock file [#1231]</li>
<li>Add option to create backup file before saving [#1385]</li>
<li>Ask to save a generated password before closing the entry password generator [#1499]</li>
<li>Resolve placeholders recursively [#1078]</li>
<li>Add Auto-Type button to the toolbar [#1056]</li>
<li>Improve window focus handling for Auto-Type dialogs [#1204, #1490]</li>
<li>Auto-Type dialog and password generator can now be exited with ESC [#1252, #1412]</li>
<li>Add optional dark tray icon [#1154]</li>
<li>Add new "Unsafe saving" option to work around saving problems with file sync services [#1385]</li>
<li>Add IBus support to AppImage and additional image formats to Windows builds [#1534, #1537]</li>
<li>Add diceware password generator to CLI [#1406]</li>
<li>Add --key-file option to CLI [#816, #824]</li>
<li>Add DBus interface for opening and closing KeePassXC databases [#283]</li>
<li>Add KDBX compression options to database settings [#1419]</li>
<li>Discourage use of old fixed-length key files in favor of arbitrary files [#1326, #1327]</li>
<li>Correct reference resolution in entry fields [#1486]</li>
<li>Fix window state and recent databases not being remembered on exit [#1453]</li>
<li>Correct history item generation when configuring TOTP for an entry [#1446]</li>
<li>Correct multiple TOTP bugs [#1414]</li>
<li>Automatic saving after every change is now a default [#279]</li>
<li>Allow creation of new entries during search [#1398]</li>
<li>Correct menu issues on macOS [#1335]</li>
<li>Allow compilation on OpenBSD [#1328]</li>
<li>Improve entry attachments view [#1139, #1298]</li>
<li>Fix auto lock for Gnome and Xfce [#910, #1249]</li>
<li>Don't remember key files in file dialogs when the setting is disabled [#1188]</li>
<li>Improve database merging and conflict resolution [#807, #1165]</li>
<li>Fix macOS pasteboard issues [#1202]</li>
<li>Improve startup times on some platforms [#1205]</li>
<li>Hide the notes field by default [#1124]</li>
<li>Toggle main window by clicking tray icon with the middle mouse button [#992]</li>
<li>Fix custom icons not copied over when databases are merged [#1008]</li>
<li>Allow use of DEL key to delete entries [#914]</li>
<li>Correct intermittent crash due to stale history items [#1527]</li>
<li>Sanitize newline characters in title, username and URL fields [#1502]</li>
<li>Reopen previously opened databases in correct order [#774]</li>
<li>Use system's zxcvbn library if available [#701]</li>
<li>Implement various i18n improvements [#690, #875, #1436]</li>
</ul>
</description>
</release>
<release version="2.2.4" date="2017-12-13">
<description>
<ul>
<li>Prevent database corruption when locked [#1219]</li>
<li>Fixes apply button not saving new entries [#1141]</li>
<li>Switch to Consolas font on Windows for password edit [#1229]</li>
<li>Multiple fixes to AppImage deployment [#1115, #1228]</li>
<li>Fixes multiple memory leaks [#1213]</li>
<li>Resize message close to 16x16 pixels [#1253]</li>
</ul>
</description>
</release>
<release version="2.2.2" date="2017-10-22">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Fixed entries with empty URLs being reported to KeePassHTTP clients [#1031]</li>
<li>Fixed YubiKey detection and enabled CLI tool for AppImage binary [#1100]</li>
<li>Added AppStream description [#1082]</li>
<li>Improved TOTP compatibility and added new Base32 implementation [#1069]</li>
<li>Fixed error handling when processing invalid cipher stream [#1099]</li>
<li>Fixed double warning display when opening a database [#1037]</li>
<li>Fixed unlocking databases with --pw-stdin [#1087]</li>
<li>Added ability to override QT_PLUGIN_PATH environment variable for AppImages [#1079]</li>
<li>Fixed transform seed not being regenerated when saving the database [#1068]</li>
<li>Fixed only one YubiKey slot being polled [#1048]</li>
<li>Corrected an issue with entry icons while merging [#1008]</li>
<li>Corrected desktop and tray icons in Snap package [#1030]</li>
<li>Fixed screen lock and Google fallback settings [#1029]</li>
</ul>
</description>
</release>
<release version="2.2.1" date="2017-10-01">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Corrected multiple snap issues [#934, #1011]</li>
<li>Corrected multiple custom icon issues [#708, #719, #994]</li>
<li>Corrected multiple Yubikey issues [#880]</li>
<li>Fixed single instance preventing load on occasion [#997]</li>
<li>Keep entry history when merging databases [#970]</li>
<li>Prevent data loss if passwords were mismatched [#1007]</li>
<li>Fixed crash after merge [#941]</li>
<li>Added configurable auto-type default delay [#703]</li>
<li>Unlock database dialog window comes to front [#663]</li>
<li>Translation and compiling fixes</li>
</ul>
</description>
</release>
<release version="2.2.0" date="2017-06-23">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Added YubiKey 2FA integration for unlocking databases [#127]</li>
<li>Added TOTP support [#519]</li>
<li>Added CSV import tool [#146, #490]</li>
<li>Added KeePassXC CLI tool [#254]</li>
<li>Added diceware password generator [#373]</li>
<li>Added support for entry references [#370, #378]</li>
<li>Added support for Twofish encryption [#167]</li>
<li>Enabled DEP and ASLR for in-memory protection [#371]</li>
<li>Enabled single instance mode [#510]</li>
<li>Enabled portable mode [#645]</li>
<li>Enabled database lock on screensaver and session lock [#545]</li>
<li>Redesigned welcome screen with common features and recent databases [#292]</li>
<li>Multiple updates to search behavior [#168, #213, #374, #471, #603, #654]</li>
<li>Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [#267, #427, #480]</li>
<li>Fixed auto-type errors on Linux [#550]</li>
<li>Prompt user prior to executing a cmd:// URL [#235]</li>
<li>Entry attributes can be protected (hidden) [#220]</li>
<li>Added extended ascii to password generator [#538]</li>
<li>Added new database icon to toolbar [#289]</li>
<li>Added context menu entry to empty recycle bin in databases [#520]</li>
<li>Added "apply" button to entry and group edit windows [#624]</li>
<li>Added macOS tray icon and enabled minimize on close [#583]</li>
<li>Fixed issues with unclean shutdowns [#170, #580]</li>
<li>Changed keyboard shortcut to create new database to CTRL+SHIFT+N [#515]</li>
<li>Compare window title to entry URLs [#556]</li>
<li>Implemented inline error messages [#162]</li>
<li>Ignore group expansion and other minor changes when making database "dirty" [#464]</li>
<li>Updated license and copyright information on source files [#632]</li>
<li>Added contributors list to about dialog [#629]</li>
</ul>
</description>
</release>
<release version="2.1.4" date="2017-04-09">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Bumped KeePassHTTP version to 1.8.4.2</li>
<li>KeePassHTTP confirmation window comes to foreground [#466]</li>
</ul>
</description>
</release>
<release version="2.1.3" date="2017-03-03">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Fix possible overflow in zxcvbn library [#363]</li>
<li>Revert HiDPI setting to avoid problems on laptop screens [#332]</li>
<li>Set file meta properties in Windows executable [#330]</li>
<li>Suppress error message when auto-reloading a locked database [#345]</li>
<li>Improve usability of question dialog when database is already locked by a different instance [#346]</li>
<li>Fix compiler warnings in QHttp library [#351]</li>
<li>Use unified toolbar on Mac OS X [#361]</li>
<li>Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 [#362]</li>
</ul>
</description>
</release>
<release version="2.1.2" date="2017-02-17">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Ask for save location when creating a new database [#302]</li>
<li>Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [#317, #265]</li>
<li>Prevent Qt from degrading Wifi network performance on certain platforms [#318]</li>
<li>Visually refine user interface on OS X and other platforms [#299]</li>
<li>Remove unusable tray icon setting on OS X [#293]</li>
<li>Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup [#307]</li>
<li>Fix AppImage tray icon on Ubuntu [#277, #273]</li>
<li>Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu [#276]</li>
<li>Fix result order in entry search [#320]</li>
<li>Enable HiDPI scaling on supported platforms [#315]</li>
<li>Remove empty directories from installation target [#282]</li>
</ul>
</description>
</release>
<release version="2.1.1" date="2017-02-06">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Enabled HTTP plugin build; plugin is disabled by default and limited to localhost [#147]</li>
<li>Escape HTML in dialog boxes [#247]</li>
<li>Corrected crashes in favicon download and password generator [#233, #226]</li>
<li>Increase font size of password meter [#228]</li>
<li>Fixed compatibility with Qt 5.8 [#211]</li>
<li>Use consistent button heights in password generator [#229]</li>
</ul>
</description>
</release>
<release version="2.1.0" date="2017-01-22">
<description>
<p>Changes included in this release:</p>
<ul>
<li>Show unlock dialog when using autotype on a closed database [#10, #89]</li>
<li>Show different tray icon when database is locked [#37, #46]</li>
<li>Support autotype on Windows and OS X [#42, #60, #63]</li>
<li>Add delay feature to autotype [#76, #77]</li>
<li>Add password strength meter [#84, #92]</li>
<li>Add option for automatically locking the database when minimizing the window [#57]</li>
<li>Add feature to download favicons and use them as entry icons [#30]</li>
<li>Automatically reload and merge database when the file changed on disk [#22, #33, #93]</li>
<li>Add tool for merging two databases [#22, #47, #143]</li>
<li>Add --pw-stdin commandline option to unlock the database by providing a password on STDIN [#54]</li>
<li>Add utility script for reading the database password from KWallet [#55]</li>
<li>Fix some KeePassHTTP settings not being remembered [#34, #65]</li>
<li>Make search box persistent [#15, #67, #157]</li>
<li>Enhance search feature by scoping the search to selected group [#16, #118]</li>
<li>Improve interaction between search field and entry list [#131, #141]</li>
<li>Add stand-alone password-generator [#18, #92]</li>
<li>Don't require password repetition when password is visible [#27, #92]</li>
<li>Add support for entry attributes in autotype sequences [#107]</li>
<li>Always focus password field when opening the database unlock widget [#116, #117]</li>
<li>Fix compilation errors on various platforms [#53, #126, #130]</li>
<li>Restructure and improve kdbx-extract utility [#160]</li>
</ul>
</description>
</release>
</releases>
<content_rating type="oars-1.0" />
<url type="homepage">https://keepassxc.org</url>
<url type="bugtracker">https://github.com/keepassxreboot/keepassxc/issues</url>
<url type="faq">https://keepassxc.org/docs/#faq</url>
<url type="help">https://keepassxc.org/docs/</url>
<url type="donation">https://keepassxc.org/donate/</url>
<url type="translate">https://explore.transifex.com/keepassxc/keepassxc/</url>
<url type="contact">https://keepassxc.org/team/#contact</url>
<url type="vcs-browser">https://github.com/keepassxreboot/keepassxc</url>
<url type="contribute">https://keepassxc.org/docs/#contribute</url>
<content_rating type="oars-1.1"/>
<launchable type="desktop-id">org.keepassxc.KeePassXC.desktop</launchable>
<branding>
<color type="primary" scheme_preference="light">#5b982a</color>
<color type="primary" scheme_preference="dark">#5b982a</color>
</branding>
</component>

View File

@@ -39,7 +39,7 @@ Exec=keepassxc %f
TryExec=keepassxc
Icon=@APP_ICON_NAME@
StartupWMClass=keepassxc
StartupNotify=true
StartupNotify=false
Terminal=false
Type=Application
Version=1.5

View File

@@ -157,6 +157,25 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AppKit</name>
<message>
<source>Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimize</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Zoom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bring All to Front</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ApplicationSettingsWidget</name>
<message>
@@ -561,10 +580,6 @@
<source>Export settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open browser on double clicking URL field in entry view</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Font size:</source>
<translation type="unfinished"></translation>
@@ -577,6 +592,26 @@
<source>Skip confirmation for main window Auto-Type actions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Double-click action for URL:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Double-click action for URL field</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open entry URL in browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy entry URL to clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto-generate password for new entries</source>
<translation type="unfinished"></translation>

View File

@@ -372,16 +372,30 @@ bool NativeMessageInstaller::createNativeMessageFile(SupportedBrowsers browser)
QFile scriptFile(path);
if (!scriptFile.open(QIODevice::WriteOnly)) {
qWarning() << "Browser Plugin: Failed to open native message file for writing at " << scriptFile.fileName();
if (!scriptFile.open(QIODevice::ReadOnly)) {
qWarning() << "Browser Plugin: Failed to open native message file at " << scriptFile.fileName();
qWarning() << scriptFile.errorString();
return false;
}
// We failed to write to `scriptFile`, but we can read it, so we assume that it's a read-only file.
// Consider success if the read-only file already contains the content we would have written.
QJsonDocument expectedDoc(constructFile(browser));
QJsonDocument actualDoc = QJsonDocument::fromJson(scriptFile.readAll());
if (expectedDoc != actualDoc) {
qWarning() << "Browser Plugin: Unexpected (read-only) native message file at " << scriptFile.fileName();
qWarning() << "Expected contents: " << expectedDoc;
return false;
}
} else {
QJsonDocument doc(constructFile(browser));
if (scriptFile.write(doc.toJson()) < 0) {
qWarning() << "Browser Plugin: Failed to write native message file at " << scriptFile.fileName();
qWarning() << scriptFile.errorString();
return false;
}
}
return true;
}

View File

@@ -105,7 +105,9 @@ namespace Utils
SetConsoleMode(hIn, mode);
#else
struct termios t;
tcgetattr(STDIN_FILENO, &t);
if (tcgetattr(STDIN_FILENO, &t) < 0) {
return;
}
if (enable) {
t.c_lflag |= ECHO;

View File

@@ -67,6 +67,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
{Config::SearchLimitGroup,{QS("SearchLimitGroup"), Roaming, false}},
{Config::MinimizeOnOpenUrl,{QS("MinimizeOnOpenUrl"), Roaming, false}},
{Config::OpenURLOnDoubleClick, {QS("OpenURLOnDoubleClick"), Roaming, true}},
{Config::URLDoubleClickAction, {QS("URLDoubleClickAction"), Roaming, 0}},
{Config::HideWindowOnCopy,{QS("HideWindowOnCopy"), Roaming, false}},
{Config::MinimizeOnCopy,{QS("MinimizeOnCopy"), Roaming, true}},
{Config::AutoGeneratePasswordForNewEntries,{QS("AutoGeneratePasswordForNewEntries"), Roaming, false}},
@@ -118,6 +119,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
{Config::GUI_CheckForUpdates, {QS("GUI/CheckForUpdates"), Roaming, true}},
{Config::GUI_CheckForUpdatesNextCheck, {QS("GUI/CheckForUpdatesNextCheck"), Local, 0}},
{Config::GUI_CheckForUpdatesIncludeBetas, {QS("GUI/CheckForUpdatesIncludeBetas"), Roaming, false}},
{Config::GUI_SearchWaitForEnter, {QS("GUI/SearchWaitForEnter"), Roaming, false}},
{Config::GUI_ShowExpiredEntriesOnDatabaseUnlock, {QS("GUI/ShowExpiredEntriesOnDatabaseUnlock"), Roaming, true}},
{Config::GUI_ShowExpiredEntriesOnDatabaseUnlockOffsetDays, {QS("GUI/ShowExpiredEntriesOnDatabaseUnlockOffsetDays"), Roaming, 3}},
{Config::GUI_FontSizeOffset, {QS("GUI/FontSizeOffset"), Local, 0}},
@@ -491,6 +493,15 @@ void Config::migrate()
remove(GUI_ListViewState);
}
// Migrate from boolean OpenURLOnDoubleClick to enum URLDoubleClickAction
if (m_settings->contains(configStrings[OpenURLOnDoubleClick].name)
&& !m_settings->contains(configStrings[URLDoubleClickAction].name)) {
bool openUrlOnDoubleClick = get(OpenURLOnDoubleClick).toBool();
// Convert: true (open browser) -> 0, false (edit entry) -> 2
set(URLDoubleClickAction, openUrlOnDoubleClick ? 0 : 2);
// Keep the old setting for now for compatibility
}
m_settings->setValue("ConfigVersion", CONFIG_VERSION);
sync();
}

View File

@@ -50,6 +50,7 @@ public:
SearchLimitGroup,
MinimizeOnOpenUrl,
OpenURLOnDoubleClick,
URLDoubleClickAction,
HideWindowOnCopy,
MinimizeOnCopy,
MinimizeAfterUnlock,
@@ -99,7 +100,7 @@ public:
GUI_CompactMode,
GUI_CheckForUpdates,
GUI_CheckForUpdatesIncludeBetas,
SearchWaitForEnter,
GUI_SearchWaitForEnter,
GUI_ShowExpiredEntriesOnDatabaseUnlock,
GUI_ShowExpiredEntriesOnDatabaseUnlockOffsetDays,
GUI_FontSizeOffset,

View File

@@ -334,12 +334,15 @@ QList<QString> Entry::autoTypeSequences(const QString& windowTitle) const
};
QList<QString> sequenceList;
QList<QString> emptyWindowSequences;
// Add window association matches
const auto assocList = autoTypeAssociations()->getAll();
for (const auto& assoc : assocList) {
auto window = resolveMultiplePlaceholders(assoc.window);
if (!assoc.window.isEmpty() && windowMatches(window)) {
if (assoc.window.isEmpty()) {
emptyWindowSequences << assoc.sequence;
} else if (windowMatches(window)) {
if (!assoc.sequence.isEmpty()) {
sequenceList << assoc.sequence;
} else {
@@ -358,6 +361,11 @@ QList<QString> Entry::autoTypeSequences(const QString& windowTitle) const
sequenceList << effectiveAutoTypeSequence();
}
// If any associations were made, include the empty window associations
if (!sequenceList.isEmpty()) {
sequenceList.append(emptyWindowSequences);
}
return sequenceList;
}

View File

@@ -426,6 +426,29 @@ namespace Tools
return filename.trimmed();
}
QString cleanUsername()
{
#if defined(Q_OS_WIN)
QString userName = qgetenv("USERNAME");
if (userName.isEmpty()) {
userName = qgetenv("USER");
}
#else
QString userName = qgetenv("USER");
if (userName.isEmpty()) {
userName = qgetenv("USERNAME");
}
#endif
// Sanitize username for file safety
userName = userName.trimmed();
// Replace <>:"/\|?* with _
userName.replace(QRegularExpression(R"([<>:\"\/\\|?*])"), "_");
// Remove trailing dots and spaces
userName.replace(QRegularExpression(R"([.\s]+$)"), "");
return userName;
}
QVariantMap qo2qvm(const QObject* object, const QStringList& ignoredProperties)
{
QVariantMap result;

View File

@@ -48,6 +48,7 @@ namespace Tools
QString envSubstitute(const QString& filepath,
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment());
QString cleanFilename(QString filename);
QString cleanUsername();
template <class T> QSet<T> asSet(const QList<T>& a)
{

View File

@@ -20,6 +20,7 @@
#include "Application.h"
#include "core/Bootstrap.h"
#include "core/Tools.h"
#include "gui/MainWindow.h"
#include "gui/MessageBox.h"
#include "gui/osutils/OSUtils.h"
@@ -31,6 +32,7 @@
#include <QLocalSocket>
#include <QLockFile>
#include <QPixmapCache>
#include <QRegularExpression>
#include <QSocketNotifier>
#include <QStandardPaths>
@@ -63,20 +65,19 @@ Application::Application(int& argc, char** argv)
registerUnixSignals();
#endif
QString userName = qgetenv("USER");
if (userName.isEmpty()) {
userName = qgetenv("USERNAME");
}
QString identifier = "keepassxc";
if (!userName.isEmpty()) {
identifier += "-" + userName;
// Build identifier
auto identifier = QStringLiteral("keepassxc");
auto username = Tools::cleanUsername();
if (!username.isEmpty()) {
identifier += QChar('-') + username;
}
#ifdef QT_DEBUG
// In DEBUG mode don't interfere with Release instances
identifier += "-DEBUG";
// In DEBUG mode dont interfere with Release instances
identifier += QStringLiteral("-DEBUG");
#endif
QString lockName = identifier + ".lock";
m_socketName = identifier + ".socket";
QString lockName = identifier + QStringLiteral(".lock");
m_socketName = identifier + QStringLiteral(".socket");
// According to documentation we should use RuntimeLocation on *nixes, but even Qt doesn't respect
// this and creates sockets in TempLocation, so let's be consistent.

View File

@@ -211,7 +211,7 @@ void ApplicationSettingsWidget::loadSettings()
m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get(Config::AutoReloadOnChange).toBool());
m_generalUi->minimizeAfterUnlockCheckBox->setChecked(config()->get(Config::MinimizeAfterUnlock).toBool());
m_generalUi->minimizeOnOpenUrlCheckBox->setChecked(config()->get(Config::MinimizeOnOpenUrl).toBool());
m_generalUi->openUrlOnDoubleClick->setChecked(config()->get(Config::OpenURLOnDoubleClick).toBool());
m_generalUi->urlDoubleClickComboBox->setCurrentIndex(config()->get(Config::URLDoubleClickAction).toInt());
m_generalUi->hideWindowOnCopyCheckBox->setChecked(config()->get(Config::HideWindowOnCopy).toBool());
hideWindowOnCopyCheckBoxToggled(m_generalUi->hideWindowOnCopyCheckBox->isChecked());
m_generalUi->minimizeOnCopyRadioButton->setChecked(config()->get(Config::MinimizeOnCopy).toBool());
@@ -389,7 +389,7 @@ void ApplicationSettingsWidget::saveSettings()
config()->set(Config::AutoReloadOnChange, m_generalUi->autoReloadOnChangeCheckBox->isChecked());
config()->set(Config::MinimizeAfterUnlock, m_generalUi->minimizeAfterUnlockCheckBox->isChecked());
config()->set(Config::MinimizeOnOpenUrl, m_generalUi->minimizeOnOpenUrlCheckBox->isChecked());
config()->set(Config::OpenURLOnDoubleClick, m_generalUi->openUrlOnDoubleClick->isChecked());
config()->set(Config::URLDoubleClickAction, m_generalUi->urlDoubleClickComboBox->currentIndex());
config()->set(Config::HideWindowOnCopy, m_generalUi->hideWindowOnCopyCheckBox->isChecked());
config()->set(Config::MinimizeOnCopy, m_generalUi->minimizeOnCopyRadioButton->isChecked());
config()->set(Config::DropToBackgroundOnCopy, m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked());

View File

@@ -554,15 +554,60 @@
</widget>
</item>
<item>
<widget class="QCheckBox" name="openUrlOnDoubleClick">
<layout class="QHBoxLayout" name="urlDoubleClickLayout">
<item>
<widget class="QLabel" name="urlDoubleClickLabel">
<property name="text">
<string>Open browser on double clicking URL field in entry view</string>
<string>Double-click action for URL:</string>
</property>
<property name="checked">
<bool>true</bool>
<property name="buddy">
<cstring>urlDoubleClickComboBox</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="urlDoubleClickComboBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="accessibleName">
<string>Double-click action for URL field</string>
</property>
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
<item>
<property name="text">
<string>Open entry URL in browser</string>
</property>
</item>
<item>
<property name="text">
<string>Copy entry URL to clipboard</string>
</property>
</item>
<item>
<property name="text">
<string>Edit entry</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="urlDoubleClickSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="useGroupIconOnEntryCreationCheckBox">
<property name="text">
@@ -1439,7 +1484,7 @@
<tabstop>alternativeSaveComboBox</tabstop>
<tabstop>ConfirmMoveEntryToRecycleBinCheckBox</tabstop>
<tabstop>EnableCopyOnDoubleClickCheckBox</tabstop>
<tabstop>openUrlOnDoubleClick</tabstop>
<tabstop>urlDoubleClickComboBox</tabstop>
<tabstop>useGroupIconOnEntryCreationCheckBox</tabstop>
<tabstop>minimizeOnOpenUrlCheckBox</tabstop>
<tabstop>hideWindowOnCopyCheckBox</tabstop>

View File

@@ -1583,12 +1583,21 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod
// case EntryModel::Attachments:
// break;
case EntryModel::Url:
if (!entry->url().isEmpty() && config()->get(Config::OpenURLOnDoubleClick).toBool()) {
if (!entry->url().isEmpty()) {
switch (config()->get(Config::URLDoubleClickAction).toInt()) {
case 2: // Edit entry
switchToEntryEdit(entry);
break;
case 1: // Copy entry URL to clipboard
setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->url()));
break;
case 0: // Open entry URL in browser (default)
default:
openUrlForEntry(entry);
break;
}
// Note, order matters here. We want to fall into the default case.
[[fallthrough]];
}
break;
default:
switchToEntryEdit(entry);
}

View File

@@ -93,6 +93,10 @@ MainWindow::MainWindow()
m_ui->setupUi(this);
#ifdef Q_OS_MACOS
macUtils()->configureWindowAndHelpMenus(this, m_ui->menuHelp);
#endif
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS)
new MainWindowAdaptor(this);
QDBusConnection dbus = QDBusConnection::sessionBus();

View File

@@ -72,10 +72,10 @@ SearchWidget::SearchWidget(QWidget* parent)
m_actionLimitGroup->setChecked(config()->get(Config::SearchLimitGroup).toBool());
m_actionWaitForEnter = m_searchMenu->addAction(
tr("Press Enter to search"), this, [](bool state) { config()->set(Config::SearchWaitForEnter, state); });
tr("Press Enter to search"), this, [](bool state) { config()->set(Config::GUI_SearchWaitForEnter, state); });
m_actionWaitForEnter->setObjectName("actionSearchWaitForEnter");
m_actionWaitForEnter->setCheckable(true);
m_actionWaitForEnter->setChecked(config()->get(Config::SearchWaitForEnter).toBool());
m_actionWaitForEnter->setChecked(config()->get(Config::GUI_SearchWaitForEnter).toBool());
m_ui->searchIcon->setIcon(icons()->icon("system-search"));
m_ui->searchEdit->addAction(m_ui->searchIcon, QLineEdit::LeadingPosition);

View File

@@ -21,6 +21,8 @@
#include <QColor>
#include <QObject>
#include <QMenu>
#include <QMainWindow>
#include <unistd.h>
class QWindow;
@@ -45,6 +47,7 @@ public:
bool enableScreenRecording();
void toggleForegroundApp(bool foreground);
void setWindowSecurity(QWindow* window, bool state);
void configureWindowAndHelpMenus(QMainWindow* mainWindow, QMenu* helpMenu);
signals:
void userSwitched();

View File

@@ -42,5 +42,6 @@
- (bool) enableScreenRecording;
- (void) toggleForegroundApp:(bool) foreground;
- (void) setWindowSecurity:(NSWindow*) window state:(bool) state;
- (void) configureWindowAndHelpMenus:(QMainWindow*) mainWindow helpMenu:(QMenu*) helpMenu;
@end

View File

@@ -18,6 +18,8 @@
#import "AppKitImpl.h"
#import <QWindow>
#import <QMenu>
#import <QMenuBar>
#import <Cocoa/Cocoa.h>
#if __clang_major__ >= 13 && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_12_3
#import <ScreenCaptureKit/ScreenCaptureKit.h>
@@ -231,8 +233,29 @@
[window setSharingType: state ? NSWindowSharingNone : NSWindowSharingReadOnly];
}
- (void) configureWindowAndHelpMenus:(QMainWindow*) mainWindow helpMenu:(QMenu*) helpMenu
{
QMenu *qtWindowMenu = new QMenu(AppKit::tr("Window"));
NSMenu *nsWindowMenu = qtWindowMenu->toNSMenu();
QString minimizeStr = AppKit::tr("Minimize");
[nsWindowMenu addItemWithTitle:minimizeStr.toNSString() action:@selector(performMiniaturize:) keyEquivalent:@""];
QString zoomStr = AppKit::tr("Zoom");
[nsWindowMenu addItemWithTitle:zoomStr.toNSString() action:@selector(performZoom:) keyEquivalent:@""];
[nsWindowMenu addItem:[NSMenuItem separatorItem]];
QString bringAllToFrontStr = AppKit::tr("Bring All to Front");
[nsWindowMenu addItemWithTitle:bringAllToFrontStr.toNSString() action:@selector(arrangeInFront:) keyEquivalent:@""];
NSApp.windowsMenu = nsWindowMenu;
mainWindow->menuBar()->insertMenu(helpMenu->menuAction(), qtWindowMenu);
NSApp.helpMenu = helpMenu->toNSMenu();
}
@end
//
// ------------------------- C++ Trampolines -------------------------
//
@@ -312,3 +335,8 @@ void AppKit::setWindowSecurity(QWindow* window, bool state)
auto view = reinterpret_cast<NSView*>(window->winId());
[static_cast<id>(self) setWindowSecurity:view.window state:state];
}
void AppKit::configureWindowAndHelpMenus(QMainWindow* window, QMenu* helpMenu)
{
[static_cast<id>(self) configureWindowAndHelpMenus:window helpMenu:helpMenu];
}

View File

@@ -24,6 +24,7 @@
#include <QStandardPaths>
#include <QTimer>
#include <QWindow>
#include <QMenu>
#include <ApplicationServices/ApplicationServices.h>
@@ -202,6 +203,11 @@ void MacUtils::registerNativeEventFilter()
::InstallApplicationEventHandler(MacUtils::hotkeyHandler, 1, &eventSpec, this, nullptr);
}
void MacUtils::configureWindowAndHelpMenus(QMainWindow* mainWindow, QMenu* helpMenu)
{
return m_appkit->configureWindowAndHelpMenus(mainWindow, helpMenu);
}
bool MacUtils::registerGlobalShortcut(const QString& name, Qt::Key key, Qt::KeyboardModifiers modifiers, QString* error)
{
auto keycode = qtToNativeKeyCode(key);

View File

@@ -54,6 +54,8 @@ public:
void registerNativeEventFilter() override;
void configureWindowAndHelpMenus(QMainWindow* mainWindow, QMenu* helpMenu);
bool registerGlobalShortcut(const QString& name,
Qt::Key key,
Qt::KeyboardModifiers modifiers,

View File

@@ -156,7 +156,7 @@ void NixUtils::setLaunchAtStartup(bool enable)
<< QStringLiteral("TryExec=") << executeablePathOrName << '\n'
<< QStringLiteral("Icon=") << QApplication::applicationName().toLower() << '\n'
<< QStringLiteral("StartupWMClass=keepassxc") << '\n'
<< QStringLiteral("StartupNotify=true") << '\n'
<< QStringLiteral("StartupNotify=false") << '\n'
<< QStringLiteral("Terminal=false") << '\n'
<< QStringLiteral("Type=Application") << '\n'
<< QStringLiteral("Version=1.0") << '\n'

View File

@@ -56,9 +56,9 @@ namespace
// but those cases with high probability constructed examples and very rare in real usage
const auto* sourceReference = sourceDb->rootGroup()->findEntryByUuid(targetEntry->uuid());
const auto resolvedValue = sourceReference->resolveMultiplePlaceholders(standardValue);
targetEntry->setUpdateTimeinfo(false);
targetEntry->beginUpdate();
targetEntry->attributes()->set(attribute, resolvedValue, targetEntry->attributes()->isProtected(attribute));
targetEntry->setUpdateTimeinfo(true);
targetEntry->endUpdate();
}
}

View File

@@ -125,6 +125,20 @@ void TestAutoType::init()
m_entry5->setPassword("example5");
m_entry5->setTitle("some title");
m_entry5->setUrl("http://example.org");
m_entry6 = new Entry();
m_entry6->setGroup(m_group);
m_entry6->setPassword("example6");
m_entry6->setTitle("empty window test");
association.window = "";
association.sequence = "{S:Empty Window}";
m_entry6->autoTypeAssociations()->add(association);
association.window = "non-matching window";
association.sequence = "should not match";
m_entry6->autoTypeAssociations()->add(association);
association.window = "*notepad*";
association.sequence = "{USERNAME}";
m_entry6->autoTypeAssociations()->add(association);
}
void TestAutoType::cleanup()
@@ -446,3 +460,13 @@ void TestAutoType::testAutoTypeEffectiveSequences()
QCOMPARE(entry6->defaultAutoTypeSequence(), sequenceOrphan);
QCOMPARE(entry6->effectiveAutoTypeSequence(), QString());
}
void TestAutoType::testAutoTypeEmptyWindowAssociation()
{
auto assoc = m_entry6->autoTypeSequences("Windows Notepad");
QCOMPARE(assoc.size(), 2);
QVERIFY(assoc.contains("{S:Empty Window}"));
assoc = m_entry6->autoTypeSequences("Some Other Window");
QVERIFY(assoc.isEmpty());
}

View File

@@ -51,6 +51,7 @@ private slots:
void testAutoTypeResults_data();
void testAutoTypeSyntaxChecks();
void testAutoTypeEffectiveSequences();
void testAutoTypeEmptyWindowAssociation();
private:
AutoTypePlatformInterface* m_platform;
@@ -64,6 +65,7 @@ private:
Entry* m_entry3;
Entry* m_entry4;
Entry* m_entry5;
Entry* m_entry6;
};
#endif // KEEPASSX_TESTAUTOTYPE_H

View File

@@ -17,6 +17,7 @@
#include "TestConfig.h"
#include <QSettings>
#include <QTest>
#include "config-keepassx-tests.h"
@@ -40,3 +41,39 @@ void TestConfig::testUpgrade()
tempFile.remove();
}
void TestConfig::testURLDoubleClickMigration()
{
// Test migration from OpenURLOnDoubleClick to URLDoubleClickAction
TemporaryFile tempFile;
tempFile.open();
// Create a config with old setting = true (open browser)
QSettings oldConfig(tempFile.fileName(), QSettings::IniFormat);
oldConfig.setValue("OpenURLOnDoubleClick", true);
oldConfig.sync();
tempFile.close();
Config::createConfigFromFile(tempFile.fileName());
// Should migrate to URLDoubleClickAction = 0 (open browser)
QCOMPARE(config()->get(Config::URLDoubleClickAction).toInt(), 0);
tempFile.remove();
// Test migration from OpenURLOnDoubleClick = false (edit entry)
TemporaryFile tempFile2;
tempFile2.open();
QSettings oldConfig2(tempFile2.fileName(), QSettings::IniFormat);
oldConfig2.setValue("OpenURLOnDoubleClick", false);
oldConfig2.sync();
tempFile2.close();
Config::createConfigFromFile(tempFile2.fileName());
// Should migrate to URLDoubleClickAction = 2 (edit entry)
QCOMPARE(config()->get(Config::URLDoubleClickAction).toInt(), 2);
tempFile2.remove();
}

View File

@@ -25,6 +25,7 @@ class TestConfig : public QObject
Q_OBJECT
private slots:
void testUpgrade();
void testURLDoubleClickMigration();
};
#endif // KEEPASSX_TESTCONFIG_H

View File

@@ -428,3 +428,26 @@ void TestTools::testIsTextMimeType()
QVERIFY(!Tools::isTextMimeType(noText));
}
}
// Test sanitization logic for Tools::cleanUsername
void TestTools::testCleanUsername()
{
// Test vars
QFETCH(QString, input);
QFETCH(QString, expected);
qputenv("USER", input.toUtf8());
qputenv("USERNAME", input.toUtf8());
QCOMPARE(Tools::cleanUsername(), expected);
}
void TestTools::testCleanUsername_data()
{
QTest::addColumn<QString>("input");
QTest::addColumn<QString>("expected");
QTest::newRow("Leading and trailing spaces") << " user " << "user";
QTest::newRow("Special characters") << R"(user<>:"/\|?*name)" << "user_________name";
QTest::newRow("Trailing dots and spaces") << "username... " << "username";
QTest::newRow("Combination of issues") << R"( user<>:"/\|?*name... )" << "user_________name";
}

View File

@@ -41,6 +41,8 @@ private slots:
void testGetMimeType();
void testGetMimeTypeByFileInfo();
void testIsTextMimeType();
void testCleanUsername();
void testCleanUsername_data();
};
#endif // KEEPASSX_TESTTOOLS_H