Add 1Password 1PUX and Bitwarden JSON Importers

* Closes #7545 - Support 1Password 1PUX import format based on https://support.1password.com/1pux-format/

* Closes #8367 - Support Bitwarden JSON import format (both unencrypted and encrypted) based on https://bitwarden.com/help/encrypted-export/

* Fixes #9577 - OPVault import when fields have the same name or type

* Introduce the import wizard to handle all import tasks (CSV, KDBX1, OPVault, 1PUX, JSON)

* Clean up CSV parser code to make it much more efficient and easier to read

* Combine all importer tests (except CSV) into one test file
This commit is contained in:
Jonathan White 2023-08-27 21:54:53 -04:00
parent a02bceabd2
commit e700195f0a
70 changed files with 3562 additions and 1876 deletions

View file

@ -19,35 +19,29 @@
#ifndef KEEPASSX_DATABASEWIDGET_H
#define KEEPASSX_DATABASEWIDGET_H
#include <QFileSystemWatcher>
#include <QListView>
#include <QBuffer>
#include <QStackedWidget>
#include "DatabaseOpenDialog.h"
#include "config-keepassx.h"
#include "core/Database.h"
#include "core/Group.h"
#include "core/Metadata.h"
#include "gui/MessageWidget.h"
#include "gui/csvImport/CsvImportWizard.h"
#include "gui/entry/EntryModel.h"
class DatabaseOpenDialog;
class DatabaseOpenWidget;
class KeePass1OpenWidget;
class OpVaultOpenWidget;
class DatabaseSettingsDialog;
class ReportsDialog;
class Database;
class FileWatcher;
class EditEntryWidget;
class EditGroupWidget;
class Entry;
class EntryView;
class EntrySearcher;
class Group;
class GroupView;
class QFile;
class QMenu;
class QSplitter;
class QLabel;
class MessageWidget;
class EntryPreviewWidget;
class TagView;
class ElidedLabel;
@ -67,7 +61,6 @@ public:
enum class Mode
{
None,
ImportMode,
ViewMode,
EditMode,
LockedMode
@ -104,6 +97,10 @@ public:
int numberOfSelectedEntries() const;
int currentEntryIndex() const;
QString displayName() const;
QString displayFileName() const;
QString displayFilePath() const;
QStringList customEntryAttributes() const;
bool isEditWidgetModified() const;
void clearAllWidgets();
@ -219,11 +216,7 @@ public slots:
void switchToOpenDatabase();
void switchToOpenDatabase(const QString& filePath);
void switchToOpenDatabase(const QString& filePath, const QString& password, const QString& keyFile);
void switchToCsvImport(const QString& filePath);
void performUnlockDatabase(const QString& password, const QString& keyfile = {});
void csvImportFinished(bool accepted);
void switchToImportKeepass1(const QString& filePath);
void switchToImportOpVault(const QString& fileName);
void emptyRecycleBin();
// Search related slots
@ -288,15 +281,12 @@ private:
QPointer<QSplitter> m_previewSplitter;
QPointer<QLabel> m_searchingLabel;
QPointer<ElidedLabel> m_shareLabel;
QPointer<CsvImportWizard> m_csvImportWizard;
QPointer<EditEntryWidget> m_editEntryWidget;
QPointer<EditGroupWidget> m_editGroupWidget;
QPointer<EditEntryWidget> m_historyEditEntryWidget;
QPointer<ReportsDialog> m_reportsDialog;
QPointer<DatabaseSettingsDialog> m_databaseSettingDialog;
QPointer<DatabaseOpenWidget> m_databaseOpenWidget;
QPointer<KeePass1OpenWidget> m_keepass1OpenWidget;
QPointer<OpVaultOpenWidget> m_opVaultOpenWidget;
QPointer<GroupView> m_groupView;
QPointer<TagView> m_tagView;
QPointer<EntryView> m_entryView;