diff options
author | metaphys <jl.biasini@laposte.net> | 2019-09-04 00:17:33 +0300 |
---|---|---|
committer | Jonathan White <support@dmapps.us> | 2019-09-07 14:46:01 +0300 |
commit | 72c1783b5bd56afb2f536417dc930066a1b568da (patch) | |
tree | 3e70a70e4f2e07f069483d531607487ffd5e643c /src | |
parent | 0a75b475096821484546e780387dccaa016e3bca (diff) |
Support key files with Auto Open feature
Fixes #3495
* Look for keyfile in username parameter of the Auto Open entries. If present, pass on to unlock call to the database.
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/DatabaseTabWidget.cpp | 5 | ||||
-rw-r--r-- | src/gui/DatabaseWidget.cpp | 25 | ||||
-rw-r--r-- | src/gui/DatabaseWidget.h | 3 |
3 files changed, 24 insertions, 9 deletions
diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index 11b87cad3..8e7096a1c 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -201,8 +201,9 @@ void DatabaseTabWidget::addDatabaseTab(DatabaseWidget* dbWidget, bool inBackgrou } connect(dbWidget, SIGNAL(databaseFilePathChanged(QString, QString)), SLOT(updateTabName())); - connect( - dbWidget, SIGNAL(requestOpenDatabase(QString, bool, QString)), SLOT(addDatabaseTab(QString, bool, QString))); + connect(dbWidget, + SIGNAL(requestOpenDatabase(QString, bool, QString, QString)), + SLOT(addDatabaseTab(QString, bool, QString, QString))); connect(dbWidget, SIGNAL(closeRequest()), SLOT(closeDatabaseTabFromSender())); connect(dbWidget, SIGNAL(databaseModified()), SLOT(updateTabName())); connect(dbWidget, SIGNAL(databaseSaved()), SLOT(updateTabName())); diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index b5698aafc..05fc01ca3 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -987,10 +987,8 @@ void DatabaseWidget::unlockDatabase(bool accepted) } replaceDatabase(db); if (db->isReadOnly()) { - showMessage(tr("This database is opened in read-only mode. Autosave is disabled."), - MessageWidget::Warning, - false, - -1); + showMessage( + tr("This database is opened in read-only mode. Autosave is disabled."), MessageWidget::Warning, false, -1); } restoreGroupEntryFocus(m_groupBeforeLock, m_entryBeforeLock); @@ -1740,6 +1738,8 @@ void DatabaseWidget::processAutoOpen() continue; } QFileInfo filepath; + QFileInfo keyfile; + if (entry->url().startsWith("file://")) { QUrl url(entry->url()); filepath.setFile(url.toLocalFile()); @@ -1755,7 +1755,20 @@ void DatabaseWidget::processAutoOpen() continue; } - // Request to open the database file in the background - emit requestOpenDatabase(filepath.canonicalFilePath(), true, entry->password()); + if (!entry->username().isEmpty()) { + if (entry->username().startsWith("file://")) { + QUrl keyfileUrl(entry->username()); + keyfile.setFile(keyfileUrl.toLocalFile()); + } else { + keyfile.setFile(entry->username()); + if (keyfile.isRelative()) { + QFileInfo currentpath(m_db->filePath()); + keyfile.setFile(currentpath.absoluteDir(), entry->username()); + } + } + } + + // Request to open the database file in the background with a password and keyfile + emit requestOpenDatabase(filepath.canonicalFilePath(), true, entry->password(), keyfile.canonicalFilePath()); } } diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index aeb6a02e1..7f5e8099d 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -133,7 +133,8 @@ signals: void currentModeChanged(DatabaseWidget::Mode mode); void groupChanged(); void entrySelectionChanged(); - void requestOpenDatabase(const QString& filePath, bool inBackground, const QString& password); + void + requestOpenDatabase(const QString& filePath, bool inBackground, const QString& password, const QString& keyFile); void databaseMerged(QSharedPointer<Database> mergedDb); void groupContextMenuRequested(const QPoint& globalPos); void entryContextMenuRequested(const QPoint& globalPos); |