Compare commits
270 Commits
2.6.0-beta
...
feature/up
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a59de91d92 | ||
|
|
fd0bdaae80 | ||
|
|
60adcacaaa | ||
|
|
cc6f5c3226 | ||
|
|
8c61a73bb0 | ||
|
|
e1c8304c4b | ||
|
|
ee92b980bb | ||
|
|
17326dc3ec | ||
|
|
3c2abaaa82 | ||
|
|
64279bb881 | ||
|
|
8a7be101e4 | ||
|
|
be3e77d721 | ||
|
|
dc496fd1d9 | ||
|
|
01d86760e0 | ||
|
|
7b7f52c8af | ||
|
|
5c709f0da3 | ||
|
|
9fee79ea96 | ||
|
|
91e74944f3 | ||
|
|
c0ae130656 | ||
|
|
7fe0e2629c | ||
|
|
805574cac1 | ||
|
|
31aa5e12e5 | ||
|
|
9b8feed3ed | ||
|
|
ed0ece304d | ||
|
|
80809ace67 | ||
|
|
86ddd702fb | ||
|
|
871c4fffdd | ||
|
|
ca8abecc4b | ||
|
|
371bd2e51b | ||
|
|
c19efb5b19 | ||
|
|
439c155552 | ||
|
|
8c9530e3ec | ||
|
|
4d07507739 | ||
|
|
2423bede60 | ||
|
|
8b8fb9562f | ||
|
|
e29cf8bfef | ||
|
|
d6b69204a6 | ||
|
|
bc08913c61 | ||
|
|
57af7c131d | ||
|
|
6c7b04fee8 | ||
|
|
4e8b00da34 | ||
|
|
b9ea6fd2e7 | ||
|
|
022154462e | ||
|
|
c9c19d043f | ||
|
|
c5a2aa0a2a | ||
|
|
2d66786656 | ||
|
|
3ccd4f9b14 | ||
|
|
46f5596e59 | ||
|
|
c0d673b46f | ||
|
|
8d058cbd04 | ||
|
|
02446af743 | ||
|
|
813ab47e29 | ||
|
|
027ff9f2bf | ||
|
|
d9ae449f04 | ||
|
|
7ce35f81de | ||
|
|
f3d88fbd36 | ||
|
|
4f7460afbd | ||
|
|
75e4329c80 | ||
|
|
af55d1b1b3 | ||
|
|
a5094dd3ea | ||
|
|
9a8a5a0006 | ||
|
|
33e6da33ca | ||
|
|
1385929089 | ||
|
|
61b85183f9 | ||
|
|
4e90cb5818 | ||
|
|
b55f419386 | ||
|
|
c7323accf2 | ||
|
|
2e6c22d44d | ||
|
|
3b30855855 | ||
|
|
fff15d2d4d | ||
|
|
86278311d2 | ||
|
|
beae1869a3 | ||
|
|
835d51c59f | ||
|
|
38bf2ceb78 | ||
|
|
bbc71b3144 | ||
|
|
7078086b50 | ||
|
|
618c1166ce | ||
|
|
0a0b3a6b4f | ||
|
|
23ca46c918 | ||
|
|
9a7b20cbfd | ||
|
|
80c1b9be6a | ||
|
|
49d2b87889 | ||
|
|
66f5a8736a | ||
|
|
37dab85df7 | ||
|
|
14b01784ec | ||
|
|
a74e2391e8 | ||
|
|
4b5248ee98 | ||
|
|
60c2d89cb0 | ||
|
|
f9b2cf8484 | ||
|
|
260c84ccf0 | ||
|
|
e8dfa9cfa1 | ||
|
|
cd0084f21c | ||
|
|
404fd941e8 | ||
|
|
2ee4168956 | ||
|
|
f0204dbb10 | ||
|
|
a6f01349e8 | ||
|
|
c9d1512748 | ||
|
|
de44764efa | ||
|
|
c9e7ffadad | ||
|
|
5ea46d4c12 | ||
|
|
3b29f20d60 | ||
|
|
59bd238ae1 | ||
|
|
a273deae12 | ||
|
|
2fe9ea3f41 | ||
|
|
30989e35bf | ||
|
|
7ac651763c | ||
|
|
748a6b5ce1 | ||
|
|
3f7e79cdf3 | ||
|
|
30c2e39e70 | ||
|
|
9cb36abe91 | ||
|
|
1dd99559bb | ||
|
|
9a96124040 | ||
|
|
c6bd22aa12 | ||
|
|
3d10f31211 | ||
|
|
9f4118974d | ||
|
|
7f85eb77aa | ||
|
|
a651d7049d | ||
|
|
804a3b6706 | ||
|
|
f5caf3968f | ||
|
|
000e1823ac | ||
|
|
f8f2271f33 | ||
|
|
15dc6f062e | ||
|
|
91dea9cbc4 | ||
|
|
fb8423fdca | ||
|
|
cd519e1bf3 | ||
|
|
e9b9582817 | ||
|
|
4f61f57c14 | ||
|
|
1c88b6339c | ||
|
|
8b8cc2fa20 | ||
|
|
59b8b13146 | ||
|
|
eb6f0eb346 | ||
|
|
0c5dd1556a | ||
|
|
b10a55a547 | ||
|
|
389899e0c6 | ||
|
|
b0e038e789 | ||
|
|
a09acc86d0 | ||
|
|
1ad9c1257b | ||
|
|
d7a9e48a9c | ||
|
|
dc57025218 | ||
|
|
1ed5cc9898 | ||
|
|
39f1504ca2 | ||
|
|
12782161bc | ||
|
|
c2f36d877f | ||
|
|
fd3cc7e8c3 | ||
|
|
bf2cad28af | ||
|
|
fa546c440e | ||
|
|
34b44e7496 | ||
|
|
48d9fb3e79 | ||
|
|
fb87b1c794 | ||
|
|
af4ecb4aa1 | ||
|
|
ba8611cf4c | ||
|
|
9bffe05020 | ||
|
|
8f84675874 | ||
|
|
2e7a44de61 | ||
|
|
a55bb39f20 | ||
|
|
8424acda4d | ||
|
|
bb7a74b632 | ||
|
|
443b9e4d37 | ||
|
|
7426693f1d | ||
|
|
fd8d81f517 | ||
|
|
e1c2537084 | ||
|
|
9fd9d65995 | ||
|
|
829697d53e | ||
|
|
9886b1075f | ||
|
|
122051c91c | ||
|
|
55e4889053 | ||
|
|
ac5c1af829 | ||
|
|
d3747f40e2 | ||
|
|
55eb855267 | ||
|
|
3c5bd0ff6b | ||
|
|
8a4a804c8c | ||
|
|
e391dd182d | ||
|
|
9bab5d5a33 | ||
|
|
c67ebf19d4 | ||
|
|
9cf93111d6 | ||
|
|
6a35bbea2f | ||
|
|
1c27dccabb | ||
|
|
f17fce9461 | ||
|
|
f947c96462 | ||
|
|
639e44e182 | ||
|
|
aedc45abd5 | ||
|
|
f49f62d3be | ||
|
|
bbdfbe64da | ||
|
|
e53850627f | ||
|
|
6b96806914 | ||
|
|
656e6d289a | ||
|
|
7858430631 | ||
|
|
745f1befe9 | ||
|
|
5c2a1a4284 | ||
|
|
9a35bba3b7 | ||
|
|
b09d3eb855 | ||
|
|
71f9ef30f5 | ||
|
|
c0c0ef9fe8 | ||
|
|
8a7bdd5b95 | ||
|
|
0cc2c83525 | ||
|
|
a5208959c4 | ||
|
|
e96d0429cd | ||
|
|
c538f0b907 | ||
|
|
fd7daf4c89 | ||
|
|
7f2efd3193 | ||
|
|
a79afd6580 | ||
|
|
51f3014028 | ||
|
|
60317ffadd | ||
|
|
1f4c7cc22b | ||
|
|
a32147182a | ||
|
|
0070d5f295 | ||
|
|
2f422ab719 | ||
|
|
b206cdba92 | ||
|
|
9042ef7557 | ||
|
|
0aa029d548 | ||
|
|
c511cb518c | ||
|
|
a88fe61a7b | ||
|
|
004f5d407f | ||
|
|
71b05dbcf4 | ||
|
|
22e0d8b442 | ||
|
|
1d0523ec21 | ||
|
|
f73855a7f2 | ||
|
|
c2bdb48bc6 | ||
|
|
a52b0c5439 | ||
|
|
10dc859231 | ||
|
|
f3f6ce3943 | ||
|
|
fb7cc673ac | ||
|
|
e1a264825a | ||
|
|
a5d75e4f4c | ||
|
|
d6857e654f | ||
|
|
747be8d629 | ||
|
|
7c39907251 | ||
|
|
005d9d368f | ||
|
|
ff9dd43262 | ||
|
|
02f6a59c10 | ||
|
|
2631ae682d | ||
|
|
e02a63b061 | ||
|
|
4a917d171d | ||
|
|
88a0a8d35a | ||
|
|
2fe74c2947 | ||
|
|
4f1d8943d6 | ||
|
|
b6787d91a3 | ||
|
|
c03a734ebb | ||
|
|
07659547ce | ||
|
|
cf95f5e72e | ||
|
|
13c86cbdc5 | ||
|
|
44f2d3a3c2 | ||
|
|
6e99bb178d | ||
|
|
9bf0d7680e | ||
|
|
d4ff927181 | ||
|
|
138378626f | ||
|
|
9b63e6a289 | ||
|
|
8ebd1ab4f4 | ||
|
|
9dde9314e8 | ||
|
|
124739fde2 | ||
|
|
3b459813ed | ||
|
|
60bb593228 | ||
|
|
ef7a4288ae | ||
|
|
790b3382a3 | ||
|
|
05a0df799e | ||
|
|
9c0fa376a1 | ||
|
|
247882eb54 | ||
|
|
3596fabc78 | ||
|
|
fd65a47d51 | ||
|
|
4bf6d8d94d | ||
|
|
1dd758c66a | ||
|
|
58e8d819c9 | ||
|
|
736df7696f | ||
|
|
c46f3d37b1 | ||
|
|
1becb6137a | ||
|
|
5f9bed6a52 | ||
|
|
ac3014378f | ||
|
|
c68f4872fa | ||
|
|
cbf7759e7c | ||
|
|
639a7f91a4 |
3
.gitattributes
vendored
@@ -11,3 +11,6 @@ AppImage-Recipe.sh export-ignore
|
||||
# github-linguist language hints
|
||||
*.h linguist-language=C++
|
||||
*.cpp linguist-language=C++
|
||||
|
||||
# binary files
|
||||
*.ai binary
|
||||
|
||||
12
.github/pull.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# doc: https://github.com/wei/pull#basic-setup
|
||||
# manual trigger: https://pull.git.ci/process/${fork-user}/keepassxc
|
||||
# pull from: https://github.com/keepassxreboot/keepassxc
|
||||
version: "1"
|
||||
rules:
|
||||
- base: master
|
||||
upstream: keepassxreboot:master
|
||||
mergeMethod: hardreset
|
||||
|
||||
- base: develop
|
||||
upstream: keepassxreboot:develop
|
||||
mergeMethod: rebase
|
||||
219
CHANGELOG.md
@@ -1,17 +1,220 @@
|
||||
# Changelog
|
||||
|
||||
## 2.6.0 (unreleased)
|
||||
## 2.6.4 (2021-01-31)
|
||||
|
||||
### Added
|
||||
- Added CLI db-info command [#4231]
|
||||
- Switch application icons to Material Design [#4066]
|
||||
- Health Check report [#551]
|
||||
- HIBP report: Check passwords against the HIBP online service [#1083]
|
||||
|
||||
- Automatically adapt to light/dark system theme changes (Windows/macOS only) [#6034]
|
||||
|
||||
### Changed
|
||||
- Renamed CLI create command to db-create [#4231]
|
||||
- Added --set-password option for CLI db-create command
|
||||
- Added --set-key-file option for CLI db-create command (replacing --key-file option)
|
||||
|
||||
- Show window title as tooltip on system tray [#5948]
|
||||
- Compress Snap release as LZO for faster initial startup [#5877]
|
||||
- Password generator: Set maximum selectable password length to 999 [#5937]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix crash on app close when using SSH agent [#5935]
|
||||
- Fix KDF selection showing wrong item when using Argon2id [#5923]
|
||||
- Automatically close About dialog on database lock if it is still open [#5947]
|
||||
- Linux: Fix automatic launch at system startup with AppImages [#5901]
|
||||
- Linux: Fix click-to-move on empty area activating when using menus [#5971]
|
||||
- Linux: Try multiple times to show tray icon if tray is not ready yet [#5948]
|
||||
- macOS: Fix KeePassXC blocking clean shutdown [#6002]
|
||||
|
||||
## 2.6.3 (2021-01-12)
|
||||
|
||||
### Added
|
||||
|
||||
- Support Argon2id KDF [#5778]
|
||||
- Support XMLv2 key files [#5798]
|
||||
|
||||
### Changed
|
||||
|
||||
- Improve CSV Import/Export, include time fields and TOTP [#5346]
|
||||
- Support empty area dragging of the application window [#5860]
|
||||
- Display default Auto-Type sequence in preview pane [#5654]
|
||||
- Remove strict length limit on generated passwords [#5748]
|
||||
- Hide key file path by default when unlocking database [#5779]
|
||||
- Document browser extension use with Edge in managed mode [#5692]
|
||||
- Windows: Prevent clipboard history and cloud sync [#5853]
|
||||
- macOS: Update the application icon to Big Sur styling [#5851]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Re-select previously selected entry on database unlock [#5559]
|
||||
- Properly save special character choice in password generator [#5610]
|
||||
- Fix crash in browser integration with multiple similar entries [#5653]
|
||||
- Remove offset on username field in classic theme [#5788]
|
||||
- Ensure entry history is copied when drag/dropping entries and groups [#5817]
|
||||
- Close modal dialogs when database is locked [#5820]
|
||||
- Prevent crash when KeeShare modifies an entry that is currently being edited [#5827]
|
||||
- Improve preview of entry attributes [#5834]
|
||||
- Always activate/focus database open dialog preventing mistype [#5878]
|
||||
- Reports: fix calculation of average password length [#5862]
|
||||
- Linux: Delay startup on login to correct tray icon issues [#5724]
|
||||
|
||||
## 2.6.2 (2020-10-21)
|
||||
|
||||
### Added
|
||||
|
||||
- Add option to keep window always on top to view menu [#5542]
|
||||
- Move show/hide usernames and passwords to view menu [#5542]
|
||||
- Add command line options and environment variables for changing the config locations [#5452]
|
||||
- Include TOTP settings in CSV import/export and add support for ISO datetimes [#5346]
|
||||
|
||||
### Changed
|
||||
|
||||
- Mask sensitive information in command execution confirmation prompt [#5542]
|
||||
- SSH Agent: Avoid shortcut conflict on macOS by changing "Add key" to Ctrl+H on all platforms [#5484]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Prevent data loss with drag and drop between databases [#5536]
|
||||
- Fix crash when toggling Capslock rapidly [#5545]
|
||||
- Don't mark URL references as invalid URL [#5380]
|
||||
- Reset entry preview after search [#5483]
|
||||
- Set Qt::Dialog flag on database open dialog [#5356]
|
||||
- Fix sorting of database report columns [#5426]
|
||||
- Fix IfDevice matching logic [#5344]
|
||||
- Fix layout issues and a stray scrollbar appearing on top of the entry edit screen [#5424]
|
||||
- Fix tabbing into the notes field [#5424]
|
||||
- Fix password generator ignoring settings on load [#5340]
|
||||
- Restore natural entry sort order on application load [#5438]
|
||||
- Fix paperclip and TOTP columns not saving state [#5327]
|
||||
- Enforce fixed password font in entry preview [#5454]
|
||||
- Add scrollbar when new database wizard exceeds screen size [#5560]
|
||||
- Do not mark database as modified when viewing Auto-Type associations [#5542]
|
||||
- CLI: Fix two heap-use-after-free crashes [#5368,#5470]
|
||||
- Browser: Fix key exchange not working with multiple simultaneous users on Windows [#5485]
|
||||
- Browser: Fix entry retrieval when "only best matching" is enabled [#5316]
|
||||
- Browser: Ignore recycle bin on KeePassHTTP migration [#5481]
|
||||
- KeeShare: Fix import crash [#5542]
|
||||
- macOS: Fix toolbar theming and breadcrumb display issues [#5482]
|
||||
- macOS: Fix file dialog randomly closing [#5479]
|
||||
- macOS: Fix being unable to select OPVault files for import [#5341]
|
||||
|
||||
## 2.6.1 (2020-08-19)
|
||||
|
||||
### Added
|
||||
|
||||
- Add menu entries for auto-typing only username or only password [#4891]
|
||||
- Browser: Add command for retrieving current TOTP [#5278]
|
||||
- Improve man pages [#5010]
|
||||
- Linux: Support Xfce screen lock signals [#4971]
|
||||
- Linux: Add OARS metadata to AppStream markup [#5031]
|
||||
- SSH Agent: Substitute tilde with %USERPROFILE% on Windows [#5116]
|
||||
|
||||
### Changed
|
||||
|
||||
- Improve password generator UI and UX [#5129]
|
||||
- Do not prompt to restart if switching the theme back and forth [#5084]
|
||||
- Change actions for F1, F2, and F3 keys [#5082]
|
||||
- Skip referenced passwords in health check report [#5056]
|
||||
- Check system-wide Qt translations directory for downstream translations packaging [#5064]
|
||||
- macOS: Change password visibility toggle shortcut to Ctrl+H to avoid conflict with system shortcut [#5114]
|
||||
- Browser: Only display domain name in browser access confirm dialog to avoid overly wide window sizes [#5214]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix clipboard not being cleared when database is locked while timeout is still active [#5184]
|
||||
- Fix list of previous databases not being cleared in some cases [#5123]
|
||||
- Fix saving of non-data changes on database lock [#5210]
|
||||
- Fix search results banner theming [#5197]
|
||||
- Don't enforce theme palette in Classic theme mode and add hover effect for buttons [#5122,#5267]
|
||||
- Fix label clipping in settings on high-DPI screens [#5227]
|
||||
- Fix excessive memory usage by icons on systems with high-DPI screens [#5266]
|
||||
- Fix crash if number of TOTP digits exceeds ten [#5106]
|
||||
- Fix slot detection when first YubiKey is configured on the second slot [#5004]
|
||||
- Prevent crash if focus widget gets deleted during saving [#5005]
|
||||
- Always show buttons for opening or saving attachments [#4956]
|
||||
- Update link to Auto-Type help [#5228]
|
||||
- Fix build errors with Ninja [#5121]
|
||||
- CLI: Fix db-info command wrongly labelled as db-show in usage listing [#5140]
|
||||
- Windows: Use Classic theme by default if high-contrast mode is on [#5191]
|
||||
- Linux: Add workaround for qt5ct bug, causing icons not to show up [#5011]
|
||||
- Linux: Correct high-DPI display by not allowing fractional scaling [#5185]
|
||||
- Browser: Consider subdomain and path when requesting only "best-matching credentials" [#4832]
|
||||
- SSH Agent: Always forget all keys on lock [#5115]
|
||||
|
||||
## 2.6.0 (2020-07-06)
|
||||
|
||||
### Added
|
||||
|
||||
- Custom Light and Dark themes [#4110, #4769, #4791, #4892, #4915]
|
||||
- Compact mode to use classic Group and Entry line height [#4910]
|
||||
- New monochrome tray icons [#4796, #4803]
|
||||
- View menu to quickly switch themes, compact mode, and toggle UI elements [#4910]
|
||||
- Search for groups and scope search to matched groups [#4705]
|
||||
- Save Database Backup feature [#4550]
|
||||
- Sort entries by "natural order" and move lines up/down [#4357]
|
||||
- Option to launch KeePassXC on system startup/login [#4675]
|
||||
- Caps Lock warning on password input fields [#3646]
|
||||
- Add "Size" column to entry view [#4588]
|
||||
- Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305]
|
||||
- Password Generator: Define additional characters to choose from [#3876]
|
||||
- Reports: Database password health check (offline) [#3993]
|
||||
- Reports: HIBP online service to check for breached passwords [#4438]
|
||||
- Auto-Type: DateTime placeholders [#4409]
|
||||
- Browser: Show group name in results sent to browser extension [#4111]
|
||||
- Browser: Ability to define a custom browser location (macOS and Linux only) [#4148]
|
||||
- Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591]
|
||||
- CLI: `db-info` command [#4231]
|
||||
- CLI: Use wl-clipboard if xclip is not available (Linux) [#4323]
|
||||
- CLI: Incorporate xclip into snap builds [#4697]
|
||||
- SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545]
|
||||
- SSH Agent: Context menu actions to add/remove keys [#4290]
|
||||
|
||||
### Changed
|
||||
|
||||
- Complete replacement of default database icons [#4699]
|
||||
- Complete replacement of application icons [#4066, #4161, #4203, #4411]
|
||||
- Complete rewrite of documentation and manpages using Asciidoctor [#4937]
|
||||
- Complete refactor of config files; separate between local and roaming [#4665]
|
||||
- Complete refactor of browser integration and proxy code [#4680]
|
||||
- Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843]
|
||||
- Significantly improve performance when saving and opening databases [#4309, #4833]
|
||||
- Remove read-only detection for database files [#4508]
|
||||
- Overhaul of password fields and password generator [#4367]
|
||||
- Replace instances of "Master Key" with "Database Credentials" [#4929]
|
||||
- Change settings checkboxes to positive phrasing for consistency [#4715]
|
||||
- Improve UX of using entry actions (focus fix) [#3893]
|
||||
- Set expiration time to Now when enabling entry expiration [#4406]
|
||||
- Always show "New Entry" in context menu [#4617]
|
||||
- Issue warning before adding large attachments [#4651]
|
||||
- Improve importing OPVault [#4630]
|
||||
- Improve AutoOpen capability [#3901, #4752]
|
||||
- Check for updates every 7 days even while still running [#4752]
|
||||
- Improve Windows installer UI/UX [#4675]
|
||||
- Improve config file handling of portable distribution [#4131, #4752]
|
||||
- macOS: Hide dock icon when application is hidden to tray [#4782]
|
||||
- Browser: Use unlock dialog to improve UX of opening a locked database [#3698]
|
||||
- Browser: Improve database and entry settings experience [#4392, #4591]
|
||||
- Browser: Improve confirm access dialog [#2143, #4660]
|
||||
- KeeShare: Improve monitoring file changes of shares [#4720]
|
||||
- CLI: Rename `create` command to `db-create` [#4231]
|
||||
- CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313]
|
||||
- CLI: Use stderr for help text and password prompts [#4086, #4623]
|
||||
- FdoSecrets: Display existing secret service process [#4128]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix changing focus around the main window using tab key [#4641]
|
||||
- Fix search field clearing while still using the application [#4368]
|
||||
- Improve search help widget displaying on macOS and Linux [#4236]
|
||||
- Return keyboard focus after editing an entry [#4287]
|
||||
- Reset database path after failed "Save As" [#4526]
|
||||
- Make builds reproducible [#4411]
|
||||
- Improve handling of ccache when building [#4104, #4335]
|
||||
- Windows: Use correct UI font and size [#4769]
|
||||
- macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909]
|
||||
- Linux: Fix version number not embedded in AppImage [#4842]
|
||||
- Auto-Type: Fix crash when performing on new entry [#4132]
|
||||
- Browser: Send legacy HTTP settings to recycle bin [#4589]
|
||||
- Browser: Fix merging browser keys [#4685]
|
||||
- CLI: Fix encoding when exporting database [#3921]
|
||||
- SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595]
|
||||
- FdoSecrets: Fix crash when editing settings before service is enabled [#4332]
|
||||
|
||||
## 2.5.4 (2020-04-09)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
cmake_minimum_required(VERSION 3.3.0)
|
||||
|
||||
project(KeePassXC)
|
||||
|
||||
@@ -58,20 +58,20 @@ endif()
|
||||
if(APPLE)
|
||||
option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF)
|
||||
endif()
|
||||
option(WITH_XC_DOCS "Enable building of documentation" ON)
|
||||
|
||||
if(WITH_CCACHE)
|
||||
# Use the Compiler Cache (ccache) program
|
||||
# (install with: sudo apt get ccache)
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
if(CCACHE_FOUND)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
|
||||
else()
|
||||
if(NOT CCACHE_FOUND)
|
||||
message(FATAL_ERROR "ccache requested but cannot be found.")
|
||||
endif()
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
|
||||
endif()
|
||||
|
||||
if(WITH_XC_ALL)
|
||||
# Enable all options (except update check)
|
||||
# Enable all options (except update check and docs)
|
||||
set(WITH_XC_AUTOTYPE ON)
|
||||
set(WITH_XC_NETWORKING ON)
|
||||
set(WITH_XC_BROWSER ON)
|
||||
@@ -86,12 +86,6 @@ if(WITH_XC_ALL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_XC_SSHAGENT OR WITH_XC_KEESHARE)
|
||||
set(WITH_XC_CRYPTO_SSH ON)
|
||||
else()
|
||||
set(WITH_XC_CRYPTO_SSH OFF)
|
||||
endif()
|
||||
|
||||
# Prefer WITH_XC_NETWORKING setting over WITH_XC_UPDATECHECK
|
||||
if(NOT WITH_XC_NETWORKING AND WITH_XC_UPDATECHECK)
|
||||
message(STATUS "Disabling WITH_XC_UPDATECHECK because WITH_XC_NETWORKING is disabled")
|
||||
@@ -99,7 +93,7 @@ if(NOT WITH_XC_NETWORKING AND WITH_XC_UPDATECHECK)
|
||||
endif()
|
||||
|
||||
set(KEEPASSXC_VERSION_MAJOR "2")
|
||||
set(KEEPASSXC_VERSION_MINOR "6")
|
||||
set(KEEPASSXC_VERSION_MINOR "7")
|
||||
set(KEEPASSXC_VERSION_PATCH "0")
|
||||
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
|
||||
set(OVERRIDE_VERSION "" CACHE STRING "Override the KeePassXC Version for Snapshot builds")
|
||||
@@ -225,10 +219,22 @@ macro(check_add_gcc_compiler_cflag FLAG FLAGNAME)
|
||||
endif()
|
||||
endmacro(check_add_gcc_compiler_cflag)
|
||||
|
||||
# This is the "front-end" for the above macros
|
||||
# Optionally takes additional parameter(s) with language to check (currently "C" or "CXX")
|
||||
macro(check_add_gcc_compiler_flag FLAG)
|
||||
string(REGEX REPLACE "[-=]" "_" FLAGNAME "${FLAG}")
|
||||
check_add_gcc_compiler_cxxflag("${FLAG}" "${FLAGNAME}")
|
||||
check_add_gcc_compiler_cflag("${FLAG}" "${FLAGNAME}")
|
||||
set(check_lang_spec ${ARGN})
|
||||
list(LENGTH check_lang_spec num_extra_args)
|
||||
set(langs C CXX)
|
||||
if(num_extra_args GREATER 0)
|
||||
set(langs "${check_lang_spec}")
|
||||
endif()
|
||||
if("C" IN_LIST langs)
|
||||
check_add_gcc_compiler_cflag("${FLAG}" "${FLAGNAME}")
|
||||
endif()
|
||||
if("CXX" IN_LIST langs)
|
||||
check_add_gcc_compiler_cxxflag("${FLAG}" "${FLAGNAME}")
|
||||
endif()
|
||||
endmacro(check_add_gcc_compiler_flag)
|
||||
|
||||
add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
|
||||
@@ -238,6 +244,7 @@ if(WITH_APP_BUNDLE)
|
||||
endif()
|
||||
|
||||
add_gcc_compiler_flags("-fno-common")
|
||||
check_add_gcc_compiler_flag("-fopenmp")
|
||||
add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long")
|
||||
add_gcc_compiler_flags("-Wformat=2 -Wmissing-format-attribute")
|
||||
add_gcc_compiler_flags("-fvisibility=hidden")
|
||||
@@ -257,7 +264,6 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_gcc_compiler_cxxflags("-fno-exceptions -fno-rtti")
|
||||
add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual")
|
||||
add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings")
|
||||
|
||||
@@ -281,7 +287,7 @@ if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)")
|
||||
endif()
|
||||
|
||||
check_add_gcc_compiler_flag("-Werror=format-security")
|
||||
check_add_gcc_compiler_flag("-Werror=implicit-function-declaration")
|
||||
check_add_gcc_compiler_flag("-Werror=implicit-function-declaration" C)
|
||||
check_add_gcc_compiler_flag("-Wcast-align")
|
||||
|
||||
if(WITH_COVERAGE AND CMAKE_COMPILER_IS_CLANGXX)
|
||||
@@ -293,11 +299,11 @@ if(WITH_COVERAGE AND CMAKE_COMPILER_IS_CLANGXX)
|
||||
# `find src -iname '*.h' -or -iname '*.cpp'`
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
if(UNIX AND NOT APPLE)
|
||||
check_add_gcc_compiler_flag("-Qunused-arguments")
|
||||
add_gcc_compiler_flags("-pie -fPIE")
|
||||
check_add_gcc_compiler_flag("-fPIC")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now -pie")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now")
|
||||
endif()
|
||||
@@ -305,14 +311,14 @@ endif()
|
||||
add_gcc_compiler_cflags("-std=c99")
|
||||
add_gcc_compiler_cxxflags("-std=c++11")
|
||||
|
||||
check_add_gcc_compiler_flag("-fsized-deallocation")
|
||||
check_add_gcc_compiler_flag("-fsized-deallocation" CXX)
|
||||
|
||||
if(APPLE AND CMAKE_COMPILER_IS_CLANGXX)
|
||||
add_gcc_compiler_cxxflags("-stdlib=libc++")
|
||||
endif()
|
||||
|
||||
if(WITH_DEV_BUILD)
|
||||
add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED)
|
||||
add_definitions(-DQT_DEPRECATED_WARNINGS)
|
||||
else()
|
||||
add_definitions(-DQT_NO_DEPRECATED_WARNINGS)
|
||||
add_gcc_compiler_cxxflags("-Wno-deprecated-declarations")
|
||||
@@ -387,10 +393,18 @@ include(CLangFormat)
|
||||
|
||||
set(QT_COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools)
|
||||
if(UNIX AND NOT APPLE)
|
||||
find_package(Qt5 COMPONENTS ${QT_COMPONENTS} DBus REQUIRED)
|
||||
find_package(Qt5 COMPONENTS ${QT_COMPONENTS} DBus X11Extras REQUIRED)
|
||||
elseif(APPLE)
|
||||
find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH)
|
||||
find_package(Qt5 COMPONENTS MacExtras HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH)
|
||||
find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED HINTS
|
||||
/usr/local/opt/qt/lib/cmake
|
||||
/usr/local/Cellar/qt/*/lib/cmake
|
||||
/opt/homebrew/opt/qt/lib/cmake
|
||||
ENV PATH)
|
||||
find_package(Qt5 COMPONENTS MacExtras HINTS
|
||||
/usr/local/opt/qt/lib/cmake
|
||||
/usr/local/Cellar/qt/*/lib/cmake
|
||||
/opt/homebrew/opt/qt/lib/cmake
|
||||
ENV PATH)
|
||||
else()
|
||||
find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED)
|
||||
endif()
|
||||
@@ -413,36 +427,36 @@ if(APPLE)
|
||||
find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH)
|
||||
if(NOT MACDEPLOYQT_EXE)
|
||||
message(FATAL_ERROR "macdeployqt is required to build on macOS")
|
||||
else()
|
||||
message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}")
|
||||
endif()
|
||||
message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}")
|
||||
elseif(MINGW)
|
||||
find_program(WINDEPLOYQT_EXE windeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH)
|
||||
if(NOT WINDEPLOYQT_EXE)
|
||||
message(FATAL_ERROR "windeployqt is required to build on Windows")
|
||||
else()
|
||||
message(STATUS "Using windeployqt: ${WINDEPLOYQT_EXE}")
|
||||
endif()
|
||||
message(STATUS "Using windeployqt: ${WINDEPLOYQT_EXE}")
|
||||
endif()
|
||||
|
||||
# Debian sets the the build type to None for package builds.
|
||||
# Make sure we don't enable asserts there.
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG)
|
||||
|
||||
find_package(LibGPGError REQUIRED)
|
||||
find_package(Gcrypt 1.7.0 REQUIRED)
|
||||
find_package(Argon2 REQUIRED)
|
||||
# Find Botan2
|
||||
find_package(Botan2 REQUIRED)
|
||||
if(BOTAN2_VERSION VERSION_LESS "2.11.0")
|
||||
message(FATAL_ERROR "Botan2 2.11.0 or higher is required")
|
||||
endif()
|
||||
include_directories(SYSTEM ${BOTAN2_INCLUDE_DIR})
|
||||
|
||||
# Find zlib
|
||||
find_package(ZLIB REQUIRED)
|
||||
find_package(QREncode REQUIRED)
|
||||
find_package(sodium 1.0.12 REQUIRED)
|
||||
|
||||
set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
|
||||
|
||||
if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0")
|
||||
message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format")
|
||||
endif()
|
||||
include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
|
||||
|
||||
include_directories(SYSTEM ${ARGON2_INCLUDE_DIR} ${sodium_INCLUDE_DIR})
|
||||
# QREncode required for TOTP
|
||||
find_package(QREncode REQUIRED)
|
||||
|
||||
# Optional
|
||||
if(WITH_XC_YUBIKEY)
|
||||
@@ -481,7 +495,7 @@ if(UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
|
||||
include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(share)
|
||||
@@ -489,6 +503,10 @@ if(WITH_TESTS)
|
||||
add_subdirectory(tests)
|
||||
endif(WITH_TESTS)
|
||||
|
||||
if(WITH_XC_DOCS)
|
||||
add_subdirectory(docs)
|
||||
endif()
|
||||
|
||||
if(PRINT_SUMMARY)
|
||||
# This will print ENABLED, REQUIRED and DISABLED
|
||||
feature_summary(WHAT ALL)
|
||||
|
||||
20
CODE-OF-CONDUCT.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Contributor Code of Conduct
|
||||
|
||||
KeePassXC is an open project that welcomes everybody no matter their ethnicity, sex,
|
||||
sexual identity or orientation, age, socio-economic status, nationality, or religion.
|
||||
Regardless of what background you come from, feel encouraged to participate in
|
||||
the project and express your views as long you are respectful to others.
|
||||
|
||||
We value all members of our community and so in order to ensure a harassment-free
|
||||
experience for everyone and mutual respect among members of this community, we
|
||||
impose the following simple rules:
|
||||
|
||||
- No bullying, no insults. Any form of harassment will not be tolerated.
|
||||
- No racism, no sexism, no homophobia, no hurtful extremist views of any kind.
|
||||
- Be mindful of what you say, be diligent in how you say it.
|
||||
- Show respect and, as always, be excellent to each other.
|
||||
|
||||
Violations of these rules or any other form of abuse can be reported confidentially
|
||||
to conduct AT keepassxc DOT org. Members who do not adhere to our code of conduct
|
||||
will be banned either permanently or until they change their ways so as to be
|
||||
compatible with a friendly, open, and inclusive community.
|
||||
11
COPYING
@@ -46,6 +46,10 @@ Files: cmake/FindYubiKey.cmake
|
||||
Copyright: 2014 Kyle Manna <kyle@kylemanna.com>
|
||||
License: GPL-2 or GPL-3
|
||||
|
||||
Files: cmake/FindBotan2.cmake
|
||||
Copyright: 2018 Ribose Inc.
|
||||
License: BSD-2-clause
|
||||
|
||||
Files: cmake/GenerateProductVersion.cmake
|
||||
Copyright: 2015 halex2005 <akharlov@gmail.com>
|
||||
License: MIT
|
||||
@@ -140,7 +144,9 @@ Files: share/icons/badges/2_Expired.svg
|
||||
Copyright: 2020 KeePassXC Team <team@keepassxc.org>
|
||||
License: MIT
|
||||
|
||||
Files: share/icons/application/scalable/actions/document-close.svg
|
||||
Files: share/icons/application/scalable/actions/chevron-double-down.svg
|
||||
share/icons/application/scalable/actions/chevron-double-right.svg
|
||||
share/icons/application/scalable/actions/document-close.svg
|
||||
share/icons/application/scalable/actions/document-edit.svg
|
||||
share/icons/application/scalable/actions/document-export.svg
|
||||
share/icons/application/scalable/actions/document-import.svg
|
||||
@@ -162,8 +168,11 @@ Files: share/icons/application/scalable/actions/document-close.svg
|
||||
share/icons/application/scalable/actions/group-edit.svg
|
||||
share/icons/application/scalable/actions/group-empty-trash.svg
|
||||
share/icons/application/scalable/actions/group-new.svg
|
||||
share/icons/application/scalable/actions/hammer-wrench.svg
|
||||
share/icons/application/scalable/actions/health.svg
|
||||
share/icons/application/scalable/actions/help-about.svg
|
||||
share/icons/application/scalable/actions/key-enter.svg
|
||||
share/icons/application/scalable/actions/lock-question.svg
|
||||
share/icons/application/scalable/actions/message-close.svg
|
||||
share/icons/application/scalable/actions/move-down.svg
|
||||
share/icons/application/scalable/actions/move-up.svg
|
||||
|
||||
@@ -4,8 +4,7 @@ Build and Install KeePassXC
|
||||
This document will guide you through the steps to build and install KeePassXC from source.
|
||||
For more information, see also the [_Building KeePassXC_](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC) page on the wiki.
|
||||
|
||||
The [KeePassXC QuickStart](./docs/QUICKSTART.md) gets you started using KeePassXC on your
|
||||
Windows, Mac, or Linux computer using the pre-built binaries.
|
||||
The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download).
|
||||
|
||||
Build Dependencies
|
||||
==================
|
||||
@@ -15,6 +14,7 @@ The following tools must exist within your PATH:
|
||||
* make
|
||||
* cmake (>= 2.8.12)
|
||||
* g++ (>= 4.7) or clang++ (>= 3.0)
|
||||
* asciidoctor (on Linux/MacOS)
|
||||
|
||||
The following libraries are required:
|
||||
|
||||
|
||||
77
README.md
@@ -3,56 +3,57 @@
|
||||
[](https://codecov.io/gh/keepassxreboot/keepassxc)
|
||||
[](https://github.com/keepassxreboot/keepassxc/releases/)
|
||||
|
||||
[KeePassXC](https://keepassxc.org) is a cross-platform community fork of
|
||||
[KeePassX](https://www.keepassx.org/).
|
||||
Our goal is to extend and improve it with new features and bugfixes
|
||||
to provide a feature-rich, fully cross-platform and modern
|
||||
open-source password manager.
|
||||
[](https://matrix.to/#/!zUxwGnFkUyycpxeHeM:matrix.org?via=matrix.org)
|
||||
[](https://matrix.to/#/!RhJPJPGwQIFVQeXqZa:matrix.org?via=matrix.org)
|
||||
|
||||
## Installation
|
||||
The [KeePassXC QuickStart](./docs/QUICKSTART.md) gets you started using
|
||||
KeePassXC on your Windows, Mac, or Linux computer using pre-compiled binaries
|
||||
from the [downloads page](https://keepassxc.org/download).
|
||||
[KeePassXC](https://keepassxc.org) is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePassXC on Windows, macOS, and Linux systems. KeePassXC is for people with extremely high demands of secure personal data management. It saves many different types of information, such as usernames, passwords, URLs, attachments, and notes in an offline, encrypted file that can be stored in any location, including private and public cloud solutions. For easy identification and management, user-defined titles and icons can be specified for entries. In addition, entries are sorted in customizable groups. An integrated search function allows you to use advanced patterns to easily find any entry in your database. A customizable, fast, and easy-to-use password generator utility allows you to create passwords with any combination of characters or easy to remember passphrases.
|
||||
|
||||
Additionally, individual Linux distributions may ship their own versions,
|
||||
so please check out your distribution's package list to see if KeePassXC is available.
|
||||
## Quick Start
|
||||
The [QuickStart Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted.html) gets you started using KeePassXC on your Windows, macOS, or Linux computer using pre-compiled binaries from the [downloads page](https://keepassxc.org/download). Additionally, individual Linux distributions may ship their own versions, so please check your distribution's package list to see if KeePassXC is available. Detailed documentation is available in the [User Guide](https://keepassxc.org/docs/KeePassXC_UserGuide.html).
|
||||
|
||||
## Additional features compared to KeePassX
|
||||
- Auto-Type on all three major platforms (Linux, Windows, macOS)
|
||||
- Twofish encryption
|
||||
- YubiKey challenge-response support
|
||||
- TOTP generation
|
||||
- CSV import
|
||||
- A [Command Line Interface (keepassxc-cli)](./share/docs/man/keepassxc-cli.1)
|
||||
- DEP and ASLR hardening
|
||||
- Stand-alone password and passphrase generator
|
||||
- Password strength meter
|
||||
- Using website favicons as entry icons
|
||||
- Merging of databases
|
||||
- Automatic reload when the database changed on disk
|
||||
- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome, Chromium, Vivaldi, or Brave](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) and [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/pdffhmdngciaglkoonimfcmckehcpafo)
|
||||
- Synchronize passwords using KeeShare. See [Using Sharing](./docs/QUICKSTART.md#using-sharing) for more details.
|
||||
- Many bug fixes
|
||||
## Features List
|
||||
KeePassXC has numerous features for novice and power users alike. Our goal is to create an application that can be used by anyone while still offering advanced features to those that need them.
|
||||
|
||||
For a full list of features and changes, read the [CHANGELOG](CHANGELOG.md) document.
|
||||
For a full list of keyboard shortcuts, see [KEYBINDS](./docs/KEYBINDS.md)
|
||||
### Basic
|
||||
* Create, open, and save databases in the KDBX format (KeePass compatible to KDBX4 and KDBX3)
|
||||
* Store sensitive information in entries that are organized by groups
|
||||
* Search for entries
|
||||
* Password generator
|
||||
* Auto-Type passwords into applications
|
||||
* Browser integration with Google Chrome, Mozilla Firefox, Microsoft Edge, Chromium, Vivaldi, Brave, and Tor-Browser
|
||||
* Entry icon download
|
||||
* Import databases from CSV, 1Password, and KeePass1 formats
|
||||
|
||||
### Advanced
|
||||
* Database reports (password health, HIBP, and statistics)
|
||||
* Database export to CSV and HTML formats
|
||||
* TOTP storage and generation
|
||||
* Field references between entries
|
||||
* File attachments and custom attributes
|
||||
* Entry history and data restoration
|
||||
* YubiKey/OnlyKey challenge-response support
|
||||
* Command line interface (keepassxc-cli)
|
||||
* Auto-Open databases
|
||||
* KeeShare shared databases (import, export, and synchronize)
|
||||
* SSH Agent
|
||||
* FreeDesktop.org Secret Service (replace Gnome keyring, etc.)
|
||||
* Additional encryption choices: Twofish and ChaCha20
|
||||
|
||||
For a full list of changes, read the [CHANGELOG](CHANGELOG.md) document. \
|
||||
For a full list of keyboard shortcuts, see [KeyboardShortcuts.adoc](./docs/topics/KeyboardShortcuts.adoc)
|
||||
|
||||
## Building KeePassXC
|
||||
|
||||
Detailed instructions are available in the [Build and Install](./INSTALL.md)
|
||||
page or on the [Wiki page](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC).
|
||||
Detailed instructions are available in the [Build and Install](./INSTALL.md) page and in the [Wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC).
|
||||
|
||||
## Contributing
|
||||
|
||||
We are always looking for suggestions how to improve our application.
|
||||
If you find any bugs or have an idea for a new feature, please let us know by
|
||||
opening a report in our [issue tracker](https://github.com/keepassxreboot/keepassxc/issues)
|
||||
on GitHub or join us on IRC on freenode channels #keepassxc or #keepassxc-dev.
|
||||
We are always looking for suggestions on how to improve KeePassXC. If you find any bugs or have an idea for a new feature, please let us know by opening a report in the [issue tracker](https://github.com/keepassxreboot/keepassxc/issues) on GitHub or join us on IRC in [freenode](https://webchat.freenode.net/) channels #keepassxc and #keepassxc-dev.
|
||||
|
||||
You can of course also directly contribute your own code. We are happy to accept your pull requests.
|
||||
You may directly contribute your own code by submitting a pull request. Please read the [CONTRIBUTING](.github/CONTRIBUTING.md) document for further information.
|
||||
|
||||
Please read the [CONTRIBUTING document](.github/CONTRIBUTING.md) for further information.
|
||||
Contributors are required to adhere to the project's [Code of Conduct](CODE-OF-CONDUCT.md).
|
||||
|
||||
## License
|
||||
|
||||
GPL-2 or GPL-3
|
||||
KeePassXC code is licensed under GPL-2 or GPL-3. Additional licensing for third-party files is detailed in [COPYING](./COPYING).
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
# Copyright (C) 2017 KeePassXC Team
|
||||
#
|
||||
# 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
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
find_path(ARGON2_INCLUDE_DIR argon2.h)
|
||||
if(MINGW)
|
||||
# find static library on Windows, and redefine used symbols to
|
||||
# avoid definition name conflicts with libsodium
|
||||
find_library(ARGON2_SYS_LIBRARIES libargon2.a)
|
||||
message(STATUS "Patching libargon2...\n")
|
||||
execute_process(COMMAND objcopy
|
||||
--redefine-sym argon2_hash=libargon2_argon2_hash
|
||||
--redefine-sym _argon2_hash=_libargon2_argon2_hash
|
||||
--redefine-sym argon2_error_message=libargon2_argon2_error_message
|
||||
--redefine-sym _argon2_error_message=_libargon2_argon2_error_message
|
||||
${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH)
|
||||
else()
|
||||
find_library(ARGON2_LIBRARIES argon2)
|
||||
endif()
|
||||
mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Argon2 DEFAULT_MSG ARGON2_LIBRARIES ARGON2_INCLUDE_DIR)
|
||||
121
cmake/FindBotan2.cmake
Normal file
@@ -0,0 +1,121 @@
|
||||
# Copyright (c) 2018 Ribose Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
||||
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#.rst:
|
||||
# FindBotan2
|
||||
# -----------
|
||||
#
|
||||
# Find the botan-2 library.
|
||||
#
|
||||
# IMPORTED Targets
|
||||
# ^^^^^^^^^^^^^^^^
|
||||
#
|
||||
# This module defines :prop_tgt:`IMPORTED` targets:
|
||||
#
|
||||
# ``Botan2::Botan2``
|
||||
# The botan-2 library, if found.
|
||||
#
|
||||
# Result variables
|
||||
# ^^^^^^^^^^^^^^^^
|
||||
#
|
||||
# This module defines the following variables:
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# BOTAN2_FOUND - true if the headers and library were found
|
||||
# BOTAN2_INCLUDE_DIRS - where to find headers
|
||||
# BOTAN2_LIBRARIES - list of libraries to link
|
||||
# BOTAN2_VERSION - library version that was found, if any
|
||||
|
||||
# use pkg-config to get the directories and then use these values
|
||||
# in the find_path() and find_library() calls
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_check_modules(PC_BOTAN2 QUIET botan-2)
|
||||
|
||||
# find the headers
|
||||
find_path(BOTAN2_INCLUDE_DIR
|
||||
NAMES botan/version.h
|
||||
HINTS
|
||||
${PC_BOTAN2_INCLUDEDIR}
|
||||
${PC_BOTAN2_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES botan-2
|
||||
)
|
||||
|
||||
# find the library
|
||||
find_library(BOTAN2_LIBRARY
|
||||
NAMES botan-2 libbotan-2
|
||||
HINTS
|
||||
${PC_BOTAN2_LIBDIR}
|
||||
${PC_BOTAN2_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
# determine the version
|
||||
if(PC_BOTAN2_VERSION)
|
||||
set(BOTAN2_VERSION ${PC_BOTAN2_VERSION})
|
||||
elseif(BOTAN2_INCLUDE_DIR AND EXISTS "${BOTAN2_INCLUDE_DIR}/botan/build.h")
|
||||
file(STRINGS "${BOTAN2_INCLUDE_DIR}/botan/build.h" botan2_version_str
|
||||
REGEX "^#define[\t ]+(BOTAN_VERSION_[A-Z]+)[\t ]+[0-9]+")
|
||||
|
||||
string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_MAJOR[\t ]+([0-9]+).*"
|
||||
"\\1" _botan2_version_major "${botan2_version_str}")
|
||||
string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_MINOR[\t ]+([0-9]+).*"
|
||||
"\\1" _botan2_version_minor "${botan2_version_str}")
|
||||
string(REGEX REPLACE ".*#define[\t ]+BOTAN_VERSION_PATCH[\t ]+([0-9]+).*"
|
||||
"\\1" _botan2_version_patch "${botan2_version_str}")
|
||||
set(BOTAN2_VERSION "${_botan2_version_major}.${_botan2_version_minor}.${_botan2_version_patch}"
|
||||
CACHE INTERNAL "The version of Botan which was detected")
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Botan2
|
||||
REQUIRED_VARS BOTAN2_LIBRARY BOTAN2_INCLUDE_DIR
|
||||
VERSION_VAR BOTAN2_VERSION
|
||||
)
|
||||
|
||||
if (BOTAN2_FOUND)
|
||||
set(BOTAN2_INCLUDE_DIRS ${BOTAN2_INCLUDE_DIR} ${PC_BOTAN2_INCLUDE_DIRS})
|
||||
set(BOTAN2_LIBRARIES ${BOTAN2_LIBRARY})
|
||||
endif()
|
||||
|
||||
if (BOTAN2_FOUND AND NOT TARGET Botan2::Botan2)
|
||||
# create the new library target
|
||||
add_library(Botan2::Botan2 UNKNOWN IMPORTED)
|
||||
# set the required include dirs for the target
|
||||
if (BOTAN2_INCLUDE_DIRS)
|
||||
set_target_properties(Botan2::Botan2
|
||||
PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${BOTAN2_INCLUDE_DIRS}"
|
||||
)
|
||||
endif()
|
||||
# set the required libraries for the target
|
||||
if (EXISTS "${BOTAN2_LIBRARY}")
|
||||
set_target_properties(Botan2::Botan2
|
||||
PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
IMPORTED_LOCATION "${BOTAN2_LIBRARY}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
mark_as_advanced(BOTAN2_INCLUDE_DIR BOTAN2_LIBRARY)
|
||||
@@ -1,31 +0,0 @@
|
||||
# Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
|
||||
#
|
||||
# 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
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
find_path(GCRYPT_INCLUDE_DIR gcrypt.h)
|
||||
|
||||
find_library(GCRYPT_LIBRARIES gcrypt)
|
||||
|
||||
mark_as_advanced(GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR)
|
||||
|
||||
if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h")
|
||||
file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$")
|
||||
string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}")
|
||||
string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}")
|
||||
string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}")
|
||||
set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}")
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Gcrypt DEFAULT_MSG GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR)
|
||||
@@ -1,23 +0,0 @@
|
||||
# Copyright (C) 2017 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
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
find_path(GPGERROR_INCLUDE_DIR gpg-error.h)
|
||||
find_library(GPGERROR_LIBRARIES gpg-error)
|
||||
|
||||
mark_as_advanced(GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
include_directories(${GPGERROR_INCLUDE_DIR})
|
||||
find_package_handle_standard_args(LibGPGError DEFAULT_MSG GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)
|
||||
@@ -1,267 +0,0 @@
|
||||
# Written in 2016 by Henrik Steffen Gaßmann <henrik@gassmann.onl>
|
||||
#
|
||||
# To the extent possible under law, the author(s) have dedicated all
|
||||
# copyright and related and neighboring rights to this software to the
|
||||
# public domain worldwide. This software is distributed without any warranty.
|
||||
#
|
||||
# You should have received a copy of the CC0 Public Domain Dedication
|
||||
# along with this software. If not, see
|
||||
#
|
||||
# http://creativecommons.org/publicdomain/zero/1.0/
|
||||
#
|
||||
########################################################################
|
||||
# Tries to find the local libsodium installation.
|
||||
#
|
||||
# On Windows the sodium_DIR environment variable is used as a default
|
||||
# hint which can be overridden by setting the corresponding cmake variable.
|
||||
#
|
||||
# Once done the following variables will be defined:
|
||||
#
|
||||
# sodium_FOUND
|
||||
# sodium_INCLUDE_DIR
|
||||
# sodium_LIBRARY_DEBUG
|
||||
# sodium_LIBRARY_RELEASE
|
||||
#
|
||||
#
|
||||
# Furthermore an imported "sodium" target is created.
|
||||
#
|
||||
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU"
|
||||
OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
set(_GCC_COMPATIBLE 1)
|
||||
endif()
|
||||
|
||||
# static library option
|
||||
option(sodium_USE_STATIC_LIBS "enable to statically link against sodium")
|
||||
if(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST))
|
||||
unset(sodium_LIBRARY CACHE)
|
||||
unset(sodium_LIBRARY_DEBUG CACHE)
|
||||
unset(sodium_LIBRARY_RELEASE CACHE)
|
||||
unset(sodium_DLL_DEBUG CACHE)
|
||||
unset(sodium_DLL_RELEASE CACHE)
|
||||
set(sodium_USE_STATIC_LIBS_LAST ${sodium_USE_STATIC_LIBS} CACHE INTERNAL "internal change tracking variable")
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# UNIX
|
||||
if (UNIX)
|
||||
# import pkg-config
|
||||
find_package(PkgConfig QUIET)
|
||||
if (PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(sodium_PKG QUIET libsodium)
|
||||
endif()
|
||||
|
||||
if(sodium_USE_STATIC_LIBS)
|
||||
set(XPREFIX sodium_PKG_STATIC)
|
||||
else()
|
||||
set(XPREFIX sodium_PKG)
|
||||
endif()
|
||||
|
||||
find_path(sodium_INCLUDE_DIR sodium.h
|
||||
HINTS ${${XPREFIX}_INCLUDE_DIRS}
|
||||
)
|
||||
find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES} sodium
|
||||
HINTS ${${XPREFIX}_LIBRARY_DIRS}
|
||||
)
|
||||
find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES} sodium
|
||||
HINTS ${${XPREFIX}_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Windows
|
||||
elseif (WIN32)
|
||||
set(sodium_DIR "$ENV{sodium_DIR}" CACHE FILEPATH "sodium install directory")
|
||||
mark_as_advanced(sodium_DIR)
|
||||
|
||||
find_path(sodium_INCLUDE_DIR sodium.h
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
# detect target architecture
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.c" [=[
|
||||
#if defined _M_IX86
|
||||
#error ARCH_VALUE x86_32
|
||||
#elif defined _M_X64
|
||||
#error ARCH_VALUE x86_64
|
||||
#endif
|
||||
#error ARCH_VALUE unknown
|
||||
]=])
|
||||
try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/arch.c"
|
||||
OUTPUT_VARIABLE _COMPILATION_LOG
|
||||
)
|
||||
string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1" _TARGET_ARCH "${_COMPILATION_LOG}")
|
||||
|
||||
# construct library path
|
||||
if (_TARGET_ARCH STREQUAL "x86_32")
|
||||
string(APPEND _PLATFORM_PATH "Win32")
|
||||
elseif(_TARGET_ARCH STREQUAL "x86_64")
|
||||
string(APPEND _PLATFORM_PATH "x64")
|
||||
else()
|
||||
message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.")
|
||||
endif()
|
||||
string(APPEND _PLATFORM_PATH "/$$CONFIG$$")
|
||||
|
||||
if (MSVC_VERSION LESS 1900)
|
||||
math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60")
|
||||
else()
|
||||
math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50")
|
||||
endif()
|
||||
string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}")
|
||||
|
||||
if (sodium_USE_STATIC_LIBS)
|
||||
string(APPEND _PLATFORM_PATH "/static")
|
||||
else()
|
||||
string(APPEND _PLATFORM_PATH "/dynamic")
|
||||
endif()
|
||||
|
||||
string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX "${_PLATFORM_PATH}")
|
||||
string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX "${_PLATFORM_PATH}")
|
||||
|
||||
find_library(sodium_LIBRARY_DEBUG libsodium.lib
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}
|
||||
)
|
||||
find_library(sodium_LIBRARY_RELEASE libsodium.lib
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}
|
||||
)
|
||||
if (NOT sodium_USE_STATIC_LIBS)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
|
||||
find_library(sodium_DLL_DEBUG libsodium
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}
|
||||
)
|
||||
find_library(sodium_DLL_RELEASE libsodium
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}
|
||||
)
|
||||
endif()
|
||||
|
||||
elseif(_GCC_COMPATIBLE)
|
||||
if (sodium_USE_STATIC_LIBS)
|
||||
find_library(sodium_LIBRARY_DEBUG libsodium.a
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES lib
|
||||
)
|
||||
find_library(sodium_LIBRARY_RELEASE libsodium.a
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES lib
|
||||
)
|
||||
else()
|
||||
find_library(sodium_LIBRARY_DEBUG libsodium.dll.a
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES lib
|
||||
)
|
||||
find_library(sodium_LIBRARY_RELEASE libsodium.dll.a
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES lib
|
||||
)
|
||||
|
||||
file(GLOB _DLL
|
||||
LIST_DIRECTORIES false
|
||||
RELATIVE "${sodium_DIR}/bin"
|
||||
"${sodium_DIR}/bin/libsodium*.dll"
|
||||
)
|
||||
find_library(sodium_DLL_DEBUG ${_DLL} libsodium
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES bin
|
||||
)
|
||||
find_library(sodium_DLL_RELEASE ${_DLL} libsodium
|
||||
HINTS ${sodium_DIR}
|
||||
PATH_SUFFIXES bin
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "this platform is not supported by FindSodium.cmake")
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# unsupported
|
||||
else()
|
||||
message(FATAL_ERROR "this platform is not supported by FindSodium.cmake")
|
||||
endif()
|
||||
|
||||
|
||||
########################################################################
|
||||
# common stuff
|
||||
|
||||
# extract sodium version
|
||||
if (sodium_INCLUDE_DIR)
|
||||
set(_VERSION_HEADER "${_INCLUDE_DIR}/sodium/version.h")
|
||||
if (EXISTS _VERSION_HEADER)
|
||||
file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT)
|
||||
string(REGEX REPLACE ".*#[ \t]*define[ \t]*SODIUM_VERSION_STRING[ \t]*\"([^\n]*)\".*" "\\1"
|
||||
sodium_VERSION "${_VERSION_HEADER_CONTENT}")
|
||||
set(sodium_VERSION "${sodium_VERSION}" PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# communicate results
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(sodium
|
||||
REQUIRED_VARS
|
||||
sodium_LIBRARY_RELEASE
|
||||
sodium_LIBRARY_DEBUG
|
||||
sodium_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
sodium_VERSION
|
||||
)
|
||||
|
||||
# mark file paths as advanced
|
||||
mark_as_advanced(sodium_INCLUDE_DIR)
|
||||
mark_as_advanced(sodium_LIBRARY_DEBUG)
|
||||
mark_as_advanced(sodium_LIBRARY_RELEASE)
|
||||
if (WIN32)
|
||||
mark_as_advanced(sodium_DLL_DEBUG)
|
||||
mark_as_advanced(sodium_DLL_RELEASE)
|
||||
endif()
|
||||
|
||||
# create imported target
|
||||
if(sodium_USE_STATIC_LIBS)
|
||||
set(_LIB_TYPE STATIC)
|
||||
else()
|
||||
set(_LIB_TYPE SHARED)
|
||||
endif()
|
||||
add_library(sodium ${_LIB_TYPE} IMPORTED)
|
||||
|
||||
set_target_properties(sodium PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${sodium_INCLUDE_DIR}"
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
)
|
||||
|
||||
if (sodium_USE_STATIC_LIBS)
|
||||
set_target_properties(sodium PROPERTIES
|
||||
INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC"
|
||||
IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}"
|
||||
IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}"
|
||||
)
|
||||
else()
|
||||
if (UNIX)
|
||||
set_target_properties(sodium PROPERTIES
|
||||
IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}"
|
||||
IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}"
|
||||
)
|
||||
elseif (WIN32)
|
||||
set_target_properties(sodium PROPERTIES
|
||||
IMPORTED_IMPLIB "${sodium_LIBRARY_RELEASE}"
|
||||
IMPORTED_IMPLIB_DEBUG "${sodium_LIBRARY_DEBUG}"
|
||||
)
|
||||
if (NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND"))
|
||||
set_target_properties(sodium PROPERTIES
|
||||
IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}"
|
||||
)
|
||||
endif()
|
||||
if (NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND"))
|
||||
set_target_properties(sodium PROPERTIES
|
||||
IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}"
|
||||
IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}"
|
||||
IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
67
docs/CMakeLists.txt
Normal file
@@ -0,0 +1,67 @@
|
||||
# Copyright (C) 2020 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
|
||||
# the Free Software Foundation, either version 2 or (at your option)
|
||||
# version 3 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
find_program(ASCIIDOCTOR_EXE asciidoctor)
|
||||
if(NOT ASCIIDOCTOR_EXE)
|
||||
message(FATAL_ERROR "asciidoctor is required to build documentation")
|
||||
endif()
|
||||
message(STATUS "Using asciidoctor: ${ASCIIDOCTOR_EXE}")
|
||||
|
||||
set(DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
set(REV -a revnumber=${KEEPASSXC_VERSION})
|
||||
|
||||
# Build html documentation on all platforms
|
||||
file(GLOB html_depends ${DOC_DIR}/topics/* ${DOC_DIR}/styles/* ${DOC_DIR}/images/*)
|
||||
add_custom_command(OUTPUT KeePassXC_GettingStarted.html
|
||||
COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_GettingStarted.html ${REV} ${DOC_DIR}/GettingStarted.adoc
|
||||
DEPENDS ${html_depends} ${DOC_DIR}/GettingStarted.adoc
|
||||
VERBATIM)
|
||||
add_custom_command(OUTPUT KeePassXC_UserGuide.html
|
||||
COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_UserGuide.html ${REV} ${DOC_DIR}/UserGuide.adoc
|
||||
DEPENDS ${html_depends} ${DOC_DIR}/UserGuide.adoc
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
VERBATIM)
|
||||
file(GLOB styles_depends ${DOC_DIR}/styles/*)
|
||||
add_custom_command(OUTPUT KeePassXC_KeyboardShortcuts.html
|
||||
COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -o KeePassXC_KeyboardShortcuts.html ${REV} ${DOC_DIR}/topics/KeyboardShortcuts.adoc
|
||||
DEPENDS ${DOC_DIR}/topics/KeyboardShortcuts.adoc ${styles_depends}
|
||||
VERBATIM)
|
||||
|
||||
add_custom_target(docs ALL DEPENDS KeePassXC_GettingStarted.html KeePassXC_UserGuide.html KeePassXC_KeyboardShortcuts.html)
|
||||
|
||||
install(FILES
|
||||
${OUT_DIR}/KeePassXC_GettingStarted.html
|
||||
${OUT_DIR}/KeePassXC_UserGuide.html
|
||||
${OUT_DIR}/KeePassXC_KeyboardShortcuts.html
|
||||
DESTINATION ${DATA_INSTALL_DIR}/docs)
|
||||
|
||||
# Build Man Pages on Linux and macOS
|
||||
if(UNIX)
|
||||
add_custom_command(OUTPUT keepassxc.1
|
||||
COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${REV} ${DOC_DIR}/man/keepassxc.1.adoc
|
||||
DEPENDS ${DOC_DIR}/man/keepassxc.1.adoc
|
||||
VERBATIM)
|
||||
add_custom_command(OUTPUT keepassxc-cli.1
|
||||
COMMAND ${ASCIIDOCTOR_EXE} -D ${OUT_DIR} -b manpage ${REV} ${DOC_DIR}/man/keepassxc-cli.1.adoc
|
||||
DEPENDS ${DOC_DIR}/man/keepassxc-cli.1.adoc
|
||||
VERBATIM)
|
||||
add_custom_target(manpages ALL DEPENDS keepassxc.1 keepassxc-cli.1)
|
||||
|
||||
install(FILES
|
||||
${OUT_DIR}/keepassxc.1
|
||||
${OUT_DIR}/keepassxc-cli.1
|
||||
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/)
|
||||
endif()
|
||||
68
docs/FuzzTest.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Fuzz-Testing KeePassXC
|
||||
|
||||
Fuzz-testing = feeding random input into a program until it crashes. Be smart about what's "random" by looking at how the program executes the input.
|
||||
|
||||
We use the "American Fuzzy Lop" (AFL) fuzz tester (https://lcamtuf.coredump.cx/afl/).
|
||||
|
||||
The following assumes that all tools and libraries required to build KeePassXC from source have already been installed.
|
||||
|
||||
## Installing AFL
|
||||
|
||||
$ sudo apt install afl
|
||||
|
||||
Optionally, build AFL from source:
|
||||
|
||||
$ git clone https://github.com/google/AFL
|
||||
$ cd AFL
|
||||
$ make
|
||||
$ make install
|
||||
|
||||
## Building KeePassXC For Fuzzing
|
||||
|
||||
A special "instrumented build" is used that allows the fuzzer to look into the program as it executes. We place it in its own build directory so it doesn't confused with the production build.
|
||||
|
||||
$ cd your_keepassxc_source_directory
|
||||
$ mkdir buildafl
|
||||
$ cd buildafl
|
||||
$ CXX=afl-g++ AFL_HARDEN=1 cmake -DWITH_XC_ALL=ON ..
|
||||
$ make
|
||||
|
||||
In the source code, special behavior for fuzz testing can be implemented with `#ifdef __AFL_COMPILER`. For example, in fuzz builds, the KeePassXC CLI takes the database password from environment variable `KEYPASSXC_AFL_PASSWORD` to allow non-interactive operation.
|
||||
|
||||
## Prepare Fuzzer Input
|
||||
|
||||
To get the fuzzer started, we provide empty password database files (the password is `secret`).
|
||||
|
||||
$ cd buildafl
|
||||
$ mkdir -p findings/testcases
|
||||
$ cp ../share/empty*.kdbx findings/testcases
|
||||
|
||||
The fuzzer works by running KeePassXC with variations of this input, mutated in ways that make the program crash or hang.
|
||||
|
||||
## Run The Fuzzer
|
||||
|
||||
$ cd buildafl
|
||||
$ KEYPASSXC_AFL_PASSWORD=secret afl-fuzz -i findings/testcases -o findings -m 2000 -t 1000 src/cli/keepassxc-cli ls @@
|
||||
|
||||
This fuzz-tests the `ls` command of the KeePassXC CLI, which loads and decrypts a database file and then lists its contents. The parameters mean:
|
||||
|
||||
* `KEYPASSXC_AFL_PASSWORD=secret`: In fuzz test builds, the KeePassXC CLI takes the database password from this environment variable.
|
||||
* `-i findings/testcases`: The directory which contains the initial fuzzer input.
|
||||
* `-o findings`: The directory in which to store fuzzer results.
|
||||
* `-m 2000`: Fuzzer memory (in megabytes). Adjust as required if the fuzzer fails to start up.
|
||||
* `-t 1000`: Timeout until a hang is detected (in milliseconds).
|
||||
* `src/cli/keepassxc-cli`: The instrumented executable.
|
||||
* `ls`: The subcommand we're testing.
|
||||
* `@@`: The fuzzer replaces this by the name of a file with the generated input.
|
||||
|
||||
You may also need `export AFL_SKIP_CPUFREQ=1`.
|
||||
|
||||
If KeePassXC crashes or hangs when processing the input, the fuzzer writes the database file (that was used in place of `@@`) to the `findings/crashes` or `findings/hangs` directory, respectively.
|
||||
|
||||
To continue where the fuzzer left off, use `-i -`. To start over, remove and re-create the `findings` directory.
|
||||
|
||||
## More Information
|
||||
|
||||
AFL documentation: https://afl-1.readthedocs.io/en/latest/
|
||||
|
||||
Read this if you want to get serious about fuzz-testing.
|
||||
33
docs/GettingStarted.adoc
Normal file
@@ -0,0 +1,33 @@
|
||||
= KeePassXC: Getting Started Guide
|
||||
KeePassXC Team <team@keepassxc.org>
|
||||
:data-uri:
|
||||
:linkcss!:
|
||||
:homepage: https://keepassxc.org
|
||||
:icons: font
|
||||
:imagesdir: images
|
||||
:stylesheet: styles/dark.css
|
||||
:toc: left
|
||||
ifdef::backend-pdf[]
|
||||
:title-page:
|
||||
:title-logo-image: {imagesdir}/kpxc_logo.png
|
||||
:pdf-theme: styles/pdf_theme.yml
|
||||
:compress:
|
||||
endif::[]
|
||||
|
||||
include::topics/Disclaimers.adoc[]
|
||||
|
||||
<<<
|
||||
|
||||
// Include various topics, excluding advanced sections
|
||||
|
||||
include::topics/Welcome.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/DownloadInstall.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/UserInterface.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/PasswordGenerator.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/DatabaseOperations.adoc[tags=*;!advanced]
|
||||
|
||||
include::topics/BrowserPlugin.adoc[tags=*;!advanced]
|
||||
@@ -1,33 +0,0 @@
|
||||
# List of Keyboard Shortcuts for KeePassXC
|
||||
|
||||
Actions | Keyboard Shortcuts
|
||||
-----------------------------|----------------------------
|
||||
New Database | Ctrl + Shift + N
|
||||
Open Database | Ctrl + O
|
||||
Save Database | Ctrl + S
|
||||
Save Database As | Ctrl + Shift + S
|
||||
Close Database | Ctrl + W
|
||||
Lock Databases | Ctrl + L
|
||||
Quit | Ctrl + Q
|
||||
New Entry | Ctrl + N
|
||||
Edit Entry | Ctrl + E
|
||||
Delete Entry | Ctrl + D
|
||||
Clone Entry | Ctrl + K
|
||||
Show TOTP | Ctrl + Shift + T
|
||||
Copy TOTP | Ctrl + T
|
||||
Copy Username | Ctrl + B
|
||||
Copy Password | Ctrl + C
|
||||
Trigger AutoType | Ctrl + Shift - V
|
||||
Open URL | Ctrl + Shift - U
|
||||
Copy URL | Ctrl + U
|
||||
Add key to SSH Agent | Ctrl + H
|
||||
Remove key from SSH Agent | Ctrl + Shift + H
|
||||
Show Minimized | Ctrl + M
|
||||
Hide Window | Ctrl + Shift - M
|
||||
Select Next Database Tab | Ctrl + Tab *OR* Ctrl + PGDN
|
||||
Select Previous Database Tab | Ctrl + Shift + Tab *OR* Ctrl + PGUP
|
||||
Toggle Passwords Hidden | Ctrl + Shift + C
|
||||
Toggle Usernames Hidden | Ctrl + Shift + B
|
||||
Focus Search | Ctrl + F
|
||||
Clear Search | ESC
|
||||
Show Keyboard Shortcuts | Ctrl + /
|
||||
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 30 KiB |
@@ -1,137 +0,0 @@
|
||||
# Quick Start for KeePassXC
|
||||
|
||||
This procedure gets KeePassXC running on your computer with browser integration, using the pre-built binaries available for [download](https://keepassxc.org/download) from [KeePassXC site](https://keepassxc.org).
|
||||
|
||||
**TL;DR** KeePassXC saves your passwords securely.
|
||||
When you double-click a URL in KeePassXC, it launches your default browser to that URL.
|
||||
With browser integration configured, KeePassXC automatically enters username/password credentials into web page fields.
|
||||
|
||||
## Installing and Starting KeePassXC
|
||||
|
||||
1. [Download the native installer](https://keepassxc.org/download) and install KeePassXC for your Windows, macOS, or Linux computer in the usual way for your platform.
|
||||
1. Open the KeePassXC application.
|
||||
1. Create a new database and give it a master key that's used to unlock the database file.
|
||||
This database holds entries (usernames, passwords, account numbers, notes) for all your websites, programs, etc.
|
||||
1. Create a few entries - enter the username, password, URL, and optionally notes about the entry.
|
||||
1. KeePassXC securely stores those entries in the database.
|
||||
|
||||
## Setting up Browser Integration with KeePassXC
|
||||
|
||||
1. *Within KeePassXC*, go to **Tools → Settings** (on macOS, go to **KeePassXC → Preferences**).
|
||||
1. In **Browser Integration**, check **Enable KeePassXC browser integration**.
|
||||
1. Right below that, click the checkbox for the browser(s) you use.
|
||||
Leave the other options at their defaults.
|
||||
1. *In your default web browser,* install the KeePassXC Browser extension/add-on. Instructions for [Firefox or Tor Browser](https://addons.mozilla.org/firefox/addon/keepassxc-browser/) or [Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk).
|
||||
1. Click the KeePassXC icon in the upper-right corner. You'll see the dialog below.
|
||||
1. Click the blue Connect button to make the browser extension connect to the KeePassXC application.
|
||||
|
||||
<img src="./KeePassHTTP/KeePassXC-Connect.png" height="200" alt="KeePassXC Connect Dialog">
|
||||
|
||||
7. *Switch back to KeePassXC.* You'll see a dialog (below) indicating that a request to connect has arrived.
|
||||
7. Give the connection a name (perhaps *Keepass-Browsername*, any unique name will suffice) and click OK to accept it.
|
||||
7. This one-time operation connects KeePassXC and your browser.
|
||||
|
||||
<img src="./KeePassHTTP/KeePassXC-Accept-Button.png" height="200" alt="KeePassXC Accept Connection Dialog">
|
||||
|
||||
## Using Browser Integration
|
||||
|
||||
1. *Within KeePassXC,* double-click the URL of an entry, or select it and type Ctrl+U (Cmd+U on macOS).
|
||||
1. Your browser opens to that URL.
|
||||
1. If there are username/password fields on that page, you will see the dialog below.
|
||||
Click *Allow* to confirm that KeePassXC may access the credentials to auto-fill the fields.
|
||||
1. Check *Remember this decision* to allow this each time you visit the page.
|
||||
|
||||
<img src="./KeePassHTTP/KeePassXC-Confirm.png" height="200" alt="KeePassCX Confirm Access Dialog">
|
||||
|
||||
## Using Sharing
|
||||
|
||||
Sharing allows you to share a subset of your credentials with others and vice versa.
|
||||
|
||||
### Enable Sharing
|
||||
|
||||
To use sharing, you need to enable it for the application.
|
||||
|
||||
1. Go to Tools → Settings.
|
||||
1. Select the category KeeShare.
|
||||
1. Check _Allow import_ if you want to import shared credentials.
|
||||
1. Check _Allow export_ if you want to share credentials.
|
||||
|
||||
To make sure that your data is valid when imported by another client, please _generate_ (or _import_) a public/private key pair and enter your _signer_ name. This way your client may verify that the imported data is valid. When Importing, you'll see the known sources with names and fingerprint in the list at the bottom. This is the place to _trust_ or _untrust_ signers. It is only possible to trust someone on application level.
|
||||
|
||||
<img src="./KeeShare/AppSettings.png" height="600" width="800" alt="KeeShare Application Settings">
|
||||
|
||||
### Sharing Credentials
|
||||
|
||||
If you checked _Allow export_ in the Sharing settings you now are good to go to share some passwords with others. Sharing always is defined on a group. If you enable sharing on a group, every entry under this group or its children is shared. If you enable sharing on the root node, **every password** inside your database gets shared!
|
||||
|
||||
1. Open the edit sheet on a group you want to share.
|
||||
1. Select the sharing section.
|
||||
1. Choose _Export to path_ as the sharing method.
|
||||
1. Choose a path to store the shared credentials to.
|
||||
1. Generate a password for this share container.
|
||||
|
||||
The export file will not be generated automatically. Instead, each time the database is saved, the file gets written (so please deactivate the autosafe feature). If an old file is present, the old file will be overwritten! The file should be written to a location that is accessible by others. An easy setup is a network share or storing the file inside the cloud.
|
||||
|
||||
<img src="./KeeShare/GroupSettings_Export.png" height="600" width="800" alt="KeeShare Group Sharing Settings">
|
||||
|
||||
### Using Shared Credentials
|
||||
|
||||
Checking _Allow import_ in the Sharing settings of the database enables you to receive credentials from others. KeePass will watch sharing sources and import any changes immediately into your database using the synchronization feature.
|
||||
|
||||
1. Create a group for import.
|
||||
1. Open the edit sheet on that group.
|
||||
1. Select the sharing section.
|
||||
1. Choose _Import from path_ as the sharing method.
|
||||
1. Choose a share container that is shared with you.
|
||||
1. Enter the password for the shared container.
|
||||
|
||||
KeeShare observes the container for changes and merges them into your database when necessary. Importing merges in time order, so older data is moved to the history, which should have a sufficient size to prevent loss of needed data.
|
||||
|
||||
Please note, that the import currently is not restricted to the configured group. Every entry which was imported and moved outside the import group will be updated regardless of it's location!
|
||||
|
||||
<img src="./KeeShare/GroupSettings_Import.png" height="600" width="800" alt="KeeShare Group Import Settings">
|
||||
|
||||
### Using Synchronized Credentials
|
||||
|
||||
Instead of using different groups for sharing and importing you can use a single group that acts as both. This way you can synchronize a number of credentials easily across many users without a lot of hassle.
|
||||
|
||||
1. Open the edit sheet on a group you want to synchronize.
|
||||
1. Select the sharing section.
|
||||
1. Choose _Synchronize with path_ as the sharing method.
|
||||
1. Choose a database that you want to use a synchronization file.
|
||||
1. Enter the password for the database.
|
||||
|
||||
<img src="./KeeShare/GroupSettings_Sync.png" height="600" width="800" alt="KeeShare Group Synchronization Settings">
|
||||
|
||||
### Disable Sharing for Credentials
|
||||
|
||||
In case you don't want to share (import or export) some credentials, it is possible to you can
|
||||
* use the application settings and uncheck the options or
|
||||
* instead of selecting _Import from path_, _Export to path_ or _Synchronize with path_ you'll select _Inactive_ while leaving the path and the password untouched.
|
||||
|
||||
### Sharing overview
|
||||
|
||||
There is a simple overview of shared groups to keep track of your data.
|
||||
|
||||
1. Open the Database Settings.
|
||||
1. Select the KeeShare category.
|
||||
|
||||
<img src="./KeeShare/DatabaseSettings.png" height="600" width="800" alt="KeeShare Group Sharing Ovewview">
|
||||
|
||||
## Technical Details and Limitations of Sharing
|
||||
|
||||
Sharing relies on the combination of file exports and imports as well as the synchronization mechanism provided by KeePassXC. Since the merge algorithm uses the history of entries to prevent data loss, this history must be enabled and have a sufficient size. Furthermore, the merge algorithm is location independent, therefore it does not matter if entries are moved outside of an import group. These entries will be updated none the less. Moving entries outside of export groups will prevent a further export of the entry, but it will not ensure that the already shared data will be removed from any client.
|
||||
|
||||
KeeShare uses a custom certification mechanism to ensure that the source of the data is the expected one. This ensures that the data was exported by the signer but it is not possible to detect if someone replaced the data with an older version from a valid signer. To prevent this, the container could be placed at a location which is only writeable for valid signers.
|
||||
|
||||
## Using Auto Open
|
||||
|
||||
The Auto Open feature automatically loads and unlocks additional databases when you unlock your main database.
|
||||
In order to use this functionality, do the following:
|
||||
|
||||
1. Create a group called **AutoOpen** at the root of your main database.
|
||||
1. In this group, create a new entry for each database that should be opened automatically:
|
||||
* Put the *password of the database* in the **Password** field
|
||||
* Put the *path to the database's file* in the **URL** field* (it can be formatted either as **file://**, a **/path/to/the/file** form, or a relative file path.)
|
||||
* If the extra database requires a keyfile to be unlocked, put the *path to the keyfile* in the **Username** field. The path options are the same as for the database's file in the URL field.
|
||||
1. The next time you unlock your database these databases will be opened and unlocked automatically.
|
||||
38
docs/UserGuide.adoc
Normal file
@@ -0,0 +1,38 @@
|
||||
= KeePassXC: User Guide
|
||||
KeePassXC Team <team@keepassxc.org>
|
||||
:data-uri:
|
||||
:homepage: https://keepassxc.org
|
||||
:icons: font
|
||||
:imagesdir: images
|
||||
:stylesheet: styles/dark.css
|
||||
:toc: left
|
||||
ifdef::backend-pdf[]
|
||||
:title-page:
|
||||
:title-logo-image: {imagesdir}/kpxc_logo.png
|
||||
:pdf-theme: styles/pdf_theme.yml
|
||||
:compress:
|
||||
endif::[]
|
||||
|
||||
include::topics/Disclaimers.adoc[]
|
||||
|
||||
<<<
|
||||
|
||||
// Include feature topics and advanced sections
|
||||
|
||||
include::topics/UserInterface.adoc[tags=*]
|
||||
|
||||
include::topics/DatabaseOperations.adoc[tags=*]
|
||||
|
||||
include::topics/ImportExport.adoc[tags=*]
|
||||
|
||||
include::topics/PasswordGenerator.adoc[tags=*]
|
||||
|
||||
include::topics/BrowserPlugin.adoc[tags=*]
|
||||
|
||||
include::topics/AutoType.adoc[tags=*]
|
||||
|
||||
include::topics/KeeShare.adoc[tags=*]
|
||||
|
||||
include::topics/SSHAgent.adoc[tags=*]
|
||||
|
||||
include::topics/Reference.adoc[tags=*]
|
||||
BIN
docs/images/autoopen.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
docs/images/autoopen_ifdevice.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
docs/images/autotype_entry_sequences.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/images/autotype_entrylevel.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
docs/images/autotype_selection_dialog.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
docs/images/autotype_selection_dialog_search.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/images/autotype_selection_dialog_type_menu.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/images/autotype_settings.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
docs/images/browser_advanced_settings.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/images/browser_confirm_access_dialog.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/images/browser_database_settings.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
docs/images/browser_entry_settings.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
docs/images/browser_extension_association.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
docs/images/browser_extension_connect.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/images/browser_extension_icons.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
docs/images/browser_extension_reload.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
docs/images/browser_fill_credentials.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/images/browser_settings.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
docs/images/clone_entry.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
docs/images/clone_entry_dialog.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
docs/images/clone_entry_references.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/images/compact_mode_comparison.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
docs/images/csv_import.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
docs/images/database_security.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
docs/images/database_security_credentials.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/images/database_security_encryption.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
docs/images/database_security_encryption_advanced.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
docs/images/database_settings.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
docs/images/database_view.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
docs/images/edit_entry.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
docs/images/edit_entry_attachments.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
docs/images/edit_entry_attributes.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/images/edit_entry_colors.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
docs/images/edit_entry_history.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/images/edit_entry_icons.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
docs/images/edit_entry_properties.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/images/enable_copy_dc.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
docs/images/export_database.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
docs/images/install_wizard_1.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
docs/images/install_wizard_2.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/images/keeshare_application_settings.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
docs/images/keeshare_group_settings.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/images/keeshare_shared_group.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
docs/images/kpxc_logo.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
docs/images/linux_store.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
docs/images/macos_install.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/images/main_interface.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
docs/images/new_db_wizard_1.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
docs/images/new_db_wizard_2.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
docs/images/new_db_wizard_3.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/images/open_database.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
docs/images/passphrase_generator.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/images/password_generator.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/images/password_generator_advanced.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
docs/images/save_database_backup.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
docs/images/sshagent_application_settings.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/images/sshagent_context_menu.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
docs/images/sshagent_entry_settings.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
docs/images/sshagent_puttygen.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/images/theme_comparison.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
docs/images/theme_selection.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
docs/images/toolbar.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
docs/images/uac_dialog.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
docs/images/unlock_database.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
docs/images/welcome_screen.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
20
docs/man/includes/section-copyright.adoc
Normal file
@@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2020 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
|
||||
// the Free Software Foundation, either version 2 or (at your option)
|
||||
// version 3 of the License.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
== COPYRIGHT
|
||||
Copyright \(C) 2016-2020 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, either version 2 or version 3.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
27
docs/man/includes/section-notes.adoc
Normal file
@@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2020 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
|
||||
// the Free Software Foundation, either version 2 or (at your option)
|
||||
// version 3 of the License.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
== NOTES
|
||||
*Project homepage*::
|
||||
https://keepassxc.org
|
||||
|
||||
*QuickStart Guide*::
|
||||
https://keepassxc.org/docs/KeePassXC_GettingStarted.html
|
||||
|
||||
*User Guide*::
|
||||
https://keepassxc.org/docs/KeePassXC_UserGuide.html
|
||||
|
||||
*Git repository*::
|
||||
https://github.com/keepassxreboot/keepassxc.git
|
||||
17
docs/man/includes/section-reporting-bugs.adoc
Normal file
@@ -0,0 +1,17 @@
|
||||
// Copyright (C) 2020 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
|
||||
// the Free Software Foundation, either version 2 or (at your option)
|
||||
// version 3 of the License.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
== REPORTING BUGS
|
||||
Bugs and feature requests can be reported on GitHub at https://github.com/keepassxreboot/keepassxc/issues.
|
||||
319
docs/man/keepassxc-cli.1.adoc
Normal file
@@ -0,0 +1,319 @@
|
||||
// Copyright (C) 2017 Manolis Agkopian <m.agkopian@gmail.com>
|
||||
// Copyright (C) 2020 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
|
||||
// the Free Software Foundation, either version 2 or (at your option)
|
||||
// version 3 of the License.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
= keepassxc-cli(1)
|
||||
KeePassXC Team <team@keepassxc.org>
|
||||
:docdate: 2020-08-31
|
||||
:doctype: manpage
|
||||
:mansource: KeePassXC {revnumber}
|
||||
:manmanual: General Commands Manual
|
||||
|
||||
== NAME
|
||||
keepassxc-cli - command line interface for the KeePassXC password manager
|
||||
|
||||
== SYNOPSIS
|
||||
*keepassxc-cli* _command_ [_options_]
|
||||
|
||||
== DESCRIPTION
|
||||
*keepassxc-cli* is the command line interface for the *KeePassXC* password manager.
|
||||
It provides the ability to query and modify the entries of a KeePass database, directly from the command line.
|
||||
|
||||
== COMMANDS
|
||||
*add* [_options_] <__database__> <__entry__>::
|
||||
Adds a new entry to a database.
|
||||
A password can be generated (*-g* option), or a prompt can be displayed to input the password (*-p* option).
|
||||
The same password generation options as documented for the generate command can be used when the *-g* option is set.
|
||||
|
||||
*analyze* [_options_] <__database__>::
|
||||
Analyzes passwords in a database for weaknesses using offline HIBP SHA-1 hash lookup.
|
||||
|
||||
*clip* [_options_] <__database__> <__entry__> [_timeout_]::
|
||||
Copies an attribute or the current TOTP (if the *-t* option is specified) of a database entry to the clipboard.
|
||||
If no attribute name is specified using the *-a* option, the password is copied.
|
||||
If multiple entries with the same name exist in different groups, only the attribute for the first one is copied.
|
||||
For copying the attribute of an entry in a specific group, the group path to the entry should be specified as well, instead of just the name.
|
||||
Optionally, a timeout in seconds can be specified to automatically clear the clipboard, the default timeout is 10 seconds, set to 0 to disable.
|
||||
|
||||
*close*::
|
||||
In interactive mode, closes the currently opened database (see *open*).
|
||||
|
||||
*db-create* [_options_] <__database__>::
|
||||
Creates a new database with a password and/or a key file.
|
||||
The key file will be created if the file that is referred to does not exist.
|
||||
If both the key file and password are empty, no database will be created.
|
||||
|
||||
*db-info* [_options_] <__database__>::
|
||||
Show a database's information.
|
||||
|
||||
*diceware* [_options_]::
|
||||
Generates a random diceware passphrase.
|
||||
|
||||
*edit* [_options_] <__database__> <__entry__>::
|
||||
Edits a database entry.
|
||||
A password can be generated (*-g* option), or a prompt can be displayed to input the password (*-p* option).
|
||||
The same password generation options as documented for the generate command can be used when the *-g* option is set.
|
||||
|
||||
*estimate* [_options_] [_password_]::
|
||||
Estimates the entropy of a password.
|
||||
The password to estimate can be provided as a positional argument, or using the standard input.
|
||||
|
||||
*exit*::
|
||||
Exits interactive mode.
|
||||
Synonymous with *quit*.
|
||||
|
||||
*export* [_options_] <__database__>::
|
||||
Exports the content of a database to standard output in the specified format (defaults to XML).
|
||||
|
||||
*generate* [_options_]::
|
||||
Generates a random password.
|
||||
|
||||
*help* [_command_]::
|
||||
Displays a list of available commands, or detailed information about the specified command.
|
||||
|
||||
*import* [_options_] <__xml__> <__database__>::
|
||||
Imports the contents of an XML exported database to a new created database
|
||||
with a password and/or key file.
|
||||
The key file will be created if the file that is referred to does not exist.
|
||||
If both the key file and password are empty, no database will be created.
|
||||
The new database will be in kdbx 4 format.
|
||||
|
||||
|
||||
*locate* [_options_] <__database__> <__term__>::
|
||||
Locates all the entries that match a specific search term in a database.
|
||||
|
||||
*ls* [_options_] <__database__> [_group_]::
|
||||
Lists the contents of a group in a database.
|
||||
If no group is specified, it will default to the root group.
|
||||
|
||||
*merge* [_options_] <__database1__> <__database2__>::
|
||||
Merges two databases together.
|
||||
The first database file is going to be replaced by the result of the merge, for that reason it is advisable to keep a backup of the two database files before attempting a merge.
|
||||
In the case that both databases make use of the same credentials, the *--same-credentials* or *-s* option can be used.
|
||||
|
||||
*mkdir* [_options_] <__database__> <__group__>::
|
||||
Adds a new group to a database.
|
||||
|
||||
*mv* [_options_] <__database__> <__entry__> <__group__>::
|
||||
Moves an entry to a new group.
|
||||
|
||||
*open* [_options_] <__database__>::
|
||||
Opens the given database in a shell-style interactive mode.
|
||||
This is useful for performing multiple operations on a single database (e.g. *ls* followed by *show*).
|
||||
|
||||
*quit*::
|
||||
Exits interactive mode.
|
||||
Synonymous with *exit*.
|
||||
|
||||
*rm* [_options_] <__database__> <__entry__>::
|
||||
Removes an entry from a database.
|
||||
If the database has a recycle bin, the entry will be moved there.
|
||||
If the entry is already in the recycle bin, it will be removed permanently.
|
||||
|
||||
*rmdir* [_options_] <__database__> <__group__>::
|
||||
Removes a group from a database.
|
||||
If the database has a recycle bin, the group will be moved there.
|
||||
If the group is already in the recycle bin, it will be removed permanently.
|
||||
|
||||
*show* [_options_] <__database__> <__entry__>::
|
||||
Shows the title, username, password, URL and notes of a database entry.
|
||||
Can also show the current TOTP.
|
||||
Regarding the occurrence of multiple entries with the same name in different groups, everything stated in the *clip* command section also applies here.
|
||||
|
||||
== OPTIONS
|
||||
=== General options
|
||||
*--debug-info*::
|
||||
Displays debugging information.
|
||||
|
||||
*-k*, *--key-file* <__path__>::
|
||||
Specifies a path to a key file for unlocking the database.
|
||||
In a merge operation this option, is used to specify the key file path for the first database.
|
||||
|
||||
*--no-password*::
|
||||
Deactivates the password key for the database.
|
||||
|
||||
*-y*, *--yubikey* <__slot__>::
|
||||
Specifies a yubikey slot for unlocking the database.
|
||||
In a merge operation this option is used to specify the YubiKey slot for the first database.
|
||||
|
||||
*-q*, *--quiet* <__path__>::
|
||||
Silences password prompt and other secondary outputs.
|
||||
|
||||
*-h*, *--help*::
|
||||
Displays help information.
|
||||
|
||||
*-v*, *--version*::
|
||||
Displays the program version.
|
||||
|
||||
=== Merge options
|
||||
*-d*, *--dry-run* <__path__>::
|
||||
Prints the changes detected by the merge operation without making any changes to the database.
|
||||
|
||||
*--key-file-from* <__path__>::
|
||||
Sets the path of the key file for the second database.
|
||||
|
||||
*--no-password-from*::
|
||||
Deactivates password key for the database to merge from.
|
||||
|
||||
*--yubikey-from* <__slot__>::
|
||||
YubiKey slot for the second database.
|
||||
|
||||
*-s*, *--same-credentials*::
|
||||
Uses the same credentials for unlocking both databases.
|
||||
|
||||
=== Add and edit options
|
||||
The same password generation options as documented for the generate command can be used with those 2 commands when the *-g* option is set.
|
||||
|
||||
*-u*, *--username* <__username__>::
|
||||
Specifies the username of the entry.
|
||||
|
||||
*--url* <__url__>::
|
||||
Specifies the URL of the entry.
|
||||
|
||||
*--notes* <__notes__>::
|
||||
Specifies the notes of the entry.
|
||||
|
||||
*-p*, *--password-prompt*::
|
||||
Uses a password prompt for the entry's password.
|
||||
|
||||
*-g*, *--generate*::
|
||||
Generates a new password for the entry.
|
||||
|
||||
=== Edit options
|
||||
*-t*, *--title* <__title__>::
|
||||
Specifies the title of the entry.
|
||||
|
||||
=== Estimate options
|
||||
*-a*, *--advanced*::
|
||||
Performs advanced analysis on the password.
|
||||
|
||||
=== Analyze options
|
||||
*-H*, *--hibp* <__filename__>::
|
||||
Checks if any passwords have been publicly leaked, by comparing against the given list of password SHA-1 hashes, which must be in "Have I Been Pwned" format.
|
||||
Such files are available from https://haveibeenpwned.com/Passwords;
|
||||
note that they are large, and so this operation typically takes some time (minutes up to an hour or so).
|
||||
|
||||
*--okon* <__okon-cli path__>::
|
||||
Use the specified okon-cli program to perform offline breach checks. You can obtain okon-cli from https://github.com/stryku/okon.
|
||||
When using this option, *-H, --hibp* must point to a post-processed okon file (e.g. file.okon).
|
||||
|
||||
=== Clip options
|
||||
*-a*, *--attribute*::
|
||||
Copies the specified attribute to the clipboard.
|
||||
If no attribute is specified, the password attribute is the default.
|
||||
For example, "*-a* *username*" would copy the username to the clipboard.
|
||||
[Default: password]
|
||||
|
||||
*-t*, *--totp*::
|
||||
Copies the current TOTP instead of the specified attribute to the clipboard.
|
||||
Will report an error if no TOTP is configured for the entry.
|
||||
|
||||
*-b*, *--best*::
|
||||
Try to find and copy to clipboard a unique entry matching the input (similar to *-locate*)
|
||||
If a unique matching entry is found it will be copied to the clipboard.
|
||||
If multiple entries are found they will be listed to refine the search. (no clip performed)
|
||||
|
||||
=== Create and Import options
|
||||
*-k*, *--set-key-file* <__path__>::
|
||||
Set the key file for the database.
|
||||
|
||||
*-p*, *--set-password*::
|
||||
Set a password for the database.
|
||||
|
||||
*-t*, *--decryption-time* <__time__>::
|
||||
Target decryption time in MS for the database.
|
||||
|
||||
=== Show options
|
||||
*-a*, *--attributes* <__attribute__>...::
|
||||
Shows the named attributes.
|
||||
This option can be specified more than once, with each attribute shown one-per-line in the given order.
|
||||
If no attributes are specified and *-t* is not specified, a summary of the default attributes is given.
|
||||
Protected attributes will be displayed in clear text if specified explicitly by this option.
|
||||
|
||||
*-s*, *--show-protected*::
|
||||
Shows the protected attributes in clear text.
|
||||
|
||||
*-t*, *--totp*::
|
||||
Also shows the current TOTP, reporting an error if no TOTP is configured for the entry.
|
||||
|
||||
=== Diceware options
|
||||
*-W*, *--words* <__count__>::
|
||||
Sets the desired number of words for the generated passphrase.
|
||||
[Default: 7]
|
||||
|
||||
*-w*, *--word-list* <__path__>::
|
||||
Sets the Path of the wordlist for the diceware generator.
|
||||
The wordlist must have > 1000 words, otherwise the program will fail.
|
||||
If the wordlist has < 4000 words a warning will be printed to STDERR.
|
||||
|
||||
=== Export options
|
||||
*-f*, *--format*::
|
||||
Format to use when exporting.
|
||||
Available choices are xml or csv.
|
||||
Defaults to xml.
|
||||
|
||||
=== List options
|
||||
*-R*, *--recursive*::
|
||||
Recursively lists the elements of the group.
|
||||
|
||||
*-f*, *--flatten*::
|
||||
Flattens the output to single lines.
|
||||
When this option is enabled, subgroups and subentries will be displayed with a relative group path instead of indentation.
|
||||
|
||||
=== Generate options
|
||||
*-L*, *--length* <__length__>::
|
||||
Sets the desired length for the generated password.
|
||||
[Default: 16]
|
||||
|
||||
*-l*, *--lower*::
|
||||
Uses lowercase characters for the generated password.
|
||||
[Default: Enabled]
|
||||
|
||||
*-U*, *--upper*::
|
||||
Uses uppercase characters for the generated password.
|
||||
[Default: Enabled]
|
||||
|
||||
*-n*, *--numeric*::
|
||||
Uses numbers characters for the generated password.
|
||||
[Default: Enabled]
|
||||
|
||||
*-s*, *--special*::
|
||||
Uses special characters for the generated password.
|
||||
[Default: Disabled]
|
||||
|
||||
*-e*, *--extended*::
|
||||
Uses extended ASCII characters for the generated password.
|
||||
[Default: Disabled]
|
||||
|
||||
*-x*, *--exclude* <__chars__>::
|
||||
Comma-separated list of characters to exclude from the generated password.
|
||||
None is excluded by default.
|
||||
|
||||
*--exclude-similar*::
|
||||
Exclude similar looking characters.
|
||||
[Default: Disabled]
|
||||
|
||||
*--every-group*::
|
||||
Include characters from every selected group.
|
||||
[Default: Disabled]
|
||||
|
||||
include::includes/section-notes.adoc[]
|
||||
|
||||
== AUTHOR
|
||||
This manual page was originally written by Manolis Agkopian <m.agkopian@gmail.com>.
|
||||
|
||||
include::includes/section-reporting-bugs.adoc[]
|
||||
|
||||
include::includes/section-copyright.adoc[]
|
||||
65
docs/man/keepassxc.1.adoc
Normal file
@@ -0,0 +1,65 @@
|
||||
// Copyright (C) 2019 Janek Bevendorff <janek@jbev.net>
|
||||
// Copyright (C) 2020 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
|
||||
// the Free Software Foundation, either version 2 or (at your option)
|
||||
// version 3 of the License.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
= keepassxc(1)
|
||||
KeePassXC Team <team@keepassxc.org>
|
||||
:docdate: 2020-08-31
|
||||
:doctype: manpage
|
||||
:mansource: KeePassXC {revnumber}
|
||||
:manmanual: General Commands Manual
|
||||
|
||||
== NAME
|
||||
keepassxc - a modern open-source password manager
|
||||
|
||||
== SYNOPSIS
|
||||
*keepassxc* [_options_] [_filename(s)_]
|
||||
|
||||
== DESCRIPTION
|
||||
*KeePassXC* is a free/open-source password manager or safe which helps you to manage your passwords in a secure way.
|
||||
The complete database is always encrypted with the industry-standard AES (alias Rijndael) encryption algorithm using a 256 bit key.
|
||||
KeePassXC uses a database format that is compatible with KeePass Password Safe.
|
||||
Your wallet works offline and requires no Internet connection.
|
||||
|
||||
== OPTIONS
|
||||
*-h*, *--help*::
|
||||
Displays this help.
|
||||
|
||||
*-v*, *--version*::
|
||||
Displays version information.
|
||||
|
||||
*--config* <__config__>::
|
||||
Path to a custom config file.
|
||||
|
||||
*--keyfile* <__keyfile__>::
|
||||
Key file of the database.
|
||||
|
||||
*--pw-stdin*::
|
||||
Read password of the database from stdin.
|
||||
|
||||
*--pw*, *--parent-window* <__handle__>::
|
||||
Parent window handle.
|
||||
|
||||
*--debug-info*::
|
||||
Displays debugging information.
|
||||
|
||||
include::includes/section-notes.adoc[]
|
||||
|
||||
== AUTHOR
|
||||
This manual page was originally written by Janek Bevendorff <janek@jbev.net>.
|
||||
|
||||
include::includes/section-reporting-bugs.adoc[]
|
||||
|
||||
include::includes/section-copyright.adoc[]
|
||||
536
docs/styles/dark.css
Normal file
@@ -0,0 +1,536 @@
|
||||
@import url(https://fonts.googleapis.com/css?family=Noto+Sans);
|
||||
|
||||
/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
|
||||
/* Uncomment @import statement below to use as custom stylesheet */
|
||||
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
|
||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
|
||||
audio,canvas,video{display:inline-block}
|
||||
audio:not([controls]){display:none;height:0}
|
||||
script{display:none!important}
|
||||
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
|
||||
a{background:transparent}
|
||||
a:focus{outline:thin dotted}
|
||||
a:active,a:hover{outline:0}
|
||||
h1{font-size:2em;margin:.67em 0}
|
||||
abbr[title]{border-bottom:1px dotted}
|
||||
b,strong{font-weight:bold}
|
||||
dfn{font-style:italic}
|
||||
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
|
||||
mark{background:#ff0;color:#000}
|
||||
code,kbd,pre,samp{font-family:monospace;font-size:1em}
|
||||
pre{white-space:pre-wrap}
|
||||
q{quotes:"\201C" "\201D" "\2018" "\2019"}
|
||||
small{font-size:80%}
|
||||
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
|
||||
sup{top:-.5em}
|
||||
sub{bottom:-.25em}
|
||||
img{border:0}
|
||||
svg:not(:root){overflow:hidden}
|
||||
figure{margin:0}
|
||||
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
|
||||
legend{border:0;padding:0}
|
||||
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
|
||||
button,input{line-height:normal}
|
||||
button,select{text-transform:none}
|
||||
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
|
||||
button[disabled],html input[disabled]{cursor:default}
|
||||
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
|
||||
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
|
||||
textarea{overflow:auto;vertical-align:top}
|
||||
table{border-collapse:collapse;border-spacing:0}
|
||||
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
|
||||
html,body{font-size:100%}
|
||||
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
|
||||
a:hover{cursor:pointer}
|
||||
img,object,embed{max-width:100%;height:auto}
|
||||
object,embed{height:100%}
|
||||
img{-ms-interpolation-mode:bicubic}
|
||||
.left{float:left!important}
|
||||
.right{float:right!important}
|
||||
.text-left{text-align:left!important}
|
||||
.text-right{text-align:right!important}
|
||||
.text-center{text-align:center!important}
|
||||
.text-justify{text-align:justify!important}
|
||||
.hide{display:none}
|
||||
img,object,svg{display:inline-block;vertical-align:middle}
|
||||
textarea{height:auto;min-height:50px}
|
||||
select{width:100%}
|
||||
.center{margin-left:auto;margin-right:auto}
|
||||
.stretch{width:100%}
|
||||
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
|
||||
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
|
||||
a{color:#2156a5;text-decoration:underline;line-height:inherit}
|
||||
a:hover,a:focus{color:#1d4b8f}
|
||||
a img{border:none}
|
||||
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
|
||||
p aside{font-size:.875em;line-height:1.35;font-style:italic}
|
||||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
|
||||
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
|
||||
h1{font-size:2.125em}
|
||||
h2{font-size:1.6875em}
|
||||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
|
||||
h4,h5{font-size:1.125em}
|
||||
h6{font-size:1em}
|
||||
hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
|
||||
em,i{font-style:italic;line-height:inherit}
|
||||
strong,b{font-weight:bold;line-height:inherit}
|
||||
small{font-size:60%;line-height:inherit}
|
||||
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
|
||||
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
|
||||
ul,ol{margin-left:1.5em}
|
||||
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
|
||||
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
|
||||
ul.square{list-style-type:square}
|
||||
ul.circle{list-style-type:circle}
|
||||
ul.disc{list-style-type:disc}
|
||||
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
|
||||
dl dt{margin-bottom:.3125em;font-weight:bold}
|
||||
dl dd{margin-bottom:1.25em}
|
||||
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
|
||||
abbr{text-transform:none}
|
||||
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
|
||||
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
|
||||
blockquote cite::before{content:"\2014 \0020"}
|
||||
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
|
||||
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
|
||||
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
|
||||
h1{font-size:2.75em}
|
||||
h2{font-size:2.3125em}
|
||||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
|
||||
h4{font-size:1.4375em}}
|
||||
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
|
||||
table thead,table tfoot{background:#f7f8f7}
|
||||
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
|
||||
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
|
||||
table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
|
||||
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
|
||||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
|
||||
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
|
||||
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
|
||||
.clearfix::after,.float-group::after{clear:both}
|
||||
*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
|
||||
*:not(pre)>code.nobreak{word-wrap:normal}
|
||||
*:not(pre)>code.nowrap{white-space:nowrap}
|
||||
pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
|
||||
em em{font-style:normal}
|
||||
strong strong{font-weight:400}
|
||||
.keyseq{color:rgba(51,51,51,.8)}
|
||||
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
|
||||
.keyseq kbd:first-child{margin-left:0}
|
||||
.keyseq kbd:last-child{margin-right:0}
|
||||
.menuseq,.menuref{color:#000}
|
||||
.menuseq b:not(.caret),.menuref{font-weight:inherit}
|
||||
.menuseq{word-spacing:-.02em}
|
||||
.menuseq b.caret{font-size:1.25em;line-height:.8}
|
||||
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
|
||||
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
|
||||
b.button::before{content:"[";padding:0 3px 0 2px}
|
||||
b.button::after{content:"]";padding:0 2px 0 3px}
|
||||
p a>code:hover{color:rgba(0,0,0,.9)}
|
||||
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
|
||||
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
|
||||
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
|
||||
#content{margin-top:1.25em}
|
||||
#content::before{content:none}
|
||||
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
|
||||
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
|
||||
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
|
||||
#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
|
||||
#header .details span:first-child{margin-left:-.125em}
|
||||
#header .details span.email a{color:rgba(0,0,0,.85)}
|
||||
#header .details br{display:none}
|
||||
#header .details br+span::before{content:"\00a0\2013\00a0"}
|
||||
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
|
||||
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
|
||||
#header #revnumber{text-transform:capitalize}
|
||||
#header #revnumber::after{content:"\00a0"}
|
||||
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
|
||||
#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
|
||||
#toc>ul{margin-left:.125em}
|
||||
#toc ul.sectlevel0>li>a{font-style:italic}
|
||||
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
|
||||
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
|
||||
#toc li{line-height:1.3334;margin-top:.3334em}
|
||||
#toc a{text-decoration:none}
|
||||
#toc a:active{text-decoration:underline}
|
||||
#toctitle{color:#7a2518;font-size:1.2em}
|
||||
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
|
||||
body.toc2{padding-left:15em;padding-right:0}
|
||||
#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
|
||||
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
|
||||
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
|
||||
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
|
||||
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
|
||||
body.toc2.toc-right{padding-left:0;padding-right:15em}
|
||||
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
|
||||
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
|
||||
#toc.toc2{width:20em}
|
||||
#toc.toc2 #toctitle{font-size:1.375em}
|
||||
#toc.toc2>ul{font-size:.95em}
|
||||
#toc.toc2 ul ul{padding-left:1.25em}
|
||||
body.toc2.toc-right{padding-left:0;padding-right:20em}}
|
||||
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
|
||||
#content #toc>:first-child{margin-top:0}
|
||||
#content #toc>:last-child{margin-bottom:0}
|
||||
#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
|
||||
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
|
||||
#content{margin-bottom:.625em}
|
||||
.sect1{padding-bottom:.625em}
|
||||
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
|
||||
.sect1{padding-bottom:1.25em}}
|
||||
.sect1:last-child{padding-bottom:0}
|
||||
.sect1+.sect1{border-top:1px solid #efefed}
|
||||
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
|
||||
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
|
||||
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
|
||||
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
|
||||
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
|
||||
.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
|
||||
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
|
||||
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
|
||||
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
|
||||
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
|
||||
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
|
||||
.admonitionblock>table td.icon{text-align:center;width:80px}
|
||||
.admonitionblock>table td.icon img{max-width:none}
|
||||
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
|
||||
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
|
||||
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
|
||||
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
|
||||
.exampleblock>.content>:first-child{margin-top:0}
|
||||
.exampleblock>.content>:last-child{margin-bottom:0}
|
||||
.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
|
||||
.sidebarblock>:first-child{margin-top:0}
|
||||
.sidebarblock>:last-child{margin-bottom:0}
|
||||
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
|
||||
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
|
||||
.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
|
||||
.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
|
||||
.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
|
||||
.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
|
||||
@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
|
||||
@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
|
||||
.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
|
||||
.listingblock pre.highlightjs{padding:0}
|
||||
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
|
||||
.listingblock pre.prettyprint{border-width:0}
|
||||
.listingblock>.content{position:relative}
|
||||
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
|
||||
.listingblock:hover code[data-lang]::before{display:block}
|
||||
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999}
|
||||
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
|
||||
table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
|
||||
table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
|
||||
table.pyhltable td.code{padding-left:.75em;padding-right:0}
|
||||
pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
|
||||
pre.pygments .lineno{display:inline-block;margin-right:.25em}
|
||||
table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
|
||||
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
|
||||
.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
|
||||
.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
|
||||
.quoteblock blockquote{margin:0;padding:0;border:0}
|
||||
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
|
||||
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
|
||||
.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
|
||||
.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
|
||||
.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
|
||||
.quoteblock .quoteblock blockquote::before{display:none}
|
||||
.verseblock{margin:0 1em 1.25em}
|
||||
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
|
||||
.verseblock pre strong{font-weight:400}
|
||||
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
|
||||
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
|
||||
.quoteblock .attribution br,.verseblock .attribution br{display:none}
|
||||
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
|
||||
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
|
||||
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
|
||||
.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{word-spacing:0;line-height:1.6}
|
||||
.quoteblock.abstract blockquote::before,.quoteblock.abstract p::before{display:none}
|
||||
table.tableblock{max-width:100%;border-collapse:separate}
|
||||
p.tableblock:last-child{margin-bottom:0}
|
||||
td.tableblock>.content{margin-bottom:-1.25em}
|
||||
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
|
||||
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
|
||||
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
|
||||
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
|
||||
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
|
||||
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
|
||||
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
|
||||
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
|
||||
table.frame-all{border-width:1px}
|
||||
table.frame-sides{border-width:0 1px}
|
||||
table.frame-topbot,table.frame-ends{border-width:1px 0}
|
||||
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7}
|
||||
table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none}
|
||||
th.halign-left,td.halign-left{text-align:left}
|
||||
th.halign-right,td.halign-right{text-align:right}
|
||||
th.halign-center,td.halign-center{text-align:center}
|
||||
th.valign-top,td.valign-top{vertical-align:top}
|
||||
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
|
||||
th.valign-middle,td.valign-middle{vertical-align:middle}
|
||||
table thead th,table tfoot th{font-weight:bold}
|
||||
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
|
||||
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
|
||||
p.tableblock>code:only-child{background:none;padding:0}
|
||||
p.tableblock{font-size:1em}
|
||||
td>div.verse{white-space:pre}
|
||||
ol{margin-left:1.75em}
|
||||
ul li ol{margin-left:1.5em}
|
||||
dl dd{margin-left:1.125em}
|
||||
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
|
||||
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
|
||||
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
|
||||
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
|
||||
ul.unstyled,ol.unstyled{margin-left:0}
|
||||
ul.checklist{margin-left:.625em}
|
||||
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
|
||||
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
|
||||
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
|
||||
ul.inline>li{margin-left:1.25em}
|
||||
.unstyled dl dt{font-weight:400;font-style:normal}
|
||||
ol.arabic{list-style-type:decimal}
|
||||
ol.decimal{list-style-type:decimal-leading-zero}
|
||||
ol.loweralpha{list-style-type:lower-alpha}
|
||||
ol.upperalpha{list-style-type:upper-alpha}
|
||||
ol.lowerroman{list-style-type:lower-roman}
|
||||
ol.upperroman{list-style-type:upper-roman}
|
||||
ol.lowergreek{list-style-type:lower-greek}
|
||||
.hdlist>table,.colist>table{border:0;background:none}
|
||||
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
|
||||
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
|
||||
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
|
||||
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
|
||||
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
|
||||
.colist td:not([class]):first-child img{max-width:none}
|
||||
.colist td:not([class]):last-child{padding:.25em 0}
|
||||
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
|
||||
.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
|
||||
.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
|
||||
.imageblock>.title{margin-bottom:0}
|
||||
.imageblock.thumb,.imageblock.th{border-width:6px}
|
||||
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
|
||||
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
|
||||
.image.left{margin-right:.625em}
|
||||
.image.right{margin-left:.625em}
|
||||
a.image{text-decoration:none;display:inline-block}
|
||||
a.image object{pointer-events:none}
|
||||
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
|
||||
sup.footnote a,sup.footnoteref a{text-decoration:none}
|
||||
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
|
||||
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
|
||||
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
|
||||
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
|
||||
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
|
||||
#footnotes .footnote:last-of-type{margin-bottom:0}
|
||||
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
|
||||
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
|
||||
.gist .file-data>table td.line-data{width:99%}
|
||||
div.unbreakable{page-break-inside:avoid}
|
||||
.big{font-size:larger}
|
||||
.small{font-size:smaller}
|
||||
.underline{text-decoration:underline}
|
||||
.overline{text-decoration:overline}
|
||||
.line-through{text-decoration:line-through}
|
||||
.aqua{color:#00bfbf}
|
||||
.aqua-background{background-color:#00fafa}
|
||||
.black{color:#000}
|
||||
.black-background{background-color:#000}
|
||||
.blue{color:#0000bf}
|
||||
.blue-background{background-color:#0000fa}
|
||||
.fuchsia{color:#bf00bf}
|
||||
.fuchsia-background{background-color:#fa00fa}
|
||||
.gray{color:#606060}
|
||||
.gray-background{background-color:#7d7d7d}
|
||||
.green{color:#006000}
|
||||
.green-background{background-color:#007d00}
|
||||
.lime{color:#00bf00}
|
||||
.lime-background{background-color:#00fa00}
|
||||
.maroon{color:#600000}
|
||||
.maroon-background{background-color:#7d0000}
|
||||
.navy{color:#000060}
|
||||
.navy-background{background-color:#00007d}
|
||||
.olive{color:#606000}
|
||||
.olive-background{background-color:#7d7d00}
|
||||
.purple{color:#600060}
|
||||
.purple-background{background-color:#7d007d}
|
||||
.red{color:#bf0000}
|
||||
.red-background{background-color:#fa0000}
|
||||
.silver{color:#909090}
|
||||
.silver-background{background-color:#bcbcbc}
|
||||
.teal{color:#006060}
|
||||
.teal-background{background-color:#007d7d}
|
||||
.white{color:#bfbfbf}
|
||||
.white-background{background-color:#fafafa}
|
||||
.yellow{color:#bfbf00}
|
||||
.yellow-background{background-color:#fafa00}
|
||||
span.icon>.fa{cursor:default}
|
||||
a span.icon>.fa{cursor:inherit}
|
||||
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
|
||||
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
|
||||
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
|
||||
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
|
||||
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
|
||||
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
|
||||
.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
|
||||
.conum[data-value] *{color:#fff!important}
|
||||
.conum[data-value]+b{display:none}
|
||||
.conum[data-value]::after{content:attr(data-value)}
|
||||
pre .conum[data-value]{position:relative;top:-.125em}
|
||||
b.conum *{color:inherit!important}
|
||||
.conum:not([data-value]):empty{display:none}
|
||||
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
|
||||
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
|
||||
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
|
||||
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
|
||||
p{margin-bottom:1.25rem}
|
||||
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
|
||||
.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
|
||||
.print-only{display:none!important}
|
||||
@page{margin:1.25cm .75cm}
|
||||
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
|
||||
html{font-size:80%}
|
||||
a{color:inherit!important;text-decoration:underline!important}
|
||||
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
|
||||
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
|
||||
abbr[title]::after{content:" (" attr(title) ")"}
|
||||
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
|
||||
thead{display:table-header-group}
|
||||
svg{max-width:100%}
|
||||
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
|
||||
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
|
||||
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
|
||||
#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
|
||||
body.book #header{text-align:center}
|
||||
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
|
||||
body.book #header .details{border:0!important;display:block;padding:0!important}
|
||||
body.book #header .details span:first-child{margin-left:0!important}
|
||||
body.book #header .details br{display:block}
|
||||
body.book #header .details br+span::before{content:none!important}
|
||||
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
|
||||
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
|
||||
.listingblock code[data-lang]::before{display:block}
|
||||
#footer{padding:0 .9375em}
|
||||
.hide-on-print{display:none!important}
|
||||
.print-only{display:block!important}
|
||||
.hide-for-print{display:none!important}
|
||||
.show-for-print{display:inherit!important}}
|
||||
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
|
||||
.sect1{padding:0!important}
|
||||
.sect1+.sect1{border:0}
|
||||
#footer{background:none}
|
||||
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
|
||||
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
|
||||
|
||||
|
||||
|
||||
/* CUSTOMISATIONS */
|
||||
/* Change the values in root for quick customisation. If you want even more fine grain... venture further. */
|
||||
:root {
|
||||
--textcolor: #CACBCE;
|
||||
--textcoloralt: #e7b649;
|
||||
--background: #3B3B3D;
|
||||
--sidebarbackground: #2C2C30;
|
||||
--header1color: #4adb22;
|
||||
--header2color: #6de597;
|
||||
--quotecolor: #20b82b;
|
||||
--toccolor: #f3bf4a;
|
||||
--toccolorhover: #eece83;
|
||||
--linkcolor: #6de597;
|
||||
--linkhovercolor: #8fdaa9;
|
||||
--tipcolor: #f0f0f0;
|
||||
--notecolor: #f3bf4a;
|
||||
--warningcolor: #FF7D7D;
|
||||
}
|
||||
|
||||
/* Text styles */
|
||||
|
||||
body{font-family: "Noto Sans",sans-serif;background-color: var(--background);color:var(--textcolor);}
|
||||
|
||||
h1{color:var(--header1color) !important;font-family:"Noto Sans",sans-serif;}
|
||||
h2,h3,h4,h5,h6{color:var(--header2color) !important;font-family:"Noto Sans",sans-serif;}
|
||||
.title{color:var(--textcolor) !important;font-family:"Noto Sans",sans-serif;font-style: normal; font-weight: normal;}
|
||||
p{font-family: "Noto Sans",sans-serif !important}
|
||||
#toc.toc2 a:link{color:var(--toccolor)}
|
||||
#toc.toc2 a:hover{color:var(--toccolorhover)}
|
||||
blockquote{color:var(--quotecolor) !important}
|
||||
.quoteblock{color:var(--textcolor)}
|
||||
code{color:var(--textcoloralt);background-color: var(--sidebarbackground) !important}
|
||||
pre,pre>code{line-height:1.25; color:var(--textcoloralt);}
|
||||
.keyseq{color:var(--textcoloralt);}
|
||||
|
||||
|
||||
/* Table styles */
|
||||
th{background-color: var(--background);color: var(--textcolor) !important;}
|
||||
td{background-color: var(--background);color: var(--textcoloralt) !important;}
|
||||
|
||||
|
||||
#toc.toc2{background-color:var(--sidebarbackground);}
|
||||
#toctitle{color:var(--textcolor);}
|
||||
|
||||
/* Responsiveness fixes */
|
||||
video {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.exampleblock > .content {
|
||||
background-color: var(--background);
|
||||
}
|
||||
|
||||
a {color: var(--linkcolor);}
|
||||
a:hover {color: var(--linkhovercolor);}
|
||||
|
||||
.admonitionblock.tip td.content, .admonitionblock td.icon .icon-tip::before {
|
||||
text-shadow: none;
|
||||
color: var(--tipcolor) !important;
|
||||
}
|
||||
|
||||
.admonitionblock.note td.content, .admonitionblock td.icon .icon-note::before {
|
||||
color: var(--notecolor) !important;
|
||||
}
|
||||
|
||||
.admonitionblock.important td.content, .admonitionblock td.icon .icon-important::before {
|
||||
color: var(--warningcolor) !important;
|
||||
}
|
||||
|
||||
.admonitionblock.warning td.content, .admonitionblock td.icon .icon-warning::before {
|
||||
color: var(--warningcolor) !important;
|
||||
}
|
||||
|
||||
#preamble > .sectionbody > .paragraph:first-of-type p {
|
||||
color: var(--textcolor);
|
||||
}
|
||||
|
||||
.quoteblock blockquote::before {
|
||||
color: var(--header1color);
|
||||
}
|
||||
.quoteblock .attribution cite, .verseblock .attribution cite {
|
||||
color: var(--textcolor);
|
||||
}
|
||||
.verseblock pre {
|
||||
color: var(--textcolor);
|
||||
}
|
||||
.quoteblock blockquote, .quoteblock blockquote p {
|
||||
color: var(--textcolor);
|
||||
}
|
||||
|
||||
.sidebarblock {
|
||||
background: var(--sidebarbackground);
|
||||
}
|
||||
.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint {
|
||||
background: var(--sidebarbackground);
|
||||
color: var(--textcolor);
|
||||
}
|
||||
|
||||
#header .details {
|
||||
color: var(--textcolor);
|
||||
}
|
||||
#header .details span.email a {
|
||||
color: var(--toccolor);
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 3em;
|
||||
}
|
||||
.subtitle {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
30
docs/styles/pdf_theme.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
page:
|
||||
layout: portrait
|
||||
margin: [0.75in, 1in, 0.75in, 1in]
|
||||
size: Letter
|
||||
base:
|
||||
font-color: #333333
|
||||
font-family: Times-Roman
|
||||
font-size: 12
|
||||
line-height-length: 17
|
||||
line-height: $base-line-height-length / $base-font-size
|
||||
vertical-spacing: $base-line-height-length
|
||||
heading:
|
||||
font-color: #262626
|
||||
font-size: 17
|
||||
font-style: bold
|
||||
line-height: 1.2
|
||||
margin-bottom: $vertical-spacing
|
||||
link:
|
||||
font-color: #002FA7
|
||||
outline-list:
|
||||
indent: $base-font-size * 1.5
|
||||
footer:
|
||||
height: $base-line-height-length * 2.5
|
||||
line-height: 1
|
||||
recto:
|
||||
right:
|
||||
content: '{page-number}'
|
||||
verso:
|
||||
left:
|
||||
content: $footer-recto-right-content
|
||||
6
docs/topics/.sharedheader
Normal file
@@ -0,0 +1,6 @@
|
||||
KeePassXC Team <team@keepassxc.org>
|
||||
:data-uri:
|
||||
:homepage: https://keepassxc.org
|
||||
:stylesheet: ../styles/dark.css
|
||||
:icons: font
|
||||
:toc: left
|
||||