ParametersProvider: Save password and user settings.
This commit is contained in:
parent
4c00cd8040
commit
2fee534653
@ -23,7 +23,9 @@ add_executable(emailQt main.cpp
|
|||||||
Email.cpp
|
Email.cpp
|
||||||
Email.hpp
|
Email.hpp
|
||||||
EmailDetails.cpp
|
EmailDetails.cpp
|
||||||
EmailDetails.hpp)
|
EmailDetails.hpp
|
||||||
|
KeychainClass.cpp
|
||||||
|
KeychainClass.hpp)
|
||||||
|
|
||||||
target_link_libraries(emailQt PRIVATE Qt6::Core
|
target_link_libraries(emailQt PRIVATE Qt6::Core
|
||||||
Qt6::Gui
|
Qt6::Gui
|
||||||
|
33
KeychainClass.cpp
Normal file
33
KeychainClass.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "KeychainClass.hpp"
|
||||||
|
|
||||||
|
KeychainClass::KeychainClass(QObject *parent)
|
||||||
|
: QObject(parent),
|
||||||
|
readCredentialJob(QLatin1String(Keychain::url)),
|
||||||
|
writeCredentialJob(QLatin1String(Keychain::url)),
|
||||||
|
deleteCredentialJob(QLatin1String(Keychain::url)) {
|
||||||
|
readCredentialJob.setAutoDelete(false);
|
||||||
|
writeCredentialJob.setAutoDelete(false);
|
||||||
|
deleteCredentialJob.setAutoDelete(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeychainClass::readKey(QString const &key) {
|
||||||
|
readCredentialJob.setKey(key);
|
||||||
|
connect(&readCredentialJob, &QKeychain::ReadPasswordJob::finished, this, [this, key]() {
|
||||||
|
if (readCredentialJob.error())
|
||||||
|
return;
|
||||||
|
emit keyRead(key, readCredentialJob.textData());
|
||||||
|
});
|
||||||
|
|
||||||
|
readCredentialJob.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeychainClass::writeKey(QString const &key, QString const &value) {
|
||||||
|
writeCredentialJob.setKey(key);
|
||||||
|
writeCredentialJob.setTextData(value);
|
||||||
|
writeCredentialJob.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeychainClass::deleteKey(QString const &key) {
|
||||||
|
deleteCredentialJob.setKey(key);
|
||||||
|
deleteCredentialJob.start();
|
||||||
|
}
|
30
KeychainClass.hpp
Normal file
30
KeychainClass.hpp
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
#include <qt6keychain/keychain.h>
|
||||||
|
|
||||||
|
namespace Keychain {
|
||||||
|
constexpr char url[]{"keychain.emailQt.kvuj.app"};
|
||||||
|
const QString passKey("Password");
|
||||||
|
}
|
||||||
|
|
||||||
|
class KeychainClass : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit KeychainClass(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
void readKey(const QString &key);
|
||||||
|
void writeKey(const QString &key, const QString &value);
|
||||||
|
void deleteKey(const QString &key);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void keyRead(const QString &key, const QString &value);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QKeychain::ReadPasswordJob readCredentialJob;
|
||||||
|
QKeychain::WritePasswordJob writeCredentialJob;
|
||||||
|
QKeychain::DeletePasswordJob deleteCredentialJob;
|
||||||
|
};
|
@ -12,10 +12,10 @@ ParametersProvider::ParametersProvider(QWidget *parent)
|
|||||||
passField->setEchoMode(QLineEdit::Password);
|
passField->setEchoMode(QLineEdit::Password);
|
||||||
|
|
||||||
auto *imap = new QLabel("IMAP Server", this);
|
auto *imap = new QLabel("IMAP Server", this);
|
||||||
imapField = new QLineEdit("imap.gmail.com");
|
imapField = new QLineEdit;
|
||||||
|
|
||||||
auto *port = new QLabel("Port", this);
|
auto *port = new QLabel("Port", this);
|
||||||
portField = new QLineEdit("993");
|
portField = new QLineEdit;
|
||||||
portField->setValidator(new QIntValidator(1, 1000, this));
|
portField->setValidator(new QIntValidator(1, 1000, this));
|
||||||
|
|
||||||
auto *startButton = new QPushButton("OK", this);
|
auto *startButton = new QPushButton("OK", this);
|
||||||
@ -36,6 +36,25 @@ ParametersProvider::ParametersProvider(QWidget *parent)
|
|||||||
resize(300, 450);
|
resize(300, 450);
|
||||||
|
|
||||||
connect(startButton, &QPushButton::clicked, this, &ParametersProvider::start);
|
connect(startButton, &QPushButton::clicked, this, &ParametersProvider::start);
|
||||||
|
|
||||||
|
// Keychain
|
||||||
|
connect(&keychain, &KeychainClass::keyRead, this, &ParametersProvider::keyRead);
|
||||||
|
keychain.readKey(Keychain::passKey);
|
||||||
|
|
||||||
|
// Ne pas overrider les defaults
|
||||||
|
userField->setText(mSettings.value("Username").toString());
|
||||||
|
imapField->setText(mSettings.value("Server").toString());
|
||||||
|
portField->setText(mSettings.value("Port").toString());
|
||||||
|
|
||||||
|
if (imapField->text().isEmpty())
|
||||||
|
imapField->setText("imap.gmail.com");
|
||||||
|
if (portField->text().isEmpty())
|
||||||
|
portField->setText("993");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParametersProvider::keyRead(const QString &key, const QString &value) {
|
||||||
|
if (key == Keychain::passKey)
|
||||||
|
passField->setText(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParametersProvider::start() {
|
void ParametersProvider::start() {
|
||||||
@ -43,6 +62,13 @@ void ParametersProvider::start() {
|
|||||||
sett.userS = userField->text().toStdString();
|
sett.userS = userField->text().toStdString();
|
||||||
sett.passS = passField->text().toStdString();
|
sett.passS = passField->text().toStdString();
|
||||||
sett.imapS = imapField->text().toStdString();
|
sett.imapS = imapField->text().toStdString();
|
||||||
|
|
||||||
|
// Saved login data
|
||||||
|
keychain.writeKey(Keychain::passKey, QString::fromStdString(sett.passS));
|
||||||
|
mSettings.setValue("Username", QString::fromStdString(sett.userS));
|
||||||
|
mSettings.setValue("Server", QString::fromStdString(sett.imapS));
|
||||||
|
mSettings.setValue("Port", QString::fromStdString(std::to_string(sett.port)));
|
||||||
|
|
||||||
close();
|
close();
|
||||||
emit done();
|
emit done();
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,12 @@
|
|||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QString>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
#include "KeychainClass.hpp"
|
||||||
|
|
||||||
class ParametersProvider : public QDialog {
|
class ParametersProvider : public QDialog {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -19,14 +24,23 @@ public:
|
|||||||
explicit ParametersProvider(QWidget *parent = nullptr);
|
explicit ParametersProvider(QWidget *parent = nullptr);
|
||||||
~ParametersProvider() = default;
|
~ParametersProvider() = default;
|
||||||
|
|
||||||
void start();
|
|
||||||
void setFocusInternal();
|
void setFocusInternal();
|
||||||
const settings &getSettings();
|
const settings &getSettings();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void done();
|
void done();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
// Keychain to save password
|
||||||
|
void keyRead(const QString &key, const QString &value);
|
||||||
|
|
||||||
|
// When clicking OK
|
||||||
|
void start();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
settings sett;
|
settings sett;
|
||||||
QLineEdit *userField, *passField, *imapField, *portField;
|
QLineEdit *userField, *passField, *imapField, *portField;
|
||||||
|
|
||||||
|
KeychainClass keychain;
|
||||||
|
QSettings mSettings;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user