Improved Comments
This commit is contained in:
parent
7de7a8ef8a
commit
512445c47c
6 changed files with 70 additions and 45 deletions
10
main.cpp
10
main.cpp
|
|
@ -8,6 +8,7 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QString version = "1.0.3";
|
QString version = "1.0.3";
|
||||||
|
|
||||||
|
//Run GUI if no arguments are passed
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
|
|
@ -25,6 +26,7 @@ int main(int argc, char *argv[])
|
||||||
parameterparser parameter_parser(argc, argv);
|
parameterparser parameter_parser(argc, argv);
|
||||||
passman password_manager;
|
passman password_manager;
|
||||||
|
|
||||||
|
//Print help ccreen
|
||||||
if (parameter_parser.has_parameter("help", 'h'))
|
if (parameter_parser.has_parameter("help", 'h'))
|
||||||
{
|
{
|
||||||
std::cout << "Passman v" << version.toStdString() << " - A Simple Password Manager with AES-256 Encryption by Aslan2142\n\n";
|
std::cout << "Passman v" << version.toStdString() << " - A Simple Password Manager with AES-256 Encryption by Aslan2142\n\n";
|
||||||
|
|
@ -46,6 +48,7 @@ int main(int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Load password from an argument (if present)
|
||||||
std::string password = parameter_parser.get_value("pass", 'p');
|
std::string password = parameter_parser.get_value("pass", 'p');
|
||||||
if (password.compare("-") == 0)
|
if (password.compare("-") == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -53,6 +56,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
password_manager.key = QString::fromStdString(password);
|
password_manager.key = QString::fromStdString(password);
|
||||||
|
|
||||||
|
//Create database
|
||||||
if (parameter_parser.has_parameter("create-database", 'd'))
|
if (parameter_parser.has_parameter("create-database", 'd'))
|
||||||
{
|
{
|
||||||
if (password_manager.database_exists())
|
if (password_manager.database_exists())
|
||||||
|
|
@ -71,6 +75,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Print main errors (if occured)
|
||||||
if (!password_manager.load())
|
if (!password_manager.load())
|
||||||
{
|
{
|
||||||
std::cerr << "Error Loading Database" << std::endl;
|
std::cerr << "Error Loading Database" << std::endl;
|
||||||
|
|
@ -82,6 +87,7 @@ int main(int argc, char *argv[])
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Create new entry
|
||||||
std::string new_entry = parameter_parser.get_value("new", 'n');
|
std::string new_entry = parameter_parser.get_value("new", 'n');
|
||||||
if (new_entry.compare("-") != 0)
|
if (new_entry.compare("-") != 0)
|
||||||
{
|
{
|
||||||
|
|
@ -98,6 +104,7 @@ int main(int argc, char *argv[])
|
||||||
password_manager.save();
|
password_manager.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Remove an entry
|
||||||
std::string remove_entry = parameter_parser.get_value("remove", 'r');
|
std::string remove_entry = parameter_parser.get_value("remove", 'r');
|
||||||
if (remove_entry.compare("-") != 0)
|
if (remove_entry.compare("-") != 0)
|
||||||
{
|
{
|
||||||
|
|
@ -131,11 +138,13 @@ int main(int argc, char *argv[])
|
||||||
password_manager.save();
|
password_manager.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Backup database
|
||||||
if (parameter_parser.has_parameter("backup", 'b'))
|
if (parameter_parser.has_parameter("backup", 'b'))
|
||||||
{
|
{
|
||||||
password_manager.backup();
|
password_manager.backup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Show all entries
|
||||||
if (parameter_parser.has_parameter("show-all", 'a'))
|
if (parameter_parser.has_parameter("show-all", 'a'))
|
||||||
{
|
{
|
||||||
const std::vector<std::array<QString, 4>> database = password_manager.get_database_copy();
|
const std::vector<std::array<QString, 4>> database = password_manager.get_database_copy();
|
||||||
|
|
@ -145,6 +154,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Search and show entries by website
|
||||||
std::string show_website = parameter_parser.get_value("show", 's');
|
std::string show_website = parameter_parser.get_value("show", 's');
|
||||||
if (show_website.compare("-") != 0)
|
if (show_website.compare("-") != 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ MainWindow::~MainWindow()
|
||||||
|
|
||||||
void MainWindow::decrypt_database()
|
void MainWindow::decrypt_database()
|
||||||
{
|
{
|
||||||
//Load and Decrypt Database
|
//Load and decrypt database
|
||||||
password_manager.key = ui->lineEditEncryptionKey->text();
|
password_manager.key = ui->lineEditEncryptionKey->text();
|
||||||
|
|
||||||
if (!password_manager.load())
|
if (!password_manager.load())
|
||||||
|
|
@ -45,7 +45,7 @@ void MainWindow::decrypt_database()
|
||||||
ui->labelDatabaseInfo->setText("Database Loaded");
|
ui->labelDatabaseInfo->setText("Database Loaded");
|
||||||
ui->labelEncryptionInfo->setText("Database Decrypted");
|
ui->labelEncryptionInfo->setText("Database Decrypted");
|
||||||
|
|
||||||
//Fill up the Table
|
//Fill up the table
|
||||||
std::vector<std::array<QString, 4>> database = password_manager.get_database_copy();
|
std::vector<std::array<QString, 4>> database = password_manager.get_database_copy();
|
||||||
|
|
||||||
ui->tableWidgetCredentials->clear();
|
ui->tableWidgetCredentials->clear();
|
||||||
|
|
@ -62,7 +62,7 @@ void MainWindow::decrypt_database()
|
||||||
|
|
||||||
saved = true;
|
saved = true;
|
||||||
|
|
||||||
//Enable/Disable UI Elements
|
//Enable/Disable UI elements
|
||||||
ui->pushButtonUnlock->setEnabled(false);
|
ui->pushButtonUnlock->setEnabled(false);
|
||||||
ui->lineEditEncryptionKey->setEnabled(false);
|
ui->lineEditEncryptionKey->setEnabled(false);
|
||||||
|
|
||||||
|
|
@ -75,6 +75,7 @@ void MainWindow::decrypt_database()
|
||||||
ui->lineEditSearch->setEnabled(true);
|
ui->lineEditSearch->setEnabled(true);
|
||||||
ui->tableWidgetCredentials->setEnabled(true);
|
ui->tableWidgetCredentials->setEnabled(true);
|
||||||
|
|
||||||
|
//Set UI collumn names
|
||||||
ui->tableWidgetCredentials->setHorizontalHeaderLabels({"Website", "Username", "Password", "Note"});
|
ui->tableWidgetCredentials->setHorizontalHeaderLabels({"Website", "Username", "Password", "Note"});
|
||||||
ui->tableWidgetCredentials->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
ui->tableWidgetCredentials->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||||
|
|
||||||
|
|
@ -83,6 +84,7 @@ void MainWindow::decrypt_database()
|
||||||
|
|
||||||
void MainWindow::backup_database()
|
void MainWindow::backup_database()
|
||||||
{
|
{
|
||||||
|
//Backup the database if it exists
|
||||||
if (password_manager.backup())
|
if (password_manager.backup())
|
||||||
{
|
{
|
||||||
ui->labelDatabaseInfo->setText("Database Backup Complete");
|
ui->labelDatabaseInfo->setText("Database Backup Complete");
|
||||||
|
|
@ -93,18 +95,22 @@ void MainWindow::backup_database()
|
||||||
|
|
||||||
void MainWindow::save_database()
|
void MainWindow::save_database()
|
||||||
{
|
{
|
||||||
|
//Clear old database data
|
||||||
password_manager.clear_database();
|
password_manager.clear_database();
|
||||||
|
|
||||||
std::array<QString, 4> tmp_row;
|
std::array<QString, 4> tmp_row;
|
||||||
for (int i = 0; i < ui->tableWidgetCredentials->rowCount(); i++)
|
for (int i = 0; i < ui->tableWidgetCredentials->rowCount(); i++)
|
||||||
{
|
{
|
||||||
|
//Get the data from the row
|
||||||
for (int j = 0; j < 4; j++)
|
for (int j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
tmp_row[static_cast<ulong>(j)] = ui->tableWidgetCredentials->item(i, j)->text();
|
tmp_row[static_cast<ulong>(j)] = ui->tableWidgetCredentials->item(i, j)->text();
|
||||||
}
|
}
|
||||||
|
//Add the row data to the database
|
||||||
password_manager.add_entry(tmp_row[0], tmp_row[1], tmp_row[2], tmp_row[3]);
|
password_manager.add_entry(tmp_row[0], tmp_row[1], tmp_row[2], tmp_row[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Encrypt and save the database onto a drive
|
||||||
password_manager.encrypt();
|
password_manager.encrypt();
|
||||||
password_manager.save();
|
password_manager.save();
|
||||||
|
|
||||||
|
|
@ -115,12 +121,13 @@ void MainWindow::add_entry()
|
||||||
{
|
{
|
||||||
int row_count = ui->tableWidgetCredentials->rowCount();
|
int row_count = ui->tableWidgetCredentials->rowCount();
|
||||||
|
|
||||||
|
//Add the entry to the end of the database and scroll to the row
|
||||||
ui->tableWidgetCredentials->insertRow(row_count);
|
ui->tableWidgetCredentials->insertRow(row_count);
|
||||||
ui->tableWidgetCredentials->scrollToItem(ui->tableWidgetCredentials->takeItem(row_count, 0));
|
ui->tableWidgetCredentials->scrollToItem(ui->tableWidgetCredentials->takeItem(row_count, 0));
|
||||||
|
|
||||||
ui->tableWidgetCredentials->setItem(row_count, 0, new QTableWidgetItem(""));
|
ui->tableWidgetCredentials->setItem(row_count, 0, new QTableWidgetItem(""));
|
||||||
ui->tableWidgetCredentials->setItem(row_count, 1, new QTableWidgetItem(""));
|
ui->tableWidgetCredentials->setItem(row_count, 1, new QTableWidgetItem(""));
|
||||||
ui->tableWidgetCredentials->setItem(row_count, 2, new QTableWidgetItem(password_manager.generate_password(password_length)));
|
ui->tableWidgetCredentials->setItem(row_count, 2, new QTableWidgetItem(password_manager.generate_password(password_length))); //Add generated password
|
||||||
ui->tableWidgetCredentials->setItem(row_count, 3, new QTableWidgetItem(""));
|
ui->tableWidgetCredentials->setItem(row_count, 3, new QTableWidgetItem(""));
|
||||||
|
|
||||||
saved = false;
|
saved = false;
|
||||||
|
|
@ -128,6 +135,7 @@ void MainWindow::add_entry()
|
||||||
|
|
||||||
void MainWindow::remove_entry()
|
void MainWindow::remove_entry()
|
||||||
{
|
{
|
||||||
|
//Get a list of selected database entries
|
||||||
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
|
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
|
||||||
|
|
||||||
if (selected.size() > 0)
|
if (selected.size() > 0)
|
||||||
|
|
@ -135,6 +143,7 @@ void MainWindow::remove_entry()
|
||||||
saved = false;
|
saved = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get rid of item duplicates caused by multiple collumns
|
||||||
int last_row = -1;
|
int last_row = -1;
|
||||||
for (int i = 0; i < selected.size(); i++)
|
for (int i = 0; i < selected.size(); i++)
|
||||||
{
|
{
|
||||||
|
|
@ -146,6 +155,7 @@ void MainWindow::remove_entry()
|
||||||
last_row = selected[i]->row();
|
last_row = selected[i]->row();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Remove all selected rows
|
||||||
for (QTableWidgetItem* item : selected)
|
for (QTableWidgetItem* item : selected)
|
||||||
{
|
{
|
||||||
ui->tableWidgetCredentials->removeRow(item->row());
|
ui->tableWidgetCredentials->removeRow(item->row());
|
||||||
|
|
@ -154,6 +164,7 @@ void MainWindow::remove_entry()
|
||||||
|
|
||||||
void MainWindow::generate_password()
|
void MainWindow::generate_password()
|
||||||
{
|
{
|
||||||
|
//Get a list of selected database entries
|
||||||
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
|
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
|
||||||
|
|
||||||
if (selected.size() > 0)
|
if (selected.size() > 0)
|
||||||
|
|
@ -161,6 +172,7 @@ void MainWindow::generate_password()
|
||||||
saved = false;
|
saved = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get rid of item duplicates caused by multiple collumns
|
||||||
int last_row = -1;
|
int last_row = -1;
|
||||||
for (int i = 0; i < selected.size(); i++)
|
for (int i = 0; i < selected.size(); i++)
|
||||||
{
|
{
|
||||||
|
|
@ -172,6 +184,7 @@ void MainWindow::generate_password()
|
||||||
last_row = selected[i]->row();
|
last_row = selected[i]->row();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Generate new password for all selected rows
|
||||||
for (QTableWidgetItem* item : selected)
|
for (QTableWidgetItem* item : selected)
|
||||||
{
|
{
|
||||||
ui->tableWidgetCredentials->setItem(item->row(), 2, new QTableWidgetItem(password_manager.generate_password(password_length)));
|
ui->tableWidgetCredentials->setItem(item->row(), 2, new QTableWidgetItem(password_manager.generate_password(password_length)));
|
||||||
|
|
@ -204,6 +217,7 @@ void MainWindow::search(const QString &input)
|
||||||
|
|
||||||
void MainWindow::closeEvent(QCloseEvent *event)
|
void MainWindow::closeEvent(QCloseEvent *event)
|
||||||
{
|
{
|
||||||
|
//Close the program if the newest database is saved, if not show a dialog
|
||||||
if (saved)
|
if (saved)
|
||||||
{
|
{
|
||||||
event->accept();
|
event->accept();
|
||||||
|
|
@ -236,17 +250,18 @@ void MainWindow::closeEvent(QCloseEvent *event)
|
||||||
|
|
||||||
void MainWindow::check_database()
|
void MainWindow::check_database()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (password_manager.database_exists())
|
if (password_manager.database_exists())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Show new database dialog
|
||||||
QInputDialog input_dialog;
|
QInputDialog input_dialog;
|
||||||
input_dialog.resize(400, 200);
|
input_dialog.resize(400, 200);
|
||||||
input_dialog.setWindowTitle("Database not Found");
|
input_dialog.setWindowTitle("Database not Found");
|
||||||
input_dialog.setLabelText("Enter Password for your new Database:");
|
input_dialog.setLabelText("Enter Password for your new Database:");
|
||||||
|
|
||||||
|
//Close the dialog
|
||||||
if (input_dialog.exec() == 0)
|
if (input_dialog.exec() == 0)
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
|
|
@ -262,6 +277,7 @@ void MainWindow::check_database()
|
||||||
password_manager.save();
|
password_manager.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Recheck to see if a new database has been created
|
||||||
check_database();
|
check_database();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -272,21 +288,24 @@ void MainWindow::on_spinBoxPasswordLength_valueChanged(int arg1)
|
||||||
|
|
||||||
void MainWindow::on_tableWidgetCredentials_itemChanged()
|
void MainWindow::on_tableWidgetCredentials_itemChanged()
|
||||||
{
|
{
|
||||||
saved = false;
|
saved = false; //Set save indicator to false if database entry has been changed
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_tableWidgetCredentials_itemSelectionChanged()
|
void MainWindow::on_tableWidgetCredentials_itemSelectionChanged()
|
||||||
{
|
{
|
||||||
|
//Get a list of selected database entries
|
||||||
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
|
QList<QTableWidgetItem*> selected = ui->tableWidgetCredentials->selectedItems();
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int last_row = -1;
|
int last_row = -1;
|
||||||
|
//Count the number of entries
|
||||||
for (QTableWidgetItem* item : selected)
|
for (QTableWidgetItem* item : selected)
|
||||||
{
|
{
|
||||||
if (last_row != item->row()) count++;
|
if (last_row != item->row()) count++; //Count only rows(entries) and not the collumns
|
||||||
last_row = item->row();
|
last_row = item->row();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Set the remove entry button text according to number of selected entries
|
||||||
if (count > 1)
|
if (count > 1)
|
||||||
{
|
{
|
||||||
ui->pushButtonRemoveEntry->setText("Remove Selected Entries");
|
ui->pushButtonRemoveEntry->setText("Remove Selected Entries");
|
||||||
|
|
|
||||||
30
mainwindow.h
30
mainwindow.h
|
|
@ -19,27 +19,27 @@ class MainWindow : public QMainWindow
|
||||||
public:
|
public:
|
||||||
explicit MainWindow(QString version, QWidget *parent = nullptr);
|
explicit MainWindow(QString version, QWidget *parent = nullptr);
|
||||||
~MainWindow() override;
|
~MainWindow() override;
|
||||||
void check_database();
|
void check_database(); //Shows dialog to make a new database if it doesn't exist
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
passman password_manager;
|
passman password_manager; //Password manager object
|
||||||
bool saved = true;
|
bool saved = true; //Indicates if all the database changes has been saved
|
||||||
int password_length = 20;
|
int password_length = 20; //Used by the password generator
|
||||||
void closeEvent(QCloseEvent *event) override;
|
void closeEvent(QCloseEvent *event) override; //Executes when user tries to close the app
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void decrypt_database();
|
void decrypt_database(); //Executes when user clicks on decrypt database button
|
||||||
void backup_database();
|
void backup_database(); //Executes when user clicks on backup database button
|
||||||
void save_database();
|
void save_database(); //Executes when user clicks on save database button
|
||||||
void add_entry();
|
void add_entry(); //Executes when user clicks on add entry button
|
||||||
void remove_entry();
|
void remove_entry(); //Executes when user clicks on remove entry button
|
||||||
void generate_password();
|
void generate_password(); //Executes when user clicks on generate password button
|
||||||
void search(const QString &input);
|
void search(const QString &input); //Executes when user changes
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_spinBoxPasswordLength_valueChanged(int arg1);
|
void on_spinBoxPasswordLength_valueChanged(int arg1); //Executes when password length spinbox has been changed
|
||||||
void on_tableWidgetCredentials_itemChanged();
|
void on_tableWidgetCredentials_itemChanged(); //Executes when database entry has been changed
|
||||||
void on_tableWidgetCredentials_itemSelectionChanged();
|
void on_tableWidgetCredentials_itemSelectionChanged(); //Executes when database entry selection has been changed
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
//Help to manage the program input parameters
|
||||||
class parameterparser
|
class parameterparser
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -13,7 +14,7 @@ public:
|
||||||
protected:
|
protected:
|
||||||
std::vector<std::string> arg_names;
|
std::vector<std::string> arg_names;
|
||||||
std::vector<std::string> arg_values;
|
std::vector<std::string> arg_values;
|
||||||
void parse(int argc, char *argv[]);
|
void parse(int argc, char *argv[]); //Parse the parameters and insert values into vectors of string
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PARAMETERPARSER_H
|
#endif // PARAMETERPARSER_H
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
passman::passman() : encryption(new QAESEncryption(QAESEncryption::AES_256, QAESEncryption::CBC)) { }
|
passman::passman() : encryption(new QAESEncryption(QAESEncryption::AES_256, QAESEncryption::CBC)) { }
|
||||||
|
|
||||||
//Save Database to Disk
|
|
||||||
void passman::save() const
|
void passman::save() const
|
||||||
{
|
{
|
||||||
QFile output_file(database_path);
|
QFile output_file(database_path);
|
||||||
|
|
@ -11,7 +10,6 @@ void passman::save() const
|
||||||
output_file.close();
|
output_file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Load Database from Disk
|
|
||||||
bool passman::load()
|
bool passman::load()
|
||||||
{
|
{
|
||||||
if (!database_exists())
|
if (!database_exists())
|
||||||
|
|
@ -27,7 +25,6 @@ bool passman::load()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Encrypt Database
|
|
||||||
void passman::encrypt()
|
void passman::encrypt()
|
||||||
{
|
{
|
||||||
QByteArray data = QString("passwords\n").toLocal8Bit();
|
QByteArray data = QString("passwords\n").toLocal8Bit();
|
||||||
|
|
@ -50,7 +47,6 @@ void passman::encrypt()
|
||||||
encrypted_data = data;
|
encrypted_data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Decrypt Database
|
|
||||||
bool passman::decrypt()
|
bool passman::decrypt()
|
||||||
{
|
{
|
||||||
QByteArray data = encrypted_data;
|
QByteArray data = encrypted_data;
|
||||||
|
|
@ -96,7 +92,6 @@ bool passman::decrypt()
|
||||||
return stringData.startsWith("password");
|
return stringData.startsWith("password");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Make Database Backup
|
|
||||||
bool passman::backup() const
|
bool passman::backup() const
|
||||||
{
|
{
|
||||||
if (!database_exists())
|
if (!database_exists())
|
||||||
|
|
|
||||||
34
passman.h
34
passman.h
|
|
@ -16,26 +16,26 @@ class passman
|
||||||
public:
|
public:
|
||||||
passman();
|
passman();
|
||||||
QString database_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/credentials.database";
|
QString database_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/credentials.database";
|
||||||
QString key = "";
|
QString key = ""; //Database encryption key
|
||||||
void save() const;
|
void save() const; //Save the database to the database path on drive
|
||||||
bool load();
|
bool load(); //Loads the database from the database path on a drive
|
||||||
void encrypt();
|
void encrypt(); //Encrypts database entries into encrypted data
|
||||||
bool decrypt();
|
bool decrypt(); //Decrypts encrypted database data into database entries
|
||||||
bool backup() const;
|
bool backup() const; //Backups the database in a backup location on a drive and returns false if there is not a database to backup
|
||||||
void add_entry(QString website_name, QString username, QString password, QString note);
|
void add_entry(QString website_name, QString username, QString password, QString note); //Add new entry to database
|
||||||
void remove_entry(int index);
|
void remove_entry(int index); //Return entry from a database
|
||||||
void alter_entry(int index, QString new_website_name, QString new_username, QString new_password, QString new_note);
|
void alter_entry(int index, QString new_website_name, QString new_username, QString new_password, QString new_note); //Alter database entry
|
||||||
void clear_database();
|
void clear_database(); //Removes everything from the database
|
||||||
std::array<QString, 4> get_entry_copy(int index) const;
|
std::array<QString, 4> get_entry_copy(int index) const; //Returns entry copy from the database
|
||||||
std::vector<std::array<QString, 4>> get_database_copy() const;
|
std::vector<std::array<QString, 4>> get_database_copy() const; //Returns full database copy
|
||||||
QString generate_password(int length) const;
|
QString generate_password(int length) const; //Returns newly generated password string
|
||||||
bool database_exists() const;
|
bool database_exists() const; //Returns true if database exists on a drive in certain location
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QAESEncryption *encryption;
|
QAESEncryption *encryption; //Pointer to an object used for encryption
|
||||||
QByteArray encrypted_data; //Encrypted Database
|
QByteArray encrypted_data; //Encrypted Database
|
||||||
std::vector<std::array<QString, 4>> decrypted_entries; //Database Entries
|
std::vector<std::array<QString, 4>> decrypted_entries; //Database Entries
|
||||||
QString characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;.,/=-+*<>{}()[]_%#$@!?^&";
|
QString characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;.,/=-+*<>{}()[]_%#$@!?^&"; //List of characters for password generator
|
||||||
QStringList ivs = {
|
QStringList ivs = {
|
||||||
"jW2jT]%0k2#-2R1.d(7'6V0Z|4=-HX2G9@F;561.07@21,NHq42)*896M(18R+9w080*Hs^,45G?;]5R7}'*0Z67?Y7|%SFI**0g",
|
"jW2jT]%0k2#-2R1.d(7'6V0Z|4=-HX2G9@F;561.07@21,NHq42)*896M(18R+9w080*Hs^,45G?;]5R7}'*0Z67?Y7|%SFI**0g",
|
||||||
")OR2*711+M)*a,5D/qB}/#]|fN*30oA<#;>]B80>,4J9@<<;J5;#wL*]p$G9D0i1860;Y<I*.)0diN/yi*08;^hJ596]2NY9&+#l",
|
")OR2*711+M)*a,5D/qB}/#]|fN*30oA<#;>]B80>,4J9@<<;J5;#wL*]p$G9D0i1860;Y<I*.)0diN/yi*08;^hJ596]2NY9&+#l",
|
||||||
|
|
@ -47,7 +47,7 @@ protected:
|
||||||
"72|/3;10O@!(|t)]8}02Gf126N)+6*w6e2P57/dWd*JW5+aR?h31e/=4o5<H@Uzu2<;71Qd63B{k9-PQ_41[5yA'e^?2A27$[8-7",
|
"72|/3;10O@!(|t)]8}02Gf126N)+6*w6e2P57/dWd*JW5+aR?h31e/=4o5<H@Uzu2<;71Qd63B{k9-PQ_41[5yA'e^?2A27$[8-7",
|
||||||
"H(6>8!$l9!4?6_,7L%4}z3Lu8;sb^q}9%lVy6I57L]8<,-ho?310Dd_h|y1#iz%3]rN'zr5T1Bc2uQ5cb!K39386)50c0+%.w.X'",
|
"H(6>8!$l9!4?6_,7L%4}z3Lu8;sb^q}9%lVy6I57L]8<,-ho?310Dd_h|y1#iz%3]rN'zr5T1Bc2uQ5cb!K39386)50c0+%.w.X'",
|
||||||
"2-n$rL3v4T/*/22F%2tN}.yDX78#50z3Z9-B10X5*4]97+R-OK'2^F%7$>95c8jLu531C==1|V7Cd=o;5L6/B17jF2C9<1]R4'DY",
|
"2-n$rL3v4T/*/22F%2tN}.yDX78#50z3Z9-B10X5*4]97+R-OK'2^F%7$>95c8jLu531C==1|V7Cd=o;5L6/B17jF2C9<1]R4'DY",
|
||||||
};
|
}; //List of initialization vectors for aes encryption/decryption
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PASSMAN_H
|
#endif // PASSMAN_H
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue