Add automatic crypted databases open via dotenvs (#1404)

* Rename confusing variables

* Fix some project warnings

* Fix code style

* Add constant for the default page size

* Move KeyFormats enum to CipherSettings

* Fix code style

* Fix memory leak

* Stop relying on CipherDialog for encryption settings management

* Fix code style

* Add .env format for QSettings

* Add automatic crypted databases open via dotenvs

This adds support for `.env` files next to the crypted databases that
are to be opened that contains the needed cipher settings.

The only required one is the plain-text password as a value for the key
with the name of the database like this:

    myCryptedDatabase.sqlite = MyPassword

This way, databases with a different extension are supported too:

    myCryptedDatabase.db = MyPassword

You can also specify a custom page size adding a different line
(anywhere in the file) like this:

    myCryptedDatabase.db_pageSize = 2048

If not specified, `1024` is used.

You can also specify the format of the specified key using the
associated integer id:

    anotherCryptedDatabase.sqlite = 0xCAFEBABE
    anotherCryptedDatabase.sqlite_keyFormat = 1

where `1` means a Raw key. If not specified, `0` is used, which means a
simple text Passphrase.

Dotenv files (`.env`) are already used on other platforms and by
different tools to manage environment variables, and it's recommended
to be ignored from version control systems, so they won't leak.

* Add new files to CMakeLists

* Move DotenvFormat include to the implementation

* Fix build error

* Remove superfluous method

(related to ac51c23)

* Remove superfluous checks

* Fix memory leaks

(introduced by 94bbb46)

* Fix code style

* Make dotenv related variable and comment clearer

* Remove duplicated code

* Remove unused forward declaration

(introduced by e5a0293)
This commit is contained in:
Iulian Onofrei
2018-07-10 21:46:17 +03:00
committed by Martin Kleusberg
parent c861f1b9d9
commit 3cdc65a63f
13 changed files with 267 additions and 76 deletions

28
src/DotenvFormat.cpp Normal file
View File

@@ -0,0 +1,28 @@
#include "DotenvFormat.h"
#include <QRegularExpression>
#include <QTextStream>
bool DotenvFormat::readEnvFile(QIODevice &device, QSettings::SettingsMap &map)
{
QTextStream in(&device);
QString line;
QRegularExpression keyValueRegex("^\\s*([\\w\\.\\-]+)\\s*=\\s*(.*)\\s*$");
while (in.readLineInto(&line)) {
QRegularExpressionMatch match = keyValueRegex.match(line);
if (match.capturedLength() < 3) {
continue;
}
QString key = match.captured(1);
QString value = match.captured(2);
map.insert(key, value);
}
return true;
}