diff --git a/docs/images/autoopen.png b/docs/images/autoopen.png new file mode 100644 index 000000000..a825accc2 Binary files /dev/null and b/docs/images/autoopen.png differ diff --git a/docs/images/autoopen_ifdevice.png b/docs/images/autoopen_ifdevice.png new file mode 100644 index 000000000..96af037fc Binary files /dev/null and b/docs/images/autoopen_ifdevice.png differ diff --git a/docs/topics/DatabaseOperations.adoc b/docs/topics/DatabaseOperations.adoc index eafe861b6..919c1ae76 100644 --- a/docs/topics/DatabaseOperations.adoc +++ b/docs/topics/DatabaseOperations.adoc @@ -235,6 +235,31 @@ image::edit_entry_history.png[] NOTE: Restoring an old history item will store the current entry settings as a new history item. +== Automatic Database Opening +You can setup one or more databases to open automatically when you unlock a single database. This is done by *(1)* defining a special group named `AutoOpen` with *(2)* entries that contain the file path and credentials for each database that should be opened. There is no limit to the number of databases that can be opened. + +TIP: Case matters with auto open, the group name must be exactly `AutoOpen`. + +.AutoOpen Group and Entries +image::autoopen.png[] + +To setup an entry for auto open perform the following steps: + +1. Create a new entry and give it any title you wish. +2. If your database has a key file, enter its absolute or relative path in the `username` field. +3. If your database has a password, enter it in the `password` field +4. Enter the absolute or relative path to the database file in the `url` field. You can also use the `{DB_DIR}` placeholder to reference the absolute path of the current database file. +5. To restrict auto open to particular devices, go to the advanced category and enter the following: + a. Create a new attribute named `IfDevice`. + b. Enter hostnames in a comma separated list to define computers that will open this database. + c. Prepend an exclamation mark (`!`) to explicitly exclude a device. + d. Examples: `LAPTOP, DESKTOP` will auto open on a computer named LAPTOP or DESKTOP. `!LAPTOP` will auto open on all devices *not* named LAPTOP. + +.Auto open IfDevice example +image::autoopen_ifdevice.png[] + +NOTE: You can setup an entry to open on double click of the URL field by prepending `kdbx://` to the relative or absolute path to the database file. You may also have to add `file://` to access network shares (e.g., `kdbx://file://share/database.kdbx`). + == Database Settings At any point of time, you can change the settings for your database. To make changes to the general settings, perform the following steps: diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 3e1d3192b..b929cfaf0 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -2060,18 +2060,23 @@ void DatabaseWidget::processAutoOpen() // Support ifDevice advanced entry, a comma separated list of computer names // that control whether to perform AutoOpen on this entry or not. Can be // negated using '!' - auto ifDevice = entry->attribute("ifDevice"); + auto ifDevice = entry->attribute("IfDevice"); if (!ifDevice.isEmpty()) { - bool loadDb = false; + bool loadDb = true; auto hostName = QHostInfo::localHostName(); - for (auto& dev : ifDevice.split(",")) { - dev = dev.trimmed(); - if (dev.startsWith("!") && dev.mid(1).compare(hostName, Qt::CaseInsensitive) == 0) { - // Machine name matched an exclusion, don't load this database - loadDb = false; - break; - } else if (dev.compare(hostName, Qt::CaseInsensitive) == 0) { + for (auto& device : ifDevice.split(",")) { + device = device.trimmed(); + if (device.startsWith("!")) { + if (device.mid(1).compare(hostName, Qt::CaseInsensitive) == 0) { + // Machine name matched an exclusion, don't load this database + loadDb = false; + break; + } + } else if (device.compare(hostName, Qt::CaseInsensitive) == 0) { loadDb = true; + } else { + // Don't load the database if there are devices not starting with '!' + loadDb = false; } } if (!loadDb) {