diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts
index 91467de501..c88a420c6e 100644
--- a/share/translations/keepassxc_en.ts
+++ b/share/translations/keepassxc_en.ts
@@ -2332,10 +2332,6 @@ removed from the database.
-
-
-
-
@@ -2368,6 +2364,14 @@ The command has to exit. In case of `sftp` as last command `exit` has to be sent
+
+
+
+
+
+
+
+
DatabaseTabWidget
diff --git a/src/gui/remote/DatabaseSettingsWidgetRemote.cpp b/src/gui/remote/DatabaseSettingsWidgetRemote.cpp
index b38bd828c7..6d9135de02 100644
--- a/src/gui/remote/DatabaseSettingsWidgetRemote.cpp
+++ b/src/gui/remote/DatabaseSettingsWidgetRemote.cpp
@@ -18,6 +18,7 @@
#include "DatabaseSettingsWidgetRemote.h"
#include "ui_DatabaseSettingsWidgetRemote.h"
+#include "core/Database.h"
#include "core/Global.h"
#include "core/Metadata.h"
@@ -177,12 +178,12 @@ void DatabaseSettingsWidgetRemote::testDownload()
params->downloadCommand = m_ui->downloadCommand->text();
params->downloadInput = m_ui->inputForDownload->toPlainText();
- QScopedPointer remoteHandler(new RemoteHandler(this));
if (params->downloadCommand.isEmpty()) {
m_ui->messageWidget->showMessage(tr("Download command cannot be empty."), MessageWidget::Warning);
return;
}
+ QScopedPointer remoteHandler(new RemoteHandler(this));
RemoteHandler::RemoteResult result = remoteHandler->download(params);
if (!result.success) {
m_ui->messageWidget->showMessage(tr("Download failed with error: %1").arg(result.errorMessage),
@@ -191,10 +192,25 @@ void DatabaseSettingsWidgetRemote::testDownload()
}
if (!QFile::exists(result.filePath)) {
- m_ui->messageWidget->showMessage(tr("Download finished, but file %1 could not be found.").arg(result.filePath),
+ m_ui->messageWidget->showMessage(tr("Command finished, but downloaded file does not exist."),
MessageWidget::Error);
return;
}
+ QString error;
+ if (!hasValidPublicHeader(result.filePath, &error)) {
+ m_ui->messageWidget->showMessage(
+ tr("Downloaded file is not a KeePass file or it's an unsupported version: %1").arg(error),
+ MessageWidget::Error);
+ return;
+ }
+
m_ui->messageWidget->showMessage(tr("Download successful."), MessageWidget::Positive);
-}
\ No newline at end of file
+}
+
+bool DatabaseSettingsWidgetRemote::hasValidPublicHeader(QString& filePath, QString* error)
+{
+ // Read public headers
+ QScopedPointer db(new Database());
+ return db->open(filePath, nullptr, error);
+}
diff --git a/src/gui/remote/DatabaseSettingsWidgetRemote.h b/src/gui/remote/DatabaseSettingsWidgetRemote.h
index fe91b94a79..c5e384445c 100644
--- a/src/gui/remote/DatabaseSettingsWidgetRemote.h
+++ b/src/gui/remote/DatabaseSettingsWidgetRemote.h
@@ -56,6 +56,8 @@ private slots:
QListWidgetItem* findItemByName(const QString& name);
void clearFields();
+ bool hasValidPublicHeader(QString& filePath, QString* error);
+
QScopedPointer m_remoteSettings;
const QScopedPointer m_ui;
bool m_modified = false;