Merge branch 'develop'

Conflicts:
	CMakeLists.txt
	cmake/CLangFormat.cmake
	snapcraft.yaml
	src/CMakeLists.txt
	src/core/Database.cpp
	src/core/Database.h
	src/core/Tools.cpp
	src/crypto/CryptoHash.h
	src/crypto/ssh/ASN1Key.h
	src/crypto/ssh/OpenSSHKey.cpp
	src/format/Kdbx4Reader.cpp
	src/gui/DatabaseTabWidget.cpp
	src/gui/DatabaseTabWidget.h
	src/gui/DatabaseWidget.cpp
	src/gui/DatabaseWidget.h
	src/gui/DetailsWidget.cpp
	src/gui/DetailsWidget.ui
	src/gui/EditWidgetProperties.cpp
	src/gui/EntryPreviewWidget.cpp
	src/gui/EntryPreviewWidget.ui
	src/gui/FileDialog.cpp
	src/gui/dbsettings/DatabaseSettingsDialog.cpp
	src/gui/dbsettings/DatabaseSettingsDialog.h
	src/gui/group/EditGroupWidget.cpp
	src/gui/group/EditGroupWidget.h
	src/sshagent/ASN1Key.h
	src/sshagent/OpenSSHKey.cpp
	src/sshagent/SSHAgent.cpp
	tests/CMakeLists.txt
This commit is contained in:
Jonathan White
2018-12-18 22:28:56 -05:00
421 changed files with 18208 additions and 12907 deletions

View File

@@ -40,7 +40,7 @@ QWidget* DatabaseSettingsPageKeeShare::createWidget()
return new DatabaseSettingsWidgetKeeShare();
}
void DatabaseSettingsPageKeeShare::loadSettings(QWidget* widget, Database* db)
void DatabaseSettingsPageKeeShare::loadSettings(QWidget* widget, QSharedPointer<Database> db)
{
DatabaseSettingsWidgetKeeShare* settingsWidget = reinterpret_cast<DatabaseSettingsWidgetKeeShare*>(widget);
settingsWidget->loadSettings(db);

View File

@@ -30,7 +30,7 @@ public:
QString name() override;
QIcon icon() override;
QWidget* createWidget() override;
void loadSettings(QWidget* widget, Database* db) override;
void loadSettings(QWidget* widget, QSharedPointer<Database> db) override;
void saveSettings(QWidget* widget) override;
};

View File

@@ -39,7 +39,7 @@ DatabaseSettingsWidgetKeeShare::~DatabaseSettingsWidgetKeeShare()
{
}
void DatabaseSettingsWidgetKeeShare::loadSettings(Database* db)
void DatabaseSettingsWidgetKeeShare::loadSettings(QSharedPointer<Database> db)
{
m_db = db;

View File

@@ -38,14 +38,14 @@ public:
explicit DatabaseSettingsWidgetKeeShare(QWidget* parent = nullptr);
~DatabaseSettingsWidgetKeeShare();
void loadSettings(Database* db);
void loadSettings(QSharedPointer<Database> db);
void saveSettings();
private:
QScopedPointer<Ui::DatabaseSettingsWidgetKeeShare> m_ui;
QScopedPointer<QStandardItemModel> m_referencesModel;
QPointer<Database> m_db;
QSharedPointer<Database> m_db;
};
#endif // KEEPASSXC_DATABASESETTINGSWIDGETKEESHARE_H

View File

@@ -160,18 +160,18 @@ QString KeeShare::indicatorSuffix(const Group* group, const QString& text)
return text;
}
void KeeShare::connectDatabase(Database* newDb, Database* oldDb)
void KeeShare::connectDatabase(QSharedPointer<Database> newDb, QSharedPointer<Database> oldDb)
{
if (oldDb && m_observersByDatabase.contains(oldDb)) {
QPointer<ShareObserver> observer = m_observersByDatabase.take(oldDb);
if (oldDb && m_observersByDatabase.contains(oldDb.data())) {
QPointer<ShareObserver> observer = m_observersByDatabase.take(oldDb.data());
if (observer) {
delete observer;
}
}
if (newDb && !m_observersByDatabase.contains(newDb)) {
QPointer<ShareObserver> observer(new ShareObserver(newDb, newDb));
m_observersByDatabase[newDb] = observer;
if (newDb && !m_observersByDatabase.contains(newDb.data())) {
QPointer<ShareObserver> observer(new ShareObserver(newDb, this));
m_observersByDatabase[newDb.data()] = observer;
connect(observer.data(),
SIGNAL(sharingMessage(QString, MessageWidget::MessageType)),
this,
@@ -179,17 +179,17 @@ void KeeShare::connectDatabase(Database* newDb, Database* oldDb)
}
}
void KeeShare::handleDatabaseOpened(Database* db)
void KeeShare::handleDatabaseOpened(QSharedPointer<Database> db)
{
QPointer<ShareObserver> observer = m_observersByDatabase.value(db);
QPointer<ShareObserver> observer = m_observersByDatabase.value(db.data());
if (observer) {
observer->handleDatabaseOpened();
}
}
void KeeShare::handleDatabaseSaved(Database* db)
void KeeShare::handleDatabaseSaved(QSharedPointer<Database> db)
{
QPointer<ShareObserver> observer = m_observersByDatabase.value(db);
QPointer<ShareObserver> observer = m_observersByDatabase.value(db.data());
if (observer) {
observer->handleDatabaseSaved();
}
@@ -198,7 +198,7 @@ void KeeShare::handleDatabaseSaved(Database* db)
void KeeShare::emitSharingMessage(const QString& message, KMessageWidget::MessageType type)
{
QObject* observer = sender();
Database* db = m_databasesByObserver.value(observer);
auto db = m_databasesByObserver.value(observer);
if (db) {
emit sharingMessage(db, message, type);
}
@@ -216,7 +216,7 @@ void KeeShare::handleObserverDeleted(QObject* observer)
{
auto database = m_databasesByObserver.take(observer);
if (database) {
m_observersByDatabase.remove(database);
m_observersByDatabase.remove(database.data());
}
}

View File

@@ -53,13 +53,13 @@ public:
static void setReferenceTo(Group* group, const KeeShareSettings::Reference& reference);
static QString referenceTypeLabel(const KeeShareSettings::Reference& reference);
void connectDatabase(Database* newDb, Database* oldDb);
void handleDatabaseOpened(Database* db);
void handleDatabaseSaved(Database* db);
void connectDatabase(QSharedPointer<Database> newDb, QSharedPointer<Database> oldDb);
void handleDatabaseOpened(QSharedPointer<Database> db);
void handleDatabaseSaved(QSharedPointer<Database> db);
signals:
void activeChanged();
void sharingMessage(Database*, QString, MessageWidget::MessageType);
void sharingMessage(QSharedPointer<Database>, QString, MessageWidget::MessageType);
private slots:
void emitSharingMessage(const QString&, MessageWidget::MessageType);
@@ -73,7 +73,7 @@ private:
explicit KeeShare(QObject* parent);
QMap<QObject*, QPointer<ShareObserver>> m_observersByDatabase;
QMap<QObject*, QPointer<Database>> m_databasesByObserver;
QMap<QObject*, QSharedPointer<Database>> m_databasesByObserver;
};
#endif // KEEPASSXC_KEESHARE_H

View File

@@ -114,14 +114,14 @@ namespace
}
}
ShareObserver::ShareObserver(Database* db, QObject* parent)
ShareObserver::ShareObserver(QSharedPointer<Database> db, QObject* parent)
: QObject(parent)
, m_db(db)
, m_db(std::move(db))
, m_fileWatcher(new BulkFileWatcher(this))
{
connect(KeeShare::instance(), SIGNAL(activeChanged()), this, SLOT(handleDatabaseChanged()));
connect(m_db, SIGNAL(modified()), this, SLOT(handleDatabaseChanged()));
connect(m_db.data(), SIGNAL(modified()), this, SLOT(handleDatabaseChanged()));
connect(m_fileWatcher, SIGNAL(fileCreated(QString)), this, SLOT(handleFileCreated(QString)));
connect(m_fileWatcher, SIGNAL(fileChanged(QString)), this, SLOT(handleFileChanged(QString)));
@@ -319,8 +319,8 @@ ShareObserver::Result ShareObserver::importContainerInto(const KeeShareSettings:
KeePass2Reader reader;
auto key = QSharedPointer<CompositeKey>::create();
key->addKey(QSharedPointer<PasswordKey>::create(reference.password));
auto* sourceDb = reader.readDatabase(&buffer, key);
if (reader.hasError()) {
auto sourceDb = QSharedPointer<Database>::create();
if (!reader.readDatabase(&buffer, key, sourceDb.data())) {
qCritical("Error while parsing the database: %s", qPrintable(reader.errorString()));
return {reference.path, Result::Error, reader.errorString()};
}
@@ -352,7 +352,7 @@ ShareObserver::Result ShareObserver::importContainerInto(const KeeShareSettings:
KeeShare::setForeign(foreign);
}
}
[[gnu::fallthrough]];
[[fallthrough]];
case Single:
case Own: {
qDebug("Synchronize %s %s with %s",
@@ -414,7 +414,7 @@ void ShareObserver::resolveReferenceAttributes(Entry* targetEntry, const Databas
}
// We could do more sophisticated **** trying to point the reference to the next in-scope reference
// but those cases with high propability constructed examples and very rare in real usage
const auto* sourceReference = sourceDb->resolveEntry(targetEntry->uuid());
const auto* sourceReference = sourceDb->rootGroup()->findEntryByUuid(targetEntry->uuid());
const auto resolvedValue = sourceReference->resolveMultiplePlaceholders(standardValue);
targetEntry->setUpdateTimeinfo(false);
targetEntry->attributes()->set(attribute, resolvedValue, targetEntry->attributes()->isProtected(attribute));
@@ -471,12 +471,12 @@ Database* ShareObserver::exportIntoContainer(const KeeShareSettings::Reference&
return targetDb;
}
const Database* ShareObserver::database() const
const QSharedPointer<Database> ShareObserver::database() const
{
return m_db;
}
Database* ShareObserver::database()
QSharedPointer<Database> ShareObserver::database()
{
return m_db;
}

View File

@@ -38,14 +38,14 @@ class ShareObserver : public QObject
Q_OBJECT
public:
explicit ShareObserver(Database* db, QObject* parent = nullptr);
explicit ShareObserver(QSharedPointer<Database> db, QObject* parent = nullptr);
~ShareObserver();
void handleDatabaseSaved();
void handleDatabaseOpened();
const Database* database() const;
Database* database();
const QSharedPointer<Database> database() const;
QSharedPointer<Database> database();
signals:
void sharingMessage(QString, MessageWidget::MessageType);
@@ -101,7 +101,7 @@ private:
void notifyAbout(const QStringList& success, const QStringList& warning, const QStringList& error);
private:
Database* const m_db;
QSharedPointer<Database> m_db;
QMap<KeeShareSettings::Reference, QPointer<Group>> m_referenceToGroup;
QMap<QPointer<Group>, KeeShareSettings::Reference> m_groupToReference;
QMap<QString, QPointer<Group>> m_shareToGroup;