.clang-format
.clang-tidy
.gitignore
.vimrc
BrowserTab.cpp
BrowserTab.h
BrowserView.cpp
BrowserView.h
CMakeLists.txt
DatabaseManager.cpp
DatabaseManager.h
DownloadBar.cpp
DownloadBar.h
DownloadWidget.cpp
DownloadWidget.h
MainWindow.cpp
MainWindow.h
Makefile
MasterPasswordDialog.cpp
MasterPasswordDialog.h
PasswordHelper.cpp
PasswordHelper.h
README.md
ThemeConfig.h
VaultManager.cpp
VaultManager.h
browser.desktop
browser.qrc
compile_commands.json
main.cpp
VaultManager.h
raw
1#pragma once
2
3#include <sodium.h>
4
5#include <QByteArray>
6#include <QDateTime>
7#include <QObject>
8#include <QString>
9
10struct PasswordEntry {
11 int id;
12 QString origin;
13 QString username;
14 QString password;
15 QDateTime created_at;
16 QDateTime updated_at;
17};
18
19class VaultManager : public QObject {
20 Q_OBJECT
21public:
22 static VaultManager &instance() {
23 static VaultManager inst;
24 return inst;
25 }
26
27 bool init();
28 bool isInitialized();
29 bool setup(const QString &masterPassword);
30 bool unlock(const QString &masterPassword);
31 void lock();
32 bool isUnlocked() const { return !databaseKey.isEmpty(); }
33
34 bool savePassword(const QString &origin, const QString &username, const QString &password);
35 QList<PasswordEntry> getPasswords(const QString &origin = QString());
36
37private:
38 VaultManager();
39 ~VaultManager();
40
41 QByteArray databaseKey; // The DEK
42
43 QByteArray deriveKEK(const QString &password, const QByteArray &salt, unsigned long long memlimit, unsigned long long opslimit);
44};