mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
Merge branch 'master' into develop
This commit is contained in:
commit
d007ee97e3
833
CHANGELOG.md
833
CHANGELOG.md
@ -1,444 +1,475 @@
|
||||
# Changelog
|
||||
|
||||
## 2.5.1 (2019-11-11)
|
||||
|
||||
### Added
|
||||
|
||||
- Add programmatic use of the EntrySearcher [#3760]
|
||||
- Explicitly clear database memory upon locking even if the object is not deleted immediately [#3824]
|
||||
- macOS: Add ability to perform notarization of built package [#3827]
|
||||
|
||||
### Changed
|
||||
|
||||
- Reduce file hash checking to every 30 seconds to correct performance issues [#3724]
|
||||
- Correct formatting of notes in entry preview widget [#3727]
|
||||
- Improve performance and UX of database statistics page [#3780]
|
||||
- Improve interface for key file selection to discourage use of the database file [#3807]
|
||||
- Hide Auto-Type sequences column when not needed [#3794]
|
||||
- macOS: Revert back to using Carbon API for hotkey detection [#3794]
|
||||
- CLI: Do not show protected fields by default [#3710]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Secret Service: Correct issues interfacing with various applications [#3761]
|
||||
- Fix building without additional features [#3693]
|
||||
- Fix handling TOTP secret keys that require padding [#3764]
|
||||
- Fix database unlock dialog password field focus [#3764]
|
||||
- Correctly label open databases as locked on launch [#3764]
|
||||
- Prevent infinite recursion when two databases AutoOpen each other [#3764]
|
||||
- Browser: Fix incorrect matching of invalid URLs [#3759]
|
||||
- Properly stylize the application name on Linux [#3775]
|
||||
- Show application icon on Plasma Wayland sessions [#3777]
|
||||
- macOS: Check for Auto-Type permissions on use instead of at launch [#3794]
|
||||
|
||||
## 2.5.0 (2019-10-26)
|
||||
|
||||
### Added
|
||||
|
||||
- Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [[#3277](https://github.com/keepassxreboot/keepassxc/pull/3277)]
|
||||
- Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [[#2034](https://github.com/keepassxreboot/keepassxc/issues/2034)]
|
||||
- Add offline user manual accessible via the 'Help' menu [[#3274](https://github.com/keepassxreboot/keepassxc/issues/3274)]
|
||||
- Add support for importing 1Password OpVault files [[#2292](https://github.com/keepassxreboot/keepassxc/issues/2292)]
|
||||
- Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [[#2726](https://github.com/keepassxreboot/keepassxc/issues/2726)]
|
||||
- Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [[#3352](https://github.com/keepassxreboot/keepassxc/issues/3352)]
|
||||
- Add group sorting feature [[#3282](https://github.com/keepassxreboot/keepassxc/issues/3282)]
|
||||
- Add feature to download favicons for all entries at once [[#3169](https://github.com/keepassxreboot/keepassxc/issues/3169)]
|
||||
- Add word case option to passphrase generator [[#3172](https://github.com/keepassxreboot/keepassxc/issues/3172)]
|
||||
- Add support for RFC6238-compliant TOTP hashes [[#2972](https://github.com/keepassxreboot/keepassxc/issues/2972)]
|
||||
- Add UNIX man page for main program [[#3665](https://github.com/keepassxreboot/keepassxc/issues/3665)]
|
||||
- Add 'Monospaced font' option to the notes field [[#3321](https://github.com/keepassxreboot/keepassxc/issues/3321)]
|
||||
- Add support for key files in auto open [[#3504](https://github.com/keepassxreboot/keepassxc/issues/3504)]
|
||||
- Add search field for filtering entries in Auto-Type dialog [[#2955](https://github.com/keepassxreboot/keepassxc/issues/2955)]
|
||||
- Complete usernames based on known usernames from other entries [[#3300](https://github.com/keepassxreboot/keepassxc/issues/3300)]
|
||||
- Parse hyperlinks in the notes field of the entry preview pane [[#3596](https://github.com/keepassxreboot/keepassxc/issues/3596)]
|
||||
- Allow abbreviation of field names in entry search [[#3440](https://github.com/keepassxreboot/keepassxc/issues/3440)]
|
||||
- Allow setting group icons recursively [[#3273](https://github.com/keepassxreboot/keepassxc/issues/3273)]
|
||||
- Add copy context menu for username and password in Auto-Type dialog [[#3038](https://github.com/keepassxreboot/keepassxc/issues/3038)]
|
||||
- Drop to background after copying a password to the clipboard [[#3253](https://github.com/keepassxreboot/keepassxc/issues/3253)]
|
||||
- Add 'Lock databases' entry to tray icon menu [[#2896](https://github.com/keepassxreboot/keepassxc/issues/2896)]
|
||||
- Add option to minimize window after unlocking [[#3439](https://github.com/keepassxreboot/keepassxc/issues/3439)]
|
||||
- Add option to minimize window after opening a URL [[#3302](https://github.com/keepassxreboot/keepassxc/issues/3302)]
|
||||
- Request accessibility permissions for Auto-Type on macOS [[#3624](https://github.com/keepassxreboot/keepassxc/issues/3624)]
|
||||
- Browser: Add initial support for multiple URLs [[#3558](https://github.com/keepassxreboot/keepassxc/issues/3558)]
|
||||
- Browser: Add entry-specific browser integration settings [[#3444](https://github.com/keepassxreboot/keepassxc/issues/3444)]
|
||||
- CLI: Add offline HIBP checker (requires a downloaded HIBP dump) [[#2707](https://github.com/keepassxreboot/keepassxc/issues/2707)]
|
||||
- CLI: Add 'flatten' option to the 'ls' command [[#3276](https://github.com/keepassxreboot/keepassxc/issues/3276)]
|
||||
- CLI: Add password generation options to `Add` and `Edit` commands [[#3275](https://github.com/keepassxreboot/keepassxc/issues/3275)]
|
||||
- CLI: Add XML import [[#3572](https://github.com/keepassxreboot/keepassxc/issues/3572)]
|
||||
- CLI: Add CSV export to the 'export' command [[#3278](https://github.com/keepassxreboot/keepassxc/issues/3278)]
|
||||
- CLI: Add `-y --yubikey` option for YubiKey [[#3416](https://github.com/keepassxreboot/keepassxc/issues/3416)]
|
||||
- CLI: Add `--dry-run` option for merging databases [[#3254](https://github.com/keepassxreboot/keepassxc/issues/3254)]
|
||||
- CLI: Add group commands (mv, mkdir and rmdir) [[#3313](https://github.com/keepassxreboot/keepassxc/issues/3313)].
|
||||
- CLI: Add interactive shell mode command `open` [[#3224](https://github.com/keepassxreboot/keepassxc/issues/3224)]
|
||||
- Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [#3277]
|
||||
- Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [#2034]
|
||||
- Add offline user manual accessible via the 'Help' menu [#3274]
|
||||
- Add support for importing 1Password OpVault files [#2292]
|
||||
- Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [#2726]
|
||||
- Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [#3352]
|
||||
- Add group sorting feature [#3282]
|
||||
- Add feature to download favicons for all entries at once [#3169]
|
||||
- Add word case option to passphrase generator [#3172]
|
||||
- Add support for RFC6238-compliant TOTP hashes [#2972]
|
||||
- Add UNIX man page for main program [#3665]
|
||||
- Add 'Monospaced font' option to the notes field [#3321]
|
||||
- Add support for key files in auto open [#3504]
|
||||
- Add search field for filtering entries in Auto-Type dialog [#2955]
|
||||
- Complete usernames based on known usernames from other entries [#3300]
|
||||
- Parse hyperlinks in the notes field of the entry preview pane [#3596]
|
||||
- Allow abbreviation of field names in entry search [#3440]
|
||||
- Allow setting group icons recursively [#3273]
|
||||
- Add copy context menu for username and password in Auto-Type dialog [#3038]
|
||||
- Drop to background after copying a password to the clipboard [#3253]
|
||||
- Add 'Lock databases' entry to tray icon menu [#2896]
|
||||
- Add option to minimize window after unlocking [#3439]
|
||||
- Add option to minimize window after opening a URL [#3302]
|
||||
- Request accessibility permissions for Auto-Type on macOS [#3624]
|
||||
- Browser: Add initial support for multiple URLs [#3558]
|
||||
- Browser: Add entry-specific browser integration settings [#3444]
|
||||
- CLI: Add offline HIBP checker (requires a downloaded HIBP dump) [#2707]
|
||||
- CLI: Add 'flatten' option to the 'ls' command [#3276]
|
||||
- CLI: Add password generation options to `Add` and `Edit` commands [#3275]
|
||||
- CLI: Add XML import [#3572]
|
||||
- CLI: Add CSV export to the 'export' command [#3278]
|
||||
- CLI: Add `-y --yubikey` option for YubiKey [#3416]
|
||||
- CLI: Add `--dry-run` option for merging databases [#3254]
|
||||
- CLI: Add group commands (mv, mkdir and rmdir) [#3313].
|
||||
- CLI: Add interactive shell mode command `open` [#3224]
|
||||
|
||||
|
||||
### Changed
|
||||
|
||||
- Redesign database unlock dialog [ [#3287](https://github.com/keepassxreboot/keepassxc/issues/3287)]
|
||||
- Rework the entry preview panel [ [#3306](https://github.com/keepassxreboot/keepassxc/issues/3306)]
|
||||
- Move notes to General tab on Group Preview Panel [[#3336](https://github.com/keepassxreboot/keepassxc/issues/3336)]
|
||||
- Enable entry actions when editing an entry and cleanup entry context menu [[#3641](https://github.com/keepassxreboot/keepassxc/issues/3641)]
|
||||
- Improve detection of external database changes [[#2389](https://github.com/keepassxreboot/keepassxc/issues/2389)]
|
||||
- Warn if user is trying to use a KDBX file as a key file [[#3625](https://github.com/keepassxreboot/keepassxc/issues/3625)]
|
||||
- Add option to disable KeePassHTTP settings migrations prompt [[#3349](https://github.com/keepassxreboot/keepassxc/issues/3349), [#3344](https://github.com/keepassxreboot/keepassxc/issues/3344)]
|
||||
- Re-enabled Wayland support (no Auto-Type yet) [[#3520](https://github.com/keepassxreboot/keepassxc/issues/3520), [#3341](https://github.com/keepassxreboot/keepassxc/issues/3341)]
|
||||
- Add icon to 'Toggle Window' action in tray icon menu [[3244](https://github.com/keepassxreboot/keepassxc/issues/3244)]
|
||||
- Merge custom data between databases only when necessary [[#3475](https://github.com/keepassxreboot/keepassxc/issues/3475)]
|
||||
- Improve various file-handling related issues when picking files using the system's file dialog [[#3473](https://github.com/keepassxreboot/keepassxc/issues/3473)]
|
||||
- Add 'New Entry' context menu when no entries are selected [[#3671](https://github.com/keepassxreboot/keepassxc/issues/3671)]
|
||||
- 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](https://github.com/keepassxreboot/keepassxc/issues/3672)]
|
||||
- Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [[#3371](https://github.com/keepassxreboot/keepassxc/issues/3371)]
|
||||
- Browser: Show database name when pairing with a new browser [[#3638](https://github.com/keepassxreboot/keepassxc/issues/3638)]
|
||||
- Browser: Show URL in allow access dialog [[#3639](https://github.com/keepassxreboot/keepassxc/issues/3639)]
|
||||
- CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [[#3275](https://github.com/keepassxreboot/keepassxc/issues/3275)]
|
||||
- CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [[#3275](https://github.com/keepassxreboot/keepassxc/issues/3275)]
|
||||
- CLI: Rename command `extract` to `export`. [[#3277](https://github.com/keepassxreboot/keepassxc/issues/3277)]
|
||||
- Redesign database unlock dialog [ #3287]
|
||||
- Rework the entry preview panel [ #3306]
|
||||
- Move notes to General tab on Group Preview Panel [#3336]
|
||||
- Enable entry actions when editing an entry and cleanup entry context menu [#3641]
|
||||
- Improve detection of external database changes [#2389]
|
||||
- Warn if user is trying to use a KDBX file as a key file [#3625]
|
||||
- Add option to disable KeePassHTTP settings migrations prompt [#3349, #3344]
|
||||
- Re-enabled Wayland support (no Auto-Type yet) [#3520, #3341]
|
||||
- Add icon to 'Toggle Window' action in tray icon menu [#3244]
|
||||
- Merge custom data between databases only when necessary [#3475]
|
||||
- Improve various file-handling related issues when picking files using the system's file dialog [#3473]
|
||||
- Add 'New Entry' context menu when no entries are selected [#3671]
|
||||
- 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]
|
||||
- Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [#3371]
|
||||
- Browser: Show database name when pairing with a new browser [#3638]
|
||||
- Browser: Show URL in allow access dialog [#3639]
|
||||
- CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [#3275]
|
||||
- CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [#3275]
|
||||
- CLI: Rename command `extract` to `export`. [#3277]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Improve accessibility for assistive technologies [[#3409](https://github.com/keepassxreboot/keepassxc/issues/3409)]
|
||||
- Correctly unlock all databases if `--pw-stdin` is provided [[#2916](https://github.com/keepassxreboot/keepassxc/issues/2916)]
|
||||
- Fix password generator issues with special characters [[#3303](https://github.com/keepassxreboot/keepassxc/issues/3303)]
|
||||
- Fix KeePassXC interrupting shutdown procedure [[#3666](https://github.com/keepassxreboot/keepassxc/issues/3666)]
|
||||
- Fix password visibility toggle button state on unlock dialog [[#3312](https://github.com/keepassxreboot/keepassxc/issues/3312)]
|
||||
- Fix potential data loss if database is reloaded while user is editing an entry [[#3656](https://github.com/keepassxreboot/keepassxc/issues/3656)]
|
||||
- Fix hard-coded background color in search help popup [[#3001](https://github.com/keepassxreboot/keepassxc/issues/3001)]
|
||||
- Fix font choice for password preview [[#3425](https://github.com/keepassxreboot/keepassxc/issues/3425)]
|
||||
- Fix handling of read-only files when autosave is enabled [[#3408](https://github.com/keepassxreboot/keepassxc/issues/3408)]
|
||||
- Handle symlinks correctly when atomic saves are disabled [[#3463](https://github.com/keepassxreboot/keepassxc/issues/3463)]
|
||||
- Enable HighDPI icon scaling on Linux [[#3332](https://github.com/keepassxreboot/keepassxc/issues/3332)]
|
||||
- Make Auto-Type on macOS more robust and remove old Carbon API calls [[#3634](https://github.com/keepassxreboot/keepassxc/issues/3634), [[#3347](https://github.com/keepassxreboot/keepassxc/issues/3347))]
|
||||
- Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [[#3654](https://github.com/keepassxreboot/keepassxc/issues/3654), [[#3291](https://github.com/keepassxreboot/keepassxc/issues/3291), [#3029](https://github.com/keepassxreboot/keepassxc/issues/3029), [#3031](https://github.com/keepassxreboot/keepassxc/issues/3031), [#3236](https://github.com/keepassxreboot/keepassxc/issues/3236)]
|
||||
- Correctly bring window to the front when clicking tray icon on macOS [[#3576](https://github.com/keepassxreboot/keepassxc/issues/3576)]
|
||||
- Correct application shortcut created by MSI Installer on Windows [[#3296](https://github.com/keepassxreboot/keepassxc/issues/3296)]
|
||||
- Fix crash when removing custom data [[#3508](https://github.com/keepassxreboot/keepassxc/issues/3508)]
|
||||
- Fix placeholder resolution in URLs [[#3281](https://github.com/keepassxreboot/keepassxc/issues/3281)]
|
||||
- Fix various inconsistencies and platform-dependent compilation bugs [[#3664](https://github.com/keepassxreboot/keepassxc/issues/3664), [#3662](https://github.com/keepassxreboot/keepassxc/issues/3662), [#3660](https://github.com/keepassxreboot/keepassxc/issues/3660), [#3655](https://github.com/keepassxreboot/keepassxc/issues/3655), [#3649](https://github.com/keepassxreboot/keepassxc/issues/3649), [#3417](https://github.com/keepassxreboot/keepassxc/issues/3417), [#3357](https://github.com/keepassxreboot/keepassxc/issues/3357), [#3319](https://github.com/keepassxreboot/keepassxc/issues/3319), [#3318](https://github.com/keepassxreboot/keepassxc/issues/3318), [#3304](https://github.com/keepassxreboot/keepassxc/issues/3304)]
|
||||
- Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [[#3480](https://github.com/keepassxreboot/keepassxc/issues/3480)]
|
||||
- Browser: Fix password entropy calculation [[#3107](https://github.com/keepassxreboot/keepassxc/issues/3107)]
|
||||
- Browser: Fix Windows registry settings for portable installation [[#3603](https://github.com/keepassxreboot/keepassxc/issues/3603)]
|
||||
- Improve accessibility for assistive technologies [#3409]
|
||||
- Correctly unlock all databases if `--pw-stdin` is provided [#2916]
|
||||
- Fix password generator issues with special characters [#3303]
|
||||
- Fix KeePassXC interrupting shutdown procedure [#3666]
|
||||
- Fix password visibility toggle button state on unlock dialog [#3312]
|
||||
- Fix potential data loss if database is reloaded while user is editing an entry [#3656]
|
||||
- Fix hard-coded background color in search help popup [#3001]
|
||||
- Fix font choice for password preview [#3425]
|
||||
- Fix handling of read-only files when autosave is enabled [#3408]
|
||||
- Handle symlinks correctly when atomic saves are disabled [#3463]
|
||||
- Enable HighDPI icon scaling on Linux [#3332]
|
||||
- Make Auto-Type on macOS more robust and remove old Carbon API calls [#3634, [#3347)]
|
||||
- Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [#3654, [#3291, #3029, #3031, #3236]
|
||||
- Correctly bring window to the front when clicking tray icon on macOS [#3576]
|
||||
- Correct application shortcut created by MSI Installer on Windows [#3296]
|
||||
- Fix crash when removing custom data [#3508]
|
||||
- Fix placeholder resolution in URLs [#3281]
|
||||
- Fix various inconsistencies and platform-dependent compilation bugs [#3664, #3662, #3660, #3655, #3649, #3417, #3357, #3319, #3318, #3304]
|
||||
- Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [#3480]
|
||||
- Browser: Fix password entropy calculation [#3107]
|
||||
- Browser: Fix Windows registry settings for portable installation [#3603]
|
||||
|
||||
## 2.4.3 (2019-06-12)
|
||||
|
||||
### Added
|
||||
|
||||
- Add documentation for keyboard shortcuts to source code distribution [[#3215](https://github.com/keepassxreboot/keepassxc/issues/3215)]
|
||||
- Add documentation for keyboard shortcuts to source code distribution [#3215]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix library loading issues in the Snap and macOS releases [[#3247](https://github.com/keepassxreboot/keepassxc/issues/3247)]
|
||||
- Fix various keyboard navigation issues [[#3248](https://github.com/keepassxreboot/keepassxc/issues/3248)]
|
||||
- Fix main window toggling regression when clicking the tray icon on KDE [[#3258](https://github.com/keepassxreboot/keepassxc/issues/3258)]
|
||||
- Fix library loading issues in the Snap and macOS releases [#3247]
|
||||
- Fix various keyboard navigation issues [#3248]
|
||||
- Fix main window toggling regression when clicking the tray icon on KDE [#3258]
|
||||
|
||||
## 2.4.2 (2019-05-31)
|
||||
|
||||
- Improve resilience against memory attacks - overwrite memory before free [[#3020](https://github.com/keepassxreboot/keepassxc/issues/3020)]
|
||||
- Prevent infinite save loop when location is unavailable [[#3026](https://github.com/keepassxreboot/keepassxc/issues/3026)]
|
||||
- Attempt to fix quitting application when shutdown or logout issued [[#3199](https://github.com/keepassxreboot/keepassxc/issues/3199)]
|
||||
- Support merging database custom data [[#3002](https://github.com/keepassxreboot/keepassxc/issues/3002)]
|
||||
- Fix opening URL's with non-http schemes [[#3153](https://github.com/keepassxreboot/keepassxc/issues/3153)]
|
||||
- Fix data loss due to not reading all database attachments if duplicates exist [[#3180](https://github.com/keepassxreboot/keepassxc/issues/3180)]
|
||||
- Fix entry context menu disabling when using keyboard navigation [[#3199](https://github.com/keepassxreboot/keepassxc/issues/3199)]
|
||||
- Fix behaviors when canceling an entry edit [[#3199](https://github.com/keepassxreboot/keepassxc/issues/3199)]
|
||||
- Fix processing of tray icon click and doubleclick [[#3112](https://github.com/keepassxreboot/keepassxc/issues/3112)]
|
||||
- Update group in preview widget when focused [[#3199](https://github.com/keepassxreboot/keepassxc/issues/3199)]
|
||||
- Prefer DuckDuckGo service over direct icon download (increases resolution) [#2996](https://github.com/keepassxreboot/keepassxc/issues/2996)]
|
||||
- Remove apply button in application settings [[#3019](https://github.com/keepassxreboot/keepassxc/issues/3019)]
|
||||
- Use winqtdeploy on Windows to correct deployment issues [[#3025](https://github.com/keepassxreboot/keepassxc/issues/3025)]
|
||||
- Don't mark entry edit as modified when attribute selection changes [[#3041](https://github.com/keepassxreboot/keepassxc/issues/3041)]
|
||||
- Use console code page CP_UTF8 on Windows if supported [[#3050](https://github.com/keepassxreboot/keepassxc/issues/3050)]
|
||||
- Snap: Fix locking database with session lock [[#3046](https://github.com/keepassxreboot/keepassxc/issues/3046)]
|
||||
- Snap: Fix theming across Linux distributions [[#3057](https://github.com/keepassxreboot/keepassxc/issues/3057)]
|
||||
- Snap: Use SNAP_USER_COMMON and SNAP_USER_DATA directories [[#3131](https://github.com/keepassxreboot/keepassxc/issues/3131)]
|
||||
- KeeShare: Automatically enable WITH_XC_KEESHARE_SECURE if quazip is found [[#3088](https://github.com/keepassxreboot/keepassxc/issues/3088)]
|
||||
- macOS: Fix toolbar text when in dark mode [[#2998](https://github.com/keepassxreboot/keepassxc/issues/2998)]
|
||||
- macOS: Lock database on switching user [[#3097](https://github.com/keepassxreboot/keepassxc/issues/3097)]
|
||||
- macOS: Fix global Auto-Type when the database is locked[ [#3138](https://github.com/keepassxreboot/keepassxc/issues/3138)]
|
||||
- Browser: Close popups when database is locked [[#3093](https://github.com/keepassxreboot/keepassxc/issues/3093)]
|
||||
- Browser: Add tests [[#3016](https://github.com/keepassxreboot/keepassxc/issues/3016)]
|
||||
- Browser: Don't create default group if custom group is enabled [[#3127](https://github.com/keepassxreboot/keepassxc/issues/3127)]
|
||||
- Improve resilience against memory attacks - overwrite memory before free [#3020]
|
||||
- Prevent infinite save loop when location is unavailable [#3026]
|
||||
- Attempt to fix quitting application when shutdown or logout issued [#3199]
|
||||
- Support merging database custom data [#3002]
|
||||
- Fix opening URL's with non-http schemes [#3153]
|
||||
- Fix data loss due to not reading all database attachments if duplicates exist [#3180]
|
||||
- Fix entry context menu disabling when using keyboard navigation [#3199]
|
||||
- Fix behaviors when canceling an entry edit [#3199]
|
||||
- Fix processing of tray icon click and doubleclick [#3112]
|
||||
- Update group in preview widget when focused [#3199]
|
||||
- Prefer DuckDuckGo service over direct icon download (increases resolution) #2996]
|
||||
- Remove apply button in application settings [#3019]
|
||||
- Use winqtdeploy on Windows to correct deployment issues [#3025]
|
||||
- Don't mark entry edit as modified when attribute selection changes [#3041]
|
||||
- Use console code page CP_UTF8 on Windows if supported [#3050]
|
||||
- Snap: Fix locking database with session lock [#3046]
|
||||
- Snap: Fix theming across Linux distributions [#3057]
|
||||
- Snap: Use SNAP_USER_COMMON and SNAP_USER_DATA directories [#3131]
|
||||
- KeeShare: Automatically enable WITH_XC_KEESHARE_SECURE if quazip is found [#3088]
|
||||
- macOS: Fix toolbar text when in dark mode [#2998]
|
||||
- macOS: Lock database on switching user [#3097]
|
||||
- macOS: Fix global Auto-Type when the database is locked[ #3138]
|
||||
- Browser: Close popups when database is locked [#3093]
|
||||
- Browser: Add tests [#3016]
|
||||
- Browser: Don't create default group if custom group is enabled [#3127]
|
||||
|
||||
## 2.4.1 (2019-04-12)
|
||||
|
||||
- Fix database deletion when using unsafe saves to a different file system [#2889](https://github.com/keepassxreboot/keepassxc/issues/2889)
|
||||
- Fix opening databases with legacy key files that contain '/' [#2872](https://github.com/keepassxreboot/keepassxc/issues/2872)
|
||||
- Fix opening database files from the command line [#2919](https://github.com/keepassxreboot/keepassxc/issues/2919)
|
||||
- Fix crash when editing master key [#2836](https://github.com/keepassxreboot/keepassxc/issues/2836)
|
||||
- Fix multiple issues with apply button behavior [#2947](https://github.com/keepassxreboot/keepassxc/issues/2947)
|
||||
- Fix issues on application startup (tab order, --pw-stdin, etc.) [#2830](https://github.com/keepassxreboot/keepassxc/issues/2830)
|
||||
- Fix database deletion when using unsafe saves to a different file system #2889
|
||||
- Fix opening databases with legacy key files that contain '/' #2872
|
||||
- Fix opening database files from the command line #2919
|
||||
- Fix crash when editing master key #2836
|
||||
- Fix multiple issues with apply button behavior #2947
|
||||
- Fix issues on application startup (tab order, --pw-stdin, etc.) #2830
|
||||
- Fix building without WITH_XC_KEESHARE
|
||||
- Fix reference entry coloring on macOS dark mode [#2984](https://github.com/keepassxreboot/keepassxc/issues/2984)
|
||||
- Hide window when performing entry auto-type on macOS [#2969](https://github.com/keepassxreboot/keepassxc/issues/2969)
|
||||
- Improve UX of update checker; reduce checks to every 7 days [#2968](https://github.com/keepassxreboot/keepassxc/issues/2968)
|
||||
- KeeShare improvements [[#2946](https://github.com/keepassxreboot/keepassxc/issues/2946), [#2978](https://github.com/keepassxreboot/keepassxc/issues/2978), [#2824](https://github.com/keepassxreboot/keepassxc/issues/2824)]
|
||||
- Re-enable Ctrl+C to copy password from search box [#2947](https://github.com/keepassxreboot/keepassxc/issues/2947)
|
||||
- Add KeePassXC-Browser integration for Brave browser [#2933](https://github.com/keepassxreboot/keepassxc/issues/2933)
|
||||
- SSH Agent: Re-Add keys on database unlock [#2982](https://github.com/keepassxreboot/keepassxc/issues/2982)
|
||||
- SSH Agent: Only remove keys on app exit if they are removed on lock [#2985](https://github.com/keepassxreboot/keepassxc/issues/2985)
|
||||
- CLI: Add --no-password option [#2708](https://github.com/keepassxreboot/keepassxc/issues/2708)
|
||||
- CLI: Improve database extraction to XML [#2698](https://github.com/keepassxreboot/keepassxc/issues/2698)
|
||||
- CLI: Don't call mandb on build [#2774](https://github.com/keepassxreboot/keepassxc/issues/2774)
|
||||
- CLI: Add debug info [#2714](https://github.com/keepassxreboot/keepassxc/issues/2714)
|
||||
- Improve support for Snap theming [#2832](https://github.com/keepassxreboot/keepassxc/issues/2832)
|
||||
- Add support for building on Haiku OS [#2859](https://github.com/keepassxreboot/keepassxc/issues/2859)
|
||||
- Fix reference entry coloring on macOS dark mode #2984
|
||||
- Hide window when performing entry auto-type on macOS #2969
|
||||
- Improve UX of update checker; reduce checks to every 7 days #2968
|
||||
- KeeShare improvements [#2946, #2978, #2824]
|
||||
- Re-enable Ctrl+C to copy password from search box #2947
|
||||
- Add KeePassXC-Browser integration for Brave browser #2933
|
||||
- SSH Agent: Re-Add keys on database unlock #2982
|
||||
- SSH Agent: Only remove keys on app exit if they are removed on lock #2985
|
||||
- CLI: Add --no-password option #2708
|
||||
- CLI: Improve database extraction to XML #2698
|
||||
- CLI: Don't call mandb on build #2774
|
||||
- CLI: Add debug info #2714
|
||||
- Improve support for Snap theming #2832
|
||||
- Add support for building on Haiku OS #2859
|
||||
- Ctrl+PgDn now goes to the next tab and Ctrl+PgUp to the previous
|
||||
- Fix compiling on GCC 5 / Xenial [#2990](https://github.com/keepassxreboot/keepassxc/issues/2990)
|
||||
- Add .gitrev output to tarball for third-party builds [#2970](https://github.com/keepassxreboot/keepassxc/issues/2970)
|
||||
- Add WITH_XC_UPDATECHECK compile flag to toggle the update checker [#2968](https://github.com/keepassxreboot/keepassxc/issues/2968)
|
||||
- Fix compiling on GCC 5 / Xenial #2990
|
||||
- Add .gitrev output to tarball for third-party builds #2970
|
||||
- Add WITH_XC_UPDATECHECK compile flag to toggle the update checker #2968
|
||||
|
||||
## 2.4.0 (2019-03-19)
|
||||
|
||||
- New Database Wizard [#1952](https://github.com/keepassxreboot/keepassxc/issues/1952)
|
||||
- Advanced Search [#1797](https://github.com/keepassxreboot/keepassxc/issues/1797)
|
||||
- Automatic update checker [#2648](https://github.com/keepassxreboot/keepassxc/issues/2648)
|
||||
- KeeShare database synchronization [[#2109](https://github.com/keepassxreboot/keepassxc/issues/2109), [#1992](https://github.com/keepassxreboot/keepassxc/issues/1992), [#2738](https://github.com/keepassxreboot/keepassxc/issues/2738), [#2742](https://github.com/keepassxreboot/keepassxc/issues/2742), [#2746](https://github.com/keepassxreboot/keepassxc/issues/2746), [#2739](https://github.com/keepassxreboot/keepassxc/issues/2739)]
|
||||
- Improve favicon fetching; transition to Duck-Duck-Go [[#2795](https://github.com/keepassxreboot/keepassxc/issues/2795), [#2011](https://github.com/keepassxreboot/keepassxc/issues/2011), [#2439](https://github.com/keepassxreboot/keepassxc/issues/2439)]
|
||||
- Remove KeePassHttp support [#1752](https://github.com/keepassxreboot/keepassxc/issues/1752)
|
||||
- CLI: output info to stderr for easier scripting [#2558](https://github.com/keepassxreboot/keepassxc/issues/2558)
|
||||
- CLI: Add --quiet option [#2507](https://github.com/keepassxreboot/keepassxc/issues/2507)
|
||||
- CLI: Add create command [#2540](https://github.com/keepassxreboot/keepassxc/issues/2540)
|
||||
- CLI: Add recursive listing of entries [#2345](https://github.com/keepassxreboot/keepassxc/issues/2345)
|
||||
- CLI: Fix stdin/stdout encoding on Windows [#2425](https://github.com/keepassxreboot/keepassxc/issues/2425)
|
||||
- SSH Agent: Support OpenSSH for Windows [#1994](https://github.com/keepassxreboot/keepassxc/issues/1994)
|
||||
- macOS: TouchID Quick Unlock [#1851](https://github.com/keepassxreboot/keepassxc/issues/1851)
|
||||
- macOS: Multiple improvements; include CLI in DMG [[#2165](https://github.com/keepassxreboot/keepassxc/issues/2165), [#2331](https://github.com/keepassxreboot/keepassxc/issues/2331), [#2583](https://github.com/keepassxreboot/keepassxc/issues/2583)]
|
||||
- Linux: Prevent Klipper from storing secrets in clipboard [#1969](https://github.com/keepassxreboot/keepassxc/issues/1969)
|
||||
- Linux: Use polling based file watching for NFS [#2171](https://github.com/keepassxreboot/keepassxc/issues/2171)
|
||||
- Linux: Enable use of browser plugin in Snap build [#2802](https://github.com/keepassxreboot/keepassxc/issues/2802)
|
||||
- TOTP QR Code Generator [#1167](https://github.com/keepassxreboot/keepassxc/issues/1167)
|
||||
- High-DPI Scaling for 4k screens [#2404](https://github.com/keepassxreboot/keepassxc/issues/2404)
|
||||
- Make keyboard shortcuts more consistent [#2431](https://github.com/keepassxreboot/keepassxc/issues/2431)
|
||||
- Warn user if deleting referenced entries [#1744](https://github.com/keepassxreboot/keepassxc/issues/1744)
|
||||
- Allow toolbar to be hidden and repositioned [[#1819](https://github.com/keepassxreboot/keepassxc/issues/1819), [#2357](https://github.com/keepassxreboot/keepassxc/issues/2357)]
|
||||
- Increase max allowed database timeout to 12 hours [#2173](https://github.com/keepassxreboot/keepassxc/issues/2173)
|
||||
- Password generator uses existing password length by default [#2318](https://github.com/keepassxreboot/keepassxc/issues/2318)
|
||||
- Improve alert message box button labels [#2376](https://github.com/keepassxreboot/keepassxc/issues/2376)
|
||||
- Show message when a database merge makes no changes [#2551](https://github.com/keepassxreboot/keepassxc/issues/2551)
|
||||
- Browser Integration Enhancements [[#1497](https://github.com/keepassxreboot/keepassxc/issues/1497), [#2253](https://github.com/keepassxreboot/keepassxc/issues/2253), [#1904](https://github.com/keepassxreboot/keepassxc/issues/1904), [#2232](https://github.com/keepassxreboot/keepassxc/issues/2232), [#1850](https://github.com/keepassxreboot/keepassxc/issues/1850), [#2218](https://github.com/keepassxreboot/keepassxc/issues/2218), [#2391](https://github.com/keepassxreboot/keepassxc/issues/2391), [#2396](https://github.com/keepassxreboot/keepassxc/issues/2396), [#2542](https://github.com/keepassxreboot/keepassxc/issues/2542), [#2622](https://github.com/keepassxreboot/keepassxc/issues/2622), [#2637](https://github.com/keepassxreboot/keepassxc/issues/2637), [#2790](https://github.com/keepassxreboot/keepassxc/issues/2790)]
|
||||
- Overall Code Improvements [[#2316](https://github.com/keepassxreboot/keepassxc/issues/2316), [#2284](https://github.com/keepassxreboot/keepassxc/issues/2284), [#2351](https://github.com/keepassxreboot/keepassxc/issues/2351), [#2402](https://github.com/keepassxreboot/keepassxc/issues/2402), [#2410](https://github.com/keepassxreboot/keepassxc/issues/2410), [#2419](https://github.com/keepassxreboot/keepassxc/issues/2419), [#2422](https://github.com/keepassxreboot/keepassxc/issues/2422), [#2443](https://github.com/keepassxreboot/keepassxc/issues/2443), [#2491](https://github.com/keepassxreboot/keepassxc/issues/2491), [#2506](https://github.com/keepassxreboot/keepassxc/issues/2506), [#2610](https://github.com/keepassxreboot/keepassxc/issues/2610), [#2667](https://github.com/keepassxreboot/keepassxc/issues/2667), [#2709](https://github.com/keepassxreboot/keepassxc/issues/2709), [#2731](https://github.com/keepassxreboot/keepassxc/issues/2731)]
|
||||
- New Database Wizard #1952
|
||||
- Advanced Search #1797
|
||||
- Automatic update checker #2648
|
||||
- KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739]
|
||||
- Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439]
|
||||
- Remove KeePassHttp support #1752
|
||||
- CLI: output info to stderr for easier scripting #2558
|
||||
- CLI: Add --quiet option #2507
|
||||
- CLI: Add create command #2540
|
||||
- CLI: Add recursive listing of entries #2345
|
||||
- CLI: Fix stdin/stdout encoding on Windows #2425
|
||||
- SSH Agent: Support OpenSSH for Windows #1994
|
||||
- macOS: TouchID Quick Unlock #1851
|
||||
- macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583]
|
||||
- Linux: Prevent Klipper from storing secrets in clipboard #1969
|
||||
- Linux: Use polling based file watching for NFS #2171
|
||||
- Linux: Enable use of browser plugin in Snap build #2802
|
||||
- TOTP QR Code Generator #1167
|
||||
- High-DPI Scaling for 4k screens #2404
|
||||
- Make keyboard shortcuts more consistent #2431
|
||||
- Warn user if deleting referenced entries #1744
|
||||
- Allow toolbar to be hidden and repositioned [#1819, #2357]
|
||||
- Increase max allowed database timeout to 12 hours #2173
|
||||
- Password generator uses existing password length by default #2318
|
||||
- Improve alert message box button labels #2376
|
||||
- Show message when a database merge makes no changes #2551
|
||||
- Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790]
|
||||
- Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731]
|
||||
|
||||
## 2.3.4 (2018-08-21)
|
||||
|
||||
- Show all URL schemes in entry view [#1768](https://github.com/keepassxreboot/keepassxc/issues/1768)
|
||||
- Disable merge when database is locked [#1975](https://github.com/keepassxreboot/keepassxc/issues/1975)
|
||||
- Fix intermittent crashes with favorite icon downloads [#1980](https://github.com/keepassxreboot/keepassxc/issues/1980)
|
||||
- Provide potential crash warning to Qt 5.5.x users [#2211](https://github.com/keepassxreboot/keepassxc/issues/2211)
|
||||
- Disable apply button when creating new entry/group to prevent data loss [#2204](https://github.com/keepassxreboot/keepassxc/issues/2204)
|
||||
- Allow for 12 hour timeout to lock idle database [#2173](https://github.com/keepassxreboot/keepassxc/issues/2173)
|
||||
- Multiple SSH Agent fixes [[#1981](https://github.com/keepassxreboot/keepassxc/issues/1981), [#2117](https://github.com/keepassxreboot/keepassxc/issues/2117)]
|
||||
- Multiple Browser Integration enhancements [[#1993](https://github.com/keepassxreboot/keepassxc/issues/1993), [#2003](https://github.com/keepassxreboot/keepassxc/issues/2003), [#2055](https://github.com/keepassxreboot/keepassxc/issues/2055), [#2116](https://github.com/keepassxreboot/keepassxc/issues/2116), [#2159](https://github.com/keepassxreboot/keepassxc/issues/2159), [#2174](https://github.com/keepassxreboot/keepassxc/issues/2174), [#2185](https://github.com/keepassxreboot/keepassxc/issues/2185)]
|
||||
- Fix browser proxy application not closing properly [#2142](https://github.com/keepassxreboot/keepassxc/issues/2142)
|
||||
- Add real names and Patreon supporters to about dialog [#2214](https://github.com/keepassxreboot/keepassxc/issues/2214)
|
||||
- Add settings button to toolbar, Donate button, and Report a Bug button to help menu [#2214](https://github.com/keepassxreboot/keepassxc/issues/2214)
|
||||
- Enhancements to release-tool to appsign intermediate build products [#2101](https://github.com/keepassxreboot/keepassxc/issues/2101)
|
||||
- Show all URL schemes in entry view #1768
|
||||
- Disable merge when database is locked #1975
|
||||
- Fix intermittent crashes with favorite icon downloads #1980
|
||||
- Provide potential crash warning to Qt 5.5.x users #2211
|
||||
- Disable apply button when creating new entry/group to prevent data loss #2204
|
||||
- Allow for 12 hour timeout to lock idle database #2173
|
||||
- Multiple SSH Agent fixes [#1981, #2117]
|
||||
- Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185]
|
||||
- Fix browser proxy application not closing properly #2142
|
||||
- Add real names and Patreon supporters to about dialog #2214
|
||||
- Add settings button to toolbar, Donate button, and Report a Bug button to help menu #2214
|
||||
- Enhancements to release-tool to appsign intermediate build products #2101
|
||||
|
||||
|
||||
## 2.3.3 (2018-05-09)
|
||||
|
||||
- Fix crash when browser integration is enabled [#1923](https://github.com/keepassxreboot/keepassxc/issues/1923)
|
||||
- Fix crash when browser integration is enabled #1923
|
||||
|
||||
## 2.3.2 (2018-05-07)
|
||||
|
||||
- Enable high entropy ASLR on Windows [#1747](https://github.com/keepassxreboot/keepassxc/issues/1747)
|
||||
- Enhance favicon fetching [#1786](https://github.com/keepassxreboot/keepassxc/issues/1786)
|
||||
- Fix crash on Windows due to autotype [#1691](https://github.com/keepassxreboot/keepassxc/issues/1691)
|
||||
- Fix dark tray icon changing all icons [#1680](https://github.com/keepassxreboot/keepassxc/issues/1680)
|
||||
- Fix --pw-stdin not using getPassword function [#1686](https://github.com/keepassxreboot/keepassxc/issues/1686)
|
||||
- Fix placeholders being resolved in notes [#1907](https://github.com/keepassxreboot/keepassxc/issues/1907)
|
||||
- Enable auto-type start delay to be configurable [#1908](https://github.com/keepassxreboot/keepassxc/issues/1908)
|
||||
- Browser: Fix native messaging reply size [#1719](https://github.com/keepassxreboot/keepassxc/issues/1719)
|
||||
- Browser: Increase maximum buffer size [#1720](https://github.com/keepassxreboot/keepassxc/issues/1720)
|
||||
- Browser: Enhance usability and functionality [[#1810](https://github.com/keepassxreboot/keepassxc/issues/1810), [#1822](https://github.com/keepassxreboot/keepassxc/issues/1822), [#1830](https://github.com/keepassxreboot/keepassxc/issues/1830), [#1884](https://github.com/keepassxreboot/keepassxc/issues/1884), [#1906](https://github.com/keepassxreboot/keepassxc/issues/1906)]
|
||||
- SSH Agent: Parse aes-256-cbc/ctr keys [#1682](https://github.com/keepassxreboot/keepassxc/issues/1682)
|
||||
- SSH Agent: Enhance usability and functionality [[#1677](https://github.com/keepassxreboot/keepassxc/issues/1677), [#1679](https://github.com/keepassxreboot/keepassxc/issues/1679), [#1681](https://github.com/keepassxreboot/keepassxc/issues/1681), [#1787](https://github.com/keepassxreboot/keepassxc/issues/1787)]
|
||||
- Enable high entropy ASLR on Windows #1747
|
||||
- Enhance favicon fetching #1786
|
||||
- Fix crash on Windows due to autotype #1691
|
||||
- Fix dark tray icon changing all icons #1680
|
||||
- Fix --pw-stdin not using getPassword function #1686
|
||||
- Fix placeholders being resolved in notes #1907
|
||||
- Enable auto-type start delay to be configurable #1908
|
||||
- Browser: Fix native messaging reply size #1719
|
||||
- Browser: Increase maximum buffer size #1720
|
||||
- Browser: Enhance usability and functionality [#1810, #1822, #1830, #1884, #1906]
|
||||
- SSH Agent: Parse aes-256-cbc/ctr keys #1682
|
||||
- SSH Agent: Enhance usability and functionality [#1677, #1679, #1681, #1787]
|
||||
|
||||
## 2.3.1 (2018-03-06)
|
||||
|
||||
- Fix unnecessary automatic upgrade to KDBX 4.0 and prevent challenge-response key being stripped [#1568](https://github.com/keepassxreboot/keepassxc/issues/1568)
|
||||
- Abort saving and show an error message when challenge-response fails [#1659](https://github.com/keepassxreboot/keepassxc/issues/1659)
|
||||
- Support inner stream protection on all string attributes [#1646](https://github.com/keepassxreboot/keepassxc/issues/1646)
|
||||
- Fix favicon downloads not finishing on some websites [#1657](https://github.com/keepassxreboot/keepassxc/issues/1657)
|
||||
- Fix freeze due to invalid STDIN data [#1628](https://github.com/keepassxreboot/keepassxc/issues/1628)
|
||||
- Correct issue with encrypted RSA SSH keys [#1587](https://github.com/keepassxreboot/keepassxc/issues/1587)
|
||||
- Fix crash on macOS due to QTBUG-54832 [#1607](https://github.com/keepassxreboot/keepassxc/issues/1607)
|
||||
- Show error message if ssh-agent communication fails [#1614](https://github.com/keepassxreboot/keepassxc/issues/1614)
|
||||
- Fix --pw-stdin and filename parameters being ignored [#1608](https://github.com/keepassxreboot/keepassxc/issues/1608)
|
||||
- Fix Auto-Type syntax check not allowing spaces and special characters [#1626](https://github.com/keepassxreboot/keepassxc/issues/1626)
|
||||
- Fix reference placeholders in combination with Auto-Type [#1649](https://github.com/keepassxreboot/keepassxc/issues/1649)
|
||||
- Fix qtbase translations not being loaded [#1611](https://github.com/keepassxreboot/keepassxc/issues/1611)
|
||||
- Fix startup crash on Windows due to missing SVG libraries [#1662](https://github.com/keepassxreboot/keepassxc/issues/1662)
|
||||
- Correct database tab order regression [#1610](https://github.com/keepassxreboot/keepassxc/issues/1610)
|
||||
- Fix GCC 8 compilation error [#1612](https://github.com/keepassxreboot/keepassxc/issues/1612)
|
||||
- Fix copying of advanced attributes on KDE [#1640](https://github.com/keepassxreboot/keepassxc/issues/1640)
|
||||
- Fix member initialization of CategoryListWidgetDelegate [#1613](https://github.com/keepassxreboot/keepassxc/issues/1613)
|
||||
- Fix inconsistent toolbar icon sizes and provide higher-quality icons [#1616](https://github.com/keepassxreboot/keepassxc/issues/1616)
|
||||
- Improve preview panel geometry [#1609](https://github.com/keepassxreboot/keepassxc/issues/1609)
|
||||
- Fix unnecessary automatic upgrade to KDBX 4.0 and prevent challenge-response key being stripped #1568
|
||||
- Abort saving and show an error message when challenge-response fails #1659
|
||||
- Support inner stream protection on all string attributes #1646
|
||||
- Fix favicon downloads not finishing on some websites #1657
|
||||
- Fix freeze due to invalid STDIN data #1628
|
||||
- Correct issue with encrypted RSA SSH keys #1587
|
||||
- Fix crash on macOS due to QTBUG-54832 #1607
|
||||
- Show error message if ssh-agent communication fails #1614
|
||||
- Fix --pw-stdin and filename parameters being ignored #1608
|
||||
- Fix Auto-Type syntax check not allowing spaces and special characters #1626
|
||||
- Fix reference placeholders in combination with Auto-Type #1649
|
||||
- Fix qtbase translations not being loaded #1611
|
||||
- Fix startup crash on Windows due to missing SVG libraries #1662
|
||||
- Correct database tab order regression #1610
|
||||
- Fix GCC 8 compilation error #1612
|
||||
- Fix copying of advanced attributes on KDE #1640
|
||||
- Fix member initialization of CategoryListWidgetDelegate #1613
|
||||
- Fix inconsistent toolbar icon sizes and provide higher-quality icons #1616
|
||||
- Improve preview panel geometry #1609
|
||||
|
||||
## 2.3.0 (2018-02-27)
|
||||
|
||||
- Add support for KDBX 4.0, Argon2 and ChaCha20 [[#148](https://github.com/keepassxreboot/keepassxc/issues/148), [#1179](https://github.com/keepassxreboot/keepassxc/issues/1179), [#1230](https://github.com/keepassxreboot/keepassxc/issues/1230), [#1494](https://github.com/keepassxreboot/keepassxc/issues/1494)]
|
||||
- Add SSH Agent feature [[#1098](https://github.com/keepassxreboot/keepassxc/issues/1098), [#1450](https://github.com/keepassxreboot/keepassxc/issues/1450), [#1463](https://github.com/keepassxreboot/keepassxc/issues/1463)]
|
||||
- Add preview panel with details of the selected entry [[#879](https://github.com/keepassxreboot/keepassxc/issues/879), [#1338](https://github.com/keepassxreboot/keepassxc/issues/1338)]
|
||||
- Add more and configurable columns to entry table and allow copying of values by double click [#1305](https://github.com/keepassxreboot/keepassxc/issues/1305)
|
||||
- Add KeePassXC-Browser API as a replacement for KeePassHTTP [#608](https://github.com/keepassxreboot/keepassxc/issues/608)
|
||||
- Deprecate KeePassHTTP [#1392](https://github.com/keepassxreboot/keepassxc/issues/1392)
|
||||
- Add support for Steam one-time passwords [#1206](https://github.com/keepassxreboot/keepassxc/issues/1206)
|
||||
- Add support for multiple Auto-Type sequences for a single entry [#1390](https://github.com/keepassxreboot/keepassxc/issues/1390)
|
||||
- Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 [#1060](https://github.com/keepassxreboot/keepassxc/issues/1060)
|
||||
- Replace qHttp with cURL for website icon downloads [#1460](https://github.com/keepassxreboot/keepassxc/issues/1460)
|
||||
- Remove lock file [#1231](https://github.com/keepassxreboot/keepassxc/issues/1231)
|
||||
- Add option to create backup file before saving [#1385](https://github.com/keepassxreboot/keepassxc/issues/1385)
|
||||
- Ask to save a generated password before closing the entry password generator [#1499](https://github.com/keepassxreboot/keepassxc/issues/1499)
|
||||
- Resolve placeholders recursively [#1078](https://github.com/keepassxreboot/keepassxc/issues/1078)
|
||||
- Add Auto-Type button to the toolbar [#1056](https://github.com/keepassxreboot/keepassxc/issues/1056)
|
||||
- Improve window focus handling for Auto-Type dialogs [[#1204](https://github.com/keepassxreboot/keepassxc/issues/1204), [#1490](https://github.com/keepassxreboot/keepassxc/issues/1490)]
|
||||
- Auto-Type dialog and password generator can now be exited with ESC [[#1252](https://github.com/keepassxreboot/keepassxc/issues/1252), [#1412](https://github.com/keepassxreboot/keepassxc/issues/1412)]
|
||||
- Add optional dark tray icon [#1154](https://github.com/keepassxreboot/keepassxc/issues/1154)
|
||||
- Add new "Unsafe saving" option to work around saving problems with file sync services [#1385](https://github.com/keepassxreboot/keepassxc/issues/1385)
|
||||
- Add IBus support to AppImage and additional image formats to Windows builds [[#1534](https://github.com/keepassxreboot/keepassxc/issues/1534), [#1537](https://github.com/keepassxreboot/keepassxc/issues/1537)]
|
||||
- Add diceware password generator to CLI [#1406](https://github.com/keepassxreboot/keepassxc/issues/1406)
|
||||
- Add --key-file option to CLI [[#816](https://github.com/keepassxreboot/keepassxc/issues/816), [#824](https://github.com/keepassxreboot/keepassxc/issues/824)]
|
||||
- Add DBus interface for opening and closing KeePassXC databases [#283](https://github.com/keepassxreboot/keepassxc/issues/283)
|
||||
- Add KDBX compression options to database settings [#1419](https://github.com/keepassxreboot/keepassxc/issues/1419)
|
||||
- Discourage use of old fixed-length key files in favor of arbitrary files [[#1326](https://github.com/keepassxreboot/keepassxc/issues/1326), [#1327](https://github.com/keepassxreboot/keepassxc/issues/1327)]
|
||||
- Correct reference resolution in entry fields [#1486](https://github.com/keepassxreboot/keepassxc/issues/1486)
|
||||
- Fix window state and recent databases not being remembered on exit [#1453](https://github.com/keepassxreboot/keepassxc/issues/1453)
|
||||
- Correct history item generation when configuring TOTP for an entry [#1446](https://github.com/keepassxreboot/keepassxc/issues/1446)
|
||||
- Correct multiple TOTP bugs [#1414](https://github.com/keepassxreboot/keepassxc/issues/1414)
|
||||
- Automatic saving after every change is now a default [#279](https://github.com/keepassxreboot/keepassxc/issues/279)
|
||||
- Allow creation of new entries during search [#1398](https://github.com/keepassxreboot/keepassxc/issues/1398)
|
||||
- Correct menu issues on macOS [#1335](https://github.com/keepassxreboot/keepassxc/issues/1335)
|
||||
- Allow compilation on OpenBSD [#1328](https://github.com/keepassxreboot/keepassxc/issues/1328)
|
||||
- Improve entry attachments view [[#1139](https://github.com/keepassxreboot/keepassxc/issues/1139), [#1298](https://github.com/keepassxreboot/keepassxc/issues/1298)]
|
||||
- Fix auto lock for Gnome and Xfce [[#910](https://github.com/keepassxreboot/keepassxc/issues/910), [#1249](https://github.com/keepassxreboot/keepassxc/issues/1249)]
|
||||
- Don't remember key files in file dialogs when the setting is disabled [#1188](https://github.com/keepassxreboot/keepassxc/issues/1188)
|
||||
- Improve database merging and conflict resolution [[#807](https://github.com/keepassxreboot/keepassxc/issues/807), [#1165](https://github.com/keepassxreboot/keepassxc/issues/1165)]
|
||||
- Fix macOS pasteboard issues [#1202](https://github.com/keepassxreboot/keepassxc/issues/1202)
|
||||
- Improve startup times on some platforms [#1205](https://github.com/keepassxreboot/keepassxc/issues/1205)
|
||||
- Hide the notes field by default [#1124](https://github.com/keepassxreboot/keepassxc/issues/1124)
|
||||
- Toggle main window by clicking tray icon with the middle mouse button [#992](https://github.com/keepassxreboot/keepassxc/issues/992)
|
||||
- Fix custom icons not copied over when databases are merged [#1008](https://github.com/keepassxreboot/keepassxc/issues/1008)
|
||||
- Allow use of DEL key to delete entries [#914](https://github.com/keepassxreboot/keepassxc/issues/914)
|
||||
- Correct intermittent crash due to stale history items [#1527](https://github.com/keepassxreboot/keepassxc/issues/1527)
|
||||
- Sanitize newline characters in title, username and URL fields [#1502](https://github.com/keepassxreboot/keepassxc/issues/1502)
|
||||
- Reopen previously opened databases in correct order [#774](https://github.com/keepassxreboot/keepassxc/issues/774)
|
||||
- Use system's zxcvbn library if available [#701](https://github.com/keepassxreboot/keepassxc/issues/701)
|
||||
- Implement various i18n improvements [[#690](https://github.com/keepassxreboot/keepassxc/issues/690), [#875](https://github.com/keepassxreboot/keepassxc/issues/875), [#1436](https://github.com/keepassxreboot/keepassxc/issues/1436)]
|
||||
- Add support for KDBX 4.0, Argon2 and ChaCha20 [#148, #1179, #1230, #1494]
|
||||
- Add SSH Agent feature [#1098, #1450, #1463]
|
||||
- Add preview panel with details of the selected entry [#879, #1338]
|
||||
- Add more and configurable columns to entry table and allow copying of values by double click #1305
|
||||
- Add KeePassXC-Browser API as a replacement for KeePassHTTP #608
|
||||
- Deprecate KeePassHTTP #1392
|
||||
- Add support for Steam one-time passwords #1206
|
||||
- Add support for multiple Auto-Type sequences for a single entry #1390
|
||||
- Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 #1060
|
||||
- Replace qHttp with cURL for website icon downloads #1460
|
||||
- Remove lock file #1231
|
||||
- Add option to create backup file before saving #1385
|
||||
- Ask to save a generated password before closing the entry password generator #1499
|
||||
- Resolve placeholders recursively #1078
|
||||
- Add Auto-Type button to the toolbar #1056
|
||||
- Improve window focus handling for Auto-Type dialogs [#1204, #1490]
|
||||
- Auto-Type dialog and password generator can now be exited with ESC [#1252, #1412]
|
||||
- Add optional dark tray icon #1154
|
||||
- Add new "Unsafe saving" option to work around saving problems with file sync services #1385
|
||||
- Add IBus support to AppImage and additional image formats to Windows builds [#1534, #1537]
|
||||
- Add diceware password generator to CLI #1406
|
||||
- Add --key-file option to CLI [#816, #824]
|
||||
- Add DBus interface for opening and closing KeePassXC databases #283
|
||||
- Add KDBX compression options to database settings #1419
|
||||
- Discourage use of old fixed-length key files in favor of arbitrary files [#1326, #1327]
|
||||
- Correct reference resolution in entry fields #1486
|
||||
- Fix window state and recent databases not being remembered on exit #1453
|
||||
- Correct history item generation when configuring TOTP for an entry #1446
|
||||
- Correct multiple TOTP bugs #1414
|
||||
- Automatic saving after every change is now a default #279
|
||||
- Allow creation of new entries during search #1398
|
||||
- Correct menu issues on macOS #1335
|
||||
- Allow compilation on OpenBSD #1328
|
||||
- Improve entry attachments view [#1139, #1298]
|
||||
- Fix auto lock for Gnome and Xfce [#910, #1249]
|
||||
- Don't remember key files in file dialogs when the setting is disabled #1188
|
||||
- Improve database merging and conflict resolution [#807, #1165]
|
||||
- Fix macOS pasteboard issues #1202
|
||||
- Improve startup times on some platforms #1205
|
||||
- Hide the notes field by default #1124
|
||||
- Toggle main window by clicking tray icon with the middle mouse button #992
|
||||
- Fix custom icons not copied over when databases are merged #1008
|
||||
- Allow use of DEL key to delete entries #914
|
||||
- Correct intermittent crash due to stale history items #1527
|
||||
- Sanitize newline characters in title, username and URL fields #1502
|
||||
- Reopen previously opened databases in correct order #774
|
||||
- Use system's zxcvbn library if available #701
|
||||
- Implement various i18n improvements [#690, #875, #1436]
|
||||
|
||||
## 2.2.4 (2017-12-13)
|
||||
|
||||
- Prevent database corruption when locked [#1219](https://github.com/keepassxreboot/keepassxc/issues/1219)
|
||||
- Fixes apply button not saving new entries [#1141](https://github.com/keepassxreboot/keepassxc/issues/1141)
|
||||
- Switch to Consolas font on Windows for password edit [#1229](https://github.com/keepassxreboot/keepassxc/issues/1229)
|
||||
- Multiple fixes to AppImage deployment [[#1115](https://github.com/keepassxreboot/keepassxc/issues/1115), [#1228](https://github.com/keepassxreboot/keepassxc/issues/1228)]
|
||||
- Fixes multiple memory leaks [#1213](https://github.com/keepassxreboot/keepassxc/issues/1213)
|
||||
- Resize message close to 16x16 pixels [#1253](https://github.com/keepassxreboot/keepassxc/issues/1253)
|
||||
- Prevent database corruption when locked #1219
|
||||
- Fixes apply button not saving new entries #1141
|
||||
- Switch to Consolas font on Windows for password edit #1229
|
||||
- Multiple fixes to AppImage deployment [#1115, #1228]
|
||||
- Fixes multiple memory leaks #1213
|
||||
- Resize message close to 16x16 pixels #1253
|
||||
|
||||
## 2.2.2 (2017-10-22)
|
||||
|
||||
- Fixed entries with empty URLs being reported to KeePassHTTP clients [#1031](https://github.com/keepassxreboot/keepassxc/issues/1031)
|
||||
- Fixed YubiKey detection and enabled CLI tool for AppImage binary [#1100](https://github.com/keepassxreboot/keepassxc/issues/1100)
|
||||
- Added AppStream description [#1082](https://github.com/keepassxreboot/keepassxc/issues/1082)
|
||||
- Improved TOTP compatibility and added new Base32 implementation [#1069](https://github.com/keepassxreboot/keepassxc/issues/1069)
|
||||
- Fixed error handling when processing invalid cipher stream [#1099](https://github.com/keepassxreboot/keepassxc/issues/1099)
|
||||
- Fixed double warning display when opening a database [#1037](https://github.com/keepassxreboot/keepassxc/issues/1037)
|
||||
- Fixed unlocking databases with --pw-stdin [#1087](https://github.com/keepassxreboot/keepassxc/issues/1087)
|
||||
- Added ability to override QT_PLUGIN_PATH environment variable for AppImages [#1079](https://github.com/keepassxreboot/keepassxc/issues/1079)
|
||||
- Fixed transform seed not being regenerated when saving the database [#1068](https://github.com/keepassxreboot/keepassxc/issues/1068)
|
||||
- Fixed only one YubiKey slot being polled [#1048](https://github.com/keepassxreboot/keepassxc/issues/1048)
|
||||
- Corrected an issue with entry icons while merging [#1008](https://github.com/keepassxreboot/keepassxc/issues/1008)
|
||||
- Corrected desktop and tray icons in Snap package [#1030](https://github.com/keepassxreboot/keepassxc/issues/1030)
|
||||
- Fixed screen lock and Google fallback settings [#1029](https://github.com/keepassxreboot/keepassxc/issues/1029)
|
||||
- Fixed entries with empty URLs being reported to KeePassHTTP clients #1031
|
||||
- Fixed YubiKey detection and enabled CLI tool for AppImage binary #1100
|
||||
- Added AppStream description #1082
|
||||
- Improved TOTP compatibility and added new Base32 implementation #1069
|
||||
- Fixed error handling when processing invalid cipher stream #1099
|
||||
- Fixed double warning display when opening a database #1037
|
||||
- Fixed unlocking databases with --pw-stdin #1087
|
||||
- Added ability to override QT_PLUGIN_PATH environment variable for AppImages #1079
|
||||
- Fixed transform seed not being regenerated when saving the database #1068
|
||||
- Fixed only one YubiKey slot being polled #1048
|
||||
- Corrected an issue with entry icons while merging #1008
|
||||
- Corrected desktop and tray icons in Snap package #1030
|
||||
- Fixed screen lock and Google fallback settings #1029
|
||||
|
||||
## 2.2.1 (2017-10-01)
|
||||
|
||||
- Corrected multiple snap issues [[#934](https://github.com/keepassxreboot/keepassxc/issues/934), [#1011](https://github.com/keepassxreboot/keepassxc/issues/1011)]
|
||||
- Corrected multiple custom icon issues [[#708](https://github.com/keepassxreboot/keepassxc/issues/708), [#719](https://github.com/keepassxreboot/keepassxc/issues/719), [#994](https://github.com/keepassxreboot/keepassxc/issues/994)]
|
||||
- Corrected multiple Yubikey issues [#880](https://github.com/keepassxreboot/keepassxc/issues/880)
|
||||
- Fixed single instance preventing load on occasion [#997](https://github.com/keepassxreboot/keepassxc/issues/997)
|
||||
- Keep entry history when merging databases [#970](https://github.com/keepassxreboot/keepassxc/issues/970)
|
||||
- Prevent data loss if passwords were mismatched [#1007](https://github.com/keepassxreboot/keepassxc/issues/1007)
|
||||
- Fixed crash after merge [#941](https://github.com/keepassxreboot/keepassxc/issues/941)
|
||||
- Added configurable auto-type default delay [#703](https://github.com/keepassxreboot/keepassxc/issues/703)
|
||||
- Unlock database dialog window comes to front [#663](https://github.com/keepassxreboot/keepassxc/issues/663)
|
||||
- Corrected multiple snap issues [#934, #1011]
|
||||
- Corrected multiple custom icon issues [#708, #719, #994]
|
||||
- Corrected multiple Yubikey issues #880
|
||||
- Fixed single instance preventing load on occasion #997
|
||||
- Keep entry history when merging databases #970
|
||||
- Prevent data loss if passwords were mismatched #1007
|
||||
- Fixed crash after merge #941
|
||||
- Added configurable auto-type default delay #703
|
||||
- Unlock database dialog window comes to front #663
|
||||
- Translation and compiling fixes
|
||||
|
||||
## 2.2.0 (2017-06-23)
|
||||
|
||||
- Added YubiKey 2FA integration for unlocking databases [#127](https://github.com/keepassxreboot/keepassxc/issues/127)
|
||||
- Added TOTP support [#519](https://github.com/keepassxreboot/keepassxc/issues/519)
|
||||
- Added CSV import tool [[#146](https://github.com/keepassxreboot/keepassxc/issues/146), [#490](https://github.com/keepassxreboot/keepassxc/issues/490)]
|
||||
- Added KeePassXC CLI tool [#254](https://github.com/keepassxreboot/keepassxc/issues/254)
|
||||
- Added diceware password generator [#373](https://github.com/keepassxreboot/keepassxc/issues/373)
|
||||
- Added support for entry references [[#370](https://github.com/keepassxreboot/keepassxc/issues/370), [#378](https://github.com/keepassxreboot/keepassxc/issues/378)]
|
||||
- Added support for Twofish encryption [#167](https://github.com/keepassxreboot/keepassxc/issues/167)
|
||||
- Enabled DEP and ASLR for in-memory protection [#371](https://github.com/keepassxreboot/keepassxc/issues/371)
|
||||
- Enabled single instance mode [#510](https://github.com/keepassxreboot/keepassxc/issues/510)
|
||||
- Enabled portable mode [#645](https://github.com/keepassxreboot/keepassxc/issues/645)
|
||||
- Enabled database lock on screensaver and session lock [#545](https://github.com/keepassxreboot/keepassxc/issues/545)
|
||||
- Redesigned welcome screen with common features and recent databases [#292](https://github.com/keepassxreboot/keepassxc/issues/292)
|
||||
- Multiple updates to search behavior [[#168](https://github.com/keepassxreboot/keepassxc/issues/168), [#213](https://github.com/keepassxreboot/keepassxc/issues/213), [#374](https://github.com/keepassxreboot/keepassxc/issues/374), [#471](https://github.com/keepassxreboot/keepassxc/issues/471), [#603](https://github.com/keepassxreboot/keepassxc/issues/603), [#654](https://github.com/keepassxreboot/keepassxc/issues/654)]
|
||||
- Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [[#267](https://github.com/keepassxreboot/keepassxc/issues/267), [#427](https://github.com/keepassxreboot/keepassxc/issues/427), [#480](https://github.com/keepassxreboot/keepassxc/issues/480)]
|
||||
- Fixed auto-type errors on Linux [#550](https://github.com/keepassxreboot/keepassxc/issues/550)
|
||||
- Prompt user prior to executing a cmd:// URL [#235](https://github.com/keepassxreboot/keepassxc/issues/235)
|
||||
- Entry attributes can be protected (hidden) [#220](https://github.com/keepassxreboot/keepassxc/issues/220)
|
||||
- Added extended ascii to password generator [#538](https://github.com/keepassxreboot/keepassxc/issues/538)
|
||||
- Added new database icon to toolbar [#289](https://github.com/keepassxreboot/keepassxc/issues/289)
|
||||
- Added context menu entry to empty recycle bin in databases [#520](https://github.com/keepassxreboot/keepassxc/issues/520)
|
||||
- Added "apply" button to entry and group edit windows [#624](https://github.com/keepassxreboot/keepassxc/issues/624)
|
||||
- Added macOS tray icon and enabled minimize on close [#583](https://github.com/keepassxreboot/keepassxc/issues/583)
|
||||
- Fixed issues with unclean shutdowns [[#170](https://github.com/keepassxreboot/keepassxc/issues/170), [#580](https://github.com/keepassxreboot/keepassxc/issues/580)]
|
||||
- Changed keyboard shortcut to create new database to CTRL+SHIFT+N [#515](https://github.com/keepassxreboot/keepassxc/issues/515)
|
||||
- Compare window title to entry URLs [#556](https://github.com/keepassxreboot/keepassxc/issues/556)
|
||||
- Implemented inline error messages [#162](https://github.com/keepassxreboot/keepassxc/issues/162)
|
||||
- Ignore group expansion and other minor changes when making database "dirty" [#464](https://github.com/keepassxreboot/keepassxc/issues/464)
|
||||
- Updated license and copyright information on souce files [#632](https://github.com/keepassxreboot/keepassxc/issues/632)
|
||||
- Added contributors list to about dialog [#629](https://github.com/keepassxreboot/keepassxc/issues/629)
|
||||
- Added YubiKey 2FA integration for unlocking databases #127
|
||||
- Added TOTP support #519
|
||||
- Added CSV import tool [#146, #490]
|
||||
- Added KeePassXC CLI tool #254
|
||||
- Added diceware password generator #373
|
||||
- Added support for entry references [#370, #378]
|
||||
- Added support for Twofish encryption #167
|
||||
- Enabled DEP and ASLR for in-memory protection #371
|
||||
- Enabled single instance mode #510
|
||||
- Enabled portable mode #645
|
||||
- Enabled database lock on screensaver and session lock #545
|
||||
- Redesigned welcome screen with common features and recent databases #292
|
||||
- Multiple updates to search behavior [#168, #213, #374, #471, #603, #654]
|
||||
- Added auto-type fields {CLEARFIELD}, {SPACE}, {{}, {}} [#267, #427, #480]
|
||||
- Fixed auto-type errors on Linux #550
|
||||
- Prompt user prior to executing a cmd:// URL #235
|
||||
- Entry attributes can be protected (hidden) #220
|
||||
- Added extended ascii to password generator #538
|
||||
- Added new database icon to toolbar #289
|
||||
- Added context menu entry to empty recycle bin in databases #520
|
||||
- Added "apply" button to entry and group edit windows #624
|
||||
- Added macOS tray icon and enabled minimize on close #583
|
||||
- Fixed issues with unclean shutdowns [#170, #580]
|
||||
- Changed keyboard shortcut to create new database to CTRL+SHIFT+N #515
|
||||
- Compare window title to entry URLs #556
|
||||
- Implemented inline error messages #162
|
||||
- Ignore group expansion and other minor changes when making database "dirty" #464
|
||||
- Updated license and copyright information on souce files #632
|
||||
- Added contributors list to about dialog #629
|
||||
|
||||
## 2.1.4 (2017-04-09)
|
||||
|
||||
- Bumped KeePassHTTP version to 1.8.4.2
|
||||
- KeePassHTTP confirmation window comes to foreground [#466](https://github.com/keepassxreboot/keepassxc/issues/466)
|
||||
- KeePassHTTP confirmation window comes to foreground #466
|
||||
|
||||
## 2.1.3 (2017-03-03)
|
||||
|
||||
- Fix possible overflow in zxcvbn library [#363](https://github.com/keepassxreboot/keepassxc/issues/363)
|
||||
- Revert HiDPI setting to avoid problems on laptop screens [#332](https://github.com/keepassxreboot/keepassxc/issues/332)
|
||||
- Set file meta properties in Windows executable [#330](https://github.com/keepassxreboot/keepassxc/issues/330)
|
||||
- Suppress error message when auto-reloading a locked database [#345](https://github.com/keepassxreboot/keepassxc/issues/345)
|
||||
- Improve usability of question dialog when database is already locked by a different instance [#346](https://github.com/keepassxreboot/keepassxc/issues/346)
|
||||
- Fix compiler warnings in QHttp library [#351](https://github.com/keepassxreboot/keepassxc/issues/351)
|
||||
- Use unified toolbar on Mac OS X [#361](https://github.com/keepassxreboot/keepassxc/issues/361)
|
||||
- Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 [#362](https://github.com/keepassxreboot/keepassxc/issues/362)
|
||||
- Fix possible overflow in zxcvbn library #363
|
||||
- Revert HiDPI setting to avoid problems on laptop screens #332
|
||||
- Set file meta properties in Windows executable #330
|
||||
- Suppress error message when auto-reloading a locked database #345
|
||||
- Improve usability of question dialog when database is already locked by a different instance #346
|
||||
- Fix compiler warnings in QHttp library #351
|
||||
- Use unified toolbar on Mac OS X #361
|
||||
- Fix an issue on X11 where the main window would be raised instead of closed on Alt+F4 #362
|
||||
|
||||
## 2.1.2 (2017-02-17)
|
||||
|
||||
- Ask for save location when creating a new database [#302](https://github.com/keepassxreboot/keepassxc/issues/302)
|
||||
- Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [[#317](https://github.com/keepassxreboot/keepassxc/issues/317), [#265](https://github.com/keepassxreboot/keepassxc/issues/265)]
|
||||
- Prevent Qt from degrading Wifi network performance on certain platforms [#318](https://github.com/keepassxreboot/keepassxc/issues/318)
|
||||
- Visually refine user interface on OS X and other platforms [#299](https://github.com/keepassxreboot/keepassxc/issues/299)
|
||||
- Remove unusable tray icon setting on OS X [#293](https://github.com/keepassxreboot/keepassxc/issues/293)
|
||||
- Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup [#307](https://github.com/keepassxreboot/keepassxc/issues/307)
|
||||
- Fix AppImage tray icon on Ubuntu [[#277](https://github.com/keepassxreboot/keepassxc/issues/277), [#273](https://github.com/keepassxreboot/keepassxc/issues/273)]
|
||||
- Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu [#276](https://github.com/keepassxreboot/keepassxc/issues/276)
|
||||
- Fix result order in entry search [#320](https://github.com/keepassxreboot/keepassxc/issues/320)
|
||||
- Enable HiDPI scaling on supported platforms [#315](https://github.com/keepassxreboot/keepassxc/issues/315)
|
||||
- Remove empty directories from installation target [#282](https://github.com/keepassxreboot/keepassxc/issues/282)
|
||||
- Ask for save location when creating a new database #302
|
||||
- Remove Libmicrohttpd dependency to clean up the code and ensure better OS X compatibility [#317, #265]
|
||||
- Prevent Qt from degrading Wifi network performance on certain platforms #318
|
||||
- Visually refine user interface on OS X and other platforms #299
|
||||
- Remove unusable tray icon setting on OS X #293
|
||||
- Fix compositing glitches on Ubuntu and prevent flashing when minimizing to the tray at startup #307
|
||||
- Fix AppImage tray icon on Ubuntu [#277, #273]
|
||||
- Fix global menu disappearing after restoring KeePassXC from the tray on Ubuntu #276
|
||||
- Fix result order in entry search #320
|
||||
- Enable HiDPI scaling on supported platforms #315
|
||||
- Remove empty directories from installation target #282
|
||||
|
||||
## 2.1.1 (2017-02-06)
|
||||
|
||||
- Enabled HTTP plugin build; plugin is disabled by default and limited to localhost [#147](https://github.com/keepassxreboot/keepassxc/issues/147)
|
||||
- Escape HTML in dialog boxes [#247](https://github.com/keepassxreboot/keepassxc/issues/247)
|
||||
- Corrected crashes in favicon download and password generator [[#233](https://github.com/keepassxreboot/keepassxc/issues/233), [#226](https://github.com/keepassxreboot/keepassxc/issues/226)]
|
||||
- Increase font size of password meter [#228](https://github.com/keepassxreboot/keepassxc/issues/228)
|
||||
- Fixed compatibility with Qt 5.8 [#211](https://github.com/keepassxreboot/keepassxc/issues/211)
|
||||
- Use consistent button heights in password generator [#229](https://github.com/keepassxreboot/keepassxc/issues/229)
|
||||
- Enabled HTTP plugin build; plugin is disabled by default and limited to localhost #147
|
||||
- Escape HTML in dialog boxes #247
|
||||
- Corrected crashes in favicon download and password generator [#233, #226]
|
||||
- Increase font size of password meter #228
|
||||
- Fixed compatibility with Qt 5.8 #211
|
||||
- Use consistent button heights in password generator #229
|
||||
|
||||
## 2.1.0 (2017-01-22)
|
||||
|
||||
- Show unlock dialog when using autotype on a closed database [[#10](https://github.com/keepassxreboot/keepassxc/issues/10), [#89](https://github.com/keepassxreboot/keepassxc/issues/89)]
|
||||
- Show different tray icon when database is locked [[#37](https://github.com/keepassxreboot/keepassxc/issues/37), [#46](https://github.com/keepassxreboot/keepassxc/issues/46)]
|
||||
- Support autotype on Windows and OS X [[#42](https://github.com/keepassxreboot/keepassxc/issues/42), [#60](https://github.com/keepassxreboot/keepassxc/issues/60), [#63](https://github.com/keepassxreboot/keepassxc/issues/63)]
|
||||
- Add delay feature to autotype [[#76](https://github.com/keepassxreboot/keepassxc/issues/76), [#77](https://github.com/keepassxreboot/keepassxc/issues/77)]
|
||||
- Add password strength meter [[#84](https://github.com/keepassxreboot/keepassxc/issues/84), [#92](https://github.com/keepassxreboot/keepassxc/issues/92)]
|
||||
- Show unlock dialog when using autotype on a closed database [#10, #89]
|
||||
- Show different tray icon when database is locked [#37, #46]
|
||||
- Support autotype on Windows and OS X [#42, #60, #63]
|
||||
- Add delay feature to autotype [#76, #77]
|
||||
- Add password strength meter [#84, #92]
|
||||
- Add option for automatically locking the database when minimizing
|
||||
the window [#57](https://github.com/keepassxreboot/keepassxc/issues/57)
|
||||
- Add feature to download favicons and use them as entry icons [#30](https://github.com/keepassxreboot/keepassxc/issues/30)
|
||||
the window #57
|
||||
- Add feature to download favicons and use them as entry icons #30
|
||||
- Automatically reload and merge database when the file changed on
|
||||
disk [[#22](https://github.com/keepassxreboot/keepassxc/issues/22), [#33](https://github.com/keepassxreboot/keepassxc/issues/33), [#93](https://github.com/keepassxreboot/keepassxc/issues/93)]
|
||||
- Add tool for merging two databases [[#22](https://github.com/keepassxreboot/keepassxc/issues/22), [#47](https://github.com/keepassxreboot/keepassxc/issues/47), [#143](https://github.com/keepassxreboot/keepassxc/issues/143)]
|
||||
disk [#22, #33, #93]
|
||||
- Add tool for merging two databases [#22, #47, #143]
|
||||
- Add --pw-stdin commandline option to unlock the database by providing
|
||||
a password on STDIN [#54](https://github.com/keepassxreboot/keepassxc/issues/54)
|
||||
- Add utility script for reading the database password from KWallet [#55](https://github.com/keepassxreboot/keepassxc/issues/55)
|
||||
- Fix some KeePassHTTP settings not being remembered [[#34](https://github.com/keepassxreboot/keepassxc/issues/34), [#65](https://github.com/keepassxreboot/keepassxc/issues/65)]
|
||||
- Make search box persistent [[#15](https://github.com/keepassxreboot/keepassxc/issues/15), [#67](https://github.com/keepassxreboot/keepassxc/issues/67), [#157](https://github.com/keepassxreboot/keepassxc/issues/157)]
|
||||
- Enhance search feature by scoping the search to selected group [[#16](https://github.com/keepassxreboot/keepassxc/issues/16), [#118](https://github.com/keepassxreboot/keepassxc/issues/118)]
|
||||
- Improve interaction between search field and entry list [[#131](https://github.com/keepassxreboot/keepassxc/issues/131), [#141](https://github.com/keepassxreboot/keepassxc/issues/141)]
|
||||
- Add stand-alone password-generator [[#18](https://github.com/keepassxreboot/keepassxc/issues/18), [#92](https://github.com/keepassxreboot/keepassxc/issues/92)]
|
||||
- Don't require password repetition when password is visible [[#27](https://github.com/keepassxreboot/keepassxc/issues/27), [#92](https://github.com/keepassxreboot/keepassxc/issues/92)]
|
||||
- Add support for entry attributes in autotype sequences [#107](https://github.com/keepassxreboot/keepassxc/issues/107)
|
||||
- Always focus password field when opening the database unlock widget [[#116](https://github.com/keepassxreboot/keepassxc/issues/116), [#117](https://github.com/keepassxreboot/keepassxc/issues/117)]
|
||||
- Fix compilation errors on various platforms [[#53](https://github.com/keepassxreboot/keepassxc/issues/53), [#126](https://github.com/keepassxreboot/keepassxc/issues/126), [#130](https://github.com/keepassxreboot/keepassxc/issues/130)]
|
||||
- Restructure and improve kdbx-extract utility [#160](https://github.com/keepassxreboot/keepassxc/issues/160)
|
||||
a password on STDIN #54
|
||||
- Add utility script for reading the database password from KWallet #55
|
||||
- Fix some KeePassHTTP settings not being remembered [#34, #65]
|
||||
- Make search box persistent [#15, #67, #157]
|
||||
- Enhance search feature by scoping the search to selected group [#16, #118]
|
||||
- Improve interaction between search field and entry list [#131, #141]
|
||||
- Add stand-alone password-generator [#18, #92]
|
||||
- Don't require password repetition when password is visible [#27, #92]
|
||||
- Add support for entry attributes in autotype sequences #107
|
||||
- Always focus password field when opening the database unlock widget [#116, #117]
|
||||
- Fix compilation errors on various platforms [#53, #126, #130]
|
||||
- Restructure and improve kdbx-extract utility #160
|
||||
|
||||
## 2.0.3 (2016-09-04)
|
||||
|
||||
- Improved error reporting when reading / writing databases fails. [[#450](https://github.com/keepassxreboot/keepassxc/issues/450), [#462](https://github.com/keepassxreboot/keepassxc/issues/462)]
|
||||
- Improved error reporting when reading / writing databases fails. [#450, #462]
|
||||
- Display an error message when opening a custom icon fails.
|
||||
- Detect custom icon format based on contents instead of the filename. [#512](https://github.com/keepassxreboot/keepassxc/issues/512)
|
||||
- Keep symlink intact when saving databases. [#442](https://github.com/keepassxreboot/keepassxc/issues/442).
|
||||
- Fix a crash when deleting parent group of recycle bin. [#520](https://github.com/keepassxreboot/keepassxc/issues/520)
|
||||
- Display a confirm dialog before moving an entry to the recycle bin. [#447](https://github.com/keepassxreboot/keepassxc/issues/447)
|
||||
- Repair UUIDs of inconsistent history items. [#130](https://github.com/keepassxreboot/keepassxc/issues/130)
|
||||
- Detect custom icon format based on contents instead of the filename. #512
|
||||
- Keep symlink intact when saving databases. #442.
|
||||
- Fix a crash when deleting parent group of recycle bin. #520
|
||||
- Display a confirm dialog before moving an entry to the recycle bin. #447
|
||||
- Repair UUIDs of inconsistent history items. #130
|
||||
- Only include top-level windows in auto-type window list when using gnome-shell.
|
||||
- Update translations.
|
||||
|
||||
@ -450,94 +481,94 @@
|
||||
|
||||
## 2.0.1 (2016-01-31)
|
||||
|
||||
- Flush temporary file before opening attachment. [#390](https://github.com/keepassxreboot/keepassxc/issues/390)
|
||||
- Disable password generator when showing entry in history mode. [#422](https://github.com/keepassxreboot/keepassxc/issues/422)
|
||||
- Strip invalid XML chars when writing databases. [#392](https://github.com/keepassxreboot/keepassxc/issues/392)
|
||||
- Add repair function to fix databases with invalid XML chars. [#392](https://github.com/keepassxreboot/keepassxc/issues/392)
|
||||
- Display custom icons scaled. [#322](https://github.com/keepassxreboot/keepassxc/issues/322)
|
||||
- Allow opening databases that have no password and keyfile. [#391](https://github.com/keepassxreboot/keepassxc/issues/391)
|
||||
- Fix crash when importing .kdb files with invalid icon ids. [#425](https://github.com/keepassxreboot/keepassxc/issues/425)
|
||||
- Flush temporary file before opening attachment. #390
|
||||
- Disable password generator when showing entry in history mode. #422
|
||||
- Strip invalid XML chars when writing databases. #392
|
||||
- Add repair function to fix databases with invalid XML chars. #392
|
||||
- Display custom icons scaled. #322
|
||||
- Allow opening databases that have no password and keyfile. #391
|
||||
- Fix crash when importing .kdb files with invalid icon ids. #425
|
||||
- Update translations.
|
||||
|
||||
## 2.0 (2015-12-06)
|
||||
|
||||
- Improve UI of the search edit.
|
||||
- Clear clipboard when locking databases. [#342](https://github.com/keepassxreboot/keepassxc/issues/342)
|
||||
- Enable Ctrl+M shortcut to minimize the window on all platforms. [#329](https://github.com/keepassxreboot/keepassxc/issues/329)
|
||||
- Show a better message when trying to open an old database format. [#338](https://github.com/keepassxreboot/keepassxc/issues/338)
|
||||
- Clear clipboard when locking databases. #342
|
||||
- Enable Ctrl+M shortcut to minimize the window on all platforms. #329
|
||||
- Show a better message when trying to open an old database format. #338
|
||||
- Fix global auto-type behavior with some window managers.
|
||||
- Show global auto-type window on the active desktop. [#359](https://github.com/keepassxreboot/keepassxc/issues/359)
|
||||
- Disable systray on OS X. [#326](https://github.com/keepassxreboot/keepassxc/issues/326)
|
||||
- Restore main window when clicking on the OS X docker icon. [#326](https://github.com/keepassxreboot/keepassxc/issues/326)
|
||||
- Show global auto-type window on the active desktop. #359
|
||||
- Disable systray on OS X. #326
|
||||
- Restore main window when clicking on the OS X docker icon. #326
|
||||
|
||||
## 2.0 Beta 2 (2015-09-06)
|
||||
|
||||
- Fix crash when locking with search UI open [#309](https://github.com/keepassxreboot/keepassxc/issues/309)
|
||||
- Fix file locking on Mac OS X [#327](https://github.com/keepassxreboot/keepassxc/issues/327)
|
||||
- Set default extension when saving a database [[#79](https://github.com/keepassxreboot/keepassxc/issues/79), [#308](https://github.com/keepassxreboot/keepassxc/issues/308)]
|
||||
- Fix crash when locking with search UI open #309
|
||||
- Fix file locking on Mac OS X #327
|
||||
- Set default extension when saving a database [#79, #308]
|
||||
|
||||
## 2.0 Beta 1 (2015-07-18)
|
||||
|
||||
- Remember entry column sizes [#159](https://github.com/keepassxreboot/keepassxc/issues/159)
|
||||
- Remember entry column sizes #159
|
||||
- Add translations
|
||||
- Support opening attachments directly
|
||||
- Support cmd:// URLs [#244](https://github.com/keepassxreboot/keepassxc/issues/244)
|
||||
- Protect opened databases with a file lock [#18](https://github.com/keepassxreboot/keepassxc/issues/18)
|
||||
- Export to csv files [#57](https://github.com/keepassxreboot/keepassxc/issues/57)
|
||||
- Add optional tray icon [#153](https://github.com/keepassxreboot/keepassxc/issues/153)
|
||||
- Allow setting the default auto-type sequence for groups [#175](https://github.com/keepassxreboot/keepassxc/issues/175)
|
||||
- Support cmd:// URLs #244
|
||||
- Protect opened databases with a file lock #18
|
||||
- Export to csv files #57
|
||||
- Add optional tray icon #153
|
||||
- Allow setting the default auto-type sequence for groups #175
|
||||
- Make the kdbx parser more lenient
|
||||
- Remove --password command line option [#285](https://github.com/keepassxreboot/keepassxc/issues/285)
|
||||
- Remove --password command line option #285
|
||||
|
||||
## 2.0 Alpha 6 (2014-04-12)
|
||||
|
||||
- Add option to lock databases after user inactivity [#62](https://github.com/keepassxreboot/keepassxc/issues/62)
|
||||
- Add compatibility with libgcrypt 1.6 [#129](https://github.com/keepassxreboot/keepassxc/issues/129)
|
||||
- Display passwords in monospace font [#51](https://github.com/keepassxreboot/keepassxc/issues/51)
|
||||
- Use an icon for the button that shows/masks passwords [#38](https://github.com/keepassxreboot/keepassxc/issues/38)
|
||||
- Add an option to show passwords by default [#93](https://github.com/keepassxreboot/keepassxc/issues/93)
|
||||
- Improve password generator design [#122](https://github.com/keepassxreboot/keepassxc/issues/122)
|
||||
- Add option to lock databases after user inactivity #62
|
||||
- Add compatibility with libgcrypt 1.6 #129
|
||||
- Display passwords in monospace font #51
|
||||
- Use an icon for the button that shows/masks passwords #38
|
||||
- Add an option to show passwords by default #93
|
||||
- Improve password generator design #122
|
||||
- On Linux link .kdbx files with KeePassX
|
||||
- Remember window size [#154](https://github.com/keepassxreboot/keepassxc/issues/154)
|
||||
- Remember window size #154
|
||||
- Disallow global auto-typing when the database is locked
|
||||
|
||||
## 2.0 Alpha 5 (2013-12-20)
|
||||
|
||||
- Support copying entries and groups using drag'n'drop [#74](https://github.com/keepassxreboot/keepassxc/issues/74)
|
||||
- Open last used databases on startup [#36](https://github.com/keepassxreboot/keepassxc/issues/36)
|
||||
- Support copying entries and groups using drag'n'drop #74
|
||||
- Open last used databases on startup #36
|
||||
- Made the kdbx file parser more robust
|
||||
- Only edit entries on doubleclick (not single) or with enter key
|
||||
- Allow removing multiple entries
|
||||
- Added option to minimize window when copying data to clipboard
|
||||
- Save password generator settings
|
||||
- Fixed auto-type producing wrong chars in some keyboard configurations [#116](https://github.com/keepassxreboot/keepassxc/issues/116)
|
||||
- Fixed auto-type producing wrong chars in some keyboard configurations #116
|
||||
- Added some more actions to the toolbar
|
||||
|
||||
## 2.0 Alpha 4 (2013-03-29)
|
||||
|
||||
- Add random password generator [#52](https://github.com/keepassxreboot/keepassxc/issues/52)
|
||||
- Merge the 'Description' tab into the 'Entry' tab [#59](https://github.com/keepassxreboot/keepassxc/issues/59)
|
||||
- Fix crash when deleting history items [#56](https://github.com/keepassxreboot/keepassxc/issues/56)
|
||||
- Fix crash on Mac OS X Mountain Lion during startup [#50](https://github.com/keepassxreboot/keepassxc/issues/50)
|
||||
- Improved KeePassX application icon [#58](https://github.com/keepassxreboot/keepassxc/issues/58)
|
||||
- Add random password generator #52
|
||||
- Merge the 'Description' tab into the 'Entry' tab #59
|
||||
- Fix crash when deleting history items #56
|
||||
- Fix crash on Mac OS X Mountain Lion during startup #50
|
||||
- Improved KeePassX application icon #58
|
||||
|
||||
## 2.0 Alpha 3 (2012-10-27)
|
||||
|
||||
- Auto-Type on Linux / X11
|
||||
- Database locking
|
||||
- Fix database corruption when changing key transformation rounds [#34](https://github.com/keepassxreboot/keepassxc/issues/34)
|
||||
- Fix database corruption when changing key transformation rounds #34
|
||||
- Verify header data of kdbx files
|
||||
- Add menu entry to open URLs in the browser
|
||||
- Add menu entry to copy an entry attribute to clipboard
|
||||
|
||||
## 2.0 Alpha 2 (2012-07-02)
|
||||
|
||||
- Import kdb (KeePass 1) files [#2](https://github.com/keepassxreboot/keepassxc/issues/2)
|
||||
- Display history items [#23](https://github.com/keepassxreboot/keepassxc/issues/23)
|
||||
- Implement history item limits [#16](https://github.com/keepassxreboot/keepassxc/issues/16)
|
||||
- Group and entry icons can be set [#22](https://github.com/keepassxreboot/keepassxc/issues/22)
|
||||
- Import kdb (KeePass 1) files #2
|
||||
- Display history items #23
|
||||
- Implement history item limits #16
|
||||
- Group and entry icons can be set #22
|
||||
- Add keyboard shortcuts
|
||||
- Search in databases [#24](https://github.com/keepassxreboot/keepassxc/issues/24)
|
||||
- Search in databases #24
|
||||
- Sortable entry view
|
||||
- Support building Mac OS X bundles
|
||||
|
||||
|
@ -94,7 +94,7 @@ endif()
|
||||
|
||||
set(KEEPASSXC_VERSION_MAJOR "2")
|
||||
set(KEEPASSXC_VERSION_MINOR "5")
|
||||
set(KEEPASSXC_VERSION_PATCH "0")
|
||||
set(KEEPASSXC_VERSION_PATCH "1")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
|
||||
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")
|
||||
|
||||
|
156
release-tool
156
release-tool
@ -42,6 +42,8 @@ BUILD_PLUGINS="all"
|
||||
INSTALL_PREFIX="/usr/local"
|
||||
ORIG_BRANCH=""
|
||||
ORIG_CWD="$(pwd)"
|
||||
MACOSX_DEPLOYMENT_TARGET=10.12
|
||||
GREP="grep"
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# helper functions
|
||||
@ -140,7 +142,11 @@ Sign binaries with code signing certificates on Windows and macOS
|
||||
|
||||
Options:
|
||||
-f, --files Files to sign (required)
|
||||
-k, --key Signing Key or Apple Developer ID
|
||||
-k, --key, -i, --identity
|
||||
Signing Key or Apple Developer ID (required)
|
||||
-u, --username Apple username for notarization (required on macOS)
|
||||
-c, --keychain Apple keychain entry name storing the notarization
|
||||
app password (default: 'AC_PASSWORD')
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
elif [ "appimage" == "$cmd" ]; then
|
||||
@ -169,6 +175,10 @@ logInfo() {
|
||||
printf "\e[1m[ \e[34mINFO\e[39m ]\e[0m $1\n"
|
||||
}
|
||||
|
||||
logWarn() {
|
||||
printf "\e[1m[ \e[33mWARNING\e[39m ]\e[0m $1\n"
|
||||
}
|
||||
|
||||
logError() {
|
||||
printf "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1\n" >&2
|
||||
}
|
||||
@ -218,6 +228,16 @@ cmdExists() {
|
||||
command -v "$1" &> /dev/null
|
||||
}
|
||||
|
||||
checkGrepCompat() {
|
||||
if ! grep -qPzo test <(echo test) 2> /dev/null; then
|
||||
if [ -e /usr/local/opt/grep/libexec/gnubin/grep ]; then
|
||||
GREP="/usr/local/opt/grep/libexec/gnubin/grep"
|
||||
else
|
||||
exitError "Incompatible grep implementation! If on macOS, please run 'brew install grep'."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
checkSourceDirExists() {
|
||||
if [ ! -d "$SRC_DIR" ]; then
|
||||
exitError "Source directory '${SRC_DIR}' does not exist!"
|
||||
@ -237,7 +257,7 @@ checkGitRepository() {
|
||||
}
|
||||
|
||||
checkReleaseDoesNotExist() {
|
||||
git tag | grep -q "^$TAG_NAME$"
|
||||
git tag | $GREP -q "^$TAG_NAME$"
|
||||
if [ $? -eq 0 ]; then
|
||||
exitError "Release '$RELEASE_NAME' (tag: '$TAG_NAME') already exists!"
|
||||
fi
|
||||
@ -270,17 +290,17 @@ checkVersionInCMake() {
|
||||
local minor_num="$(echo ${RELEASE_NAME} | cut -f2 -d.)"
|
||||
local patch_num="$(echo ${RELEASE_NAME} | cut -f3 -d. | cut -f1 -d-)"
|
||||
|
||||
grep -q "${app_name_upper}_VERSION_MAJOR \"${major_num}\"" CMakeLists.txt
|
||||
$GREP -q "${app_name_upper}_VERSION_MAJOR \"${major_num}\"" CMakeLists.txt
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "${app_name_upper}_VERSION_MAJOR not updated to '${major_num}' in CMakeLists.txt!"
|
||||
fi
|
||||
|
||||
grep -q "${app_name_upper}_VERSION_MINOR \"${minor_num}\"" CMakeLists.txt
|
||||
$GREP -q "${app_name_upper}_VERSION_MINOR \"${minor_num}\"" CMakeLists.txt
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "${app_name_upper}_VERSION_MINOR not updated to '${minor_num}' in CMakeLists.txt!"
|
||||
fi
|
||||
|
||||
grep -q "${app_name_upper}_VERSION_PATCH \"${patch_num}\"" CMakeLists.txt
|
||||
$GREP -q "${app_name_upper}_VERSION_PATCH \"${patch_num}\"" CMakeLists.txt
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "${app_name_upper}_VERSION_PATCH not updated to '${patch_num}' in CMakeLists.txt!"
|
||||
fi
|
||||
@ -291,7 +311,7 @@ checkChangeLog() {
|
||||
exitError "No CHANGELOG file found!"
|
||||
fi
|
||||
|
||||
grep -qPzo "## ${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n" CHANGELOG.md
|
||||
$GREP -qPzo "## ${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n" CHANGELOG.md
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "'CHANGELOG.md' has not been updated to the '${RELEASE_NAME}' release!"
|
||||
fi
|
||||
@ -302,24 +322,24 @@ checkAppStreamInfo() {
|
||||
exitError "No AppStream info file found!"
|
||||
fi
|
||||
|
||||
grep -qPzo "<release version=\"${RELEASE_NAME}\" date=\"\d{4}-\d{2}-\d{2}\">" share/linux/org.keepassxc.KeePassXC.appdata.xml
|
||||
$GREP -qPzo "<release version=\"${RELEASE_NAME}\" date=\"\d{4}-\d{2}-\d{2}\">" share/linux/org.keepassxc.KeePassXC.appdata.xml
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "'share/linux/org.keepassxc.KeePassXC.appdata.xml' has not been updated to the '${RELEASE_NAME}' release!"
|
||||
fi
|
||||
}
|
||||
|
||||
checkSnapcraft() {
|
||||
if [ ! -f snapcraft.yaml ]; then
|
||||
echo "No snapcraft file found!"
|
||||
if [ ! -f snap/snapcraft.yaml ]; then
|
||||
echo "Could not find snap/snapcraft.yaml!"
|
||||
return
|
||||
fi
|
||||
|
||||
grep -qPzo "version: ${RELEASE_NAME}" snapcraft.yaml
|
||||
$GREP -qPzo "version: ${RELEASE_NAME}" snap/snapcraft.yaml
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "'snapcraft.yaml' has not been updated to the '${RELEASE_NAME}' release!"
|
||||
fi
|
||||
|
||||
grep -qPzo "KEEPASSXC_BUILD_TYPE=Release" snapcraft.yaml
|
||||
$GREP -qPzo "KEEPASSXC_BUILD_TYPE=Release" snap/snapcraft.yaml
|
||||
if [ $? -ne 0 ]; then
|
||||
exitError "'snapcraft.yaml' is not set for a release build!"
|
||||
fi
|
||||
@ -337,14 +357,23 @@ checkSigntoolCommandExists() {
|
||||
fi
|
||||
}
|
||||
|
||||
checkCodesignCommandExists() {
|
||||
if ! cmdExists codesign; then
|
||||
exitError "codesign command not found on the PATH! Please check that you have correctly installed Xcode."
|
||||
checkXcodeSetup() {
|
||||
if ! cmdExists xcrun; then
|
||||
exitError "xcrun command not found on the PATH! Please check that you have correctly installed Xcode."
|
||||
fi
|
||||
if ! xcrun -f codesign > /dev/null 2>&1; then
|
||||
exitError "codesign command not found. You may need to run 'sudo xcode-select -r' to set up Xcode."
|
||||
fi
|
||||
if ! xcrun -f altool > /dev/null 2>&1; then
|
||||
exitError "altool command not found. You may need to run 'sudo xcode-select -r' to set up Xcode."
|
||||
fi
|
||||
if ! xcrun -f stapler > /dev/null 2>&1; then
|
||||
exitError "stapler command not found. You may need to run 'sudo xcode-select -r' to set up Xcode."
|
||||
fi
|
||||
}
|
||||
|
||||
checkQt5LUpdateExists() {
|
||||
if cmdExists lupdate && ! $(lupdate -version | grep -q "lupdate version 5\."); then
|
||||
if cmdExists lupdate && ! $(lupdate -version | $GREP -q "lupdate version 5\."); then
|
||||
if ! cmdExists lupdate-qt5; then
|
||||
exitError "Qt Linguist tool (lupdate-qt5) is not installed! Please install using 'apt install qttools5-dev-tools'"
|
||||
fi
|
||||
@ -354,6 +383,8 @@ checkQt5LUpdateExists() {
|
||||
performChecks() {
|
||||
logInfo "Performing basic checks..."
|
||||
|
||||
checkGrepCompat
|
||||
|
||||
checkSourceDirExists
|
||||
|
||||
logInfo "Changing to source directory..."
|
||||
@ -498,7 +529,7 @@ merge() {
|
||||
fi
|
||||
fi
|
||||
|
||||
CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n\n)\n?(?:.|\n)+?\n(?=## )" CHANGELOG.md \
|
||||
CHANGELOG=$($GREP -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n\n)\n?(?:.|\n)+?\n(?=## )" CHANGELOG.md \
|
||||
| sed 's/^### //' | tr -d \\0)
|
||||
COMMIT_MSG="Release ${RELEASE_NAME}"
|
||||
|
||||
@ -664,14 +695,14 @@ EOF
|
||||
|
||||
# Find .desktop files, icons, and binaries to deploy
|
||||
local desktop_file="$(find "$appdir" -name "org.keepassxc.KeePassXC.desktop" | head -n1)"
|
||||
local icon="$(find "$appdir" -name 'keepassxc.png' | grep -P 'application/256x256/apps/keepassxc.png$' | head -n1)"
|
||||
local executables="$(IFS=$'\n' find "$appdir" | grep -P '/usr/bin/keepassxc[^/]*$' | xargs -i printf " --executable={}")"
|
||||
local icon="$(find "$appdir" -name 'keepassxc.png' | $GREP -P 'application/256x256/apps/keepassxc.png$' | head -n1)"
|
||||
local executables="$(IFS=$'\n' find "$appdir" | $GREP -P '/usr/bin/keepassxc[^/]*$' | xargs -i printf " --executable={}")"
|
||||
|
||||
logInfo "Collecting libs and patching binaries..."
|
||||
if [ "" == "$DOCKER_IMAGE" ]; then
|
||||
"$linuxdeploy" --verbosity=${verbosity} --plugin=qt --appdir="$appdir" --desktop-file="$desktop_file" \
|
||||
--custom-apprun="${out_real}/KeePassXC-AppRun" --icon-file="$icon" ${executables} \
|
||||
--library=$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)
|
||||
--library=$(ldconfig -p | $GREP x86-64 | $GREP -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)
|
||||
else
|
||||
desktop_file="${desktop_file//${appdir}/\/keepassxc\/AppDir}"
|
||||
icon="${icon//${appdir}/\/keepassxc\/AppDir}"
|
||||
@ -829,9 +860,10 @@ build() {
|
||||
RELEASE_NAME="${RELEASE_NAME}-snapshot"
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=Snapshot -DOVERRIDE_VERSION=${RELEASE_NAME}"
|
||||
else
|
||||
checkGrepCompat
|
||||
checkWorkingTreeClean
|
||||
|
||||
if $(echo "$TAG_NAME" | grep -qP "\-(alpha|beta)\\d+\$"); then
|
||||
if $(echo "$TAG_NAME" | $GREP -qP "\-(alpha|beta)\\d+\$"); then
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_BUILD_TYPE=PreRelease"
|
||||
logInfo "Checking out pre-release tag '${TAG_NAME}'..."
|
||||
else
|
||||
@ -864,7 +896,12 @@ build() {
|
||||
rm "${prefix}/.version" "${prefix}/.gitrev"
|
||||
rmdir "${prefix}" 2> /dev/null
|
||||
|
||||
xz -6 "${OUTPUT_DIR}/${tarball_name}"
|
||||
local xz="xz"
|
||||
if ! cmdExists xz; then
|
||||
logWarn "xz not installed. Falling back to bz2..."
|
||||
xz="bzip2"
|
||||
fi
|
||||
$xz -6 "${OUTPUT_DIR}/${tarball_name}"
|
||||
fi
|
||||
|
||||
if ! ${build_snapshot} && [ -e "${OUTPUT_DIR}/build-release" ]; then
|
||||
@ -883,7 +920,7 @@ build() {
|
||||
for p in ${BUILD_PLUGINS}; do
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On"
|
||||
done
|
||||
if [ "$(uname -o)" == "GNU/Linux" ] && ${build_appimage}; then
|
||||
if [ "$(uname -o 2> /dev/null)" == "GNU/Linux" ] && ${build_appimage}; then
|
||||
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_DIST_TYPE=AppImage"
|
||||
# linuxdeploy requires /usr as install prefix
|
||||
INSTALL_PREFIX="/usr"
|
||||
@ -901,7 +938,7 @@ build() {
|
||||
if [ "" == "$DOCKER_IMAGE" ]; then
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
# Building on macOS
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.10
|
||||
export MACOSX_DEPLOYMENT_TARGET
|
||||
|
||||
logInfo "Configuring build..."
|
||||
cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
@ -931,7 +968,7 @@ build() {
|
||||
# Appsign the executables if desired
|
||||
if ${build_appsign} && [ -f "${build_key}" ]; then
|
||||
logInfo "Signing executable files"
|
||||
appsign "-f" $(find src | grep -P '\.exe$|\.dll$') "-k" "${build_key}"
|
||||
appsign "-f" $(find src | $GREP -P '\.exe$|\.dll$') "-k" "${build_key}"
|
||||
fi
|
||||
|
||||
# Call cpack directly instead of calling make package.
|
||||
@ -998,7 +1035,7 @@ build() {
|
||||
logInfo "Build finished, Docker container terminated."
|
||||
fi
|
||||
|
||||
if [ "$(uname -o)" == "GNU/Linux" ] && ${build_appimage}; then
|
||||
if [ "$(uname -o 2> /dev/null)" == "GNU/Linux" ] && ${build_appimage}; then
|
||||
local appsign_flag=""
|
||||
local appsign_key_flag=""
|
||||
local docker_image_flag=""
|
||||
@ -1084,6 +1121,8 @@ gpgsign() {
|
||||
appsign() {
|
||||
local sign_files=()
|
||||
local key
|
||||
local ac_username
|
||||
local ac_keychain="AC_PASSWORD"
|
||||
|
||||
while [ $# -ge 1 ]; do
|
||||
local arg="$1"
|
||||
@ -1098,6 +1137,14 @@ appsign() {
|
||||
key="$2"
|
||||
shift ;;
|
||||
|
||||
-u|--username)
|
||||
ac_username="$2"
|
||||
shift ;;
|
||||
|
||||
-c|--keychain)
|
||||
ac_keychain="$2"
|
||||
shift ;;
|
||||
|
||||
-h|--help)
|
||||
printUsage "appsign"
|
||||
exit ;;
|
||||
@ -1129,9 +1176,15 @@ appsign() {
|
||||
done
|
||||
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
checkCodesignCommandExists
|
||||
if [ "$ac_username" == "" ]; then
|
||||
exitError "Missing arguments, --username is required!"
|
||||
fi
|
||||
|
||||
checkXcodeSetup
|
||||
checkGrepCompat
|
||||
|
||||
local orig_dir="$(pwd)"
|
||||
local real_src_dir="$(realpath "${SRC_DIR}")"
|
||||
for f in "${sign_files[@]}"; do
|
||||
if [[ ${f: -4} == '.dmg' ]]; then
|
||||
logInfo "Unpacking disk image '${f}'..."
|
||||
@ -1147,8 +1200,9 @@ appsign() {
|
||||
exitError "Unpacking failed!"
|
||||
fi
|
||||
|
||||
logInfo "Signing app using codesign..."
|
||||
codesign --sign "${key}" --verbose --deep --entitlements "${SRC_DIR}/share/macosx/keepassxc.entitlements" ./app/KeePassXC.app
|
||||
logInfo "Signing app..."
|
||||
xcrun codesign --sign "${key}" --verbose --deep --entitlements \
|
||||
"${real_src_dir}/share/macosx/keepassxc.entitlements" ./app/KeePassXC.app
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
cd "${orig_dir}"
|
||||
@ -1164,11 +1218,55 @@ appsign() {
|
||||
-fsargs "-c c=64,a=16,e=16" \
|
||||
-format UDBZ \
|
||||
"${tmp_dir}/$(basename "${f}")"
|
||||
|
||||
cd "${orig_dir}"
|
||||
cp -f "${tmp_dir}/$(basename "${f}")" "${f}"
|
||||
rm -Rf ${tmp_dir}
|
||||
|
||||
logInfo "Submitting disk image for notarization..."
|
||||
local status="$(xcrun altool --notarize-app \
|
||||
--primary-bundle-id "org.keepassxc.keepassxc" \
|
||||
--username "${ac_username}" \
|
||||
--password "@keychain:${ac_keychain}" \
|
||||
--file "${f}")"
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
logError "Submission failed!"
|
||||
exitError "Error message:\n${status}"
|
||||
fi
|
||||
|
||||
local ticket="$(echo "${status}" | $GREP -oP "[a-f0-9-]+$")"
|
||||
logInfo "Submission successful. Ticket ID: ${ticket}."
|
||||
|
||||
logInfo "Waiting for notarization to finish (this may take a while)..."
|
||||
while true; do
|
||||
echo -n "."
|
||||
|
||||
status="$(xcrun altool --notarization-info "${ticket}" \
|
||||
--username "${ac_username}" \
|
||||
--password "@keychain:${ac_keychain}")"
|
||||
|
||||
if echo "$status" | $GREP -q "Status Code: 0"; then
|
||||
logInfo "\nNotarization successful."
|
||||
break
|
||||
elif echo "$status" | $GREP -q "Status Code"; then
|
||||
logError "\nNotarization failed!"
|
||||
exitError "Error message:\n${status}"
|
||||
fi
|
||||
|
||||
sleep 5
|
||||
done
|
||||
|
||||
logInfo "Stapling ticket to disk image..."
|
||||
xcrun stapler staple "${f}"
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
exitError "Stapling failed!"
|
||||
fi
|
||||
|
||||
logInfo "Disk image successfully signed and notarized."
|
||||
else
|
||||
logInfo "Skipping non-DMG file '${f}'..."
|
||||
logWarn "Skipping non-DMG file '${f}'..."
|
||||
fi
|
||||
done
|
||||
|
||||
|
@ -50,6 +50,32 @@
|
||||
</screenshots>
|
||||
|
||||
<releases>
|
||||
<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>
|
||||
|
@ -3,20 +3,31 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.application-identifier</key>
|
||||
<string>org.keepassx.keepassxc</string>
|
||||
<key>com.apple.developer.aps-environment</key>
|
||||
<string>production</string>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.print</key>
|
||||
<true/>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<false/>
|
||||
<key>keychain-access-groups</key>
|
||||
<array>
|
||||
<string>org.keepassx.keepassxc</string>
|
||||
</array>
|
||||
<key>com.apple.developer.aps-environment</key>
|
||||
<string>production</string>
|
||||
|
||||
<key>keychain-access-groups</key>
|
||||
<array>
|
||||
<string>org.keepassx.keepassxc</string>
|
||||
</array>
|
||||
|
||||
<!-- Sandbox entitlements stub for future reference.
|
||||
For whatever reason, we have to set this twice.
|
||||
Otherwise a signed application crashes on startup -->
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<false/>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<false/>
|
||||
<!--key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.device.usb</key>
|
||||
<true/>
|
||||
<key>com.apple.security.print</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-only</key>
|
||||
<false/>
|
||||
<false/-->
|
||||
</dict>
|
||||
</plist>
|
||||
</plist>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>هذا الأمر للطباعة التلقائية يحتوي على عبارات مكررة، هل تريد المتابعة؟</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -772,16 +791,6 @@ Please select the correct database for saving credentials.</source>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: طلب مصادقة مفتاح جديد</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>لقد تلقيت طلب ارتباط للمفتاح أعلاه.
|
||||
|
||||
إذا كنت ترغب في السماح له بالوصول إلى قاعدة بيانات KeePassXC ،
|
||||
إعطه اسم فريد لمعرفته وقبوله.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>حفظ والسماح بالوصول</translation>
|
||||
@ -857,6 +866,14 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>لا تُظهر هذا التحذير مرة أخرى</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1121,10 +1138,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1149,11 +1162,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1170,10 +1178,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1189,6 +1193,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1822,6 +1860,10 @@ Are you sure you want to continue without a password?</source>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6240,6 +6282,10 @@ Kernel: %3 %4</source>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Tento příkaz automatického vyplňování obsahuje argumenty, které se velmi často opakují. Opravdu chcete pokračovat?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Jsou zapotřebí oprávnění</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC vyžaduje oprávnění ke Zpřístupnění, aby mohlo být prováděno automatické vyplňování na úrovni položky. Pokud jste toto oprávnění už udělili, může být třeba ještě KeePassXC restartovat.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Zko&pírovat heslo</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Jsou zapotřebí oprávnění</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC vyžaduje oprávnění ke Zpřístupnění a „Nahrávání obrazovky“, aby mohlo být prováděno globální automatické vyplňování. Nahrávání obrazovky je nezbytné pro použití nadpisu okna pro vyhledávání položek v databázi. Pokud jste tato oprávnění už udělili, může být třeba ještě KeePassXC restartovat.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Vyberte databázi, do které chcete přihlašovací údaje uložit.</translation
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Nový požadavek na přiřazení klíče</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Obdrželi jste požadavek na přiřazení výše uvedeného klíče.
|
||||
|
||||
Pokud jím chcete umožnit přístup do KeePassXC databáze,
|
||||
zadejte pro něj neopakující se název pro identifikaci a potvrďte ho.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Uložit a umožnit přístup</translation>
|
||||
@ -863,6 +872,18 @@ Chcete přenést vaše stávající nastavení nyní?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Toto varování znovu nezobrazovat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>Obdrželi jste požadavek na asociaci pro následující databázi:
|
||||
%1
|
||||
|
||||
Dejte spojení neopakující se název nebo identifikátor, například:
|
||||
chrome-laptop.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1149,6 @@ Zvažte vytvoření nového souboru s klíčem.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>Zobraz./nezobrazovat hesla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>Zadejte další přihlašovací údaje:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>Výběr souboru s klíčem</translation>
|
||||
@ -1156,12 +1173,6 @@ Zvažte vytvoření nového souboru s klíčem.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>Hardwarový klíč:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation>1Je možné používat hardwarové bezpečnostní klíče jako například 2YubiKey2 nebo 3OnlyKey3 se sloty nastavenými pro HMAC-SHA1.
|
||||
<p>Klikněte pro další informace…</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>Nápověda k hardwarovému klíči</translation>
|
||||
@ -1178,10 +1189,6 @@ Zvažte vytvoření nového souboru s klíčem.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation>Vyčistit soubor s klíčem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Vybrat soubor…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>Odemknutí se nezdařilo a nebylo zadáno žádné heslo</translation>
|
||||
@ -1200,6 +1207,42 @@ Abyste tomu, aby se tato chyba objevovala, je třeba přejít do „Nastavení d
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Zkusit znovu bez hesla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>Zadejte další přihlašovací údaje (pokud jsou):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Je možné používat hardwarové bezpečnostní klíče jako například <strong>YubiKey</strong> nebo <strong>OnlyKey</strong> se sloty nastavenými pro HMAC-SHA1.</p>
|
||||
<p>Klikněte pro další informace…</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>Krom hlavního hesla je možné použít tajný soubor a vylepšit tak zabezpečení databáze. Takový soubor je možné vytvořit v nastavení zabezpečení databáze.</p><p>Toto <strong>není</strong> *.kdbx databázový soubor!<br>Pokud nemáte soubor s klíčem, ponechte kolonku nevyplněnou.</p><p>Pro více informaci klikněte sem…</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Nápověda k souboru s klíčem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Vyberte soubor s klíčem…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>Soubor s databází není možné použít pro účely souboru s klíčem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>Soubor s databází není možné použít pro účely souboru s klíčem (bude se měnit).
|
||||
Pokud nemáte žádný soubor, který by se zaručeně neměnil (a byl tedy vhodný jako klíč), tuto kolonku nevyplňujte.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1840,6 +1883,10 @@ Opravdu chcete pokračovat bez hesla?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>Průměrná délka hesla je kratší, než deset znaků. Delší hesla poskytují vyšší zabezpečení.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>Čekejte, probíhá výpočet statistik o databázi…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6281,6 +6328,10 @@ Jádro systému: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>Po uplatnění všech možností není vytváření hesel platné</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>Zobrazit chráněné atributy v čitelném textu.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Denne autoskriv-kommando indholder argumenter, som er gentaget ofte. Er du sikker på, at du vil fortsætte?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Kopiér adgangsk&ode</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Venligst vælg den korrekte database for at gemme loginoplysninger.</translation
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Ny nøgleassocieringsanmodelse</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Du har modtaget en associeringsanmodelse for ovenstående nøgle.
|
||||
|
||||
Hvis du vil give den adgang til din KeePassXC-database,
|
||||
så giv den et unikt navn for at kunne identificere og acceptere den.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Gem og tillad adgang</translation>
|
||||
@ -863,6 +872,14 @@ Vil du migrere dine eksisterende indstillinger nu?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Vis ikke denne advarsel igen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1145,6 @@ Overvej at generere en ny nøglefil.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1156,11 +1169,6 @@ Overvej at generere en ny nøglefil.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1177,10 +1185,6 @@ Overvej at generere en ny nøglefil.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1196,6 +1200,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1835,6 +1873,10 @@ Er du sikker på, du vil fortsætte uden en adgangskode?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6267,6 +6309,10 @@ Kerne: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -97,11 +97,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Reset Settings?</source>
|
||||
<translation>Einstellungen zurück setzten?</translation>
|
||||
<translation>Einstellungen zurücksetzen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to reset all general and security settings to default?</source>
|
||||
<translation>Wollen Sie die Einstellungen für Allgemein und Sicherheit auf die Werkseinstellungen zurück stellen?</translation>
|
||||
<translation>Wollen Sie die Einstellungen für Allgemein und Sicherheit auf die Werkseinstellungen zurücksetzen?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -148,7 +148,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically reload the database when modified externally</source>
|
||||
<translation>Datenbank nach externer Änderung automatisch neu laden.</translation>
|
||||
<translation>Datenbank nach externer Änderung automatisch neu laden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry Management</source>
|
||||
@ -294,7 +294,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use monospaced font for Notes</source>
|
||||
<translation>Nutze Monospace-Schriftart für Notizen</translation>
|
||||
<translation>Monospace-Schriftart für Notizen nutzen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language selection</source>
|
||||
@ -302,7 +302,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Reset Settings to Default</source>
|
||||
<translation>Zurück setzen auf Werkseinstellungen</translation>
|
||||
<translation>Zurücksetzen auf Werkseinstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Global auto-type shortcut</source>
|
||||
@ -366,7 +366,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Don't require password repeat when it is visible</source>
|
||||
<translation>Keine erneute Passworteingabe verlangen, wenn das Passwort sichtbar ist.</translation>
|
||||
<translation>Keine erneute Passworteingabe verlangen, wenn das Passwort sichtbar ist</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Don't hide passwords when editing them</source>
|
||||
@ -390,7 +390,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use DuckDuckGo service to download website icons</source>
|
||||
<translation>Nutze DuckDuckGo Service zum Herunterladen der Webseitensymbole</translation>
|
||||
<translation>DuckDuckGo-Service zum Herunterladen der Webseitensymbole nutzen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clipboard clear seconds</source>
|
||||
@ -411,7 +411,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear search query after</source>
|
||||
<translation>Lösche die Suchabfrage danach</translation>
|
||||
<translation>Suchabfrage löschen nach</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Dieses Auto-Type-Kommando enthält Argumente, die sehr häufig wiederholt werden. Möchten Sie wirklich fortfahren?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Berechtigung erforderlich</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC benötigt die Berechtigung für Barrierefreiheit um Auto-Type auf Eintragsebene durchzuführen. Falls die Berechtigung bereits erteilt wurde, muss KeePassXC eventuell neu gestartet werden.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Passwort kopieren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Berechtigung erforderlich</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC benötigt die Berechtigung Barrierefreiheit und Bildschirmaufzeichnung, um den globalen Auto-Type durchzuführen. Die Bildschirmaufzeichnung ist notwendig, um über den Fenstertitel Einträge zu finden. Falls die Berechtigung bereits erteilt wurde, muss KeePassXC eventuell neu gestartet werden.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -640,7 +659,7 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
<message>
|
||||
<source>Never ask before &updating credentials</source>
|
||||
<extracomment>Credentials mean login data requested via browser extension</extracomment>
|
||||
<translation>Niemals fragen, bevor Anmeldedaten a&ktualisiert werden.</translation>
|
||||
<translation>Niemals fragen, bevor Anmeldedaten a&ktualisiert werden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Searc&h in all opened databases for matching credentials</source>
|
||||
@ -653,7 +672,7 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
</message>
|
||||
<message>
|
||||
<source>&Return advanced string fields which start with "KPH: "</source>
|
||||
<translation>Zeige auch erweiterte Attribute, welche mit "KPH: " beginnen</translation>
|
||||
<translation>Auch erweiterte Attribute &zeigen, welche mit "KPH: " beginnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Updates KeePassXC or keepassxc-proxy binary path automatically to native messaging scripts on startup.</source>
|
||||
@ -673,12 +692,12 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
</message>
|
||||
<message>
|
||||
<source>Use a custom proxy location if you installed a proxy manually.</source>
|
||||
<translation>Verwende benutzerdefinierten Proxy-Pfad, falls Proxy manuell installiert wurde.</translation>
|
||||
<translation>Verwenden Sie einen benutzerdefinierten Proxy-Pfad, falls ein Proxy manuell installiert wurde.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use a &custom proxy location</source>
|
||||
<comment>Meant is the proxy for KeePassXC-Browser</comment>
|
||||
<translation>Verwende &benutzerdefinierten Proxy-Pfad</translation>
|
||||
<translation>&Benutzerdefinierten Proxy-Pfad verwenden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse...</source>
|
||||
@ -732,7 +751,7 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
</message>
|
||||
<message>
|
||||
<source>&Allow returning expired credentials.</source>
|
||||
<translation>&Erlaubt die Rückgabe abgelaufener Anmeldeinformationen</translation>
|
||||
<translation>Rückgabe abgelaufener Anmeldedaten &erlauben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable browser integration</source>
|
||||
@ -748,7 +767,7 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
</message>
|
||||
<message>
|
||||
<source>Don't display the popup suggesting migration of legacy KeePassHTTP settings.</source>
|
||||
<translation>Zeige kein Popup, das die Migration von älteren KeePassHTTP-Einstellungen vorschlägt.</translation>
|
||||
<translation>Kein Popup zeigen, das die Migration von älteren KeePassHTTP-Einstellungen vorschlägt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Do not prompt for KeePassHTTP settings migration.</source>
|
||||
@ -756,7 +775,7 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom proxy location field</source>
|
||||
<translation>Benutzerdefiniertes Proxystandortfeld</translation>
|
||||
<translation>Benutzerdefiniertes Proxy-Pfad-Feld</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browser for custom proxy file</source>
|
||||
@ -773,16 +792,6 @@ Bitte wähle die richtige Datenbank zum speichern der Anmeldedaten.</translation
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Neue Schlüsselverbindungsanfrage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Sie haben eine neue Verbindungsanfrage für den obigen Schlüssel.
|
||||
|
||||
Wenn Sie Zugriff auf Ihre KeePassXC-Datenbank zulassen wollen,
|
||||
vergeben Sie bitte einen eindeutigen Namen und akzeptieren diese.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Speichern und Zugriff erlauben</translation>
|
||||
@ -863,6 +872,17 @@ Möchten Sie Ihre bestehenden Einstellungen jetzt migrieren?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Diese Warnungen nicht mehr anzeigen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>Verbindungsanfrage erhalten für folgende Datenbank:
|
||||
%1
|
||||
|
||||
Gebe der Verbindung einen eindeutigen Namen oder ID, zum Beispiel: chrome-laptop</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1127,10 +1147,6 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.</transl
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>Passwort-Sichtbarkeit umschalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>Geben Sie zusätzliche Anmeldeinformationen ein:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>Schlüsseldateiauswahl</translation>
|
||||
@ -1155,12 +1171,6 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.</transl
|
||||
<source>Hardware Key:</source>
|
||||
<translation>Hardwareschlüssel:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Sie können einen Hardwaresicherheitsschlüssel wie <strong>YubiKey</strong> oder <strong>OnlyKey</strong> mit Slots, die für HMAC-SHA1 konfiguriert sind, verwenden.</p>
|
||||
<p>Klicken Sie hier, um weitere Informationen zu erhalten...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>Hilfe zu Hardwareschlüssel</translation>
|
||||
@ -1177,10 +1187,6 @@ Bitte denken Sie darüber nach, eine neue Schlüsseldatei zu generieren.</transl
|
||||
<source>Clear Key File</source>
|
||||
<translation>Schlüsseldatei löschen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Datei auswählen …</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>Entsperren fehlgeschlagen und kein Passwort angegeben</translation>
|
||||
@ -1199,6 +1205,42 @@ Um zu verhindern, dass dieser Fehler auftritt, müssen Sie zu "Datenbankein
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Wiederholen mit leerem Passwort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>Zusätzliche Anmeldedaten eingeben (falls vorhanden):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Sie können einen Hardwaresicherheitsschlüssel wie <strong>yubiKey</strong> oder <strong>OnlyKey</strong> verwenden, dessen Steckplätze für HMAC-SHA1 konfiguriert sind.</p>
|
||||
<p>Klicken Sie hier, um weitere Informationen zu erhalten...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>Zusätzlich zu ihrem Masterpasswort können sie eine geheime Datei verwenden um die Sicherheit ihrer Datenbank zu erhöhen. Eine solche Datei kann in den Sicherheitseinstellung ihrer Datenbank generiert werden.</p> <p>Diese Datei ist jedoch <strong>nicht</strong> Ihre *.kdbx Datei!<br> Wenn sie keine Schlüsseldatei haben lassen sie das Feld leer.</p> <p>Klicken sie hier für weitere Informationen...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Schlüsseldatei-Hilfe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Schlüsseldatei auswählen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>Datenbankdatei kann nicht als Schlüsseldatei verwendet werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>Sie können nicht Ihre Datenbank als Schlüsseldatei verwenden.
|
||||
Wenn Sie keine Schlüsseldatei haben, lassen Sie das Feld bitte leer.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1614,7 +1656,7 @@ Wenn Sie diese Anzahl beibehalten, könnte Ihre Datenbank zu einfach zu knacken
|
||||
</message>
|
||||
<message>
|
||||
<source>Maximum number of history items per entry</source>
|
||||
<translation>Maximale Anzahl von Chronik-Elementen pro Eintrag</translation>
|
||||
<translation>Maximale Anzahl von Verlaufs-Elementen pro Eintrag</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Maximum size of history per entry</source>
|
||||
@ -1753,7 +1795,7 @@ Soll tatsächlich ohne Passwort fortgefahren werden?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Location</source>
|
||||
<translation>Standort</translation>
|
||||
<translation>Speicherort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last saved</source>
|
||||
@ -1793,43 +1835,43 @@ Soll tatsächlich ohne Passwort fortgefahren werden?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unique passwords</source>
|
||||
<translation>Eindeutige Passwörter</translation>
|
||||
<translation>Einzigartige Passwörter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Non-unique passwords</source>
|
||||
<translation>Nicht eindeutige Kennwörter</translation>
|
||||
<translation>Nicht einzigartige Passwörter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>More than 10% of passwords are reused. Use unique passwords when possible.</source>
|
||||
<translation>Mehr als 10 % der Kennwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit eindeutige Kennwörter.</translation>
|
||||
<translation>Mehr als 10 % der Passwörter werden wiederverwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Maximum password reuse</source>
|
||||
<translation>Maximale Wiederverwendung des Kennworts</translation>
|
||||
<translation>Maximale Wiederverwendung eines Passworts</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Some passwords are used more than three times. Use unique passwords when possible.</source>
|
||||
<translation>Einige Kennwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit eindeutige Kennwörter.</translation>
|
||||
<translation>Einige Passwörter werden mehr als dreimal verwendet. Verwenden Sie nach Möglichkeit einzigartige Passwörter.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Number of short passwords</source>
|
||||
<translation>Anzahl der kurzen Kennwörter</translation>
|
||||
<translation>Anzahl der kurzen Passwörter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Recommended minimum password length is at least 8 characters.</source>
|
||||
<translation>Empfohlene minimale Kennwortlänge beträgt mindestens 8 Zeichen.</translation>
|
||||
<translation>Empfohlene minimale Passwortlänge beträgt mindestens 8 Zeichen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Number of weak passwords</source>
|
||||
<translation>Anzahl schwacher Kennwörter</translation>
|
||||
<translation>Anzahl der schwachen Passwörter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Recommend using long, randomized passwords with a rating of 'good' or 'excellent'.</source>
|
||||
<translation>Empfehlen Sie die Verwendung langer, randomisierter Kennwörter mit der Bewertung "gut" oder "hervorragend".</translation>
|
||||
<translation>Die Verwendung langer, randomisierter Passwörter mit der Bewertung "gut" oder "hervorragend" wird empfohlen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Average password length</source>
|
||||
<translation>Durchschnittliche Kennwortlänge</translation>
|
||||
<translation>Durchschnittliche Passwortlänge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 characters</source>
|
||||
@ -1837,7 +1879,11 @@ Soll tatsächlich ohne Passwort fortgefahren werden?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>Die durchschnittliche Kennwortlänge beträgt weniger als zehn Zeichen. Längere Kennwörter bieten mehr Sicherheit.</translation>
|
||||
<translation>Die durchschnittliche Passwortlänge beträgt weniger als zehn Zeichen. Längere Passwörter bieten mehr Sicherheit.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>Bitte warten während die Datenbankstatistiken berechnet werden.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2466,7 +2512,7 @@ Sicheres Speichern deaktivieren und erneut versuchen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete all history</source>
|
||||
<translation>Lösche die gesamte Chronik</translation>
|
||||
<translation>Gesamten Verlauf löschen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4528,7 +4574,7 @@ Da sie Fehler beinhalten könnte, ist diese Version nicht für den Produktiveins
|
||||
</message>
|
||||
<message>
|
||||
<source>&Check for Updates...</source>
|
||||
<translation>&Suche nach Aktualisierungen...</translation>
|
||||
<translation>Nach Aktualisierungen &suchen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Downlo&ad all favicons</source>
|
||||
@ -6277,6 +6323,10 @@ Kernel: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>Ungültiger Passwortgenerator nach Anwendung aller Optionen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>Geschützte Eigenschaften im Klartext anzeigen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
@ -6642,11 +6692,11 @@ Kernel: %3 %4</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Allow KeeShare imports</source>
|
||||
<translation>Erlaube KeeShare-Importe</translation>
|
||||
<translation>KeeShare-Importe erlauben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Allow KeeShare exports</source>
|
||||
<translation>Erlaube KeeShare-Exporte</translation>
|
||||
<translation>KeeShare-Exporte erlauben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Only show warnings and errors</source>
|
||||
|
@ -446,6 +446,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -492,6 +500,17 @@
|
||||
<translation type="unfinished">Copy &password</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -1139,10 +1158,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1167,11 +1182,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1188,10 +1198,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1207,6 +1213,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1864,6 +1904,10 @@ Are you sure you want to continue without a password?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6345,6 +6389,10 @@ Kernel: %3 %4</source>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Please select the correct database for saving credentials.</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: New key association request</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Save and allow access</translation>
|
||||
@ -863,6 +872,14 @@ Would you like to migrate your existing settings now?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Don't show this warning again</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1145,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1156,11 +1169,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1177,10 +1185,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1196,6 +1200,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1835,6 +1873,10 @@ Are you sure you want to continue without a password?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6247,6 +6289,10 @@ Kernel: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Permission Required</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Copy &password</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Permission Required</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -732,7 +751,7 @@ Please select the correct database for saving credentials.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Allow returning expired credentials.</source>
|
||||
<translation>&Allow returning expired credentials.</translation>
|
||||
<translation>&Allow returning expired credentials</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable browser integration</source>
|
||||
@ -773,16 +792,6 @@ Please select the correct database for saving credentials.</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: New key association request</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Save and allow access</translation>
|
||||
@ -863,6 +872,18 @@ Would you like to migrate your existing settings now?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Don't show this warning again</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1129,10 +1150,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>Toggle password visibility</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>Enter Additional Credentials:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>Key file selection</translation>
|
||||
@ -1157,12 +1174,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>Hardware Key:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>Hardware key help</translation>
|
||||
@ -1179,10 +1190,6 @@ Please consider generating a new key file.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation>Clear Key File</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Select file...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>Unlock failed and no password given</translation>
|
||||
@ -1201,6 +1208,42 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Retry with empty password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>Enter Additional Credentials (if any):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Key file help</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Select key file...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>Cannot use database file as key file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1841,6 +1884,10 @@ Are you sure you want to continue without a password?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>Average password length is less than ten characters. Longer passwords provide more security.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>Please wait, database statistics are being calculated...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6280,6 +6327,10 @@ Kernel: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>Invalid password generator after applying all options</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>Show the protected attributes in clear text.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
7071
share/translations/keepassx_et.ts
Normal file
7071
share/translations/keepassx_et.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Tämän automaattisyötön komento sisältää parametreja joita toistetaan usein. Oletko varma, että haluat jatkaa?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Lupa vaaditaan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC:n täytyy saada lupa Käyttöavun kautta automaattisyötön suorittamiseen. Jos olet jo sallinut asetuksen, KeePassXC täytyy mahdollisesti käynnistää uudelleen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Kopioi &salasana</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Lupa vaaditaan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC tarvitsee luvan Käyttöavun kautta Näyttötallennukseen, jotta yleinen automaattisyöttö toimisi oikein. Näyttötallennus on pakollinen ikkunan otsikkotiedon saamiseen. Jos olet jo sallinut asetuksen, KeePassXC täytyy mahdollisesti käynnistää uudelleen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -720,7 +739,7 @@ Valitse oikea tietokanta tietueen tallentamiseksi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2. %3</source>
|
||||
<translation>KeePassXC-Browser tarvitaan selainintegraation toimimista varten.<br />Dataa se seuraaville selaimille: %1 ja %2. %3</translation>
|
||||
<translation>KeePassXC-Browser tarvitaan selainintegraation toimimista varten.<br />Lataa se seuraaville selaimille: %1 ja %2. %3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Brave</source>
|
||||
@ -773,15 +792,6 @@ Valitse oikea tietokanta tietueen tallentamiseksi</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Uusi avaimenliittämispyyntö</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Olet saanut avainlittämispyynnön yllä olevalle avaimelle
|
||||
Jos haluat antaa sille pääsyoikeuden KeePassXC-tietokantaasi,
|
||||
anna tunnisteelle nimi ja hyväksy.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Tallenna ja salli pääsy</translation>
|
||||
@ -861,6 +871,18 @@ Haluat siirtää asetukset nyt?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Älä näytä tätä varoitusta uudelleen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>Olet saanut avainliittämispyynnön seuraavalle tietokannalle:
|
||||
%1
|
||||
|
||||
Anna yhteydelle yksilöllinen nimi tai tunniste, esimerkiksi:
|
||||
chrome-läppäri.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1127,10 +1149,6 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>Vaihda salasanan näkyvyyttä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>Syötä lisätietueita:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>Avaintiedoston valinta</translation>
|
||||
@ -1155,12 +1173,6 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>Laiteavain:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Voit käyttää laiteavainta, kuten <strong>Yubikey:tä</strong> tai <strong>OnlyKey:tä</strong> HMAC-SHA1 configuroidun paikan kanssa.</p>
|
||||
<p>Lisätietoja tästä...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>Laiteavaimen apu</translation>
|
||||
@ -1177,10 +1189,6 @@ Ole hyvä ja harkitse uuden avaintiedoston luomista.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation>Tyhjennä Avaintiedosto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Valitse tiedosto...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>Avaus epäonnistui, eikä salasanaa ole annettu</translation>
|
||||
@ -1199,6 +1207,42 @@ Jos et halua nähdä tätä virhettä uudestaan, mene "Tietokannan asetukse
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Yritä uudelleen tyhjällä salasanalla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>Syötä lisätietueita (mikäli niitä on):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Voit käyttää laiteavainta, kuten <strong>Yubikey:tä</strong> tai <strong>Onlykey:tä</strong> HMAC-SHA1 -asetuksella olevan paikan kanssa.</p>
|
||||
<p>Lisätietoja tästä...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>Pääsalasanan lisäksi voit käyttää salaista tiedostoa tietokantasi tietoturvan vahvistamiseksi. Tämä tiedosto voidaan tarvittaessa luoda tietokantasi turvallisuusasetuksista.</p><p>Tämä salainen tiedosto <strong>ei</strong> ole *.kdbx -tietokantatiedosto!<br>Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</p><p>Lisätietoja tästä...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Avaintiedoston ohje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Valitse avaintiedosto...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>Tietokantaa ei voida käyttää avaintiedostona</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>Et voi käyttää tietokantaasi avaintiedostona.
|
||||
Jos sinulla ei ole avaintiedostoa, jätä kenttä tyhjäksi.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1838,6 +1882,10 @@ Oletko varma, että haluat jatkaa ilman salasanaa?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>Salasanojen keskimääräinen pituus on vähemmän kuin kymmenen merkkiä. Pidemmät salasanat ovat turvallisempia.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>Odota hetki, lasketaan tietokannan statistiikkaa...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6276,6 +6324,10 @@ Ydin: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>Virheellinen salasanageneraattori kaikkien aktiivisten asetusten kanssa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>Näytä suojatut attribuutit selkotekstinä.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Cette commande de saisie automatique contient des arguments répétés très souvent. Voulez-vous vraiment continuer ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Autorisation nécessaire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC nécessite la permission Accessiblité afin de pouvoir effectuer la saisie automatique sur les entrées. SI vous avez déjà donné l'autorisation, vous devriez relancer KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Copier le mot de &passe</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Autorisation nécessaire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC nécessite l'autorisation d'accès Accessibilité et Enregistrement d'écran afin de pouvoir exécuter la saisie automatique globale. L'enregistrement d'écran est requis pour utiliser le titre de fenêtre lors de la recherche des entrées. Si vous avez déjà accordé cette autorisation, vous devriez relancer KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Veuillez sélectionner la base de donnée souhaitée pour enregistrer les identi
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC : nouvelle demande d’association de touche</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Vous avez reçu une demande d’association pour la clé ci-dessus.
|
||||
|
||||
Si vous voulez autoriser cette clé à accéder à votre base de données KeePassXC,
|
||||
attribuez-lui un nom unique pour l’identifier et acceptez-la.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Enregistrer et autoriser l’accès</translation>
|
||||
@ -861,6 +870,18 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Ne plus afficher cet avertissement</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>Vous avez reçu une demande d'association pour la base de données suivante :
|
||||
%1
|
||||
|
||||
Attribuez à cette connexion un nom unique ou un identifiant, par exemple :
|
||||
chrome-laptop</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1126,10 +1147,6 @@ Veuillez envisager de générer un nouveau fichier-clé.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>Basculer l'affichage du mot de passe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>Saisir d'autres identifiants :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>Sélection du fichier-clé</translation>
|
||||
@ -1154,12 +1171,6 @@ Veuillez envisager de générer un nouveau fichier-clé.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>Clés matérielles :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Vous pouvez utiliser une clé de sécurité matérielle comme <strong>YubiKey</strong> ou <strong>OnlyKey</strong> avec des emplacements pour HMAC-SHA1.</p>
|
||||
<p>Cliquez pour plus d'information...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>Aide sur les clés matérielles</translation>
|
||||
@ -1176,10 +1187,6 @@ Veuillez envisager de générer un nouveau fichier-clé.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation>Effacer le fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Sélectionner un fichier...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>Échec du déverrouillage et aucun mot de passe introduit</translation>
|
||||
@ -1198,6 +1205,42 @@ Afin d'éviter cette erreur, vous devez réinitialiser votre mot de passe d
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Essayer à nouveau sans mot de passe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>Saisir d'autres identifiants (si définis) :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Vous pouvez utiliser une clé de sécurité matérielle comme <strong>YubiKey</strong> ou <strong>OnlyKey</strong> avec des emplacements pour HMAC-SHA1.</p>
|
||||
<p>Cliquez pour plus d'information...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>En plus du mot de passe maître, vous pouvez utiliser un fichier secret pour améliorer la sécurité de votre base de données. Un tel fichier peut être généré depuis les paramètres de sécurité de votre base de données.</p><p>Il ne s'agit <strong>pas</strong> de votre fichier de base de données *.kdbx !<br>Si vous n'avez pas de fichier-clé, laissez le champ vide.</p><p>Cliquez ici pour plus d'informations...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Aide fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Sélectionner le fichier-clé...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>Impossible d'utiliser une base de données comme fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>Vous ne pouvez pas utiliser la base de données actuelle comme fichier-clé.
|
||||
Si vous n'avez pas de fichier-clé, laissez le champ vide.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1837,6 +1880,10 @@ Are you sure you want to continue without a password?</source>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>La longueur moyenne des mots de passe est de moins de 10 caractères. Des mots de passe plus longs offrent une meilleure sécurité.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>Veuillez patienter pendant que les statistiques de base de données sont calculées...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6272,6 +6319,10 @@ Noyau : %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>Générateur de mots de passe invalide après l'application de toutes les options</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>Afficher les attributs protégés en clair.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Perintah Ketik-Otomatis ini berisi argumen yang diulang berkali-kali. Apakah Anda benar-benar ingin melanjutkan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Salin &sandi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Silakan pilih basis data yang digunakan untuk menyimpan kredensial.</translation
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Permintaan asosiasi kunci baru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Anda menerima permintaan asosiasi untuk kunci di atas.
|
||||
|
||||
Jika Anda ingin mengizinkannya mengakses basis data KeePassXC Anda,
|
||||
berikan nama yang unik untuk identifikasi dan terimalah.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Simpan dan izinkan akses</translation>
|
||||
@ -863,6 +872,14 @@ Apakah anda ingin memindahkan pengaturan yang ada sekarang?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Jangan tampilkan peringatan ini lagi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -996,7 +1013,7 @@ Apakah anda ingin memindahkan pengaturan yang ada sekarang?</translation>
|
||||
<message>
|
||||
<source>%1, %2, %3</source>
|
||||
<comment>file info: bytes, rows, columns</comment>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1, %2, %3</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n byte(s)</source>
|
||||
@ -1127,10 +1144,6 @@ Harap pertimbangkan membuat berkas kunci baru.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1155,11 +1168,6 @@ Harap pertimbangkan membuat berkas kunci baru.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1176,10 +1184,6 @@ Harap pertimbangkan membuat berkas kunci baru.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1195,6 +1199,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1834,6 +1872,10 @@ Apakah anda tetap ingin melanjutkan tanpa mengatur sandi?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6264,6 +6306,10 @@ Kernel: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Questo comando di auto-completamento contiene argomenti che molto spesso si ripetono. Si desidera veramente procedere?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Permesso richiesto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC richiede il permesso di Accessibilità per effettuare l'Auto-Type di livello base. Se hai già concesso il permesso, riavvia KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Copia &password</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Permesso richiesto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePasssXC richiede il permesso di Accessibilità e di Registrazione Schermo per effettuare l'Auto-Type globale. La registrazione dello schermo è necessaria per usare il titolo della finestra al fine di trovare le voci corrispondenti. Se hai già concesso il permesso, riavvia KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Selezionare il database corretto dove salvare le credenziali</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: nuova richiesta di associazione chiave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Hai ricevuto una richiesta di associazione per la chiave sopra.
|
||||
|
||||
Se vuoi concederle l'autorizzazione per accedere al tuo database di KeePassXC,
|
||||
assegnale un nome univoco e accetta la richiesta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Salva e permetti l'accesso</translation>
|
||||
@ -862,6 +871,18 @@ Si desidera eseguire ora la migrazione delle impostazioni esistenti?</translatio
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Non mostrare nuovamente questo avviso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>Hai ricevuto una richiesta di associazione per il segguente database:
|
||||
%1
|
||||
|
||||
Assegnagli un nome univoco o un ID, per esempio:
|
||||
laptop-chrome</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1149,6 @@ Considera l'opzione di generarne uno nuovo</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>Attiva/disattiva la visibilità della password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>Immettere credenziali aggiuntive:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>Selezione del file di chiave</translation>
|
||||
@ -1156,12 +1173,6 @@ Considera l'opzione di generarne uno nuovo</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>Chiave hardware:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>È possibile utilizzare una chiave di sicurezza hardware, ad esempio <strong>YubiKey</strong> o <strong>OnlyKey</strong> con slot configurati per HMAC-SHA1.</p>
|
||||
<p>Clicca per maggiori informazioni...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>Guida alla chiave hardware</translation>
|
||||
@ -1178,10 +1189,6 @@ Considera l'opzione di generarne uno nuovo</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation>Cancella file di chiave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Seleziona file...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>Sblocco non riuscito e nessuna password specificata</translation>
|
||||
@ -1200,6 +1207,42 @@ Per evitare che questo errore venga visualizzato, è necessario andare alle &quo
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Riprova con password vuota</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>Inserisci credenziali aggiuntive (se presenti):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Puoi usare una chiave di sicurezza hardware come una <strong>YubiKey</strong> o una <strong>OnlyKey</strong> con gli slot configurati per HMAC-SHA1.
|
||||
<p>Clicca per ulteriori informazioni...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>Oltre alla tua password principale, puoi usare un file segreto per aumentare la sicurezza del tuo database. Un file di questo genere può essere generato nelle impostazioni di sicurezza del tuo database.</p><p>Questo <strong>non è</strong> il tuo file database *.kdbx! <br>Se non hai un file chiave, lascia vuoto questo campo.</p> <p>Clicca per ulteriori informazioni...</p> </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Aiuto relativo al file chiave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Seleziona il file chiave...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>Impossibile usare il file database come file chiave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>Non puoi usare il tuo file database come file chiave.
|
||||
Se non possiedi un file chiave, lascia vuoto questo campo.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1840,6 +1883,10 @@ Siete sicuri di voler continuare senza password?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>La lunghezza media della password è inferiore a dieci caratteri. Le password più lunghe offrono maggiore sicurezza.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>Attendere, calcolo statistiche del database...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6279,6 +6326,10 @@ Kernel: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>Generatore di password non valido dopo l'applicazione di tutte le opzioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>Mostra in chiaro gli attributi protetti</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -325,7 +325,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear clipboard after</source>
|
||||
<translation>次の時間が過ぎたらクリップボードを消去する</translation>
|
||||
<translation>指定時間経過後にクリップボードを消去する</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> sec</source>
|
||||
@ -411,7 +411,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear search query after</source>
|
||||
<translation>次の時間が過ぎたら検索クエリを消去する</translation>
|
||||
<translation>指定時間経過後に検索クエリを消去する</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>この自動入力コマンドは何度も繰り返されている引数が含まれています。本当に続行しますか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>許可が必要です</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC がエントリーの自動入力を行うにはアクセス許可が必要です。既に許可してある場合は KeePassXC を再起動する必要があります。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>パスワードをコピー(&P)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>許可が必要です</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC がグローバル自動入力を行うにはアクセス許可と画面記録許可が必要です。ウィンドウタイトルを使用してエントリーを検索するには画面記録許可が必要です。既に許可してある場合は KeePassXC を再起動する必要があります。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Please select the correct database for saving credentials.</source>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: 新しいキーのアソシエーション要求</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>他のアプリケーションからのアソシエーション要求を受け取りました。
|
||||
|
||||
KeePassXC のデータベースへのアクセスを許可したい場合は、
|
||||
要求元を識別して受け入れるためのユニークな名前を付けてください。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>アクセスを許可して保存</translation>
|
||||
@ -863,6 +872,18 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>今後この警告を表示しない</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>次のデータベースのアソシエーション要求を受け取りました:
|
||||
%1
|
||||
|
||||
次のような、接続用の一意な名前または ID を付けてください:
|
||||
chrome-laptop.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1129,10 +1150,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>パスワードの表示/非表示を切り替え</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>追加の資格情報を入力してください:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>キーファイルを選択</translation>
|
||||
@ -1157,12 +1174,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>ハードウェアキー:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>スロットを HMAC-SHA1 用に設定した <strong>YubiKey</strong> や <strong>OnlyKey</strong> をハードウェアセキュリティキーとして使用できます。</p>
|
||||
<p>詳しくはクリックしてください...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>ハードウェアキーのヘルプ</translation>
|
||||
@ -1179,10 +1190,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Clear Key File</source>
|
||||
<translation>キーファイルを消去</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>ファイルを選択...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>パスワードが未指定なためロックの解除に失敗しました</translation>
|
||||
@ -1200,6 +1207,42 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation>空のパスワードで再試行</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>追加の資格情報を入力してください (ある場合のみ):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>スロットを HMAC-SHA1 用に設定した <strong>YubiKey</strong> や <strong>OnlyKey</strong> をハードウェアセキュリティキーとして使用できます。</p>
|
||||
<p>詳しくはクリックしてください...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>マスターパスワードだけでなく、シークレットファイルを使用することでデータベースのセキュリティを強固にすることができます。ファイルはデータベースのセキュリティ設定で生成できます。</p><p>このファイルは *.kdbx データベースファイル<strong>ではない</strong>ものにしてください。<br>キーファイルが無い場合は、フィールドを空のままにしてください。</p><p>詳しくはクリックしてください...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>キーファイルのヘルプ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>キーファイルを選択...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>データベースファイルをキーファイルとして使用することはできません</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>データベースファイルをキーファイルとして使用することはできません。
|
||||
キーファイルが無い場合は、フィールドを空のままにしてください。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1704,7 +1747,7 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Continue without password</source>
|
||||
<translation>パスワードなしで続行</translation>
|
||||
<translation>パスワード無しで続行</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1762,7 +1805,7 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsaved changes</source>
|
||||
<translation>変更の未保存</translation>
|
||||
<translation>未保存の変更</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>yes</source>
|
||||
@ -1840,6 +1883,10 @@ Are you sure you want to continue without a password?</source>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>パスワード長の平均値が10文字以下です。パスワードは長いほどセキュリティが向上します。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>データベースの統計を算出しているため、しばらくお待ちください...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -2411,7 +2458,7 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide this entry from the browser extension</source>
|
||||
<translation>このエントリーをブラウザー拡張機能から非表示にする</translation>
|
||||
<translation>このエントリーをブラウザー拡張機能から隠す</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Additional URL's</source>
|
||||
@ -2814,7 +2861,7 @@ Supported extensions are: %1.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear fields</source>
|
||||
<translation>消去フィールド</translation>
|
||||
<translation>フィールドを消去</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -2968,7 +3015,7 @@ Supported extensions are: %1.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Also apply to all children</source>
|
||||
<translation>全ての子に適用</translation>
|
||||
<translation>全ての子にも適用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Existing icon selected.</source>
|
||||
@ -3210,7 +3257,7 @@ This may cause the affected plugins to malfunction.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Never</source>
|
||||
<translation>常にしない</translation>
|
||||
<translation>なし</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
@ -3313,7 +3360,7 @@ This may cause the affected plugins to malfunction.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Never</source>
|
||||
<translation>常にしない</translation>
|
||||
<translation>なし</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>[PROTECTED]</source>
|
||||
@ -4211,7 +4258,7 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Note: Do not use a file that may change as that will prevent you from unlocking your database!</source>
|
||||
<translation>メモ: 内容が変更される可能性があるファイルを使用すると、データベースのロックを解除できなくなる恐れがあります。</translation>
|
||||
<translation>備考: 内容が変更される可能性があるファイルを使用すると、データベースのロックを解除できなくなる恐れがあります。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid Key File</source>
|
||||
@ -4507,7 +4554,7 @@ KeePassXC の配布ページから AppImage をダウンロードして使用す
|
||||
<message>
|
||||
<source>NOTE: You are using a pre-release version of KeePassXC!
|
||||
Expect some bugs and minor issues, this version is not meant for production use.</source>
|
||||
<translation>メモ: KeePassXC のプレリリース版を使用しています。
|
||||
<translation>備考: KeePassXC のプレリリース版を使用しています。
|
||||
複数のバグや小さな問題点が残っている可能性があるため、このバージョンは実用的ではありません。</translation>
|
||||
</message>
|
||||
<message>
|
||||
@ -4746,15 +4793,15 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
||||
</message>
|
||||
<message>
|
||||
<source>Malformed OpData01 due to a failed HMAC</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>HMAC の失敗による不正な OpData01 です</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to process clearText in place</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>clearText をインプレース処理できません</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expected %1 bytes of clear-text, found %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>期待される clear-text のサイズは %1 バイトですが %2 バイトしかありませんでした</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5984,7 +6031,7 @@ Available commands:
|
||||
</message>
|
||||
<message>
|
||||
<source>Debugging mode is disabled.</source>
|
||||
<translation>デバッグモードが無効です。</translation>
|
||||
<translation>デバッグモードは無効です。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Debugging mode is enabled.</source>
|
||||
@ -6036,7 +6083,7 @@ CPU アーキテクチャー: %2
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot generate a password and prompt at the same time!</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>パスワードの生成とプロンプトの表示は同時使用できません。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Adds a new group to a database.</source>
|
||||
@ -6132,7 +6179,7 @@ CPU アーキテクチャー: %2
|
||||
</message>
|
||||
<message>
|
||||
<source>Display command help.</source>
|
||||
<translation>コマンドヘルプを表示する</translation>
|
||||
<translation>コマンドヘルプを表示する。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Available commands:</source>
|
||||
@ -6272,11 +6319,15 @@ CPU アーキテクチャー: %2
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Password for '%1' has been leaked %2 time(s)!</source>
|
||||
<translation><numerusform>'%1' のパスワードは %2 回流出しました!</numerusform></translation>
|
||||
<translation><numerusform>'%1' のパスワードは %2 回流出しています!</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>全てのオプションを適用したパスワード生成は不正です</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>クリアテキストの保護された属性を表示する。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -6871,7 +6922,7 @@ CPU アーキテクチャー: %2
|
||||
<message>
|
||||
<source>NOTE: These TOTP settings are custom and may not work with other authenticators.</source>
|
||||
<comment>TOTP QR code dialog warning</comment>
|
||||
<translation>メモ: これらの TOTP 設定は他の Authenticator では動作しない可能性があります。</translation>
|
||||
<translation>備考: これらの TOTP 設定は他の Authenticator では動作しない可能性があります。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There was an error creating the QR code.</source>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Kopijuoti sla&ptažodį</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,13 +792,6 @@ Prisijungimo duomenų įrašymui, pasirinkite teisingą duomenų bazę.</transla
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Naujo rakto susiejimo užklausa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Įrašyti ir leisti prieigą</translation>
|
||||
@ -856,6 +868,14 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Daugiau neberodyti šio įspėjimo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1117,10 +1137,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1145,11 +1161,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1166,10 +1177,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1185,6 +1192,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1814,6 +1855,10 @@ Are you sure you want to continue without a password?</source>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6226,6 +6271,10 @@ Branduolys: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Denne autoskriv-kommandoen inneholder argument som gjentas svært hyppig. Vil du virkelig fortsette?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Kopier &passord</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,15 +792,6 @@ Vennligst velg riktig database for å lagre legitimasjon.</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Tilknytningsforespørsel for ny nøkkel.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Du har mottatt en tilknytningsforespørsel for den ovennevnte nøkkelen.
|
||||
|
||||
Gi den et unikt navn dersom du vil gi den tilgang til KeePassXC-databasen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Lagre og tillat aksess</translation>
|
||||
@ -857,6 +867,14 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Ikke vis denne advarselen igjen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1120,10 +1138,6 @@ Vurder å opprette en ny nøkkelfil.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1148,11 +1162,6 @@ Vurder å opprette en ny nøkkelfil.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1169,10 +1178,6 @@ Vurder å opprette en ny nøkkelfil.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1188,6 +1193,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1823,6 +1862,10 @@ Er du sikker på at du vil fortsette uten passord?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6243,6 +6286,10 @@ Kjerne: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Polecenie autowpisywania zawiera argumenty, które powtarzają się bardzo często. Czy chcesz kontynuować?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Wymagane uprawnienie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC wymaga uprawnienia Dostępności w celu wykonania autowpisywania na poziomie podstawowym. Jeśli już udzieliłeś uprawnienia, być może będziesz musiał zrestartować KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Skopiuj &hasło</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>Wymagane uprawnienie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC wymaga uprawnień Dostępności i Rejestratora ekranu w celu wykonania globalnego autowpisywania. Nagrywanie ekranu jest konieczne, aby użyć tytułu okna do odnajdywania wpisów. Jeśli już udzieliłeś uprawnień, być może będziesz musiał zrestartować KeePassXC.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Wybierz właściwą bazę danych do zapisania danych uwierzytelniających.</tran
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Nowe żądanie skojarzenia klucza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Otrzymałeś żądanie skojarzenia powyższego klucza.
|
||||
|
||||
Jeżeli chcesz zezwolić na dostęp do twojej bazy danych KeePassXC,
|
||||
nadaj unikatową nazwę do zidentyfikowania i zaakceptuj.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Zapisz i zezwól na dostęp</translation>
|
||||
@ -863,6 +872,18 @@ Czy chcesz teraz migrować istniejące ustawienia?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Nie wyświetlaj ponownie tego ostrzeżenia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>Otrzymałeś żądanie skojarzenia następującej bazy danych:
|
||||
%1
|
||||
|
||||
Nadaj połączeniu unikatową nazwę lub identyfikator, na przykład:
|
||||
chrome-laptop.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1129,10 +1150,6 @@ Proszę rozważyć wygenerowanie nowego pliku klucza.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>Przełącz widoczność hasła</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>Wprowadź dodatkowe dane uwierzytelniające:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>Wybór pliku klucza</translation>
|
||||
@ -1157,12 +1174,6 @@ Proszę rozważyć wygenerowanie nowego pliku klucza.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>Klucz sprzętowy:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Możesz użyć sprzętowego klucza bezpieczeństwa, takiego jak <strong>YubiKey</strong> albo <strong>OnlyKey</strong> ze slotami skonfigurowanymi dla HMAC-SHA1.</p>
|
||||
<p>Kliknij, aby uzyskać więcej informacji...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>Pomoc klucza sprzętowego</translation>
|
||||
@ -1179,10 +1190,6 @@ Proszę rozważyć wygenerowanie nowego pliku klucza.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation>Wyczyść plik klucza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Wybierz plik...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>Odblokowanie nie powiodło się i nie podano hasła</translation>
|
||||
@ -1201,6 +1208,42 @@ Aby zapobiec pojawianiu się tego błędu, musisz przejść do "Ustawienia
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Spróbuj ponownie z pustym hasłem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>Wprowadź dodatkowe dane uwierzytelniające (jeśli istnieją):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>Możesz użyć sprzętowego klucza bezpieczeństwa, takiego jak <strong>YubiKey</strong> albo <strong>OnlyKey</strong> ze slotami skonfigurowanymi dla HMAC-SHA1.</p>
|
||||
<p>Kliknij, aby uzyskać więcej informacji...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>Oprócz hasła głównego można użyć pliku sekretnego w celu zwiększenia bezpieczeństwa bazy danych. Taki plik można wygenerować w ustawieniach zabezpieczeń bazy danych.</p><p>To <strong>nie</strong> jest plik bazy danych *. kdbx!<br>Jeśli nie masz pliku klucza, pozostaw pole puste.</p><p>Kliknij, aby uzyskać więcej informacji...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Pomoc dotycząca pliku klucza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Wybierz plik klucza...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>Nie można użyć pliku bazy danych jako pliku klucza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>Nie można użyć pliku bazy danych jako pliku klucza.
|
||||
Jeśli nie masz pliku klucza, pozostaw puste pole.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1841,6 +1884,10 @@ Czy na pewno chcesz kontynuować bez hasła?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>Średnia długość hasła wynosi mniej niż dziesięć znaków. Dłuższe hasła zapewniają większe bezpieczeństwo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>Proszę czekać, statystyki bazy danych są obliczane...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6281,6 +6328,10 @@ Jądro: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>Nieprawidłowy generator haseł po zastosowaniu wszystkich opcji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>Pokaż chronione atrybuty w postaci zwykłego tekstu.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>O comando de escrita automática contém argumentos que se repetem muitas vezes. Deseja mesmo continuar?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Copiar &palavra-passe</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Selecione a base de dados correta para guardar as credenciais.</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Pedido de associação de nova chave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Recebeu um pedido de associação para a chave acima indicada.
|
||||
|
||||
Se quiser permitir o acesso à sua base de dados do KeePassXC,
|
||||
introduza um nome identificável e aceite o pedido.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Guardar e permitir acesso</translation>
|
||||
@ -863,6 +872,14 @@ Quer migrar as definições agora?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Não mostrar novamente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1145,6 @@ Deve considerar a geração de uma novo ficheiro-chave.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1156,11 +1169,6 @@ Deve considerar a geração de uma novo ficheiro-chave.</translation>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1177,10 +1185,6 @@ Deve considerar a geração de uma novo ficheiro-chave.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1196,6 +1200,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1835,6 +1873,10 @@ Tem a certeza de que deseja continuar?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6267,6 +6309,10 @@ Kernel: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Această comandă auto-tip conține argumente care se repetă foarte des. Chiar vrei să continuăm?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Copiază &parola</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Selectați baza de date corectă pentru salvarea acreditărilor.</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: noua cerere de asociere cheie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Ați primit o solicitare de asociere pentru cheia de mai sus.
|
||||
|
||||
Dacă doriți să-i permiteți accesul la baza de date KeePassXC,
|
||||
dati un nume unic pentru a identifica și de a accepta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Salvează și permite acces</translation>
|
||||
@ -862,6 +871,14 @@ Migrați acum setările existente?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Nu mai afișa acest avertisment</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1127,10 +1144,6 @@ Vă rugăm să luați în considerare generarea unui nou fișier cheie.</transla
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1155,11 +1168,6 @@ Vă rugăm să luați în considerare generarea unui nou fișier cheie.</transla
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1176,10 +1184,6 @@ Vă rugăm să luați în considerare generarea unui nou fișier cheie.</transla
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1195,6 +1199,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1834,6 +1872,10 @@ Sigur continuați fără parolă?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6267,6 +6309,10 @@ Nucleu (Kernel): %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Det här autoskrivkommandot innehåller parametrar som upprepas många gånger. Vill du verkligen fortsätta?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>Kopiera &lösenord</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Välj rätt databas för att spara inloggningsuppgifterna.</translation>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Ny nyckelassocieringsbegäran</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Du har fått en associationsbegäran för ovanstående nyckel.
|
||||
|
||||
Ge den ett unikt namn för identifikation och acceptera, om du
|
||||
vill tillåta åtkomst till din KeePassXC-databas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Spara och tillåt åtkomst</translation>
|
||||
@ -863,6 +872,14 @@ Vill du migrera dina befintliga inställningar nu?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Visa inte denna varning igen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1145,6 @@ komma att tas bort för i framtiden.
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1156,11 +1169,6 @@ komma att tas bort för i framtiden.
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1177,10 +1185,6 @@ komma att tas bort för i framtiden.
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1196,6 +1200,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1835,6 +1873,10 @@ Vill du verkligen fortsätta utan lösenord?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6263,6 +6305,10 @@ Kärna: %3 %4</translation>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -250,7 +250,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Language:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ภาษา:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(restart program to activate)</source>
|
||||
@ -270,7 +270,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ย่อเล็ก</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Drop to background</source>
|
||||
@ -445,6 +445,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>คำสั่ง Auto-Type นี้มีอาร์กิวเมนต์ซ้ำกันหลายครั้ง ต้องการดำเนินการต่อหรือไม่</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>ต้องการการอนุญาต</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -491,6 +499,17 @@
|
||||
<translation>คัดลอกรหัสผ่าน</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>ต้องการการอนุญาต</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Please select the correct database for saving credentials.</source>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: คำขอกุญแจที่เชื่อมโยงใหม่</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>คุณได้รับคำร้องขอที่เกี่ยวข้องสำหรับกุญแจด้านบน
|
||||
|
||||
ถ้าคุณต้องการอนุญาติมันให้เข้าถึงฐานข้อมูล KeePassXC database,
|
||||
โปรดให้ชื่อเฉพาะเพื่อยืนยันตัวตนและตอบรับมัน.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>บันทึกและอนุญาติให้เข้าถึง</translation>
|
||||
@ -861,6 +870,14 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>ไม่ต้องแสดงคำเตือนนี้อีก</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -989,7 +1006,7 @@ Would you like to migrate your existing settings now?</source>
|
||||
<name>CsvParserModel</name>
|
||||
<message numerus="yes">
|
||||
<source>%n column(s)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
<translation><numerusform>%n คอลัมน์</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1, %2, %3</source>
|
||||
@ -998,11 +1015,11 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n byte(s)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
<translation><numerusform>%n ไบต์</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n row(s)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
<translation><numerusform>%n แถว</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1102,7 +1119,7 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to open key file: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ไม่สามารถเปิดแฟ้มกุญแจได้: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select slot...</source>
|
||||
@ -1110,11 +1127,11 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock KeePassXC Database</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ปลดล็อกฐานข้อมูล KeePassXC</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Password:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ใส่รหัสผ่าน:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password field</source>
|
||||
@ -1124,10 +1141,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1150,12 +1163,7 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>กุญแจฮาร์ดแวร์:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
@ -1173,10 +1181,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1192,6 +1196,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1830,6 +1868,10 @@ Are you sure you want to continue without a password?</source>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6265,6 +6307,10 @@ Kernel: %3 %4</source>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -97,11 +97,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Reset Settings?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ayarları Sıfırla?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to reset all general and security settings to default?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tüm genel ayarları ve güvenlik ayarlarını varsayılan ayarlara getirmek istediğinizden emin misiniz?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -225,15 +225,15 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember previously used databases</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Daha önce kullanılan veritabanlarını hatırla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Load previously open databases on startup</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Başlangıçta önceden açılmış veritabanlarını yükle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember database key files and security dongles</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Veritabanı anahtar dosyalarını ve güvenlik donanımlarını hatırla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for updates at application startup once per week</source>
|
||||
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Bu Oto-Yazım komutu çok sık tekrarlanan argümanlar içerir. Gerçekten devam etmek istiyor musun?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>İzin Gerekli</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>&Parolayı kopyala</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>İzin Gerekli</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -531,11 +550,11 @@ Lütfen erişime izin vermek isteyip istemediğinizi belirtin.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Allow access</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Erişime izin ver</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deny access</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Erişimi reddet</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -773,16 +792,6 @@ Lütfen kimlik bilgilerini kaydetmek için doğru veritabanını seç.</translat
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: Yeni anahtar ilişkilendirme isteği</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Yukarıdaki anahtar için bir ilişkilendirme isteği aldınız.
|
||||
|
||||
Eğer KeePassXC veritabanınıza erişim izni vermek isterseniz,
|
||||
onu tanımlamak için benzersiz bir isim ver ve kabul et.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Kaydet ve erişime izin ver</translation>
|
||||
@ -863,6 +872,14 @@ Mevcut ayarlarınızı şimdi taşımak ister misiniz?</translation>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Bu uyarıyı bir daha gösterme</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1145,6 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün.</translation>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1154,16 +1167,11 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Donanım Anahtarı:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Donanım anahtarı yardım</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TouchID for Quick Unlock</source>
|
||||
@ -1177,10 +1185,6 @@ Lütfen yeni bir anahtar dosyası oluşturmayı düşünün.</translation>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>Dosya seç...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
@ -1196,6 +1200,40 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>Anahtar dosyası yardım</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>Anahtar dosyası seç...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1835,6 +1873,10 @@ Parola olmadan devam etmek istediğinize emin misiniz?</translation>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6267,6 +6309,10 @@ MİB mimarisi: %2
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -97,11 +97,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Reset Settings?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Скинути налаштування?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to reset all general and security settings to default?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ви дійсно бажаєте повністю скинути налаштування і повернутись до стандартних параметрів?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -172,7 +172,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize instead of app exit</source>
|
||||
<translation>Мінімізувати вікно замість закриття</translation>
|
||||
<translation>Згортати вікно замість закриття</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
@ -204,11 +204,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Global Auto-Type shortcut</source>
|
||||
<translation>Глобальні сполучення клавіш для автозаповнення</translation>
|
||||
<translation>Глобальне сполучення клавіш для автозаповнення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type typing delay</source>
|
||||
<translation>Затримка введення символів при автозаповненні</translation>
|
||||
<translation>Затримка введення символів під час автозаповнення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> ms</source>
|
||||
@ -225,63 +225,63 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember previously used databases</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Пам'ятати раніше використані сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Load previously open databases on startup</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Завантажувати попередньо відкриті сховища під час запуску</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember database key files and security dongles</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Пам'ятати файли ключів та апаратні ключі для сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Check for updates at application startup once per week</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Перевіряти наявність оновлень щотижня під час запуску застосунку</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Include beta releases when checking for updates</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Пропонувати бета випуски для оновлення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Button style:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Стиль кнопок:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Мова:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>(restart program to activate)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>(перезапустіть програму, щоб активувати)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize window after unlocking database</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Згортати вікно після розблокування сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize when opening a URL</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Згортати після відкриття URL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide window when copying to clipboard</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ховати вікно після копіювання у кишеню</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Згорнути</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Drop to background</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Пересунути на задній план</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Favicon download timeout:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ліміт часу для завантаження фавікону:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Website icon download timeout in seconds</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ліміт часу в секундах для завантаження значка сайту</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> sec</source>
|
||||
@ -290,31 +290,31 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Toolbar button style</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Стиль кнопки для панелі інструментів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use monospaced font for Notes</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Використовувати моноширинний шрифт для нотаток</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language selection</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибір мови</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Reset Settings to Default</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Скинути нетипове налаштування</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Global auto-type shortcut</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Глобальне сполучення клавіш для автозаповнення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-type character typing delay milliseconds</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Затримка в мілісекундах перед введенням символів під час автозаповнення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-type start delay milliseconds</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Затримка в мілісекундах перед початком автозаповнення</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -390,11 +390,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use DuckDuckGo service to download website icons</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Використовувати сервіс DuckDuckGo для завантаження значків сайтів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clipboard clear seconds</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Очищати кишеню через стільки секунд</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touch ID inactivity reset</source>
|
||||
@ -411,7 +411,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear search query after</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Очищати пошуковий запит через</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>Команда Автозаповнення містить надто часто повторювані параметри. Ви дійсно хочете продовжити?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -483,11 +491,22 @@
|
||||
<name>AutoTypeMatchView</name>
|
||||
<message>
|
||||
<source>Copy &username</source>
|
||||
<translation>Скопі&ювати ім'я користувача</translation>
|
||||
<translation>Скопіювати &ім'я користувача</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy &password</source>
|
||||
<translation>Скопіювати пароль</translation>
|
||||
<translation>Скопіювати &пароль</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -531,11 +550,11 @@ Please select whether you want to allow access.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Allow access</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Дозволити доступ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Deny access</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Заборонити доступ</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -724,47 +743,47 @@ Please select the correct database for saving credentials.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Brave</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>&Brave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Returns expired credentials. String [expired] is added to the title.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Показує знечинені реєстраційні дані. Заголовок міститимить позначку [знечинені].</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Allow returning expired credentials.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Дозволити показ знечинених реєстраційних даних.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable browser integration</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Увімкнути сполучення з переглядачами</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browsers installed as snaps are currently not supported.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Підтримка переглядачів, встановлених через Snap, наразі не втілена.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All databases connected to the extension will return matching credentials.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Збіги з реєстраційними даними будуть знайдені в усіх сполучених сховищах.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Don't display the popup suggesting migration of legacy KeePassHTTP settings.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не показувати вигульк, що рекомендує перетворення налаштування застарілого KeePassHTTP.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>&Do not prompt for KeePassHTTP settings migration.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Не запитувати щодо перетворення налаштування застарілого KeePassHTTP.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Custom proxy location field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле власного розташування посередника</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browser for custom proxy file</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Переглядач для власного файла посередника</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><b>Warning</b>, the keepassxc-proxy application was not found!<br />Please check the KeePassXC installation directory or confirm the custom path in advanced options.<br />Browser integration WILL NOT WORK without the proxy application.<br />Expected Path: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation><b>Попередження:</b> посередницький застосунок для KeePassXC-не знайдено!<br />Будь ласка, перевірте його наявність у теці встановлення KeePassXC або підтвердьте влвсний шлях до нього у розширених параметрах.<br />Сполучення з переглядачами <b>не працюватими</b> без посередницького застосунку.<br />Очікуваний шлях: %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -773,16 +792,6 @@ Please select the correct database for saving credentials.</source>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC: новий запит на прив'язку ключа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>Ви одержали запит на прив'язку вказаного ключа.
|
||||
|
||||
Якщо Ви бажаєте надати доступ до Вашого сховища KeePassXC,
|
||||
вкажіть унікальну назву та схваліть прив'язку.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>Зберегти і дозволити доступ</translation>
|
||||
@ -863,6 +872,14 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>Більше не показувати це попередження</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -973,19 +990,19 @@ Would you like to migrate your existing settings now?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Text qualification</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Обмеження тексту</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Field separation</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Розділювач полів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Number of header lines to discard</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Кількість рядків заголовка, які треба пропустити</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV import preview</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Попередній перегляд імпортованого CSV</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1038,19 +1055,20 @@ Would you like to migrate your existing settings now?</source>
|
||||
<message>
|
||||
<source>%1
|
||||
Backup database located at %2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1
|
||||
Резервне сховище знаходиться в %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not save, database does not point to a valid file.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Збереження неможливе оскільки шлях до сховища не вказує на придатний файл.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not save, database file is read-only.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Збереження неможливе оскільки файл сховища доступний лише для читання.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database file has unmerged changes.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Файл сховища містить необ'єднані зміни.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Recycle Bin</source>
|
||||
@ -1106,43 +1124,39 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to open key file: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Відкриття файла ключа зазнало невдачі: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select slot...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибрати гніздо...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock KeePassXC Database</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Розблокувати сховище KeePassXC</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Password:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Введіть пароль:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Перемкнути видимість пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибір файла ключа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key slot selection</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибір гнізда апаратного захисту</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse for key file</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибрати файл ключа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse...</source>
|
||||
@ -1150,24 +1164,19 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Refresh hardware tokens</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Оновити апаратні позначки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware Key:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Апаратний ключ:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Довідка щодо апаратних ключів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TouchID for Quick Unlock</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>TouchID для швидкого розблокування</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear</source>
|
||||
@ -1175,25 +1184,58 @@ Please consider generating a new key file.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clear Key File</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Очистити файл ключа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Розблокування зазнало невдачі й пароль не надано</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlocking the database failed and you did not enter a password.
|
||||
Do you want to retry with an "empty" password instead?
|
||||
|
||||
To prevent this error from appearing, you must go to "Database Settings / Security" and reset your password.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Розблокування сховища зазнало невдачі і Ви не ввели пароль.
|
||||
Бажаєте спробувати натомість з порожнім паролем?
|
||||
|
||||
Щоб уникати цього повідомлення у майбутньому, Ви мусите вибрати в меню в меню «Налаштування сховища / Безпека» і встановити Ваш пароль.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Retry with empty password</source>
|
||||
<translation>Спробувати знову з порожнім паролем</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
@ -1351,11 +1393,11 @@ This is necessary to maintain compatibility with the browser plugin.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stored browser keys</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Збережені ключі переглядачів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove selected key</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Видалити вибраний ключ</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1501,35 +1543,35 @@ If you keep this number, your database may be too easy to crack!</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change existing decryption time</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Змінити наявний час розшифрування</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Decryption time in seconds</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Час розшифрування в секундах</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database format</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Формат сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Encryption algorithm</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Алгоритм шифрування</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key derivation function</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Функція обчислення ключа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Transform rounds</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Кількість циклів перетворення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Memory usage</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Використана пам'ять</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Parallelism</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Паралельність</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1599,15 +1641,15 @@ If you keep this number, your database may be too easy to crack!</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database name field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле назви сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database description field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле опису сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле типового імені користувача</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Maximum number of history items per entry</source>
|
||||
@ -1615,11 +1657,11 @@ If you keep this number, your database may be too easy to crack!</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Maximum size of history per entry</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Максимальний розмір журналу для запису</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete Recycle Bin</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Видалити смітник</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to delete the current recycle bin and all its contents?
|
||||
@ -1699,7 +1741,7 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Continue without password</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Продовжити без пароля</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -1714,18 +1756,18 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database name field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле назви сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database description field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле опису сховища</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidgetStatistics</name>
|
||||
<message>
|
||||
<source>Statistics</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Статистика</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hover over lines with error icons for further information.</source>
|
||||
@ -1741,11 +1783,11 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database name</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Назва сховища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Description</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Опис</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Location</source>
|
||||
@ -1753,7 +1795,7 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Last saved</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Останнє збереження</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsaved changes</source>
|
||||
@ -1761,11 +1803,11 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>yes</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>так</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>no</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ні</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database was modified, but the changes have not yet been saved to disk.</source>
|
||||
@ -1773,15 +1815,15 @@ Are you sure you want to continue without a password?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Number of groups</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Кількість груп</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Number of entries</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Кількість записів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Number of expired entries</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Кількість знечинених записів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database contains entries that have expired.</source>
|
||||
@ -1835,6 +1877,10 @@ Are you sure you want to continue without a password?</source>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -2520,11 +2566,11 @@ Disable safe saves and try again?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Перемкнути видимість пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle notes visible</source>
|
||||
@ -2796,11 +2842,11 @@ Supported extensions are: %1.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Перемкнути видимість пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle password generator</source>
|
||||
@ -4188,11 +4234,11 @@ Message: %2</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибір файла ключа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse for key file</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибрати файл ключа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse...</source>
|
||||
@ -4921,11 +4967,11 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
||||
</message>
|
||||
<message>
|
||||
<source>Password field</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Поле пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Перемкнути видимість пароля</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat password field</source>
|
||||
@ -5201,7 +5247,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Перемкнути видимість пароля</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5212,7 +5258,7 @@ Expect some bugs and minor issues, this version is not meant for production use.
|
||||
</message>
|
||||
<message>
|
||||
<source>Statistics</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Статистика</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -6268,6 +6314,10 @@ Kernel: %3 %4</source>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
@ -7063,11 +7113,11 @@ Example: JBSWY3DPEHPK3PXP</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Refresh hardware tokens</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Оновити апаратні позначки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key slot selection</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Вибір гнізда апаратного захисту</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
File diff suppressed because it is too large
Load Diff
@ -444,6 +444,14 @@
|
||||
<source>This Auto-Type command contains arguments which are repeated very often. Do you really want to proceed?</source>
|
||||
<translation>此自動輸入命令包含頻繁重複的參數。真的要繼續嗎?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>需要權限</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility permission in order to perform entry level Auto-Type. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC 需要「輔助使用」權限以執行項目層級的自動輸入。若您已授予權限,可能要重新啟動 KeePassXC。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
@ -490,6 +498,17 @@
|
||||
<translation>複製密碼 (&P)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypePlatformMac</name>
|
||||
<message>
|
||||
<source>Permission Required</source>
|
||||
<translation>需要權限</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global Auto-Type. Screen Recording is necessary to use the window title to find entries. If you already granted permission, you may have to restart KeePassXC.</source>
|
||||
<translation>KeePassXC 需要「輔助使用」和「螢幕錄製」權限以執行全域自動輸入。使用視窗標題尋找項目時需要螢幕錄製功能。若您已授予權限,可能要重新啟動 KeePassXC。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
@ -773,16 +792,6 @@ Please select the correct database for saving credentials.</source>
|
||||
<source>KeePassXC: New key association request</source>
|
||||
<translation>KeePassXC:新的金鑰關聯請求</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the above key.
|
||||
|
||||
If you would like to allow it access to your KeePassXC database,
|
||||
give it a unique name to identify and accept it.</source>
|
||||
<translation>你已接收到上述金鑰的關聯請求。
|
||||
|
||||
如果你允許透過此金鑰存取你的 KeePassXC 資料庫,
|
||||
請取一個唯一識別名並按下接受。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save and allow access</source>
|
||||
<translation>儲存並允許存取</translation>
|
||||
@ -863,6 +872,18 @@ Would you like to migrate your existing settings now?</source>
|
||||
<source>Don't show this warning again</source>
|
||||
<translation>不再顯示此警告</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You have received an association request for the following database:
|
||||
%1
|
||||
|
||||
Give the connection a unique name or ID, for example:
|
||||
chrome-laptop.</source>
|
||||
<translation>你已接收到以下資料庫的關聯請求:
|
||||
%1
|
||||
|
||||
請給予連線一個唯一的名稱或 ID,例如:
|
||||
chrome-laptop.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CloneDialog</name>
|
||||
@ -1128,10 +1149,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Toggle password visibility</source>
|
||||
<translation>切換密碼可見性</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials:</source>
|
||||
<translation>輸入額外憑證:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file selection</source>
|
||||
<translation>金鑰檔案選擇</translation>
|
||||
@ -1156,12 +1173,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Hardware Key:</source>
|
||||
<translation>硬體金鑰:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>您可以使用實體安全金鑰如 <strong>YubiKey</strong> 或 <strong>OnlyKey</strong>,並配合以 HMAC-SHA1 設置的插槽。</p>
|
||||
<p>點此以獲得更多資訊...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hardware key help</source>
|
||||
<translation>硬體金鑰幫助</translation>
|
||||
@ -1178,10 +1189,6 @@ Please consider generating a new key file.</source>
|
||||
<source>Clear Key File</source>
|
||||
<translation>清除金鑰檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file...</source>
|
||||
<translation>選擇檔案...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unlock failed and no password given</source>
|
||||
<translation>解鎖失敗,密碼未提供</translation>
|
||||
@ -1200,6 +1207,42 @@ To prevent this error from appearing, you must go to "Database Settings / S
|
||||
<source>Retry with empty password</source>
|
||||
<translation>以空白密碼重試</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter Additional Credentials (if any):</source>
|
||||
<translation>輸入額外憑證(如果有的話):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></source>
|
||||
<translation><p>您可以使用實體安全金鑰如 <strong>YubiKey</strong> 或 <strong>OnlyKey</strong>,並配合以 HMAC-SHA1 設置的插槽。</p>
|
||||
<p>點此以獲得更多資訊...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></source>
|
||||
<translation><p>除了主密碼,您還可以使用一份袐密檔案來加強資料庫的安全性。此檔案可在您資料庫的安全性設定下產生。</p><p>這<strong>並不是</strong>您的 *.kdbx 資料庫檔案!<br>若您沒有金鑰檔案,請將欄位留空。</p><p>點此以獲得更多資訊...</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file help</source>
|
||||
<translation>金鑰檔案幫助</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>?</source>
|
||||
<translation>?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file...</source>
|
||||
<translation>選擇金鑰檔案...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot use database file as key file</source>
|
||||
<translation>無法使用資料庫檔案作為金鑰檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>You cannot use your database file as a key file.
|
||||
If you do not have a key file, please leave the field empty.</source>
|
||||
<translation>您不能使用自己的資料庫作為金鑰檔案。
|
||||
若您沒有金鑰檔案,請將欄位留空。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingWidgetMetaData</name>
|
||||
@ -1840,6 +1883,10 @@ Are you sure you want to continue without a password?</source>
|
||||
<source>Average password length is less than ten characters. Longer passwords provide more security.</source>
|
||||
<translation>平均密碼長度小於 10 個字元。密碼越長,能提供的保護越多。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please wait, database statistics are being calculated...</source>
|
||||
<translation>請稍等,正在計算並統計資料庫數據...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
@ -6276,6 +6323,10 @@ Kernel: %3 %4</source>
|
||||
<source>Invalid password generator after applying all options</source>
|
||||
<translation>套用所有選項的密碼產生器為無效</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show the protected attributes in clear text.</source>
|
||||
<translation>以明文顯示被保護的屬性。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
|
@ -1,5 +1,5 @@
|
||||
name: keepassxc
|
||||
version: 2.5.0
|
||||
version: 2.5.1
|
||||
grade: stable
|
||||
summary: Community-driven port of the Windows application “KeePass Password Safe”
|
||||
description: |
|
||||
|
@ -218,6 +218,15 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c
|
||||
|
||||
if (hideWindow) {
|
||||
#if defined(Q_OS_MACOS)
|
||||
// Check for accessibility permission
|
||||
if (!macUtils()->enableAccessibility()) {
|
||||
MessageBox::information(nullptr,
|
||||
tr("Permission Required"),
|
||||
tr("KeePassXC requires the Accessibility permission in order to perform entry "
|
||||
"level Auto-Type. If you already granted permission, you may have to restart "
|
||||
"KeePassXC."));
|
||||
return;
|
||||
}
|
||||
macUtils()->raiseLastActiveWindow();
|
||||
m_plugin->hideOwnWindow();
|
||||
#else
|
||||
|
@ -17,43 +17,56 @@
|
||||
*/
|
||||
|
||||
#include "AutoTypeMac.h"
|
||||
#include "AutoTypeMacKeyCodes.h"
|
||||
#include "gui/macutils/MacUtils.h"
|
||||
#include "gui/MessageBox.h"
|
||||
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
|
||||
#define HOTKEY_ID 1
|
||||
#define MAX_WINDOW_TITLE_LENGTH 1024
|
||||
#define INVALID_KEYCODE 0xFFFF
|
||||
|
||||
namespace {
|
||||
bool accessibilityChecked = false;
|
||||
}
|
||||
|
||||
AutoTypePlatformMac::AutoTypePlatformMac()
|
||||
: m_globalMonitor(nullptr)
|
||||
: m_hotkeyRef(nullptr)
|
||||
, m_hotkeyId({ 'kpx2', HOTKEY_ID })
|
||||
{
|
||||
EventTypeSpec eventSpec;
|
||||
eventSpec.eventClass = kEventClassKeyboard;
|
||||
eventSpec.eventKind = kEventHotKeyPressed;
|
||||
|
||||
MessageBox::initializeButtonDefs();
|
||||
::InstallApplicationEventHandler(AutoTypePlatformMac::hotkeyHandler, 1, &eventSpec, this, nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Request accessibility permissions required for keyboard control
|
||||
* Determine if Auto-Type is available
|
||||
*
|
||||
* @return true on success
|
||||
* @return always return true
|
||||
*/
|
||||
bool AutoTypePlatformMac::isAvailable()
|
||||
{
|
||||
return macUtils()->enableAccessibility();
|
||||
// Accessibility permissions are requested upon first use, instead of on load
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of the currently open window titles
|
||||
*
|
||||
* @return list of window titles
|
||||
*/
|
||||
//
|
||||
// Get list of visible window titles
|
||||
// see: Quartz Window Services
|
||||
//
|
||||
QStringList AutoTypePlatformMac::windowTitles()
|
||||
{
|
||||
QStringList list;
|
||||
|
||||
auto windowList = ::CGWindowListCopyWindowInfo(
|
||||
kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
|
||||
if (windowList) {
|
||||
auto count = ::CFArrayGetCount(windowList);
|
||||
CFArrayRef windowList = ::CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
|
||||
if (windowList != nullptr) {
|
||||
CFIndex count = ::CFArrayGetCount(windowList);
|
||||
|
||||
for (CFIndex i = 0; i < count; i++) {
|
||||
auto window = static_cast<CFDictionaryRef>(::CFArrayGetValueAtIndex(windowList, i));
|
||||
CFDictionaryRef window = static_cast<CFDictionaryRef>(::CFArrayGetValueAtIndex(windowList, i));
|
||||
if (windowLayer(window) != 0) {
|
||||
continue;
|
||||
}
|
||||
@ -70,28 +83,24 @@ QStringList AutoTypePlatformMac::windowTitles()
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active window ID
|
||||
*
|
||||
* @return window ID
|
||||
*/
|
||||
//
|
||||
// Get active window process id
|
||||
//
|
||||
WId AutoTypePlatformMac::activeWindow()
|
||||
{
|
||||
return macUtils()->activeWindow();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active window title
|
||||
*
|
||||
* @return window title
|
||||
*/
|
||||
//
|
||||
// Get active window title
|
||||
// see: Quartz Window Services
|
||||
//
|
||||
QString AutoTypePlatformMac::activeWindowTitle()
|
||||
{
|
||||
QString title;
|
||||
|
||||
CFArrayRef windowList = ::CGWindowListCopyWindowInfo(
|
||||
kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
|
||||
if (windowList) {
|
||||
CFArrayRef windowList = ::CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
|
||||
if (windowList != nullptr) {
|
||||
CFIndex count = ::CFArrayGetCount(windowList);
|
||||
|
||||
for (CFIndex i = 0; i < count; i++) {
|
||||
@ -111,62 +120,41 @@ QString AutoTypePlatformMac::activeWindowTitle()
|
||||
return title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register global hotkey using NS global event monitor.
|
||||
* Note that this hotkey is not trapped and may trigger
|
||||
* actions in the local application where it is issued.
|
||||
*
|
||||
* @param key key used for hotkey
|
||||
* @param modifiers modifiers required in addition to key
|
||||
* @return true on success
|
||||
*/
|
||||
//
|
||||
// Register global hotkey
|
||||
//
|
||||
bool AutoTypePlatformMac::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
|
||||
{
|
||||
auto nativeKeyCode = qtToNativeKeyCode(key);
|
||||
uint16 nativeKeyCode = qtToNativeKeyCode(key);
|
||||
if (nativeKeyCode == INVALID_KEYCODE) {
|
||||
qWarning("Invalid key code");
|
||||
return false;
|
||||
}
|
||||
auto nativeModifiers = qtToNativeModifiers(modifiers);
|
||||
m_globalMonitor =
|
||||
macUtils()->addGlobalMonitor(nativeKeyCode, nativeModifiers, this, AutoTypePlatformMac::hotkeyHandler);
|
||||
CGEventFlags nativeModifiers = qtToNativeModifiers(modifiers, false);
|
||||
if (::RegisterEventHotKey(nativeKeyCode, nativeModifiers, m_hotkeyId, GetApplicationEventTarget(), 0, &m_hotkeyRef) != noErr) {
|
||||
qWarning("Register hotkey failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle global hotkey presses by emitting the trigger signal
|
||||
*
|
||||
* @param userData pointer to AutoTypePlatform
|
||||
*/
|
||||
void AutoTypePlatformMac::hotkeyHandler(void* userData)
|
||||
{
|
||||
auto* self = static_cast<AutoTypePlatformMac*>(userData);
|
||||
emit self->globalShortcutTriggered();
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister a previously registered global hotkey
|
||||
*
|
||||
* @param key unused
|
||||
* @param modifiers unused
|
||||
*/
|
||||
//
|
||||
// Unregister global hotkey
|
||||
//
|
||||
void AutoTypePlatformMac::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
|
||||
{
|
||||
Q_UNUSED(key);
|
||||
Q_UNUSED(modifiers);
|
||||
if (m_globalMonitor) {
|
||||
macUtils()->removeGlobalMonitor(m_globalMonitor);
|
||||
m_globalMonitor = nullptr;
|
||||
}
|
||||
|
||||
::UnregisterEventHotKey(m_hotkeyRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unused
|
||||
*/
|
||||
int AutoTypePlatformMac::platformEventFilter(void* event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
Q_ASSERT(false);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -175,21 +163,17 @@ AutoTypeExecutor* AutoTypePlatformMac::createExecutor()
|
||||
return new AutoTypeExecutorMac(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Raise the given window ID
|
||||
*
|
||||
* @return true on success
|
||||
*/
|
||||
//
|
||||
// Activate window by process id
|
||||
//
|
||||
bool AutoTypePlatformMac::raiseWindow(WId pid)
|
||||
{
|
||||
return macUtils()->raiseWindow(pid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the KeePassXC window
|
||||
*
|
||||
* @return true on success
|
||||
*/
|
||||
//
|
||||
// Activate last active window
|
||||
//
|
||||
bool AutoTypePlatformMac::hideOwnWindow()
|
||||
{
|
||||
return macUtils()->hideOwnWindow();
|
||||
@ -203,293 +187,324 @@ bool AutoTypePlatformMac::raiseOwnWindow()
|
||||
return macUtils()->raiseOwnWindow();
|
||||
}
|
||||
|
||||
/**
|
||||
* Send provided character as key event to the active window
|
||||
*
|
||||
* @param ch unicode character
|
||||
* @param isKeyDown whether the key is pressed
|
||||
*/
|
||||
//
|
||||
// Send unicode character to active window
|
||||
// see: Quartz Event Services
|
||||
//
|
||||
void AutoTypePlatformMac::sendChar(const QChar& ch, bool isKeyDown)
|
||||
{
|
||||
auto keyEvent = ::CGEventCreateKeyboardEvent(nullptr, 0, isKeyDown);
|
||||
if (keyEvent) {
|
||||
auto unicode = ch.unicode();
|
||||
CGEventRef keyEvent = ::CGEventCreateKeyboardEvent(nullptr, 0, isKeyDown);
|
||||
if (keyEvent != nullptr) {
|
||||
UniChar unicode = ch.unicode();
|
||||
::CGEventKeyboardSetUnicodeString(keyEvent, 1, &unicode);
|
||||
::CGEventPost(kCGSessionEventTap, keyEvent);
|
||||
::CFRelease(keyEvent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send provided Qt key as key event to the active window
|
||||
*
|
||||
* @param key Qt key code
|
||||
* @param isKeyDown whether the key is pressed
|
||||
* @param modifiers any modifiers to apply to key
|
||||
*/
|
||||
void AutoTypePlatformMac::sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers)
|
||||
//
|
||||
// Send key code to active window
|
||||
// see: Quartz Event Services
|
||||
//
|
||||
void AutoTypePlatformMac::sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers = 0)
|
||||
{
|
||||
auto keyCode = qtToNativeKeyCode(key);
|
||||
uint16 keyCode = qtToNativeKeyCode(key);
|
||||
if (keyCode == INVALID_KEYCODE) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto keyEvent = ::CGEventCreateKeyboardEvent(nullptr, keyCode, isKeyDown);
|
||||
auto nativeModifiers = qtToNativeModifiers(modifiers);
|
||||
if (keyEvent) {
|
||||
CGEventRef keyEvent = ::CGEventCreateKeyboardEvent(nullptr, keyCode, isKeyDown);
|
||||
CGEventFlags nativeModifiers = qtToNativeModifiers(modifiers, true);
|
||||
if (keyEvent != nullptr) {
|
||||
::CGEventSetFlags(keyEvent, nativeModifiers);
|
||||
::CGEventPost(kCGSessionEventTap, keyEvent);
|
||||
::CFRelease(keyEvent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate Qt key to macOS key code provided by
|
||||
* AutoTypeMacKeyCodes.h which are derived from
|
||||
* legacy Carbon "HIToolbox/Events.h"
|
||||
*
|
||||
* @param key key to translate
|
||||
* @returns macOS key code
|
||||
*/
|
||||
CGKeyCode AutoTypePlatformMac::qtToNativeKeyCode(Qt::Key key)
|
||||
//
|
||||
// Translate qt key code to mac os key code
|
||||
// see: HIToolbox/Events.h
|
||||
//
|
||||
uint16 AutoTypePlatformMac::qtToNativeKeyCode(Qt::Key key)
|
||||
{
|
||||
switch (key) {
|
||||
case Qt::Key_A:
|
||||
return kVK_ANSI_A;
|
||||
case Qt::Key_B:
|
||||
return kVK_ANSI_B;
|
||||
case Qt::Key_C:
|
||||
return kVK_ANSI_C;
|
||||
case Qt::Key_D:
|
||||
return kVK_ANSI_D;
|
||||
case Qt::Key_E:
|
||||
return kVK_ANSI_E;
|
||||
case Qt::Key_F:
|
||||
return kVK_ANSI_F;
|
||||
case Qt::Key_G:
|
||||
return kVK_ANSI_G;
|
||||
case Qt::Key_H:
|
||||
return kVK_ANSI_H;
|
||||
case Qt::Key_I:
|
||||
return kVK_ANSI_I;
|
||||
case Qt::Key_J:
|
||||
return kVK_ANSI_J;
|
||||
case Qt::Key_K:
|
||||
return kVK_ANSI_K;
|
||||
case Qt::Key_L:
|
||||
return kVK_ANSI_L;
|
||||
case Qt::Key_M:
|
||||
return kVK_ANSI_M;
|
||||
case Qt::Key_N:
|
||||
return kVK_ANSI_N;
|
||||
case Qt::Key_O:
|
||||
return kVK_ANSI_O;
|
||||
case Qt::Key_P:
|
||||
return kVK_ANSI_P;
|
||||
case Qt::Key_Q:
|
||||
return kVK_ANSI_Q;
|
||||
case Qt::Key_R:
|
||||
return kVK_ANSI_R;
|
||||
case Qt::Key_S:
|
||||
return kVK_ANSI_S;
|
||||
case Qt::Key_T:
|
||||
return kVK_ANSI_T;
|
||||
case Qt::Key_U:
|
||||
return kVK_ANSI_U;
|
||||
case Qt::Key_V:
|
||||
return kVK_ANSI_V;
|
||||
case Qt::Key_W:
|
||||
return kVK_ANSI_W;
|
||||
case Qt::Key_X:
|
||||
return kVK_ANSI_X;
|
||||
case Qt::Key_Y:
|
||||
return kVK_ANSI_Y;
|
||||
case Qt::Key_Z:
|
||||
return kVK_ANSI_Z;
|
||||
case Qt::Key_A:
|
||||
return kVK_ANSI_A;
|
||||
case Qt::Key_B:
|
||||
return kVK_ANSI_B;
|
||||
case Qt::Key_C:
|
||||
return kVK_ANSI_C;
|
||||
case Qt::Key_D:
|
||||
return kVK_ANSI_D;
|
||||
case Qt::Key_E:
|
||||
return kVK_ANSI_E;
|
||||
case Qt::Key_F:
|
||||
return kVK_ANSI_F;
|
||||
case Qt::Key_G:
|
||||
return kVK_ANSI_G;
|
||||
case Qt::Key_H:
|
||||
return kVK_ANSI_H;
|
||||
case Qt::Key_I:
|
||||
return kVK_ANSI_I;
|
||||
case Qt::Key_J:
|
||||
return kVK_ANSI_J;
|
||||
case Qt::Key_K:
|
||||
return kVK_ANSI_K;
|
||||
case Qt::Key_L:
|
||||
return kVK_ANSI_L;
|
||||
case Qt::Key_M:
|
||||
return kVK_ANSI_M;
|
||||
case Qt::Key_N:
|
||||
return kVK_ANSI_N;
|
||||
case Qt::Key_O:
|
||||
return kVK_ANSI_O;
|
||||
case Qt::Key_P:
|
||||
return kVK_ANSI_P;
|
||||
case Qt::Key_Q:
|
||||
return kVK_ANSI_Q;
|
||||
case Qt::Key_R:
|
||||
return kVK_ANSI_R;
|
||||
case Qt::Key_S:
|
||||
return kVK_ANSI_S;
|
||||
case Qt::Key_T:
|
||||
return kVK_ANSI_T;
|
||||
case Qt::Key_U:
|
||||
return kVK_ANSI_U;
|
||||
case Qt::Key_V:
|
||||
return kVK_ANSI_V;
|
||||
case Qt::Key_W:
|
||||
return kVK_ANSI_W;
|
||||
case Qt::Key_X:
|
||||
return kVK_ANSI_X;
|
||||
case Qt::Key_Y:
|
||||
return kVK_ANSI_Y;
|
||||
case Qt::Key_Z:
|
||||
return kVK_ANSI_Z;
|
||||
|
||||
case Qt::Key_0:
|
||||
return kVK_ANSI_0;
|
||||
case Qt::Key_1:
|
||||
return kVK_ANSI_1;
|
||||
case Qt::Key_2:
|
||||
return kVK_ANSI_2;
|
||||
case Qt::Key_3:
|
||||
return kVK_ANSI_3;
|
||||
case Qt::Key_4:
|
||||
return kVK_ANSI_4;
|
||||
case Qt::Key_5:
|
||||
return kVK_ANSI_5;
|
||||
case Qt::Key_6:
|
||||
return kVK_ANSI_6;
|
||||
case Qt::Key_7:
|
||||
return kVK_ANSI_7;
|
||||
case Qt::Key_8:
|
||||
return kVK_ANSI_8;
|
||||
case Qt::Key_9:
|
||||
return kVK_ANSI_9;
|
||||
case Qt::Key_0:
|
||||
return kVK_ANSI_0;
|
||||
case Qt::Key_1:
|
||||
return kVK_ANSI_1;
|
||||
case Qt::Key_2:
|
||||
return kVK_ANSI_2;
|
||||
case Qt::Key_3:
|
||||
return kVK_ANSI_3;
|
||||
case Qt::Key_4:
|
||||
return kVK_ANSI_4;
|
||||
case Qt::Key_5:
|
||||
return kVK_ANSI_5;
|
||||
case Qt::Key_6:
|
||||
return kVK_ANSI_6;
|
||||
case Qt::Key_7:
|
||||
return kVK_ANSI_7;
|
||||
case Qt::Key_8:
|
||||
return kVK_ANSI_8;
|
||||
case Qt::Key_9:
|
||||
return kVK_ANSI_9;
|
||||
|
||||
case Qt::Key_Equal:
|
||||
return kVK_ANSI_Equal;
|
||||
case Qt::Key_Minus:
|
||||
return kVK_ANSI_Minus;
|
||||
case Qt::Key_BracketRight:
|
||||
return kVK_ANSI_RightBracket;
|
||||
case Qt::Key_BracketLeft:
|
||||
return kVK_ANSI_LeftBracket;
|
||||
case Qt::Key_QuoteDbl:
|
||||
return kVK_ANSI_Quote;
|
||||
case Qt::Key_Semicolon:
|
||||
return kVK_ANSI_Semicolon;
|
||||
case Qt::Key_Backslash:
|
||||
return kVK_ANSI_Backslash;
|
||||
case Qt::Key_Comma:
|
||||
return kVK_ANSI_Comma;
|
||||
case Qt::Key_Slash:
|
||||
return kVK_ANSI_Slash;
|
||||
case Qt::Key_Period:
|
||||
return kVK_ANSI_Period;
|
||||
case Qt::Key_Equal:
|
||||
return kVK_ANSI_Equal;
|
||||
case Qt::Key_Minus:
|
||||
return kVK_ANSI_Minus;
|
||||
case Qt::Key_BracketRight:
|
||||
return kVK_ANSI_RightBracket;
|
||||
case Qt::Key_BracketLeft:
|
||||
return kVK_ANSI_LeftBracket;
|
||||
case Qt::Key_QuoteDbl:
|
||||
return kVK_ANSI_Quote;
|
||||
case Qt::Key_Semicolon:
|
||||
return kVK_ANSI_Semicolon;
|
||||
case Qt::Key_Backslash:
|
||||
return kVK_ANSI_Backslash;
|
||||
case Qt::Key_Comma:
|
||||
return kVK_ANSI_Comma;
|
||||
case Qt::Key_Slash:
|
||||
return kVK_ANSI_Slash;
|
||||
case Qt::Key_Period:
|
||||
return kVK_ANSI_Period;
|
||||
|
||||
case Qt::Key_Shift:
|
||||
return kVK_Shift;
|
||||
case Qt::Key_Control:
|
||||
return kVK_Command;
|
||||
case Qt::Key_Backspace:
|
||||
return kVK_Delete;
|
||||
case Qt::Key_Tab:
|
||||
case Qt::Key_Backtab:
|
||||
return kVK_Tab;
|
||||
case Qt::Key_Enter:
|
||||
case Qt::Key_Return:
|
||||
return kVK_Return;
|
||||
case Qt::Key_CapsLock:
|
||||
return kVK_CapsLock;
|
||||
case Qt::Key_Escape:
|
||||
return kVK_Escape;
|
||||
case Qt::Key_Space:
|
||||
return kVK_Space;
|
||||
case Qt::Key_PageUp:
|
||||
return kVK_PageUp;
|
||||
case Qt::Key_PageDown:
|
||||
return kVK_PageDown;
|
||||
case Qt::Key_End:
|
||||
return kVK_End;
|
||||
case Qt::Key_Home:
|
||||
return kVK_Home;
|
||||
case Qt::Key_Left:
|
||||
return kVK_LeftArrow;
|
||||
case Qt::Key_Up:
|
||||
return kVK_UpArrow;
|
||||
case Qt::Key_Right:
|
||||
return kVK_RightArrow;
|
||||
case Qt::Key_Down:
|
||||
return kVK_DownArrow;
|
||||
case Qt::Key_Delete:
|
||||
return kVK_ForwardDelete;
|
||||
case Qt::Key_Help:
|
||||
return kVK_Help;
|
||||
case Qt::Key_Shift:
|
||||
return kVK_Shift;
|
||||
case Qt::Key_Control:
|
||||
return kVK_Command;
|
||||
case Qt::Key_Backspace:
|
||||
return kVK_Delete;
|
||||
case Qt::Key_Tab:
|
||||
case Qt::Key_Backtab:
|
||||
return kVK_Tab;
|
||||
case Qt::Key_Enter:
|
||||
case Qt::Key_Return:
|
||||
return kVK_Return;
|
||||
case Qt::Key_CapsLock:
|
||||
return kVK_CapsLock;
|
||||
case Qt::Key_Escape:
|
||||
return kVK_Escape;
|
||||
case Qt::Key_Space:
|
||||
return kVK_Space;
|
||||
case Qt::Key_PageUp:
|
||||
return kVK_PageUp;
|
||||
case Qt::Key_PageDown:
|
||||
return kVK_PageDown;
|
||||
case Qt::Key_End:
|
||||
return kVK_End;
|
||||
case Qt::Key_Home:
|
||||
return kVK_Home;
|
||||
case Qt::Key_Left:
|
||||
return kVK_LeftArrow;
|
||||
case Qt::Key_Up:
|
||||
return kVK_UpArrow;
|
||||
case Qt::Key_Right:
|
||||
return kVK_RightArrow;
|
||||
case Qt::Key_Down:
|
||||
return kVK_DownArrow;
|
||||
case Qt::Key_Delete:
|
||||
return kVK_ForwardDelete;
|
||||
case Qt::Key_Help:
|
||||
return kVK_Help;
|
||||
|
||||
case Qt::Key_F1:
|
||||
return kVK_F1;
|
||||
case Qt::Key_F2:
|
||||
return kVK_F2;
|
||||
case Qt::Key_F3:
|
||||
return kVK_F3;
|
||||
case Qt::Key_F4:
|
||||
return kVK_F4;
|
||||
case Qt::Key_F5:
|
||||
return kVK_F5;
|
||||
case Qt::Key_F6:
|
||||
return kVK_F6;
|
||||
case Qt::Key_F7:
|
||||
return kVK_F7;
|
||||
case Qt::Key_F8:
|
||||
return kVK_F8;
|
||||
case Qt::Key_F9:
|
||||
return kVK_F9;
|
||||
case Qt::Key_F10:
|
||||
return kVK_F10;
|
||||
case Qt::Key_F11:
|
||||
return kVK_F11;
|
||||
case Qt::Key_F12:
|
||||
return kVK_F12;
|
||||
case Qt::Key_F13:
|
||||
return kVK_F13;
|
||||
case Qt::Key_F14:
|
||||
return kVK_F14;
|
||||
case Qt::Key_F15:
|
||||
return kVK_F15;
|
||||
case Qt::Key_F16:
|
||||
return kVK_F16;
|
||||
case Qt::Key_F1:
|
||||
return kVK_F1;
|
||||
case Qt::Key_F2:
|
||||
return kVK_F2;
|
||||
case Qt::Key_F3:
|
||||
return kVK_F3;
|
||||
case Qt::Key_F4:
|
||||
return kVK_F4;
|
||||
case Qt::Key_F5:
|
||||
return kVK_F5;
|
||||
case Qt::Key_F6:
|
||||
return kVK_F6;
|
||||
case Qt::Key_F7:
|
||||
return kVK_F7;
|
||||
case Qt::Key_F8:
|
||||
return kVK_F8;
|
||||
case Qt::Key_F9:
|
||||
return kVK_F9;
|
||||
case Qt::Key_F10:
|
||||
return kVK_F10;
|
||||
case Qt::Key_F11:
|
||||
return kVK_F11;
|
||||
case Qt::Key_F12:
|
||||
return kVK_F12;
|
||||
case Qt::Key_F13:
|
||||
return kVK_F13;
|
||||
case Qt::Key_F14:
|
||||
return kVK_F14;
|
||||
case Qt::Key_F15:
|
||||
return kVK_F15;
|
||||
case Qt::Key_F16:
|
||||
return kVK_F16;
|
||||
|
||||
default:
|
||||
return INVALID_KEYCODE;
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
return INVALID_KEYCODE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate Qt key modifiers to macOS key modifiers
|
||||
* provided by the Core Graphics component
|
||||
*
|
||||
* @param modifiers Qt keyboard modifier(s)
|
||||
* @returns macOS key modifier(s)
|
||||
*/
|
||||
CGEventFlags AutoTypePlatformMac::qtToNativeModifiers(Qt::KeyboardModifiers modifiers)
|
||||
//
|
||||
// Translate qt key modifiers to mac os modifiers
|
||||
// see: https://doc.qt.io/qt-5/osx-issues.html#special-keys
|
||||
//
|
||||
CGEventFlags AutoTypePlatformMac::qtToNativeModifiers(Qt::KeyboardModifiers modifiers, bool native)
|
||||
{
|
||||
auto nativeModifiers = CGEventFlags(0);
|
||||
CGEventFlags nativeModifiers = CGEventFlags(0);
|
||||
|
||||
CGEventFlags shiftMod = CGEventFlags(shiftKey);
|
||||
CGEventFlags cmdMod = CGEventFlags(cmdKey);
|
||||
CGEventFlags optionMod = CGEventFlags(optionKey);
|
||||
CGEventFlags controlMod = CGEventFlags(controlKey);
|
||||
|
||||
if (native) {
|
||||
shiftMod = kCGEventFlagMaskShift;
|
||||
cmdMod = kCGEventFlagMaskCommand;
|
||||
optionMod = kCGEventFlagMaskAlternate;
|
||||
controlMod = kCGEventFlagMaskControl;
|
||||
}
|
||||
|
||||
|
||||
if (modifiers & Qt::ShiftModifier) {
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | kCGEventFlagMaskShift);
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | shiftMod);
|
||||
}
|
||||
if (modifiers & Qt::ControlModifier) {
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | kCGEventFlagMaskCommand);
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | cmdMod);
|
||||
}
|
||||
if (modifiers & Qt::AltModifier) {
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | kCGEventFlagMaskAlternate);
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | optionMod);
|
||||
}
|
||||
if (modifiers & Qt::MetaModifier) {
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | kCGEventFlagMaskControl);
|
||||
nativeModifiers = CGEventFlags(nativeModifiers | controlMod);
|
||||
}
|
||||
|
||||
return nativeModifiers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get window layer / level
|
||||
*
|
||||
* @param window macOS window ref
|
||||
* @returns layer number or -1 if window not found
|
||||
*/
|
||||
//
|
||||
// Get window layer/level
|
||||
//
|
||||
int AutoTypePlatformMac::windowLayer(CFDictionaryRef window)
|
||||
{
|
||||
int layer;
|
||||
|
||||
auto layerRef = static_cast<CFNumberRef>(::CFDictionaryGetValue(window, kCGWindowLayer));
|
||||
if (layerRef && ::CFNumberGetValue(layerRef, kCFNumberIntType, &layer)) {
|
||||
CFNumberRef layerRef = static_cast<CFNumberRef>(::CFDictionaryGetValue(window, kCGWindowLayer));
|
||||
if (layerRef != nullptr
|
||||
&& ::CFNumberGetValue(layerRef, kCFNumberIntType, &layer)) {
|
||||
return layer;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get window title for macOS window ref
|
||||
*
|
||||
* @param window macOS window ref
|
||||
* @returns window title if found
|
||||
*/
|
||||
//
|
||||
// Get window title
|
||||
//
|
||||
QString AutoTypePlatformMac::windowTitle(CFDictionaryRef window)
|
||||
{
|
||||
char buffer[MAX_WINDOW_TITLE_LENGTH];
|
||||
QString title;
|
||||
|
||||
auto titleRef = static_cast<CFStringRef>(::CFDictionaryGetValue(window, kCGWindowName));
|
||||
if (titleRef && ::CFStringGetCString(titleRef, buffer, MAX_WINDOW_TITLE_LENGTH, kCFStringEncodingUTF8)) {
|
||||
CFStringRef titleRef = static_cast<CFStringRef>(::CFDictionaryGetValue(window, kCGWindowName));
|
||||
if (titleRef != nullptr
|
||||
&& ::CFStringGetCString(titleRef, buffer, MAX_WINDOW_TITLE_LENGTH, kCFStringEncodingUTF8)) {
|
||||
title = QString::fromUtf8(buffer);
|
||||
}
|
||||
|
||||
return title;
|
||||
}
|
||||
|
||||
//
|
||||
// Carbon hotkey handler
|
||||
//
|
||||
OSStatus AutoTypePlatformMac::hotkeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData)
|
||||
{
|
||||
Q_UNUSED(nextHandler);
|
||||
|
||||
// Determine if the user has given proper permissions to KeePassXC to perform Auto-Type
|
||||
if (!accessibilityChecked) {
|
||||
if (macUtils()->enableAccessibility() && macUtils()->enableScreenRecording()) {
|
||||
accessibilityChecked = true;
|
||||
} else {
|
||||
// Does not have required permissions to Auto-Type, ignore the keypress
|
||||
MessageBox::information(nullptr,
|
||||
tr("Permission Required"),
|
||||
tr("KeePassXC requires the Accessibility and Screen Recorder permission in order to perform global "
|
||||
"Auto-Type. Screen Recording is necessary to use the window title to find entries. If you "
|
||||
"already granted permission, you may have to restart KeePassXC."));
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
||||
AutoTypePlatformMac* self = static_cast<AutoTypePlatformMac*>(userData);
|
||||
EventHotKeyID hotkeyId;
|
||||
|
||||
if (::GetEventParameter(theEvent, kEventParamDirectObject, typeEventHotKeyID, nullptr, sizeof(hotkeyId), nullptr, &hotkeyId) == noErr
|
||||
&& hotkeyId.id == HOTKEY_ID) {
|
||||
emit self->globalShortcutTriggered();
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
//
|
||||
// ------------------------------ AutoTypeExecutorMac ------------------------------
|
||||
//
|
||||
@ -511,7 +526,7 @@ void AutoTypeExecutorMac::execKey(AutoTypeKey* action)
|
||||
m_platform->sendKey(action->key, false);
|
||||
}
|
||||
|
||||
void AutoTypeExecutorMac::execClearField(AutoTypeClearField* action)
|
||||
void AutoTypeExecutorMac::execClearField(AutoTypeClearField* action = nullptr)
|
||||
{
|
||||
Q_UNUSED(action);
|
||||
|
||||
|
@ -19,12 +19,12 @@
|
||||
#ifndef KEEPASSX_AUTOTYPEMAC_H
|
||||
#define KEEPASSX_AUTOTYPEMAC_H
|
||||
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <QtPlugin>
|
||||
#include <memory>
|
||||
|
||||
#include "autotype/AutoTypeAction.h"
|
||||
#include "autotype/AutoTypePlatformPlugin.h"
|
||||
#include "autotype/AutoTypeAction.h"
|
||||
|
||||
class AutoTypePlatformMac : public QObject, public AutoTypePlatformInterface
|
||||
{
|
||||
@ -48,19 +48,20 @@ public:
|
||||
bool raiseOwnWindow() override;
|
||||
|
||||
void sendChar(const QChar& ch, bool isKeyDown);
|
||||
void sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers = 0);
|
||||
void sendKey(Qt::Key key, bool isKeyDown, Qt::KeyboardModifiers modifiers);
|
||||
|
||||
signals:
|
||||
void globalShortcutTriggered();
|
||||
|
||||
private:
|
||||
static void hotkeyHandler(void* userData);
|
||||
static CGKeyCode qtToNativeKeyCode(Qt::Key key);
|
||||
static CGEventFlags qtToNativeModifiers(Qt::KeyboardModifiers modifiers);
|
||||
EventHotKeyRef m_hotkeyRef;
|
||||
EventHotKeyID m_hotkeyId;
|
||||
|
||||
static uint16 qtToNativeKeyCode(Qt::Key key);
|
||||
static CGEventFlags qtToNativeModifiers(Qt::KeyboardModifiers modifiers, bool native);
|
||||
static int windowLayer(CFDictionaryRef window);
|
||||
static QString windowTitle(CFDictionaryRef window);
|
||||
|
||||
void* m_globalMonitor;
|
||||
static OSStatus hotkeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData);
|
||||
};
|
||||
|
||||
class AutoTypeExecutorMac : public AutoTypeExecutor
|
||||
@ -76,4 +77,4 @@ private:
|
||||
AutoTypePlatformMac* const m_platform;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_AUTOTYPEMAC_H
|
||||
#endif // KEEPASSX_AUTOTYPEMAC_H
|
||||
|
@ -1,160 +0,0 @@
|
||||
//
|
||||
// Taken from HIToolbox/Events.h
|
||||
//
|
||||
|
||||
/*
|
||||
* Summary:
|
||||
* Virtual keycodes
|
||||
*
|
||||
* Discussion:
|
||||
* These constants are the virtual keycodes defined originally in
|
||||
* Inside Mac Volume V, pg. V-191. They identify physical keys on a
|
||||
* keyboard. Those constants with "ANSI" in the name are labeled
|
||||
* according to the key position on an ANSI-standard US keyboard.
|
||||
* For example, kVK_ANSI_A indicates the virtual keycode for the key
|
||||
* with the letter 'A' in the US keyboard layout. Other keyboard
|
||||
* layouts may have the 'A' key label on a different physical key;
|
||||
* in this case, pressing 'A' will generate a different virtual
|
||||
* keycode.
|
||||
*/
|
||||
|
||||
#ifndef KEEPASSXC_AUTOTYPEMAC_KEYCODES_H
|
||||
#define KEEPASSXC_AUTOTYPEMAC_KEYCODES_H
|
||||
|
||||
// clang-format off
|
||||
enum {
|
||||
kVK_ANSI_A = 0x00,
|
||||
kVK_ANSI_S = 0x01,
|
||||
kVK_ANSI_D = 0x02,
|
||||
kVK_ANSI_F = 0x03,
|
||||
kVK_ANSI_H = 0x04,
|
||||
kVK_ANSI_G = 0x05,
|
||||
kVK_ANSI_Z = 0x06,
|
||||
kVK_ANSI_X = 0x07,
|
||||
kVK_ANSI_C = 0x08,
|
||||
kVK_ANSI_V = 0x09,
|
||||
kVK_ANSI_B = 0x0B,
|
||||
kVK_ANSI_Q = 0x0C,
|
||||
kVK_ANSI_W = 0x0D,
|
||||
kVK_ANSI_E = 0x0E,
|
||||
kVK_ANSI_R = 0x0F,
|
||||
kVK_ANSI_Y = 0x10,
|
||||
kVK_ANSI_T = 0x11,
|
||||
kVK_ANSI_1 = 0x12,
|
||||
kVK_ANSI_2 = 0x13,
|
||||
kVK_ANSI_3 = 0x14,
|
||||
kVK_ANSI_4 = 0x15,
|
||||
kVK_ANSI_6 = 0x16,
|
||||
kVK_ANSI_5 = 0x17,
|
||||
kVK_ANSI_Equal = 0x18,
|
||||
kVK_ANSI_9 = 0x19,
|
||||
kVK_ANSI_7 = 0x1A,
|
||||
kVK_ANSI_Minus = 0x1B,
|
||||
kVK_ANSI_8 = 0x1C,
|
||||
kVK_ANSI_0 = 0x1D,
|
||||
kVK_ANSI_RightBracket = 0x1E,
|
||||
kVK_ANSI_O = 0x1F,
|
||||
kVK_ANSI_U = 0x20,
|
||||
kVK_ANSI_LeftBracket = 0x21,
|
||||
kVK_ANSI_I = 0x22,
|
||||
kVK_ANSI_P = 0x23,
|
||||
kVK_ANSI_L = 0x25,
|
||||
kVK_ANSI_J = 0x26,
|
||||
kVK_ANSI_Quote = 0x27,
|
||||
kVK_ANSI_K = 0x28,
|
||||
kVK_ANSI_Semicolon = 0x29,
|
||||
kVK_ANSI_Backslash = 0x2A,
|
||||
kVK_ANSI_Comma = 0x2B,
|
||||
kVK_ANSI_Slash = 0x2C,
|
||||
kVK_ANSI_N = 0x2D,
|
||||
kVK_ANSI_M = 0x2E,
|
||||
kVK_ANSI_Period = 0x2F,
|
||||
kVK_ANSI_Grave = 0x32,
|
||||
kVK_ANSI_KeypadDecimal = 0x41,
|
||||
kVK_ANSI_KeypadMultiply = 0x43,
|
||||
kVK_ANSI_KeypadPlus = 0x45,
|
||||
kVK_ANSI_KeypadClear = 0x47,
|
||||
kVK_ANSI_KeypadDivide = 0x4B,
|
||||
kVK_ANSI_KeypadEnter = 0x4C,
|
||||
kVK_ANSI_KeypadMinus = 0x4E,
|
||||
kVK_ANSI_KeypadEquals = 0x51,
|
||||
kVK_ANSI_Keypad0 = 0x52,
|
||||
kVK_ANSI_Keypad1 = 0x53,
|
||||
kVK_ANSI_Keypad2 = 0x54,
|
||||
kVK_ANSI_Keypad3 = 0x55,
|
||||
kVK_ANSI_Keypad4 = 0x56,
|
||||
kVK_ANSI_Keypad5 = 0x57,
|
||||
kVK_ANSI_Keypad6 = 0x58,
|
||||
kVK_ANSI_Keypad7 = 0x59,
|
||||
kVK_ANSI_Keypad8 = 0x5B,
|
||||
kVK_ANSI_Keypad9 = 0x5C
|
||||
};
|
||||
|
||||
/* keycodes for keys that are independent of keyboard layout*/
|
||||
enum {
|
||||
kVK_Return = 0x24,
|
||||
kVK_Tab = 0x30,
|
||||
kVK_Space = 0x31,
|
||||
kVK_Delete = 0x33,
|
||||
kVK_Escape = 0x35,
|
||||
kVK_Command = 0x37,
|
||||
kVK_Shift = 0x38,
|
||||
kVK_CapsLock = 0x39,
|
||||
kVK_Option = 0x3A,
|
||||
kVK_Control = 0x3B,
|
||||
kVK_RightCommand = 0x36,
|
||||
kVK_RightShift = 0x3C,
|
||||
kVK_RightOption = 0x3D,
|
||||
kVK_RightControl = 0x3E,
|
||||
kVK_Function = 0x3F,
|
||||
kVK_F17 = 0x40,
|
||||
kVK_VolumeUp = 0x48,
|
||||
kVK_VolumeDown = 0x49,
|
||||
kVK_Mute = 0x4A,
|
||||
kVK_F18 = 0x4F,
|
||||
kVK_F19 = 0x50,
|
||||
kVK_F20 = 0x5A,
|
||||
kVK_F5 = 0x60,
|
||||
kVK_F6 = 0x61,
|
||||
kVK_F7 = 0x62,
|
||||
kVK_F3 = 0x63,
|
||||
kVK_F8 = 0x64,
|
||||
kVK_F9 = 0x65,
|
||||
kVK_F11 = 0x67,
|
||||
kVK_F13 = 0x69,
|
||||
kVK_F16 = 0x6A,
|
||||
kVK_F14 = 0x6B,
|
||||
kVK_F10 = 0x6D,
|
||||
kVK_F12 = 0x6F,
|
||||
kVK_F15 = 0x71,
|
||||
kVK_Help = 0x72,
|
||||
kVK_Home = 0x73,
|
||||
kVK_PageUp = 0x74,
|
||||
kVK_ForwardDelete = 0x75,
|
||||
kVK_F4 = 0x76,
|
||||
kVK_End = 0x77,
|
||||
kVK_F2 = 0x78,
|
||||
kVK_PageDown = 0x79,
|
||||
kVK_F1 = 0x7A,
|
||||
kVK_LeftArrow = 0x7B,
|
||||
kVK_RightArrow = 0x7C,
|
||||
kVK_DownArrow = 0x7D,
|
||||
kVK_UpArrow = 0x7E
|
||||
};
|
||||
|
||||
/* ISO keyboards only*/
|
||||
enum {
|
||||
kVK_ISO_Section = 0x0A
|
||||
};
|
||||
|
||||
/* JIS keyboards only*/
|
||||
enum {
|
||||
kVK_JIS_Yen = 0x5D,
|
||||
kVK_JIS_Underscore = 0x5E,
|
||||
kVK_JIS_KeypadComma = 0x5F,
|
||||
kVK_JIS_Eisu = 0x66,
|
||||
kVK_JIS_Kana = 0x68
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
#endif
|
@ -1,7 +1,7 @@
|
||||
set(autotype_mac_SOURCES AutoTypeMac.cpp)
|
||||
|
||||
add_library(keepassx-autotype-cocoa MODULE ${autotype_mac_SOURCES})
|
||||
set_target_properties(keepassx-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit")
|
||||
set_target_properties(keepassx-autotype-cocoa PROPERTIES LINK_FLAGS "-framework Foundation -framework AppKit -framework Carbon")
|
||||
target_link_libraries(keepassx-autotype-cocoa ${PROGNAME} Qt5::Core Qt5::Widgets)
|
||||
|
||||
if(WITH_APP_BUNDLE)
|
||||
|
@ -18,6 +18,7 @@
|
||||
*/
|
||||
|
||||
#include <QCheckBox>
|
||||
#include <QHostAddress>
|
||||
#include <QInputDialog>
|
||||
#include <QJsonArray>
|
||||
#include <QMessageBox>
|
||||
@ -600,17 +601,20 @@ BrowserService::searchEntries(const QSharedPointer<Database>& db, const QString&
|
||||
continue;
|
||||
}
|
||||
|
||||
auto domain = baseDomain(hostname);
|
||||
|
||||
// Search for additional URL's starting with KP2A_URL
|
||||
if (entry->attributes()->keys().contains(ADDITIONAL_URL)) {
|
||||
for (const auto& key : entry->attributes()->keys()) {
|
||||
if (key.startsWith(ADDITIONAL_URL) && handleURL(entry->attributes()->value(key), hostname, url)) {
|
||||
if (key.startsWith(ADDITIONAL_URL)
|
||||
&& handleURL(entry->attributes()->value(key), domain, url)) {
|
||||
entries.append(entry);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!handleURL(entry->url(), hostname, url)) {
|
||||
if (!handleURL(entry->url(), domain, url)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -928,12 +932,15 @@ int BrowserService::sortPriority(const Entry* entry,
|
||||
{
|
||||
QUrl url(entry->url());
|
||||
if (url.scheme().isEmpty()) {
|
||||
url.setScheme("http");
|
||||
url.setScheme("https");
|
||||
}
|
||||
const QString entryURL = url.toString(QUrl::StripTrailingSlash);
|
||||
const QString baseEntryURL =
|
||||
url.toString(QUrl::StripTrailingSlash | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment);
|
||||
|
||||
if (!url.host().contains(".") && url.host() != "localhost") {
|
||||
return 0;
|
||||
}
|
||||
if (submitUrl == entryURL) {
|
||||
return 100;
|
||||
}
|
||||
@ -970,7 +977,7 @@ int BrowserService::sortPriority(const Entry* entry,
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool BrowserService::matchUrlScheme(const QString& url)
|
||||
bool BrowserService::schemeFound(const QString& url)
|
||||
{
|
||||
QUrl address(url);
|
||||
return !address.scheme().isEmpty();
|
||||
@ -995,21 +1002,49 @@ bool BrowserService::removeFirstDomain(QString& hostname)
|
||||
|
||||
bool BrowserService::handleURL(const QString& entryUrl, const QString& hostname, const QString& url)
|
||||
{
|
||||
QUrl entryQUrl(entryUrl);
|
||||
QString entryScheme = entryQUrl.scheme();
|
||||
QUrl qUrl(url);
|
||||
if (entryUrl.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ignore entry if port or scheme defined in the URL doesn't match
|
||||
if ((entryQUrl.port() > 0 && entryQUrl.port() != qUrl.port())
|
||||
|| (browserSettings()->matchUrlScheme() && !entryScheme.isEmpty() && entryScheme.compare(qUrl.scheme()) != 0)) {
|
||||
QUrl entryQUrl;
|
||||
if (entryUrl.contains("://")) {
|
||||
entryQUrl = entryUrl;
|
||||
} else {
|
||||
entryQUrl = QUrl::fromUserInput(entryUrl);
|
||||
|
||||
if (browserSettings()->matchUrlScheme()) {
|
||||
entryQUrl.setScheme("https");
|
||||
}
|
||||
}
|
||||
|
||||
// URL host validation fails
|
||||
if (browserSettings()->matchUrlScheme() && entryQUrl.host().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Match port, if used
|
||||
QUrl qUrl(url);
|
||||
if (entryQUrl.port() > 0 && entryQUrl.port() != qUrl.port()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Match scheme
|
||||
if (browserSettings()->matchUrlScheme() && !entryQUrl.scheme().isEmpty() && entryQUrl.scheme().compare(qUrl.scheme()) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for illegal characters
|
||||
QRegularExpression re("[<>\\^`{|}]");
|
||||
auto match = re.match(entryUrl);
|
||||
if (match.hasMatch()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Filter to match hostname in URL field
|
||||
if ((!entryUrl.isEmpty() && hostname.contains(entryUrl))
|
||||
|| (matchUrlScheme(entryUrl) && hostname.endsWith(entryQUrl.host()))) {
|
||||
if (entryQUrl.host().endsWith(hostname)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
@ -1018,19 +1053,25 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& hostname,
|
||||
*
|
||||
* Returns the base domain, e.g. https://another.example.co.uk -> example.co.uk
|
||||
*/
|
||||
QString BrowserService::baseDomain(const QString& url) const
|
||||
QString BrowserService::baseDomain(const QString& hostname) const
|
||||
{
|
||||
QUrl qurl = QUrl::fromUserInput(url);
|
||||
QString hostname = qurl.host();
|
||||
QUrl qurl = QUrl::fromUserInput(hostname);
|
||||
QString host = qurl.host();
|
||||
|
||||
if (hostname.isEmpty() || !hostname.contains(qurl.topLevelDomain())) {
|
||||
// If the hostname is an IP address, return it directly
|
||||
QHostAddress hostAddress(hostname);
|
||||
if (!hostAddress.isNull()) {
|
||||
return hostname;
|
||||
}
|
||||
|
||||
if (host.isEmpty() || !host.contains(qurl.topLevelDomain())) {
|
||||
return {};
|
||||
}
|
||||
|
||||
// Remove the top level domain part from the hostname, e.g. https://another.example.co.uk -> https://another.example
|
||||
hostname.chop(qurl.topLevelDomain().length());
|
||||
host.chop(qurl.topLevelDomain().length());
|
||||
// Split the URL and select the last part, e.g. https://another.example -> example
|
||||
QString baseDomain = hostname.split('.').last();
|
||||
QString baseDomain = host.split('.').last();
|
||||
// Append the top level domain back to the URL, e.g. example -> example.co.uk
|
||||
baseDomain.append(qurl.topLevelDomain());
|
||||
return baseDomain;
|
||||
@ -1070,7 +1111,7 @@ QSharedPointer<Database> BrowserService::selectedDatabase()
|
||||
if (res == QDialog::Accepted) {
|
||||
const auto selectedDatabase = browserEntrySaveDialog.getSelected();
|
||||
if (selectedDatabase.length() > 0) {
|
||||
int index = selectedDatabase[0]->data(Qt::UserRole).toUInt();
|
||||
int index = selectedDatabase[0]->data(Qt::UserRole).toInt();
|
||||
return databaseWidgets[index]->database();
|
||||
}
|
||||
} else {
|
||||
@ -1188,7 +1229,7 @@ void BrowserService::raiseWindow(const bool force)
|
||||
m_prevWindowState = WindowState::Minimized;
|
||||
}
|
||||
#ifdef Q_OS_MACOS
|
||||
Q_UNUSED(force);
|
||||
Q_UNUSED(force)
|
||||
|
||||
if (macUtils()->isHidden()) {
|
||||
m_prevWindowState = WindowState::Hidden;
|
||||
|
@ -128,10 +128,10 @@ private:
|
||||
Group* getDefaultEntryGroup(const QSharedPointer<Database>& selectedDb = {});
|
||||
int
|
||||
sortPriority(const Entry* entry, const QString& host, const QString& submitUrl, const QString& baseSubmitUrl) const;
|
||||
bool matchUrlScheme(const QString& url);
|
||||
bool schemeFound(const QString& url);
|
||||
bool removeFirstDomain(QString& hostname);
|
||||
bool handleURL(const QString& entryUrl, const QString& hostname, const QString& url);
|
||||
QString baseDomain(const QString& url) const;
|
||||
QString baseDomain(const QString& hostname) const;
|
||||
QSharedPointer<Database> getDatabase();
|
||||
QSharedPointer<Database> selectedDatabase();
|
||||
QJsonArray getChildrenFromGroup(Group* group);
|
||||
|
@ -72,11 +72,7 @@ Database::Database(const QString& filePath)
|
||||
|
||||
Database::~Database()
|
||||
{
|
||||
s_uuidMap.remove(m_uuid);
|
||||
|
||||
if (m_modified) {
|
||||
emit databaseDiscarded();
|
||||
}
|
||||
releaseData();
|
||||
}
|
||||
|
||||
QUuid Database::uuid() const
|
||||
@ -320,7 +316,11 @@ bool Database::writeDatabase(QIODevice* device, QString* error)
|
||||
return false;
|
||||
}
|
||||
|
||||
QByteArray oldTransformedKey = m_data.transformedMasterKey;
|
||||
PasswordKey oldTransformedKey;
|
||||
if (m_data.hasKey) {
|
||||
oldTransformedKey.setHash(m_data.transformedMasterKey->rawKey());
|
||||
}
|
||||
|
||||
KeePass2Writer writer;
|
||||
setEmitModified(false);
|
||||
writer.writeDatabase(device, this);
|
||||
@ -333,9 +333,10 @@ bool Database::writeDatabase(QIODevice* device, QString* error)
|
||||
return false;
|
||||
}
|
||||
|
||||
Q_ASSERT(!m_data.transformedMasterKey.isEmpty());
|
||||
Q_ASSERT(m_data.transformedMasterKey != oldTransformedKey);
|
||||
if (m_data.transformedMasterKey.isEmpty() || m_data.transformedMasterKey == oldTransformedKey) {
|
||||
QByteArray newKey = m_data.transformedMasterKey->rawKey();
|
||||
Q_ASSERT(!newKey.isEmpty());
|
||||
Q_ASSERT(newKey != oldTransformedKey.rawKey());
|
||||
if (newKey.isEmpty() || newKey == oldTransformedKey.rawKey()) {
|
||||
if (error) {
|
||||
*error = tr("Key not transformed. This is a bug, please report it to the developers!");
|
||||
}
|
||||
@ -378,6 +379,43 @@ bool Database::import(const QString& xmlExportPath, QString* error)
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Release all stored group, entry, and meta data of this database.
|
||||
*
|
||||
* Call this method to ensure all data is cleared even if valid
|
||||
* pointers to this Database object are still being held.
|
||||
*
|
||||
* A previously reparented root group will not be freed.
|
||||
*/
|
||||
|
||||
void Database::releaseData()
|
||||
{
|
||||
s_uuidMap.remove(m_uuid);
|
||||
m_uuid = QUuid();
|
||||
|
||||
if (m_modified) {
|
||||
emit databaseDiscarded();
|
||||
}
|
||||
|
||||
m_data.clear();
|
||||
|
||||
if (m_rootGroup && m_rootGroup->parent() == this) {
|
||||
delete m_rootGroup;
|
||||
}
|
||||
if (m_metadata) {
|
||||
delete m_metadata;
|
||||
}
|
||||
if (m_fileWatcher) {
|
||||
delete m_fileWatcher;
|
||||
}
|
||||
|
||||
m_deletedObjects.clear();
|
||||
m_commonUsernames.clear();
|
||||
|
||||
m_initialized = false;
|
||||
m_modified = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the old backup and replace it with a new one
|
||||
* backups are named <filename>.old.<extension>
|
||||
@ -598,19 +636,24 @@ Database::CompressionAlgorithm Database::compressionAlgorithm() const
|
||||
|
||||
QByteArray Database::transformedMasterKey() const
|
||||
{
|
||||
return m_data.transformedMasterKey;
|
||||
return m_data.transformedMasterKey->rawKey();
|
||||
}
|
||||
|
||||
QByteArray Database::challengeResponseKey() const
|
||||
{
|
||||
return m_data.challengeResponseKey;
|
||||
return m_data.challengeResponseKey->rawKey();
|
||||
}
|
||||
|
||||
bool Database::challengeMasterSeed(const QByteArray& masterSeed)
|
||||
{
|
||||
if (m_data.key) {
|
||||
m_data.masterSeed = masterSeed;
|
||||
return m_data.key->challenge(masterSeed, m_data.challengeResponseKey);
|
||||
m_data.masterSeed->setHash(masterSeed);
|
||||
QByteArray response;
|
||||
bool ok = m_data.key->challenge(masterSeed, response);
|
||||
if (ok && !response.isEmpty()) {
|
||||
m_data.challengeResponseKey->setHash(response);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -647,7 +690,7 @@ bool Database::setKey(const QSharedPointer<const CompositeKey>& key,
|
||||
|
||||
if (!key) {
|
||||
m_data.key.reset();
|
||||
m_data.transformedMasterKey = {};
|
||||
m_data.transformedMasterKey.reset(new PasswordKey());
|
||||
m_data.hasKey = false;
|
||||
return true;
|
||||
}
|
||||
@ -657,22 +700,29 @@ bool Database::setKey(const QSharedPointer<const CompositeKey>& key,
|
||||
Q_ASSERT(!m_data.kdf->seed().isEmpty());
|
||||
}
|
||||
|
||||
QByteArray oldTransformedMasterKey = m_data.transformedMasterKey;
|
||||
PasswordKey oldTransformedMasterKey;
|
||||
if (m_data.hasKey) {
|
||||
oldTransformedMasterKey.setHash(m_data.transformedMasterKey->rawKey());
|
||||
}
|
||||
|
||||
QByteArray transformedMasterKey;
|
||||
|
||||
if (!transformKey) {
|
||||
transformedMasterKey = oldTransformedMasterKey;
|
||||
transformedMasterKey = QByteArray(oldTransformedMasterKey.rawKey());
|
||||
} else if (!key->transform(*m_data.kdf, transformedMasterKey)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_data.key = key;
|
||||
m_data.transformedMasterKey = transformedMasterKey;
|
||||
if (!transformedMasterKey.isEmpty()) {
|
||||
m_data.transformedMasterKey->setHash(transformedMasterKey);
|
||||
}
|
||||
m_data.hasKey = true;
|
||||
if (updateChangedTime) {
|
||||
m_metadata->setMasterKeyChanged(Clock::currentDateTimeUtc());
|
||||
}
|
||||
|
||||
if (oldTransformedMasterKey != m_data.transformedMasterKey) {
|
||||
if (oldTransformedMasterKey.rawKey() != m_data.transformedMasterKey->rawKey()) {
|
||||
markAsModified();
|
||||
}
|
||||
|
||||
@ -688,15 +738,15 @@ bool Database::verifyKey(const QSharedPointer<CompositeKey>& key) const
|
||||
{
|
||||
Q_ASSERT(hasKey());
|
||||
|
||||
if (!m_data.challengeResponseKey.isEmpty()) {
|
||||
if (!m_data.challengeResponseKey->rawKey().isEmpty()) {
|
||||
QByteArray result;
|
||||
|
||||
if (!key->challenge(m_data.masterSeed, result)) {
|
||||
if (!key->challenge(m_data.masterSeed->rawKey(), result)) {
|
||||
// challenge failed, (YubiKey?) removed?
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_data.challengeResponseKey != result) {
|
||||
if (m_data.challengeResponseKey->rawKey() != result) {
|
||||
// wrong response from challenged device(s)
|
||||
return false;
|
||||
}
|
||||
@ -861,7 +911,7 @@ bool Database::changeKdf(const QSharedPointer<Kdf>& kdf)
|
||||
}
|
||||
|
||||
setKdf(kdf);
|
||||
m_data.transformedMasterKey = transformedMasterKey;
|
||||
m_data.transformedMasterKey->setHash(transformedMasterKey);
|
||||
markAsModified();
|
||||
|
||||
return true;
|
||||
|
@ -23,11 +23,13 @@
|
||||
#include <QHash>
|
||||
#include <QObject>
|
||||
#include <QPointer>
|
||||
#include <QScopedPointer>
|
||||
|
||||
#include "config-keepassx.h"
|
||||
#include "crypto/kdf/AesKdf.h"
|
||||
#include "crypto/kdf/Kdf.h"
|
||||
#include "format/KeePass2.h"
|
||||
#include "keys/PasswordKey.h"
|
||||
#include "keys/CompositeKey.h"
|
||||
|
||||
class Entry;
|
||||
@ -76,6 +78,8 @@ public:
|
||||
bool extract(QByteArray&, QString* error = nullptr);
|
||||
bool import(const QString& xmlExportPath, QString* error = nullptr);
|
||||
|
||||
void releaseData();
|
||||
|
||||
bool isInitialized() const;
|
||||
void setInitialized(bool initialized);
|
||||
bool isModified() const;
|
||||
@ -161,18 +165,39 @@ private:
|
||||
bool isReadOnly = false;
|
||||
QUuid cipher = KeePass2::CIPHER_AES256;
|
||||
CompressionAlgorithm compressionAlgorithm = CompressionGZip;
|
||||
QByteArray transformedMasterKey;
|
||||
QSharedPointer<Kdf> kdf = QSharedPointer<AesKdf>::create(true);
|
||||
QSharedPointer<const CompositeKey> key;
|
||||
|
||||
QScopedPointer<PasswordKey> masterSeed;
|
||||
QScopedPointer<PasswordKey> transformedMasterKey;
|
||||
QScopedPointer<PasswordKey> challengeResponseKey;
|
||||
|
||||
bool hasKey = false;
|
||||
QByteArray masterSeed;
|
||||
QByteArray challengeResponseKey;
|
||||
QSharedPointer<const CompositeKey> key;
|
||||
QSharedPointer<Kdf> kdf = QSharedPointer<AesKdf>::create(true);
|
||||
|
||||
QVariantMap publicCustomData;
|
||||
|
||||
DatabaseData()
|
||||
: masterSeed(new PasswordKey())
|
||||
, transformedMasterKey(new PasswordKey())
|
||||
, challengeResponseKey(new PasswordKey())
|
||||
{
|
||||
kdf->randomizeSeed();
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
filePath.clear();
|
||||
|
||||
masterSeed.reset();
|
||||
transformedMasterKey.reset();
|
||||
challengeResponseKey.reset();
|
||||
|
||||
hasKey = false;
|
||||
key.reset();
|
||||
kdf.reset();
|
||||
|
||||
publicCustomData.clear();
|
||||
}
|
||||
};
|
||||
|
||||
void createRecycleBin();
|
||||
@ -182,9 +207,9 @@ private:
|
||||
bool restoreDatabase(const QString& filePath);
|
||||
bool performSave(const QString& filePath, QString* error, bool atomic, bool backup);
|
||||
|
||||
Metadata* const m_metadata;
|
||||
QPointer<Metadata> const m_metadata;
|
||||
DatabaseData m_data;
|
||||
Group* m_rootGroup;
|
||||
QPointer<Group> m_rootGroup;
|
||||
QList<DeletedObject> m_deletedObjects;
|
||||
QPointer<QTimer> m_timer;
|
||||
QPointer<FileWatcher> m_fileWatcher;
|
||||
|
@ -28,6 +28,20 @@ EntrySearcher::EntrySearcher(bool caseSensitive)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Search group, and its children, directly by provided search terms
|
||||
* @param searchTerms search terms
|
||||
* @param baseGroup group to start search from, cannot be null
|
||||
* @param forceSearch ignore group search settings
|
||||
* @return list of entries that match the search terms
|
||||
*/
|
||||
QList<Entry*> EntrySearcher::search(const QList<SearchTerm>& searchTerms, const Group* baseGroup, bool forceSearch)
|
||||
{
|
||||
Q_ASSERT(baseGroup);
|
||||
m_searchTerms = searchTerms;
|
||||
return repeat(baseGroup, forceSearch);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search group, and its children, by parsing the provided search
|
||||
* string for search terms.
|
||||
@ -69,6 +83,19 @@ QList<Entry*> EntrySearcher::repeat(const Group* baseGroup, bool forceSearch)
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search provided entries by the provided search terms
|
||||
*
|
||||
* @param searchTerms search terms
|
||||
* @param entries list of entries to include in the search
|
||||
* @return list of entries that match the search terms
|
||||
*/
|
||||
QList<Entry*> EntrySearcher::searchEntries(const QList<SearchTerm>& searchTerms, const QList<Entry*>& entries)
|
||||
{
|
||||
m_searchTerms = searchTerms;
|
||||
return repeatEntries(entries);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search provided entries by parsing the search string
|
||||
* for search terms.
|
||||
@ -124,46 +151,46 @@ bool EntrySearcher::searchEntryImpl(Entry* entry)
|
||||
|
||||
bool found;
|
||||
for (const auto& term : m_searchTerms) {
|
||||
switch (term->field) {
|
||||
switch (term.field) {
|
||||
case Field::Title:
|
||||
found = term->regex.match(entry->resolvePlaceholder(entry->title())).hasMatch();
|
||||
found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch();
|
||||
break;
|
||||
case Field::Username:
|
||||
found = term->regex.match(entry->resolvePlaceholder(entry->username())).hasMatch();
|
||||
found = term.regex.match(entry->resolvePlaceholder(entry->username())).hasMatch();
|
||||
break;
|
||||
case Field::Password:
|
||||
found = term->regex.match(entry->resolvePlaceholder(entry->password())).hasMatch();
|
||||
found = term.regex.match(entry->resolvePlaceholder(entry->password())).hasMatch();
|
||||
break;
|
||||
case Field::Url:
|
||||
found = term->regex.match(entry->resolvePlaceholder(entry->url())).hasMatch();
|
||||
found = term.regex.match(entry->resolvePlaceholder(entry->url())).hasMatch();
|
||||
break;
|
||||
case Field::Notes:
|
||||
found = term->regex.match(entry->notes()).hasMatch();
|
||||
found = term.regex.match(entry->notes()).hasMatch();
|
||||
break;
|
||||
case Field::AttributeKey:
|
||||
found = !attributes.filter(term->regex).empty();
|
||||
case Field::AttributeKV:
|
||||
found = !attributes.filter(term.regex).empty();
|
||||
break;
|
||||
case Field::Attachment:
|
||||
found = !attachments.filter(term->regex).empty();
|
||||
found = !attachments.filter(term.regex).empty();
|
||||
break;
|
||||
case Field::AttributeValue:
|
||||
// skip protected attributes
|
||||
if (entry->attributes()->isProtected(term->word)) {
|
||||
if (entry->attributes()->isProtected(term.word)) {
|
||||
continue;
|
||||
}
|
||||
found = entry->attributes()->contains(term->word)
|
||||
&& term->regex.match(entry->attributes()->value(term->word)).hasMatch();
|
||||
found = entry->attributes()->contains(term.word)
|
||||
&& term.regex.match(entry->attributes()->value(term.word)).hasMatch();
|
||||
break;
|
||||
default:
|
||||
// Terms without a specific field try to match title, username, url, and notes
|
||||
found = term->regex.match(entry->resolvePlaceholder(entry->title())).hasMatch()
|
||||
|| term->regex.match(entry->resolvePlaceholder(entry->username())).hasMatch()
|
||||
|| term->regex.match(entry->resolvePlaceholder(entry->url())).hasMatch()
|
||||
|| term->regex.match(entry->notes()).hasMatch();
|
||||
found = term.regex.match(entry->resolvePlaceholder(entry->title())).hasMatch()
|
||||
|| term.regex.match(entry->resolvePlaceholder(entry->username())).hasMatch()
|
||||
|| term.regex.match(entry->resolvePlaceholder(entry->url())).hasMatch()
|
||||
|| term.regex.match(entry->notes()).hasMatch();
|
||||
}
|
||||
|
||||
// Short circuit if we failed to match or we matched and are excluding this term
|
||||
if ((!found && !term->exclude) || (found && term->exclude)) {
|
||||
if ((!found && !term.exclude) || (found && term.exclude)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -175,7 +202,7 @@ void EntrySearcher::parseSearchTerms(const QString& searchString)
|
||||
{
|
||||
static const QList<QPair<QString, Field>> fieldnames{
|
||||
{QStringLiteral("attachment"), Field::Attachment},
|
||||
{QStringLiteral("attribute"), Field::AttributeKey},
|
||||
{QStringLiteral("attribute"), Field::AttributeKV},
|
||||
{QStringLiteral("notes"), Field::Notes},
|
||||
{QStringLiteral("pw"), Field::Password},
|
||||
{QStringLiteral("password"), Field::Password},
|
||||
@ -188,44 +215,44 @@ void EntrySearcher::parseSearchTerms(const QString& searchString)
|
||||
auto results = m_termParser.globalMatch(searchString);
|
||||
while (results.hasNext()) {
|
||||
auto result = results.next();
|
||||
auto term = QSharedPointer<SearchTerm>::create();
|
||||
SearchTerm term{};
|
||||
|
||||
// Quoted string group
|
||||
term->word = result.captured(3);
|
||||
term.word = result.captured(3);
|
||||
|
||||
// If empty, use the unquoted string group
|
||||
if (term->word.isEmpty()) {
|
||||
term->word = result.captured(4);
|
||||
if (term.word.isEmpty()) {
|
||||
term.word = result.captured(4);
|
||||
}
|
||||
|
||||
// If still empty, ignore this match
|
||||
if (term->word.isEmpty()) {
|
||||
if (term.word.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto mods = result.captured(1);
|
||||
|
||||
// Convert term to regex
|
||||
term->regex = Tools::convertToRegex(term->word, !mods.contains("*"), mods.contains("+"), m_caseSensitive);
|
||||
term.regex = Tools::convertToRegex(term.word, !mods.contains("*"), mods.contains("+"), m_caseSensitive);
|
||||
|
||||
// Exclude modifier
|
||||
term->exclude = mods.contains("-") || mods.contains("!");
|
||||
term.exclude = mods.contains("-") || mods.contains("!");
|
||||
|
||||
// Determine the field to search
|
||||
term->field = Field::Undefined;
|
||||
term.field = Field::Undefined;
|
||||
|
||||
QString field = result.captured(2);
|
||||
if (!field.isEmpty()) {
|
||||
if (field.startsWith("_", Qt::CaseInsensitive)) {
|
||||
term->field = Field::AttributeValue;
|
||||
term.field = Field::AttributeValue;
|
||||
// searching a custom attribute
|
||||
// in this case term->word is the attribute key (removing the leading "_")
|
||||
// and term->regex is used to match attribute value
|
||||
term->word = field.mid(1);
|
||||
// in this case term.word is the attribute key (removing the leading "_")
|
||||
// and term.regex is used to match attribute value
|
||||
term.word = field.mid(1);
|
||||
} else {
|
||||
for (const auto& pair : fieldnames) {
|
||||
if (pair.first.startsWith(field, Qt::CaseInsensitive)) {
|
||||
term->field = pair.second;
|
||||
term.field = pair.second;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -28,18 +28,6 @@ class Entry;
|
||||
class EntrySearcher
|
||||
{
|
||||
public:
|
||||
explicit EntrySearcher(bool caseSensitive = false);
|
||||
|
||||
QList<Entry*> search(const QString& searchString, const Group* baseGroup, bool forceSearch = false);
|
||||
QList<Entry*> repeat(const Group* baseGroup, bool forceSearch = false);
|
||||
|
||||
QList<Entry*> searchEntries(const QString& searchString, const QList<Entry*>& entries);
|
||||
QList<Entry*> repeatEntries(const QList<Entry*>& entries);
|
||||
|
||||
void setCaseSensitive(bool state);
|
||||
bool isCaseSensitive();
|
||||
|
||||
private:
|
||||
enum class Field
|
||||
{
|
||||
Undefined,
|
||||
@ -48,7 +36,7 @@ private:
|
||||
Password,
|
||||
Url,
|
||||
Notes,
|
||||
AttributeKey,
|
||||
AttributeKV,
|
||||
Attachment,
|
||||
AttributeValue
|
||||
};
|
||||
@ -56,17 +44,32 @@ private:
|
||||
struct SearchTerm
|
||||
{
|
||||
Field field;
|
||||
// only used when field == Field::AttributeValue
|
||||
QString word;
|
||||
QRegularExpression regex;
|
||||
bool exclude;
|
||||
};
|
||||
|
||||
explicit EntrySearcher(bool caseSensitive = false);
|
||||
|
||||
QList<Entry*> search(const QList<SearchTerm>& searchTerms, const Group* baseGroup, bool forceSearch = false);
|
||||
QList<Entry*> search(const QString& searchString, const Group* baseGroup, bool forceSearch = false);
|
||||
QList<Entry*> repeat(const Group* baseGroup, bool forceSearch = false);
|
||||
|
||||
QList<Entry*> searchEntries(const QList<SearchTerm>& searchTerms, const QList<Entry*>& entries);
|
||||
QList<Entry*> searchEntries(const QString& searchString, const QList<Entry*>& entries);
|
||||
QList<Entry*> repeatEntries(const QList<Entry*>& entries);
|
||||
|
||||
void setCaseSensitive(bool state);
|
||||
bool isCaseSensitive();
|
||||
|
||||
private:
|
||||
bool searchEntryImpl(Entry* entry);
|
||||
void parseSearchTerms(const QString& searchString);
|
||||
|
||||
bool m_caseSensitive;
|
||||
QRegularExpression m_termParser;
|
||||
QList<QSharedPointer<SearchTerm>> m_searchTerms;
|
||||
QList<SearchTerm> m_searchTerms;
|
||||
|
||||
friend class TestEntrySearcher;
|
||||
};
|
||||
|
@ -18,7 +18,9 @@
|
||||
|
||||
#include "FileWatcher.h"
|
||||
|
||||
#include "core/AsyncTask.h"
|
||||
#include "core/Clock.h"
|
||||
|
||||
#include <QCryptographicHash>
|
||||
#include <QFileInfo>
|
||||
|
||||
@ -134,17 +136,19 @@ void FileWatcher::checkFileChecksum()
|
||||
|
||||
QByteArray FileWatcher::calculateChecksum()
|
||||
{
|
||||
QFile file(m_filePath);
|
||||
if (file.open(QFile::ReadOnly)) {
|
||||
QCryptographicHash hash(QCryptographicHash::Sha256);
|
||||
if (m_fileChecksumSizeBytes > 0) {
|
||||
hash.addData(file.read(m_fileChecksumSizeBytes));
|
||||
} else {
|
||||
hash.addData(&file);
|
||||
return AsyncTask::runAndWaitForFuture([this]() -> QByteArray {
|
||||
QFile file(m_filePath);
|
||||
if (file.open(QFile::ReadOnly)) {
|
||||
QCryptographicHash hash(QCryptographicHash::Sha256);
|
||||
if (m_fileChecksumSizeBytes > 0) {
|
||||
hash.addData(file.read(m_fileChecksumSizeBytes));
|
||||
} else {
|
||||
hash.addData(&file);
|
||||
}
|
||||
return hash.result();
|
||||
}
|
||||
return hash.result();
|
||||
}
|
||||
return {};
|
||||
return {};
|
||||
});
|
||||
}
|
||||
|
||||
BulkFileWatcher::BulkFileWatcher(QObject* parent)
|
||||
|
@ -36,6 +36,12 @@
|
||||
#define QUINT32_MAX 4294967295U
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
|
||||
#define FILE_CASE_SENSITIVE Qt::CaseInsensitive
|
||||
#else
|
||||
#define FILE_CASE_SENSITIVE Qt::CaseSensitive
|
||||
#endif
|
||||
|
||||
template <typename T> struct AddConst
|
||||
{
|
||||
typedef const T Type;
|
||||
|
@ -108,6 +108,9 @@ namespace Tools
|
||||
#ifdef WITH_XC_TOUCHID
|
||||
extensions += "\n- " + QObject::tr("TouchID");
|
||||
#endif
|
||||
#ifdef WITH_XC_FDOSECRETS
|
||||
extensions += "\n- " + QObject::tr("Secret Service Integration");
|
||||
#endif
|
||||
|
||||
if (extensions.isEmpty())
|
||||
extensions = " " + QObject::tr("None");
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include "core/Config.h"
|
||||
#include "core/Database.h"
|
||||
#include "core/EntrySearcher.h"
|
||||
#include "core/Tools.h"
|
||||
#include "gui/DatabaseTabWidget.h"
|
||||
#include "gui/DatabaseWidget.h"
|
||||
|
||||
@ -233,24 +233,16 @@ namespace FdoSecrets
|
||||
}
|
||||
}
|
||||
|
||||
static QMap<QString, QString> attrKeyToField{
|
||||
{EntryAttributes::TitleKey, QStringLiteral("title")},
|
||||
{EntryAttributes::UserNameKey, QStringLiteral("user")},
|
||||
{EntryAttributes::URLKey, QStringLiteral("url")},
|
||||
{EntryAttributes::NotesKey, QStringLiteral("notes")},
|
||||
};
|
||||
|
||||
QStringList terms;
|
||||
QList<EntrySearcher::SearchTerm> terms;
|
||||
for (auto it = attributes.constBegin(); it != attributes.constEnd(); ++it) {
|
||||
if (it.key() == EntryAttributes::PasswordKey) {
|
||||
continue;
|
||||
}
|
||||
auto field = attrKeyToField.value(it.key(), QStringLiteral("_") + Item::encodeAttributeKey(it.key()));
|
||||
terms << QStringLiteral(R"raw(+%1:"%2")raw").arg(field, it.value());
|
||||
terms << attributeToTerm(it.key(), it.value());
|
||||
}
|
||||
|
||||
QList<Item*> items;
|
||||
const auto foundEntries = EntrySearcher().search(terms.join(' '), m_exposedGroup);
|
||||
const auto foundEntries = EntrySearcher().search(terms, m_exposedGroup);
|
||||
items.reserve(foundEntries.size());
|
||||
for (const auto& entry : foundEntries) {
|
||||
items << m_entryToItem.value(entry);
|
||||
@ -258,6 +250,28 @@ namespace FdoSecrets
|
||||
return items;
|
||||
}
|
||||
|
||||
EntrySearcher::SearchTerm Collection::attributeToTerm(const QString& key, const QString& value)
|
||||
{
|
||||
static QMap<QString, EntrySearcher::Field> attrKeyToField{
|
||||
{EntryAttributes::TitleKey, EntrySearcher::Field::Title},
|
||||
{EntryAttributes::UserNameKey, EntrySearcher::Field::Username},
|
||||
{EntryAttributes::URLKey, EntrySearcher::Field::Url},
|
||||
{EntryAttributes::NotesKey, EntrySearcher::Field::Notes},
|
||||
};
|
||||
|
||||
EntrySearcher::SearchTerm term{};
|
||||
term.field = attrKeyToField.value(key, EntrySearcher::Field::AttributeValue);
|
||||
term.word = key;
|
||||
term.exclude = false;
|
||||
|
||||
const auto useWildcards = false;
|
||||
const auto exactMatch = true;
|
||||
const auto caseSensitive = true;
|
||||
term.regex = Tools::convertToRegex(value, useWildcards, exactMatch, caseSensitive);
|
||||
|
||||
return term;
|
||||
}
|
||||
|
||||
DBusReturn<Item*>
|
||||
Collection::createItem(const QVariantMap& properties, const SecretStruct& secret, bool replace, PromptBase*& prompt)
|
||||
{
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "DBusObject.h"
|
||||
|
||||
#include "adaptors/CollectionAdaptor.h"
|
||||
#include "core/EntrySearcher.h"
|
||||
|
||||
#include <QPointer>
|
||||
#include <QSet>
|
||||
@ -90,6 +91,8 @@ namespace FdoSecrets
|
||||
bool inRecycleBin(Group* group) const;
|
||||
bool inRecycleBin(Entry* entry) const;
|
||||
|
||||
static EntrySearcher::SearchTerm attributeToTerm(const QString& key, const QString& value);
|
||||
|
||||
public slots:
|
||||
// expose some methods for Prmopt to use
|
||||
void doLock();
|
||||
|
@ -99,10 +99,7 @@ namespace FdoSecrets
|
||||
// add custom attributes
|
||||
const auto customKeys = entryAttrs->customKeys();
|
||||
for (const auto& attr : customKeys) {
|
||||
// decode attr key
|
||||
auto decoded = decodeAttributeKey(attr);
|
||||
|
||||
attrs[decoded] = entryAttrs->value(attr);
|
||||
attrs[attr] = entryAttrs->value(attr);
|
||||
}
|
||||
|
||||
// add some informative and readonly attributes
|
||||
@ -134,8 +131,7 @@ namespace FdoSecrets
|
||||
continue;
|
||||
}
|
||||
|
||||
auto encoded = encodeAttributeKey(it.key());
|
||||
entryAttrs->set(encoded, it.value());
|
||||
entryAttrs->set(it.key(), it.value());
|
||||
}
|
||||
|
||||
m_backend->endUpdate();
|
||||
@ -354,16 +350,6 @@ namespace FdoSecrets
|
||||
return pathComponents.join('/');
|
||||
}
|
||||
|
||||
QString Item::encodeAttributeKey(const QString& key)
|
||||
{
|
||||
return QUrl::toPercentEncoding(key, "", "_:").replace('%', '_');
|
||||
}
|
||||
|
||||
QString Item::decodeAttributeKey(const QString& key)
|
||||
{
|
||||
return QString::fromUtf8(QByteArray::fromPercentEncoding(key.toLatin1(), '_'));
|
||||
}
|
||||
|
||||
void setEntrySecret(Entry* entry, const QByteArray& data, const QString& contentType)
|
||||
{
|
||||
auto mimeName = contentType.split(';').takeFirst().trimmed();
|
||||
|
@ -67,15 +67,6 @@ namespace FdoSecrets
|
||||
public:
|
||||
static const QSet<QString> ReadOnlyAttributes;
|
||||
|
||||
/**
|
||||
* Due to the limitation in EntrySearcher, custom attr key cannot contain ':',
|
||||
* Thus we encode the key when saving and decode it when returning.
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
static QString encodeAttributeKey(const QString& key);
|
||||
static QString decodeAttributeKey(const QString& key);
|
||||
|
||||
DBusReturn<void> setProperties(const QVariantMap& properties);
|
||||
|
||||
Entry* backend() const;
|
||||
|
@ -303,7 +303,9 @@ namespace FdoSecrets
|
||||
toUnlock << coll;
|
||||
}
|
||||
}
|
||||
prompt = new UnlockCollectionsPrompt(this, toUnlock);
|
||||
if (!toUnlock.isEmpty()) {
|
||||
prompt = new UnlockCollectionsPrompt(this, toUnlock);
|
||||
}
|
||||
return unlocked;
|
||||
}
|
||||
|
||||
@ -339,7 +341,9 @@ namespace FdoSecrets
|
||||
toLock << coll;
|
||||
}
|
||||
}
|
||||
prompt = new LockCollectionsPrompt(this, toLock);
|
||||
if (!toLock.isEmpty()) {
|
||||
prompt = new LockCollectionsPrompt(this, toLock);
|
||||
}
|
||||
return locked;
|
||||
}
|
||||
|
||||
|
@ -44,11 +44,6 @@ namespace
|
||||
namespace FdoSecrets
|
||||
{
|
||||
|
||||
QVariant CipherPair::negotiationOutput() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
DhIetf1024Sha256Aes128CbcPkcs7::DhIetf1024Sha256Aes128CbcPkcs7(const QByteArray& clientPublicKeyBytes)
|
||||
: m_valid(false)
|
||||
{
|
||||
|
@ -35,7 +35,7 @@ namespace FdoSecrets
|
||||
virtual SecretStruct encrypt(const SecretStruct& input) = 0;
|
||||
virtual SecretStruct decrypt(const SecretStruct& input) = 0;
|
||||
virtual bool isValid() const = 0;
|
||||
virtual QVariant negotiationOutput() const;
|
||||
virtual QVariant negotiationOutput() const = 0;
|
||||
};
|
||||
|
||||
class PlainCipher : public CipherPair
|
||||
@ -57,6 +57,11 @@ namespace FdoSecrets
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
QVariant negotiationOutput() const override
|
||||
{
|
||||
return QStringLiteral("");
|
||||
}
|
||||
};
|
||||
|
||||
class DhIetf1024Sha256Aes128CbcPkcs7 : public CipherPair
|
||||
|
@ -31,6 +31,8 @@ DatabaseOpenDialog::DatabaseOpenDialog(QWidget* parent)
|
||||
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint | Qt::ForeignWindow);
|
||||
#endif
|
||||
connect(m_view, SIGNAL(dialogFinished(bool)), this, SLOT(complete(bool)));
|
||||
setLayout(m_view->layout());
|
||||
setMinimumWidth(700);
|
||||
}
|
||||
|
||||
void DatabaseOpenDialog::setFilePath(const QString& filePath)
|
||||
|
@ -58,6 +58,7 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
|
||||
|
||||
m_ui->buttonTogglePassword->setIcon(filePath()->onOffIcon("actions", "password-show"));
|
||||
connect(m_ui->buttonTogglePassword, SIGNAL(toggled(bool)), m_ui->editPassword, SLOT(setShowPassword(bool)));
|
||||
connect(m_ui->buttonTogglePassword, SIGNAL(toggled(bool)), m_ui->editPassword, SLOT(setFocus()));
|
||||
connect(m_ui->buttonBrowseFile, SIGNAL(clicked()), SLOT(browseKeyFile()));
|
||||
|
||||
connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase()));
|
||||
@ -65,6 +66,8 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
|
||||
|
||||
m_ui->hardwareKeyLabelHelp->setIcon(filePath()->icon("actions", "system-help").pixmap(QSize(12, 12)));
|
||||
connect(m_ui->hardwareKeyLabelHelp, SIGNAL(clicked(bool)), SLOT(openHardwareKeyHelp()));
|
||||
m_ui->keyFileLabelHelp->setIcon(filePath()->icon("actions", "system-help").pixmap(QSize(12, 12)));
|
||||
connect(m_ui->keyFileLabelHelp, SIGNAL(clicked(bool)), SLOT(openKeyFileHelp()));
|
||||
|
||||
connect(m_ui->comboKeyFile->lineEdit(), SIGNAL(textChanged(QString)), SLOT(handleKeyFileComboEdited()));
|
||||
connect(m_ui->comboKeyFile, SIGNAL(currentIndexChanged(int)), SLOT(handleKeyFileComboChanged()));
|
||||
@ -148,7 +151,7 @@ void DatabaseOpenWidget::load(const QString& filename)
|
||||
m_filename = filename;
|
||||
m_ui->fileNameLabel->setRawText(m_filename);
|
||||
|
||||
m_ui->comboKeyFile->addItem(tr("Select file..."), -1);
|
||||
m_ui->comboKeyFile->addItem(tr("Select key file..."), -1);
|
||||
m_ui->comboKeyFile->setCurrentIndex(0);
|
||||
m_ui->keyFileClearIcon->setVisible(false);
|
||||
m_keyFileComboEdited = false;
|
||||
@ -163,8 +166,6 @@ void DatabaseOpenWidget::load(const QString& filename)
|
||||
|
||||
QHash<QString, QVariant> useTouchID = config()->get("UseTouchID").toHash();
|
||||
m_ui->checkTouchID->setChecked(useTouchID.value(m_filename, false).toBool());
|
||||
|
||||
m_ui->editPassword->setFocus();
|
||||
}
|
||||
|
||||
void DatabaseOpenWidget::clearForms()
|
||||
@ -228,6 +229,9 @@ void DatabaseOpenWidget::openDatabase()
|
||||
}
|
||||
m_retryUnlockWithEmptyPassword = false;
|
||||
m_ui->messageWidget->showMessage(error, MessageWidget::MessageType::Error);
|
||||
// Focus on the password field and select the input for easy retry
|
||||
m_ui->editPassword->selectAll();
|
||||
m_ui->editPassword->setFocus();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -365,6 +369,13 @@ void DatabaseOpenWidget::browseKeyFile()
|
||||
}
|
||||
QString filename = fileDialog()->getOpenFileName(this, tr("Select key file"), QString(), filters);
|
||||
|
||||
if (QFileInfo(filename).canonicalFilePath() == QFileInfo(m_filename).canonicalFilePath()) {
|
||||
MessageBox::warning(this, tr("Cannot use database file as key file"),
|
||||
tr("You cannot use your database file as a key file.\nIf you do not have a key file, please leave the field empty."),
|
||||
MessageBox::Button::Ok);
|
||||
filename = "";
|
||||
}
|
||||
|
||||
if (!filename.isEmpty()) {
|
||||
m_ui->comboKeyFile->setCurrentIndex(-1);
|
||||
m_ui->comboKeyFile->setEditText(filename);
|
||||
@ -433,5 +444,10 @@ void DatabaseOpenWidget::noYubikeyFound()
|
||||
|
||||
void DatabaseOpenWidget::openHardwareKeyHelp()
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#hwtoken"));
|
||||
}
|
||||
QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-yubikey"));
|
||||
}
|
||||
|
||||
void DatabaseOpenWidget::openKeyFileHelp()
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl("https://keepassxc.org/docs#faq-cat-keyfile"));
|
||||
}
|
||||
|
@ -68,6 +68,7 @@ private slots:
|
||||
void yubikeyDetectComplete();
|
||||
void noYubikeyFound();
|
||||
void openHardwareKeyHelp();
|
||||
void openKeyFileHelp();
|
||||
|
||||
protected:
|
||||
const QScopedPointer<Ui::DatabaseOpenWidget> m_ui;
|
||||
|
@ -2,14 +2,6 @@
|
||||
<ui version="4.0">
|
||||
<class>DatabaseOpenWidget</class>
|
||||
<widget class="QWidget" name="DatabaseOpenWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>592</width>
|
||||
<height>462</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Unlock KeePassXC Database</string>
|
||||
</property>
|
||||
@ -210,7 +202,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Enter Additional Credentials:</string>
|
||||
<string>Enter Additional Credentials (if any):</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -243,32 +235,6 @@
|
||||
<property name="topMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item row="0" column="3">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="verticalSpacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboKeyFile">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Key file selection</string>
|
||||
</property>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="spacing">
|
||||
@ -330,26 +296,36 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QPushButton" name="buttonRedetectYubikey">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
<item row="0" column="3">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="verticalSpacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Refresh hardware tokens</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Refresh hardware tokens</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Refresh</string>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboKeyFile">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Key file selection</string>
|
||||
</property>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
<number>5</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="hardwareKeyLabel">
|
||||
@ -368,16 +344,16 @@
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><p>You can use a hardware security key such as a <strong>YubiKey</strong> or <strong>OnlyKey</strong> with slots configured for HMAC-SHA1.</p>
|
||||
<p>Click for more information...</p></string>
|
||||
<p>Click for more information...</p></string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Hardware key help</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QToolButton {
|
||||
border: none;
|
||||
background: none;
|
||||
}</string>
|
||||
border: none;
|
||||
background: none;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">?</string>
|
||||
@ -396,12 +372,66 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="keyFileLabel">
|
||||
<property name="text">
|
||||
<string>Key File:</string>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<property name="spacing">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>comboKeyFile</cstring>
|
||||
<item>
|
||||
<widget class="QLabel" name="keyFileLabel">
|
||||
<property name="text">
|
||||
<string>Key File:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>comboKeyFile</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="keyFileLabelHelp">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><p>In addition to your master password, you can use a secret file to enhance the security of your database. Such a file can be generated in your database's security settings.</p><p>This is <strong>not</strong> your *.kdbx database file!<br>If you do not have a key file, leave the field empty.</p><p>Click for more information...</p></string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Key file help</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QToolButton {
|
||||
border: none;
|
||||
background: none;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>?</string>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>12</width>
|
||||
<height>12</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QPushButton" name="buttonRedetectYubikey">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Refresh hardware tokens</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Refresh hardware tokens</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Refresh</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -156,6 +156,7 @@ void DatabaseTabWidget::addDatabaseTab(const QString& filePath,
|
||||
{
|
||||
QFileInfo fileInfo(filePath);
|
||||
QString canonicalFilePath = fileInfo.canonicalFilePath();
|
||||
|
||||
if (canonicalFilePath.isEmpty()) {
|
||||
emit messageGlobal(tr("Failed to open %1. It either does not exist or is not accessible.").arg(filePath),
|
||||
MessageWidget::Error);
|
||||
@ -165,7 +166,7 @@ void DatabaseTabWidget::addDatabaseTab(const QString& filePath,
|
||||
for (int i = 0, c = count(); i < c; ++i) {
|
||||
auto* dbWidget = databaseWidgetFromIndex(i);
|
||||
Q_ASSERT(dbWidget);
|
||||
if (dbWidget && dbWidget->database()->canonicalFilePath() == canonicalFilePath) {
|
||||
if (dbWidget && dbWidget->database()->canonicalFilePath().compare(canonicalFilePath, FILE_CASE_SENSITIVE) == 0) {
|
||||
dbWidget->performUnlockDatabase(password, keyfile);
|
||||
if (!inBackground) {
|
||||
// switch to existing tab if file is already open
|
||||
|
@ -95,6 +95,8 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
|
||||
, m_groupView(new GroupView(m_db.data(), m_mainSplitter))
|
||||
, m_saveAttempts(0)
|
||||
{
|
||||
Q_ASSERT(m_db);
|
||||
|
||||
m_messageWidget->setHidden(true);
|
||||
|
||||
auto* mainLayout = new QVBoxLayout();
|
||||
@ -221,7 +223,11 @@ DatabaseWidget::DatabaseWidget(QSharedPointer<Database> db, QWidget* parent)
|
||||
KeeShare::instance()->connectDatabase(m_db, {});
|
||||
#endif
|
||||
|
||||
switchToMainView();
|
||||
if (m_db->isInitialized()) {
|
||||
switchToMainView();
|
||||
} else {
|
||||
switchToOpenDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
DatabaseWidget::DatabaseWidget(const QString& filePath, QWidget* parent)
|
||||
@ -394,7 +400,6 @@ void DatabaseWidget::replaceDatabase(QSharedPointer<Database> db)
|
||||
m_db = std::move(db);
|
||||
connectDatabaseSignals();
|
||||
m_groupView->changeDatabase(m_db);
|
||||
processAutoOpen();
|
||||
|
||||
// Restore the new parent group pointer, if not found default to the root group
|
||||
// this prevents data loss when merging a database while creating a new entry
|
||||
@ -413,6 +418,8 @@ void DatabaseWidget::replaceDatabase(QSharedPointer<Database> db)
|
||||
// Keep the instance active till the end of this function
|
||||
Q_UNUSED(oldDb);
|
||||
#endif
|
||||
|
||||
oldDb->releaseData();
|
||||
}
|
||||
|
||||
void DatabaseWidget::cloneEntry()
|
||||
@ -940,6 +947,7 @@ void DatabaseWidget::loadDatabase(bool accepted)
|
||||
if (accepted) {
|
||||
replaceDatabase(openWidget->database());
|
||||
switchToMainView();
|
||||
processAutoOpen();
|
||||
m_saveAttempts = 0;
|
||||
emit databaseUnlocked();
|
||||
if (config()->get("MinimizeAfterUnlock").toBool()) {
|
||||
@ -1026,6 +1034,7 @@ void DatabaseWidget::unlockDatabase(bool accepted)
|
||||
m_entryBeforeLock = QUuid();
|
||||
|
||||
switchToMainView();
|
||||
processAutoOpen();
|
||||
emit databaseUnlocked();
|
||||
|
||||
if (senderDialog && senderDialog->intent() == DatabaseOpenDialog::Intent::AutoType) {
|
||||
@ -1462,6 +1471,7 @@ void DatabaseWidget::reloadDatabaseFile()
|
||||
}
|
||||
|
||||
replaceDatabase(db);
|
||||
processAutoOpen();
|
||||
restoreGroupEntryFocus(groupBeforeReload, entryBeforeReload);
|
||||
m_blockAutoSave = false;
|
||||
} else {
|
||||
|
@ -58,6 +58,15 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent)
|
||||
m_ui->entryAttachmentsWidget->setReadOnly(true);
|
||||
m_ui->entryAttachmentsWidget->setButtonsVisible(false);
|
||||
|
||||
// Match background of read-only text edit fields with the window
|
||||
m_ui->entryPasswordLabel->setBackgroundRole(QPalette::Window);
|
||||
m_ui->entryUsernameLabel->setBackgroundRole(QPalette::Window);
|
||||
m_ui->entryNotesTextEdit->setBackgroundRole(QPalette::Window);
|
||||
m_ui->groupNotesTextEdit->setBackgroundRole(QPalette::Window);
|
||||
// Align notes text with label text
|
||||
m_ui->entryNotesTextEdit->document()->setDocumentMargin(0);
|
||||
m_ui->groupNotesTextEdit->document()->setDocumentMargin(0);
|
||||
|
||||
connect(m_ui->entryUrlLabel, SIGNAL(linkActivated(QString)), SLOT(openEntryUrl()));
|
||||
|
||||
connect(m_ui->entryTotpButton, SIGNAL(toggled(bool)), m_ui->entryTotpLabel, SLOT(setVisible(bool)));
|
||||
@ -173,44 +182,35 @@ void EntryPreviewWidget::setPasswordVisible(bool state)
|
||||
{
|
||||
const QString password = m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->password());
|
||||
if (state) {
|
||||
m_ui->entryPasswordLabel->setRawText(password);
|
||||
m_ui->entryPasswordLabel->setToolTip(password);
|
||||
m_ui->entryPasswordLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||
m_ui->entryPasswordLabel->setText(password);
|
||||
m_ui->entryPasswordLabel->setCursorPosition(0);
|
||||
} else if (password.isEmpty() && config()->get("security/passwordemptynodots").toBool()) {
|
||||
m_ui->entryPasswordLabel->setText("");
|
||||
} else {
|
||||
m_ui->entryPasswordLabel->setTextInteractionFlags(Qt::NoTextInteraction);
|
||||
m_ui->entryPasswordLabel->setToolTip({});
|
||||
if (password.isEmpty() && config()->get("security/passwordemptynodots").toBool()) {
|
||||
m_ui->entryPasswordLabel->setRawText("");
|
||||
} else {
|
||||
m_ui->entryPasswordLabel->setRawText(QString("\u25cf").repeated(6));
|
||||
}
|
||||
m_ui->entryPasswordLabel->setText(QString("\u25cf").repeated(6));
|
||||
}
|
||||
}
|
||||
|
||||
void EntryPreviewWidget::setEntryNotesVisible(bool state)
|
||||
{
|
||||
setNotesVisible(m_ui->entryNotesLabel, m_currentEntry->notes(), state);
|
||||
setNotesVisible(m_ui->entryNotesTextEdit, m_currentEntry->notes(), state);
|
||||
}
|
||||
|
||||
void EntryPreviewWidget::setGroupNotesVisible(bool state)
|
||||
{
|
||||
setNotesVisible(m_ui->groupNotesLabel, m_currentGroup->notes(), state);
|
||||
setNotesVisible(m_ui->groupNotesTextEdit, m_currentGroup->notes(), state);
|
||||
}
|
||||
|
||||
void EntryPreviewWidget::setNotesVisible(QLabel* notesLabel, const QString& notes, bool state)
|
||||
void EntryPreviewWidget::setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state)
|
||||
{
|
||||
if (state) {
|
||||
// Add html hyperlinks to notes that start with XXXX://
|
||||
QString hyperlinkNotes = notes;
|
||||
notesLabel->setText(hyperlinkNotes.replace(QRegExp("(\\w+:\\/\\/\\S+)"), "<a href=\"\\1\">\\1</a>"));
|
||||
notesLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
|
||||
notesWidget->setPlainText(notes);
|
||||
notesWidget->moveCursor(QTextCursor::Start);
|
||||
notesWidget->ensureCursorVisible();
|
||||
} else {
|
||||
if (notes.isEmpty()) {
|
||||
notesLabel->setText("");
|
||||
} else {
|
||||
notesLabel->setText(QString("\u25cf").repeated(6));
|
||||
if (!notes.isEmpty()) {
|
||||
notesWidget->setPlainText(QString("\u25cf").repeated(6));
|
||||
}
|
||||
notesLabel->setTextInteractionFlags(Qt::NoTextInteraction);
|
||||
}
|
||||
}
|
||||
|
||||
@ -218,12 +218,13 @@ void EntryPreviewWidget::updateEntryGeneralTab()
|
||||
{
|
||||
Q_ASSERT(m_currentEntry);
|
||||
m_ui->entryUsernameLabel->setText(m_currentEntry->resolveMultiplePlaceholders(m_currentEntry->username()));
|
||||
m_ui->entryUsernameLabel->setCursorPosition(0);
|
||||
|
||||
if (config()->get("security/HidePasswordPreviewPanel").toBool()) {
|
||||
// Hide password
|
||||
setPasswordVisible(false);
|
||||
// Show the password toggle button if there are dots in the label
|
||||
m_ui->togglePasswordButton->setVisible(!m_ui->entryPasswordLabel->rawText().isEmpty());
|
||||
m_ui->togglePasswordButton->setVisible(!m_ui->entryPasswordLabel->text().isEmpty());
|
||||
m_ui->togglePasswordButton->setChecked(false);
|
||||
} else {
|
||||
// Show password
|
||||
@ -233,7 +234,7 @@ void EntryPreviewWidget::updateEntryGeneralTab()
|
||||
|
||||
if (config()->get("security/hidenotes").toBool()) {
|
||||
setEntryNotesVisible(false);
|
||||
m_ui->toggleEntryNotesButton->setVisible(!m_ui->entryNotesLabel->text().isEmpty());
|
||||
m_ui->toggleEntryNotesButton->setVisible(!m_ui->entryNotesTextEdit->toPlainText().isEmpty());
|
||||
m_ui->toggleEntryNotesButton->setChecked(false);
|
||||
} else {
|
||||
setEntryNotesVisible(true);
|
||||
@ -241,9 +242,9 @@ void EntryPreviewWidget::updateEntryGeneralTab()
|
||||
}
|
||||
|
||||
if (config()->get("GUI/MonospaceNotes", false).toBool()) {
|
||||
m_ui->entryNotesLabel->setFont(Font::fixedFont());
|
||||
m_ui->entryNotesTextEdit->setFont(Font::fixedFont());
|
||||
} else {
|
||||
m_ui->entryNotesLabel->setFont(Font::defaultFont());
|
||||
m_ui->entryNotesTextEdit->setFont(Font::defaultFont());
|
||||
}
|
||||
|
||||
m_ui->entryUrlLabel->setRawText(m_currentEntry->displayUrl());
|
||||
@ -329,7 +330,7 @@ void EntryPreviewWidget::updateGroupGeneralTab()
|
||||
|
||||
if (config()->get("security/hidenotes").toBool()) {
|
||||
setGroupNotesVisible(false);
|
||||
m_ui->toggleGroupNotesButton->setVisible(!m_ui->groupNotesLabel->text().isEmpty());
|
||||
m_ui->toggleGroupNotesButton->setVisible(!m_ui->groupNotesTextEdit->toPlainText().isEmpty());
|
||||
m_ui->toggleGroupNotesButton->setChecked(false);
|
||||
} else {
|
||||
setGroupNotesVisible(true);
|
||||
@ -337,9 +338,9 @@ void EntryPreviewWidget::updateGroupGeneralTab()
|
||||
}
|
||||
|
||||
if (config()->get("GUI/MonospaceNotes", false).toBool()) {
|
||||
m_ui->groupNotesLabel->setFont(Font::fixedFont());
|
||||
m_ui->groupNotesTextEdit->setFont(Font::fixedFont());
|
||||
} else {
|
||||
m_ui->groupNotesLabel->setFont(Font::defaultFont());
|
||||
m_ui->groupNotesTextEdit->setFont(Font::defaultFont());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,8 @@ namespace Ui
|
||||
class EntryPreviewWidget;
|
||||
}
|
||||
|
||||
class QTextEdit;
|
||||
|
||||
class EntryPreviewWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -54,7 +56,7 @@ private slots:
|
||||
void setPasswordVisible(bool state);
|
||||
void setEntryNotesVisible(bool state);
|
||||
void setGroupNotesVisible(bool state);
|
||||
void setNotesVisible(QLabel* notesLabel, const QString& notes, bool state);
|
||||
void setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state);
|
||||
|
||||
void updateGroupHeaderLine();
|
||||
void updateGroupGeneralTab();
|
||||
|
@ -159,7 +159,7 @@
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="QWidget" name="entryGeneralWidget" native="true">
|
||||
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0" columnstretch="0,0,0,2,0,0,3">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
@ -172,151 +172,6 @@
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<spacer name="entryLeftHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="entryUsernameTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Username</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="entryUsernameLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">username</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<spacer name="entryMiddleHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>10</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QLabel" name="entryUrlTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>URL</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<widget class="ElidedLabel" name="entryUrlLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">https://example.com</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="entryLeftHorizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>30</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="entryPasswordTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
@ -339,6 +194,22 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<spacer name="entryLeftHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="2" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0">
|
||||
<property name="spacing">
|
||||
@ -358,28 +229,34 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="ElidedLabel" name="entryPasswordLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<widget class="QLineEdit" name="entryPasswordLabel">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<width>150</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">password</string>
|
||||
</property>
|
||||
<property name="frame">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<spacer name="entryMiddleHorizontalSpacer_3">
|
||||
<item row="0" column="4">
|
||||
<spacer name="entryMiddleHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@ -394,6 +271,56 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<widget class="ElidedLabel" name="entryUrlLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>150</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">https://example.com</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="entryNotesTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Notes</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QLabel" name="entryExpirationTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
@ -445,27 +372,21 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="entryNotesTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
<item row="1" column="0">
|
||||
<spacer name="entryLeftHorizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Notes</string>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>30</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
|
||||
</property>
|
||||
</widget>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="2" colspan="5">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0">
|
||||
@ -486,41 +407,120 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="entryNotesLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
<widget class="QTextEdit" name="entryNotesTextEdit">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</size>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">notes</string>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::RichText</enum>
|
||||
<property name="lineWidth">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignTop</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<property name="tabChangesFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="entryUsernameTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Username</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<spacer name="entryMiddleHorizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>10</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QLabel" name="entryUrlTitleLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>URL</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLineEdit" name="entryUsernameLabel">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>150</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">username</string>
|
||||
</property>
|
||||
<property name="frame">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="cursorPosition">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -1003,26 +1003,23 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="groupNotesLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
<widget class="QTextEdit" name="groupNotesTextEdit">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</size>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">notes</string>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignTop</set>
|
||||
<property name="lineWidth">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<property name="tabChangesFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
|
@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Weslly Honorato <weslly@protonmail.com>
|
||||
* Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
|
||||
* Copyright (C) 2019 KeePassXC Team <team@keepassxc.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -46,9 +45,11 @@ TotpSetupDialog::~TotpSetupDialog()
|
||||
void TotpSetupDialog::saveSettings()
|
||||
{
|
||||
// Secret key sanity check
|
||||
auto key = m_ui->seedEdit->text().toLatin1();
|
||||
// Convert user input to all uppercase and remove '='
|
||||
auto key = m_ui->seedEdit->text().toUpper().remove(" ").remove("=").toLatin1();
|
||||
auto sanitizedKey = Base32::sanitizeInput(key);
|
||||
if (sanitizedKey != key) {
|
||||
// Use startsWith to ignore added '=' for padding at the end
|
||||
if (!sanitizedKey.startsWith(key)) {
|
||||
MessageBox::information(this,
|
||||
tr("Invalid TOTP Secret"),
|
||||
tr("You have entered an invalid secret key. The key must be in Base32 format.\n"
|
||||
@ -112,7 +113,9 @@ void TotpSetupDialog::init()
|
||||
// Read entry totp settings
|
||||
auto settings = m_entry->totpSettings();
|
||||
if (settings) {
|
||||
m_ui->seedEdit->setText(settings->key);
|
||||
auto key = settings->key;
|
||||
m_ui->seedEdit->setText(key.remove("="));
|
||||
m_ui->seedEdit->setCursorPosition(0);
|
||||
m_ui->stepSpinBox->setValue(settings->step);
|
||||
|
||||
if (settings->encoder.shortName == Totp::STEAM_SHORTNAME) {
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "DatabaseSettingsWidgetStatistics.h"
|
||||
#include "ui_DatabaseSettingsWidgetStatistics.h"
|
||||
|
||||
#include "core/AsyncTask.h"
|
||||
#include "core/Database.h"
|
||||
#include "core/FilePath.h"
|
||||
#include "core/Group.h"
|
||||
@ -123,7 +124,8 @@ namespace
|
||||
++nPwdsShort;
|
||||
}
|
||||
|
||||
if (ZxcvbnMatch(pwd.toLatin1(), nullptr, nullptr) < 65) {
|
||||
// Speed up Zxcvbn process by excluding very long passwords and most passphrases
|
||||
if (pwd.size() < 25 && ZxcvbnMatch(pwd.toLatin1(), nullptr, nullptr) < 65) {
|
||||
++nPwdsWeak;
|
||||
}
|
||||
|
||||
@ -142,6 +144,11 @@ DatabaseSettingsWidgetStatistics::DatabaseSettingsWidgetStatistics(QWidget* pare
|
||||
, m_errIcon(FilePath::instance()->icon("status", "dialog-error"))
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
|
||||
m_referencesModel.reset(new QStandardItemModel());
|
||||
m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Value"));
|
||||
m_ui->statisticsTableView->setModel(m_referencesModel.data());
|
||||
m_ui->statisticsTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||
}
|
||||
|
||||
DatabaseSettingsWidgetStatistics::~DatabaseSettingsWidgetStatistics()
|
||||
@ -165,48 +172,63 @@ void DatabaseSettingsWidgetStatistics::addStatsRow(QString name, QString value,
|
||||
|
||||
void DatabaseSettingsWidgetStatistics::loadSettings(QSharedPointer<Database> db)
|
||||
{
|
||||
m_referencesModel.reset(new QStandardItemModel());
|
||||
m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Value"));
|
||||
m_db = std::move(db);
|
||||
m_statsCalculated = false;
|
||||
m_referencesModel->clear();
|
||||
addStatsRow(tr("Please wait, database statistics are being calculated..."), "");
|
||||
}
|
||||
|
||||
const auto stats = Stats(db);
|
||||
addStatsRow(tr("Database name"), db->metadata()->name());
|
||||
addStatsRow(tr("Description"), db->metadata()->description());
|
||||
addStatsRow(tr("Location"), db->filePath());
|
||||
addStatsRow(tr("Last saved"), stats.modified.toString(Qt::DefaultLocaleShortDate));
|
||||
void DatabaseSettingsWidgetStatistics::showEvent(QShowEvent* event)
|
||||
{
|
||||
QWidget::showEvent(event);
|
||||
|
||||
if (!m_statsCalculated) {
|
||||
// Perform stats calculation on next event loop to allow widget to appear
|
||||
m_statsCalculated = true;
|
||||
QTimer::singleShot(0, this, SLOT(calculateStats()));
|
||||
}
|
||||
}
|
||||
|
||||
void DatabaseSettingsWidgetStatistics::calculateStats()
|
||||
{
|
||||
const auto stats = AsyncTask::runAndWaitForFuture([this] { return new Stats(m_db); });
|
||||
|
||||
m_referencesModel->clear();
|
||||
addStatsRow(tr("Database name"), m_db->metadata()->name());
|
||||
addStatsRow(tr("Description"), m_db->metadata()->description());
|
||||
addStatsRow(tr("Location"), m_db->filePath());
|
||||
addStatsRow(tr("Last saved"), stats->modified.toString(Qt::DefaultLocaleShortDate));
|
||||
addStatsRow(tr("Unsaved changes"),
|
||||
db->isModified() ? tr("yes") : tr("no"),
|
||||
db->isModified(),
|
||||
m_db->isModified() ? tr("yes") : tr("no"),
|
||||
m_db->isModified(),
|
||||
tr("The database was modified, but the changes have not yet been saved to disk."));
|
||||
addStatsRow(tr("Number of groups"), QString::number(stats.nGroups));
|
||||
addStatsRow(tr("Number of entries"), QString::number(stats.nEntries));
|
||||
addStatsRow(tr("Number of groups"), QString::number(stats->nGroups));
|
||||
addStatsRow(tr("Number of entries"), QString::number(stats->nEntries));
|
||||
addStatsRow(tr("Number of expired entries"),
|
||||
QString::number(stats.nExpired),
|
||||
stats.isAnyExpired(),
|
||||
QString::number(stats->nExpired),
|
||||
stats->isAnyExpired(),
|
||||
tr("The database contains entries that have expired."));
|
||||
addStatsRow(tr("Unique passwords"), QString::number(stats.nPwdsUnique));
|
||||
addStatsRow(tr("Unique passwords"), QString::number(stats->nPwdsUnique));
|
||||
addStatsRow(tr("Non-unique passwords"),
|
||||
QString::number(stats.nPwdsReused),
|
||||
stats.areTooManyPwdsReused(),
|
||||
QString::number(stats->nPwdsReused),
|
||||
stats->areTooManyPwdsReused(),
|
||||
tr("More than 10% of passwords are reused. Use unique passwords when possible."));
|
||||
addStatsRow(tr("Maximum password reuse"),
|
||||
QString::number(stats.maxPwdReuse()),
|
||||
stats.arePwdsReusedTooOften(),
|
||||
QString::number(stats->maxPwdReuse()),
|
||||
stats->arePwdsReusedTooOften(),
|
||||
tr("Some passwords are used more than three times. Use unique passwords when possible."));
|
||||
addStatsRow(tr("Number of short passwords"),
|
||||
QString::number(stats.nPwdsShort),
|
||||
stats.nPwdsShort > 0,
|
||||
QString::number(stats->nPwdsShort),
|
||||
stats->nPwdsShort > 0,
|
||||
tr("Recommended minimum password length is at least 8 characters."));
|
||||
addStatsRow(tr("Number of weak passwords"),
|
||||
QString::number(stats.nPwdsWeak),
|
||||
stats.nPwdsWeak > 0,
|
||||
QString::number(stats->nPwdsWeak),
|
||||
stats->nPwdsWeak > 0,
|
||||
tr("Recommend using long, randomized passwords with a rating of 'good' or 'excellent'."));
|
||||
addStatsRow(tr("Average password length"),
|
||||
tr("%1 characters").arg(stats.averagePwdLength()),
|
||||
stats.isAvgPwdTooShort(),
|
||||
tr("%1 characters").arg(stats->averagePwdLength()),
|
||||
stats->isAvgPwdTooShort(),
|
||||
tr("Average password length is less than ten characters. Longer passwords provide more security."));
|
||||
|
||||
m_ui->sharedGroupsView->setModel(m_referencesModel.data());
|
||||
m_ui->sharedGroupsView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||
}
|
||||
|
||||
void DatabaseSettingsWidgetStatistics::saveSettings()
|
||||
|
@ -39,11 +39,19 @@ public:
|
||||
void loadSettings(QSharedPointer<Database> db);
|
||||
void saveSettings();
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent* event) override;
|
||||
|
||||
private slots:
|
||||
void calculateStats();
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::DatabaseSettingsWidgetStatistics> m_ui;
|
||||
|
||||
bool m_statsCalculated = false;
|
||||
QIcon m_errIcon;
|
||||
QScopedPointer<QStandardItemModel> m_referencesModel;
|
||||
QSharedPointer<Database> m_db;
|
||||
|
||||
void addStatsRow(QString name, QString value, bool bad = false, QString badMsg = "");
|
||||
};
|
||||
|
@ -24,13 +24,13 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="enableGroupBox">
|
||||
<widget class="QGroupBox" name="statisticsGroupBox">
|
||||
<property name="title">
|
||||
<string>Statistics</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QTableView" name="sharedGroupsView">
|
||||
<widget class="QTableView" name="statisticsTableView">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
@ -58,7 +58,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="tipLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
|
@ -35,7 +35,7 @@ AutoTypeMatchView::AutoTypeMatchView(QWidget* parent)
|
||||
m_sortModel->setDynamicSortFilter(true);
|
||||
m_sortModel->setSortLocaleAware(true);
|
||||
m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive);
|
||||
QTreeView::setModel(m_sortModel);
|
||||
setModel(m_sortModel);
|
||||
|
||||
setUniformRowHeights(true);
|
||||
setRootIsDecorated(false);
|
||||
@ -90,12 +90,26 @@ void AutoTypeMatchView::keyPressEvent(QKeyEvent* event)
|
||||
void AutoTypeMatchView::setMatchList(const QList<AutoTypeMatch>& matches)
|
||||
{
|
||||
m_model->setMatchList(matches);
|
||||
|
||||
bool sameSequences = true;
|
||||
if (matches.count() > 1) {
|
||||
QString sequenceTest = matches[0].sequence;
|
||||
for (const auto& match : matches) {
|
||||
if (match.sequence != sequenceTest) {
|
||||
sameSequences = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
setColumnHidden(AutoTypeMatchModel::Sequence, sameSequences);
|
||||
|
||||
for (int i = 0; i < m_model->columnCount(); ++i) {
|
||||
resizeColumnToContents(i);
|
||||
if (columnWidth(i) > 250) {
|
||||
setColumnWidth(i, 250);
|
||||
}
|
||||
}
|
||||
|
||||
setFirstMatchActive();
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#define KEEPASSX_APPKIT_H
|
||||
|
||||
#include <QObject>
|
||||
#include <CoreGraphics/CGEvent.h>
|
||||
#include <unistd.h>
|
||||
|
||||
class AppKit : public QObject
|
||||
{
|
||||
@ -37,9 +37,8 @@ public:
|
||||
bool hideProcess(pid_t pid);
|
||||
bool isHidden(pid_t pid);
|
||||
bool isDarkMode();
|
||||
void* addGlobalMonitor(CGKeyCode keycode, CGEventFlags modifier, void* userData, void (*handler)(void*));
|
||||
void removeGlobalMonitor(void* monitor);
|
||||
bool enableAccessibility();
|
||||
bool enableScreenRecording();
|
||||
|
||||
signals:
|
||||
void lockDatabases();
|
||||
@ -48,4 +47,4 @@ private:
|
||||
void* self;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_APPKIT_H
|
||||
#endif // KEEPASSX_APPKIT_H
|
||||
|
@ -19,7 +19,6 @@
|
||||
#import "AppKit.h"
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <AppKit/NSEvent.h>
|
||||
#import <AppKit/NSRunningApplication.h>
|
||||
|
||||
@interface AppKitImpl : NSObject
|
||||
@ -37,8 +36,7 @@
|
||||
- (bool) isHidden:(pid_t) pid;
|
||||
- (bool) isDarkMode;
|
||||
- (void) userSwitchHandler:(NSNotification*) notification;
|
||||
- (id) addGlobalMonitor:(NSEventMask) mask handler:(void (^)(NSEvent*)) handler;
|
||||
- (void) removeGlobalMonitor:(id) monitor;
|
||||
- (bool) enableAccessibility;
|
||||
- (bool) enableScreenRecording;
|
||||
|
||||
@end
|
||||
|
@ -19,6 +19,7 @@
|
||||
#import "AppKitImpl.h"
|
||||
|
||||
#import <AppKit/NSWorkspace.h>
|
||||
#import <CoreVideo/CVPixelBuffer.h>
|
||||
#import <Availability.h>
|
||||
|
||||
#if __MAC_OS_X_VERSION_MAX_ALLOWED < 101200
|
||||
@ -123,42 +124,41 @@ static const NSEventMask NSEventMaskKeyDown = NSKeyDownMask;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Add global event monitor
|
||||
//
|
||||
- (id) addGlobalMonitor:(NSEventMask) mask handler:(void (^)(NSEvent*)) handler
|
||||
{
|
||||
return [NSEvent addGlobalMonitorForEventsMatchingMask:mask handler:handler];
|
||||
}
|
||||
|
||||
//
|
||||
// Remove global event monitor
|
||||
//
|
||||
- (void) removeGlobalMonitor:(id) monitor
|
||||
{
|
||||
[NSEvent removeMonitor:monitor];
|
||||
}
|
||||
|
||||
//
|
||||
// Check if accessibility is enabled, may show an popup asking for permissions
|
||||
//
|
||||
- (bool) enableAccessibility
|
||||
{
|
||||
// Request a 1 pixel screenshot to trigger the permissions
|
||||
// required for screen reader access. These are necessary
|
||||
// for Auto-Type to find the window titles in macOS 10.15+
|
||||
CGImageRef screenshot = CGWindowListCreateImage(
|
||||
CGRectMake(0, 0, 1, 1),
|
||||
kCGWindowListOptionOnScreenOnly,
|
||||
kCGNullWindowID,
|
||||
kCGWindowImageDefault);
|
||||
CFRelease(screenshot);
|
||||
|
||||
// Request accessibility permissions for Auto-Type type on behalf of the user
|
||||
NSDictionary* opts = @{static_cast<id>(kAXTrustedCheckOptionPrompt): @YES};
|
||||
return AXIsProcessTrustedWithOptions(static_cast<CFDictionaryRef>(opts));
|
||||
}
|
||||
|
||||
//
|
||||
// Check if screen recording is enabled, may show an popup asking for permissions
|
||||
//
|
||||
- (bool) enableScreenRecording
|
||||
{
|
||||
if (@available(macOS 10.15, *)) {
|
||||
// Request screen recording permission on macOS 10.15+
|
||||
// This is necessary to get the current window title
|
||||
CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil,
|
||||
^(CGDisplayStreamFrameStatus status, uint64_t displayTime,
|
||||
IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
|
||||
Q_UNUSED(status);
|
||||
Q_UNUSED(displayTime);
|
||||
Q_UNUSED(frameSurface);
|
||||
Q_UNUSED(updateRef);
|
||||
});
|
||||
if (stream) {
|
||||
CFRelease(stream);
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
//
|
||||
@ -211,21 +211,12 @@ bool AppKit::isDarkMode()
|
||||
return [static_cast<id>(self) isDarkMode];
|
||||
}
|
||||
|
||||
void* AppKit::addGlobalMonitor(CGKeyCode keycode, CGEventFlags modifier, void* userData, void (*handler)(void*))
|
||||
{
|
||||
return [static_cast<id>(self) addGlobalMonitor:NSEventMaskKeyDown handler:^(NSEvent* event) {
|
||||
if (event.keyCode == keycode && (event.modifierFlags & modifier) == modifier) {
|
||||
handler(userData);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
void AppKit::removeGlobalMonitor(void* monitor)
|
||||
{
|
||||
[static_cast<id>(self) removeGlobalMonitor:static_cast<id>(monitor)];
|
||||
}
|
||||
|
||||
bool AppKit::enableAccessibility()
|
||||
{
|
||||
return [static_cast<id>(self) enableAccessibility];
|
||||
}
|
||||
|
||||
bool AppKit::enableScreenRecording()
|
||||
{
|
||||
return [static_cast<id>(self) enableScreenRecording];
|
||||
}
|
||||
|
@ -21,7 +21,8 @@
|
||||
|
||||
MacUtils* MacUtils::m_instance = nullptr;
|
||||
|
||||
MacUtils::MacUtils(QObject* parent) : QObject(parent)
|
||||
MacUtils::MacUtils(QObject* parent)
|
||||
: QObject(parent)
|
||||
, m_appkit(new AppKit())
|
||||
{
|
||||
connect(m_appkit.data(), SIGNAL(lockDatabases()), SIGNAL(lockDatabases()));
|
||||
@ -29,7 +30,6 @@ MacUtils::MacUtils(QObject* parent) : QObject(parent)
|
||||
|
||||
MacUtils::~MacUtils()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
MacUtils* MacUtils::instance()
|
||||
@ -76,17 +76,12 @@ bool MacUtils::isDarkMode()
|
||||
return m_appkit->isDarkMode();
|
||||
}
|
||||
|
||||
void* MacUtils::addGlobalMonitor(CGKeyCode keycode, CGEventFlags modifier, void* userData, void (*handler)(void*))
|
||||
{
|
||||
return m_appkit->addGlobalMonitor(keycode, modifier, userData, handler);
|
||||
}
|
||||
|
||||
void MacUtils::removeGlobalMonitor(void* monitor)
|
||||
{
|
||||
m_appkit->removeGlobalMonitor(monitor);
|
||||
}
|
||||
|
||||
bool MacUtils::enableAccessibility()
|
||||
{
|
||||
return m_appkit->enableAccessibility();
|
||||
}
|
||||
|
||||
bool MacUtils::enableScreenRecording()
|
||||
{
|
||||
return m_appkit->enableScreenRecording();
|
||||
}
|
||||
|
@ -19,9 +19,9 @@
|
||||
#ifndef KEEPASSXC_MACUTILS_H
|
||||
#define KEEPASSXC_MACUTILS_H
|
||||
|
||||
#include "AppKit.h"
|
||||
#include <QObject>
|
||||
#include <QWidget>
|
||||
#include "AppKit.h"
|
||||
|
||||
class MacUtils : public QObject
|
||||
{
|
||||
@ -38,9 +38,8 @@ public:
|
||||
bool hideOwnWindow();
|
||||
bool isHidden();
|
||||
bool isDarkMode();
|
||||
void* addGlobalMonitor(CGKeyCode keycode, CGEventFlags modifier, void* userData, void (*handler)(void*));
|
||||
void removeGlobalMonitor(void* monitor);
|
||||
bool enableAccessibility();
|
||||
bool enableScreenRecording();
|
||||
|
||||
signals:
|
||||
void lockDatabases();
|
||||
|
@ -48,19 +48,29 @@ PasswordKey::~PasswordKey()
|
||||
}
|
||||
}
|
||||
|
||||
QSharedPointer<PasswordKey> PasswordKey::fromRawKey(const QByteArray& rawKey)
|
||||
{
|
||||
auto result = QSharedPointer<PasswordKey>::create();
|
||||
std::memcpy(result->m_key, rawKey.data(), std::min(SHA256_SIZE, rawKey.size()));
|
||||
return result;
|
||||
}
|
||||
|
||||
QByteArray PasswordKey::rawKey() const
|
||||
{
|
||||
if (!m_isInitialized) {
|
||||
return {};
|
||||
}
|
||||
return QByteArray::fromRawData(m_key, SHA256_SIZE);
|
||||
}
|
||||
|
||||
void PasswordKey::setPassword(const QString& password)
|
||||
{
|
||||
std::memcpy(m_key, CryptoHash::hash(password.toUtf8(), CryptoHash::Sha256).data(), SHA256_SIZE);
|
||||
setHash(CryptoHash::hash(password.toUtf8(), CryptoHash::Sha256));
|
||||
}
|
||||
|
||||
void PasswordKey::setHash(const QByteArray& hash)
|
||||
{
|
||||
Q_ASSERT(hash.size() == SHA256_SIZE);
|
||||
std::memcpy(m_key, hash.data(), std::min(SHA256_SIZE, hash.size()));
|
||||
m_isInitialized = true;
|
||||
}
|
||||
|
||||
QSharedPointer<PasswordKey> PasswordKey::fromRawKey(const QByteArray& rawKey)
|
||||
{
|
||||
auto result = QSharedPointer<PasswordKey>::create();
|
||||
result->setHash(rawKey);
|
||||
return result;
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ public:
|
||||
~PasswordKey() override;
|
||||
QByteArray rawKey() const override;
|
||||
void setPassword(const QString& password);
|
||||
void setHash(const QByteArray& hash);
|
||||
|
||||
static QSharedPointer<PasswordKey> fromRawKey(const QByteArray& rawKey);
|
||||
|
||||
@ -40,6 +41,7 @@ private:
|
||||
static constexpr int SHA256_SIZE = 32;
|
||||
|
||||
char* m_key = nullptr;
|
||||
bool m_isInitialized = false;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_PASSWORDKEY_H
|
||||
|
@ -60,7 +60,7 @@ int main(int argc, char** argv)
|
||||
#endif
|
||||
|
||||
Application app(argc, argv);
|
||||
Application::setApplicationName("keepassxc");
|
||||
Application::setApplicationName("KeePassXC");
|
||||
Application::setApplicationVersion(KEEPASSXC_VERSION);
|
||||
// don't set organizationName as that changes the return value of
|
||||
// QStandardPaths::writableLocation(QDesktopServices::DataLocation)
|
||||
|
@ -152,7 +152,7 @@ QString Totp::writeSettings(const QSharedPointer<Totp::Settings>& settings,
|
||||
auto urlstring = QString("otpauth://totp/%1:%2?secret=%3&period=%4&digits=%5&issuer=%1")
|
||||
.arg(title.isEmpty() ? "KeePassXC" : QString(QUrl::toPercentEncoding(title)),
|
||||
username.isEmpty() ? "none" : QString(QUrl::toPercentEncoding(username)),
|
||||
QString(Base32::sanitizeInput(settings->key.toLatin1())),
|
||||
QString(QUrl::toPercentEncoding(Base32::sanitizeInput(settings->key.toLatin1()))),
|
||||
QString::number(settings->step),
|
||||
QString::number(settings->digits));
|
||||
|
||||
|
@ -147,7 +147,7 @@ void TestBrowser::testSortPriority()
|
||||
entry6->setUrl("http://github.com/login");
|
||||
entry7->setUrl("github.com");
|
||||
entry8->setUrl("github.com/login");
|
||||
entry9->setUrl("https://github");
|
||||
entry9->setUrl("https://github"); // Invalid URL
|
||||
entry10->setUrl("github.com");
|
||||
|
||||
// The extension uses the submitUrl as default for comparison
|
||||
@ -170,7 +170,7 @@ void TestBrowser::testSortPriority()
|
||||
QCOMPARE(res6, 0);
|
||||
QCOMPARE(res7, 0);
|
||||
QCOMPARE(res8, 0);
|
||||
QCOMPARE(res9, 90);
|
||||
QCOMPARE(res9, 0);
|
||||
QCOMPARE(res10, 0);
|
||||
}
|
||||
|
||||
@ -188,7 +188,7 @@ void TestBrowser::testSearchEntries()
|
||||
urls.push_back("http://github.com/login");
|
||||
urls.push_back("github.com");
|
||||
urls.push_back("github.com/login");
|
||||
urls.push_back("https://github");
|
||||
urls.push_back("https://github"); // Invalid URL
|
||||
urls.push_back("github.com");
|
||||
|
||||
for (int i = 0; i < urls.length(); ++i) {
|
||||
@ -202,24 +202,23 @@ void TestBrowser::testSearchEntries()
|
||||
|
||||
browserSettings()->setMatchUrlScheme(false);
|
||||
auto result = m_browserService->searchEntries(db, "github.com", "https://github.com"); // db, hostname, url
|
||||
|
||||
QCOMPARE(result.length(), 9);
|
||||
QCOMPARE(result[0]->url(), QString("https://github.com/login_page"));
|
||||
QCOMPARE(result[1]->url(), QString("https://github.com/login"));
|
||||
QCOMPARE(result[2]->url(), QString("https://github.com/"));
|
||||
QCOMPARE(result[3]->url(), QString("github.com/login"));
|
||||
QCOMPARE(result[4]->url(), QString("http://github.com"));
|
||||
QCOMPARE(result[5]->url(), QString("http://github.com/login"));
|
||||
|
||||
// With matching there should be only 3 results + 4 without a scheme
|
||||
browserSettings()->setMatchUrlScheme(true);
|
||||
result = m_browserService->searchEntries(db, "github.com", "https://github.com"); // db, hostname, url
|
||||
QCOMPARE(result.length(), 7);
|
||||
QCOMPARE(result[0]->url(), QString("https://github.com/login_page"));
|
||||
QCOMPARE(result[1]->url(), QString("https://github.com/login"));
|
||||
QCOMPARE(result[2]->url(), QString("https://github.com/"));
|
||||
QCOMPARE(result[3]->url(), QString("http://github.com"));
|
||||
QCOMPARE(result[4]->url(), QString("http://github.com/login"));
|
||||
QCOMPARE(result[5]->url(), QString("github.com"));
|
||||
QCOMPARE(result[6]->url(), QString("github.com"));
|
||||
|
||||
// With matching there should be only 5 results
|
||||
browserSettings()->setMatchUrlScheme(true);
|
||||
result = m_browserService->searchEntries(db, "github.com", "https://github.com"); // db, hostname, url
|
||||
QCOMPARE(result.length(), 5);
|
||||
QCOMPARE(result[0]->url(), QString("https://github.com/login_page"));
|
||||
QCOMPARE(result[1]->url(), QString("https://github.com/login"));
|
||||
QCOMPARE(result[2]->url(), QString("https://github.com/"));
|
||||
QCOMPARE(result[3]->url(), QString("github.com"));
|
||||
QCOMPARE(result[4]->url(), QString("github.com"));
|
||||
QCOMPARE(result[3]->url(), QString("github.com/login"));
|
||||
}
|
||||
|
||||
void TestBrowser::testSearchEntriesWithPort()
|
||||
@ -242,7 +241,7 @@ void TestBrowser::testSearchEntriesWithPort()
|
||||
|
||||
auto result = m_browserService->searchEntries(db, "127.0.0.1", "http://127.0.0.1:443"); // db, hostname, url
|
||||
QCOMPARE(result.length(), 1);
|
||||
QCOMPARE(result[0]->url(), QString("http://127.0.0.1:443"));
|
||||
QCOMPARE(result[0]->url(), urls[0]);
|
||||
}
|
||||
|
||||
void TestBrowser::testSearchEntriesWithAdditionalURLs()
|
||||
@ -271,12 +270,94 @@ void TestBrowser::testSearchEntriesWithAdditionalURLs()
|
||||
|
||||
auto result = m_browserService->searchEntries(db, "github.com", "https://github.com"); // db, hostname, url
|
||||
QCOMPARE(result.length(), 1);
|
||||
QCOMPARE(result[0]->url(), QString("https://github.com/"));
|
||||
QCOMPARE(result[0]->url(), urls[0]);
|
||||
|
||||
// Search the additional URL. It should return the same entry
|
||||
auto additionalResult = m_browserService->searchEntries(db, "keepassxc.org", "https://keepassxc.org");
|
||||
QCOMPARE(additionalResult.length(), 1);
|
||||
QCOMPARE(additionalResult[0]->url(), QString("https://github.com/"));
|
||||
QCOMPARE(additionalResult[0]->url(), urls[0]);
|
||||
}
|
||||
|
||||
void TestBrowser::testInvalidEntries()
|
||||
{
|
||||
auto db = QSharedPointer<Database>::create();
|
||||
auto* root = db->rootGroup();
|
||||
|
||||
QList<QString> urls;
|
||||
urls.push_back("https://github.com/login");
|
||||
urls.push_back("https:///github.com/"); // Extra '/'
|
||||
urls.push_back("http://github.com/**//*");
|
||||
urls.push_back("http://*.github.com/login");
|
||||
urls.push_back("//github.com"); // fromUserInput() corrects this one.
|
||||
urls.push_back("github.com/{}<>");
|
||||
|
||||
for (int i = 0; i < urls.length(); ++i) {
|
||||
auto entry = new Entry();
|
||||
entry->setGroup(root);
|
||||
entry->beginUpdate();
|
||||
entry->setUrl(urls[i]);
|
||||
entry->setUsername(QString("User %1").arg(i));
|
||||
entry->endUpdate();
|
||||
}
|
||||
|
||||
browserSettings()->setMatchUrlScheme(true);
|
||||
auto result = m_browserService->searchEntries(db, "github.com", "https://github.com"); // db, hostname, url
|
||||
QCOMPARE(result.length(), 2);
|
||||
QCOMPARE(result[0]->url(), QString("https://github.com/login"));
|
||||
QCOMPARE(result[1]->url(), QString("//github.com"));
|
||||
|
||||
// Test the URL's directly
|
||||
QCOMPARE(m_browserService->handleURL(urls[0], "github.com", "https://github.com"), true);
|
||||
QCOMPARE(m_browserService->handleURL(urls[1], "github.com", "https://github.com"), false);
|
||||
QCOMPARE(m_browserService->handleURL(urls[2], "github.com", "https://github.com"), false);
|
||||
QCOMPARE(m_browserService->handleURL(urls[3], "github.com", "https://github.com"), false);
|
||||
QCOMPARE(m_browserService->handleURL(urls[4], "github.com", "https://github.com"), true);
|
||||
QCOMPARE(m_browserService->handleURL(urls[5], "github.com", "https://github.com"), false);
|
||||
}
|
||||
|
||||
void TestBrowser::testSubdomainsAndPaths()
|
||||
{
|
||||
auto db = QSharedPointer<Database>::create();
|
||||
auto* root = db->rootGroup();
|
||||
|
||||
QList<QString> urls;
|
||||
urls.push_back("https://www.github.com/login/page.xml");
|
||||
urls.push_back("https://login.github.com/");
|
||||
urls.push_back("https://github.com");
|
||||
urls.push_back("http://www.github.com");
|
||||
urls.push_back("http://login.github.com/pathtonowhere");
|
||||
urls.push_back(".github.com"); // Invalid URL
|
||||
urls.push_back("www.github.com/");
|
||||
urls.push_back("https://github"); // Invalid URL
|
||||
|
||||
for (int i = 0; i < urls.length(); ++i) {
|
||||
auto entry = new Entry();
|
||||
entry->setGroup(root);
|
||||
entry->beginUpdate();
|
||||
entry->setUrl(urls[i]);
|
||||
entry->setUsername(QString("User %1").arg(i));
|
||||
entry->endUpdate();
|
||||
}
|
||||
|
||||
browserSettings()->setMatchUrlScheme(false);
|
||||
auto result = m_browserService->searchEntries(db, "github.com", "https://github.com"); // db, hostname, url
|
||||
|
||||
QCOMPARE(result.length(), 6);
|
||||
QCOMPARE(result[0]->url(), urls[0]);
|
||||
QCOMPARE(result[1]->url(), urls[1]);
|
||||
QCOMPARE(result[2]->url(), urls[2]);
|
||||
QCOMPARE(result[3]->url(), urls[3]);
|
||||
QCOMPARE(result[4]->url(), urls[4]);
|
||||
QCOMPARE(result[5]->url(), urls[6]);
|
||||
|
||||
// With matching there should be only 3 results
|
||||
browserSettings()->setMatchUrlScheme(true);
|
||||
result = m_browserService->searchEntries(db, "github.com", "https://github.com"); // db, hostname, url
|
||||
QCOMPARE(result.length(), 4);
|
||||
QCOMPARE(result[0]->url(), urls[0]);
|
||||
QCOMPARE(result[1]->url(), urls[1]);
|
||||
QCOMPARE(result[2]->url(), urls[2]);
|
||||
QCOMPARE(result[3]->url(), urls[6]);
|
||||
}
|
||||
|
||||
void TestBrowser::testSortEntries()
|
||||
@ -293,7 +374,7 @@ void TestBrowser::testSortEntries()
|
||||
urls.push_back("http://github.com/login");
|
||||
urls.push_back("github.com");
|
||||
urls.push_back("github.com/login");
|
||||
urls.push_back("https://github");
|
||||
urls.push_back("https://github"); // Invalid URL
|
||||
urls.push_back("github.com");
|
||||
|
||||
QList<Entry*> entries;
|
||||
@ -313,12 +394,13 @@ void TestBrowser::testSortEntries()
|
||||
QCOMPARE(result.size(), 10);
|
||||
QCOMPARE(result[0]->username(), QString("User 2"));
|
||||
QCOMPARE(result[0]->url(), QString("https://github.com/"));
|
||||
QCOMPARE(result[1]->username(), QString("User 8"));
|
||||
QCOMPARE(result[1]->url(), QString("https://github"));
|
||||
QCOMPARE(result[2]->username(), QString("User 0"));
|
||||
QCOMPARE(result[2]->url(), QString("https://github.com/login_page"));
|
||||
QCOMPARE(result[3]->username(), QString("User 1"));
|
||||
QCOMPARE(result[3]->url(), QString("https://github.com/login"));
|
||||
QCOMPARE(result[1]->username(), QString("User 0"));
|
||||
QCOMPARE(result[1]->url(), QString("https://github.com/login_page"));
|
||||
QCOMPARE(result[2]->username(), QString("User 1"));
|
||||
QCOMPARE(result[2]->url(), QString("https://github.com/login"));
|
||||
QCOMPARE(result[3]->username(), QString("User 3"));
|
||||
QCOMPARE(result[3]->url(), QString("github.com/login"));
|
||||
|
||||
}
|
||||
|
||||
void TestBrowser::testGetDatabaseGroups()
|
||||
|
@ -43,6 +43,8 @@ private slots:
|
||||
void testSearchEntries();
|
||||
void testSearchEntriesWithPort();
|
||||
void testSearchEntriesWithAdditionalURLs();
|
||||
void testInvalidEntries();
|
||||
void testSubdomainsAndPaths();
|
||||
void testSortEntries();
|
||||
void testGetDatabaseGroups();
|
||||
|
||||
|
@ -197,22 +197,22 @@ void TestEntrySearcher::testSearchTermParser()
|
||||
|
||||
QCOMPARE(terms.length(), 5);
|
||||
|
||||
QCOMPARE(terms[0]->field, EntrySearcher::Field::Undefined);
|
||||
QCOMPARE(terms[0]->word, QString("test"));
|
||||
QCOMPARE(terms[0]->exclude, true);
|
||||
QCOMPARE(terms[0].field, EntrySearcher::Field::Undefined);
|
||||
QCOMPARE(terms[0].word, QString("test"));
|
||||
QCOMPARE(terms[0].exclude, true);
|
||||
|
||||
QCOMPARE(terms[1]->field, EntrySearcher::Field::Undefined);
|
||||
QCOMPARE(terms[1]->word, QString("quoted \\\"string\\\""));
|
||||
QCOMPARE(terms[1]->exclude, false);
|
||||
QCOMPARE(terms[1].field, EntrySearcher::Field::Undefined);
|
||||
QCOMPARE(terms[1].word, QString("quoted \\\"string\\\""));
|
||||
QCOMPARE(terms[1].exclude, false);
|
||||
|
||||
QCOMPARE(terms[2]->field, EntrySearcher::Field::Username);
|
||||
QCOMPARE(terms[2]->word, QString("user"));
|
||||
QCOMPARE(terms[2].field, EntrySearcher::Field::Username);
|
||||
QCOMPARE(terms[2].word, QString("user"));
|
||||
|
||||
QCOMPARE(terms[3]->field, EntrySearcher::Field::Password);
|
||||
QCOMPARE(terms[3]->word, QString("test me"));
|
||||
QCOMPARE(terms[3].field, EntrySearcher::Field::Password);
|
||||
QCOMPARE(terms[3].word, QString("test me"));
|
||||
|
||||
QCOMPARE(terms[4]->field, EntrySearcher::Field::Undefined);
|
||||
QCOMPARE(terms[4]->word, QString("noquote"));
|
||||
QCOMPARE(terms[4].field, EntrySearcher::Field::Undefined);
|
||||
QCOMPARE(terms[4].word, QString("noquote"));
|
||||
|
||||
// Test wildcard and regex search terms
|
||||
m_entrySearcher.parseSearchTerms("+url:*.google.com *user:\\d+\\w{2}");
|
||||
@ -220,11 +220,11 @@ void TestEntrySearcher::testSearchTermParser()
|
||||
|
||||
QCOMPARE(terms.length(), 2);
|
||||
|
||||
QCOMPARE(terms[0]->field, EntrySearcher::Field::Url);
|
||||
QCOMPARE(terms[0]->regex.pattern(), QString("^.*\\.google\\.com$"));
|
||||
QCOMPARE(terms[0].field, EntrySearcher::Field::Url);
|
||||
QCOMPARE(terms[0].regex.pattern(), QString("^.*\\.google\\.com$"));
|
||||
|
||||
QCOMPARE(terms[1]->field, EntrySearcher::Field::Username);
|
||||
QCOMPARE(terms[1]->regex.pattern(), QString("\\d+\\w{2}"));
|
||||
QCOMPARE(terms[1].field, EntrySearcher::Field::Username);
|
||||
QCOMPARE(terms[1].regex.pattern(), QString("\\d+\\w{2}"));
|
||||
|
||||
// Test custom attribute search terms
|
||||
m_entrySearcher.parseSearchTerms("+_abc:efg _def:\"ddd\"");
|
||||
@ -232,13 +232,13 @@ void TestEntrySearcher::testSearchTermParser()
|
||||
|
||||
QCOMPARE(terms.length(), 2);
|
||||
|
||||
QCOMPARE(terms[0]->field, EntrySearcher::Field::AttributeValue);
|
||||
QCOMPARE(terms[0]->word, QString("abc"));
|
||||
QCOMPARE(terms[0]->regex.pattern(), QString("^efg$"));
|
||||
QCOMPARE(terms[0].field, EntrySearcher::Field::AttributeValue);
|
||||
QCOMPARE(terms[0].word, QString("abc"));
|
||||
QCOMPARE(terms[0].regex.pattern(), QString("^efg$"));
|
||||
|
||||
QCOMPARE(terms[1]->field, EntrySearcher::Field::AttributeValue);
|
||||
QCOMPARE(terms[1]->word, QString("def"));
|
||||
QCOMPARE(terms[1]->regex.pattern(), QString("ddd"));
|
||||
QCOMPARE(terms[1].field, EntrySearcher::Field::AttributeValue);
|
||||
QCOMPARE(terms[1].word, QString("def"));
|
||||
QCOMPARE(terms[1].regex.pattern(), QString("ddd"));
|
||||
}
|
||||
|
||||
void TestEntrySearcher::testCustomAttributesAreSearched()
|
||||
|
@ -19,8 +19,11 @@
|
||||
|
||||
#include "TestGlobal.h"
|
||||
|
||||
#include "core/EntrySearcher.h"
|
||||
#include "fdosecrets/GcryptMPI.h"
|
||||
#include "fdosecrets/objects/SessionCipher.h"
|
||||
#include "fdosecrets/objects/Collection.h"
|
||||
#include "fdosecrets/objects/Item.h"
|
||||
|
||||
#include "crypto/Crypto.h"
|
||||
|
||||
@ -90,3 +93,22 @@ void TestFdoSecrets::testDhIetf1024Sha256Aes128CbcPkcs7()
|
||||
|
||||
QCOMPARE(cipher->m_aesKey.toHex(), QByteArrayLiteral("6b8f5ee55138eac37118508be21e7834"));
|
||||
}
|
||||
|
||||
void TestFdoSecrets::testCrazyAttributeKey()
|
||||
{
|
||||
using FdoSecrets::Item;
|
||||
using FdoSecrets::Collection;
|
||||
|
||||
const QScopedPointer<Group> root(new Group());
|
||||
const QScopedPointer<Entry> e1(new Entry());
|
||||
e1->setGroup(root.data());
|
||||
|
||||
const QString key = "_a:bc&-+'-e%12df_d";
|
||||
const QString value = "value";
|
||||
e1->attributes()->set(key, value);
|
||||
|
||||
// search for custom entries
|
||||
const auto term = Collection::attributeToTerm(key, value);
|
||||
const auto res = EntrySearcher().search({term}, root.data());
|
||||
QCOMPARE(res.count(), 1);
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ private slots:
|
||||
|
||||
void testGcryptMPI();
|
||||
void testDhIetf1024Sha256Aes128CbcPkcs7();
|
||||
void testCrazyAttributeKey();
|
||||
};
|
||||
|
||||
#endif // KEEPASSXC_TESTFDOSECRETS_H
|
||||
|
@ -756,7 +756,8 @@ void TestGui::testTotp()
|
||||
|
||||
QApplication::processEvents();
|
||||
|
||||
QString exampleSeed = "gezdgnbvgy3tqojqgezdgnbvgy3tqojq";
|
||||
QString exampleSeed = "gezd gnbvgY 3tqojqGEZdgnb vgy3tqoJq===";
|
||||
QString expectedFinalSeed = exampleSeed.toUpper().remove(" ").remove("=");
|
||||
auto* seedEdit = setupTotpDialog->findChild<QLineEdit*>("seedEdit");
|
||||
seedEdit->setText("");
|
||||
QTest::keyClicks(seedEdit, exampleSeed);
|
||||
@ -781,7 +782,7 @@ void TestGui::testTotp()
|
||||
editEntryWidget->setCurrentPage(1);
|
||||
auto* attrTextEdit = editEntryWidget->findChild<QPlainTextEdit*>("attributesEdit");
|
||||
QTest::mouseClick(editEntryWidget->findChild<QAbstractButton*>("revealAttributeButton"), Qt::LeftButton);
|
||||
QCOMPARE(attrTextEdit->toPlainText(), exampleSeed);
|
||||
QCOMPARE(attrTextEdit->toPlainText(), expectedFinalSeed);
|
||||
|
||||
auto* editEntryWidgetButtonBox = editEntryWidget->findChild<QDialogButtonBox*>("buttonBox");
|
||||
QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton);
|
||||
|
Loading…
Reference in New Issue
Block a user