7#include "ParameterUser.h"
8#include "ParameterNet.h"
9#include "RabbitCommonTools.h"
10#include <QLoggingCategory>
12static Q_LOGGING_CATEGORY(log,
"Client.Parameter.User")
16 , m_Type(QList<TYPE>() << TYPE::UserPassword)
17 , m_UsedType(TYPE::UserPassword)
18 , m_bSavePassword(false)
19 , m_bUseSystemFile(true)
20 , m_bSavePassphrase(false)
22 m_TypeName = {{TYPE::None, tr(
"None")},
23 {TYPE::OnlyPassword, tr(
"Password")},
24 {TYPE::UserPassword, tr(
"Username and password")},
25 {TYPE::PublicKey, tr(
"Public key")},
26 {TYPE::OnlyPasswordX509None, tr(
"Password with X509 none")},
27 {TYPE::OnlyPasswordX509, tr(
"Password with X509")},
28 {TYPE::UserPasswordX509None, tr(
"Username and password with X509 none")},
29 {TYPE::UserPasswordX509, tr(
"Username and password with X509")}
33int CParameterUser::OnLoad(QSettings &set)
35 set.beginGroup(
"User");
36 SetUser(set.value(
"Name", GetUser()).toString());
38 set.beginGroup(
"Authentication");
40 foreach(
auto t, GetType()) {
41 type.push_back(QString::number((
int)t));
44 vType = set.value(
"Type", type).toStringList();
46 foreach(
auto s, vType)
48 lstType.push_back((
TYPE)s.toInt());
51 SetUsedType((
TYPE)set.value(
"Type/Used", (
int)GetUsedType()).toInt());
58 if(para && para->GetUseSystemCredential()) {
59 QString key(
"Password");
60 auto net = qobject_cast<CParameterNet*>(parent());
62 key = GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
64 auto pReadJob =
new QKeychain::ReadPasswordJob(
"io.github.KangLin/RabbitRemoteControl");
65 connect(pReadJob, &QKeychain::ReadPasswordJob::finished,
this, &CParameterUser::slotLoadPassword);
66 pReadJob->setKey(key);
72 if(!LoadPassword(tr(
"Password"),
"Password", szPassword, set))
73 SetPassword(szPassword);
77 set.beginGroup(
"PublicKey");
78 set.beginGroup(
"File");
80 SetPublicKeyFile(set.value(
"PublicKey",
81 GetPublicKeyFile()).toString());
82 SetPrivateKeyFile(set.value(
"PrivateKey",
83 GetPrivateKeyFile()).toString());
84 SetSavePassphrase(set.value(
"SavePassphrase", GetSavePassphrase()).toBool());
85 if(GetSavePassphrase()) {
88 if(para && para->GetUseSystemCredential()) {
89 QString key(
"Passphrase");
90 auto net = qobject_cast<CParameterNet*>(parent());
92 key = GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
94 auto pReadJob =
new QKeychain::ReadPasswordJob(
"io.github.KangLin/RabbitRemoteControl");
95 connect(pReadJob, &QKeychain::ReadPasswordJob::finished,
this, &CParameterUser::slotLoadPassPhrase);
96 pReadJob->setKey(key);
102 if(!LoadPassword(tr(
"Passphrase"),
"Passphrase", szPassword, set))
103 SetPassphrase(szPassword);
107 SetCAFile(set.value(
"CA", GetCAFile()).toString());
108 SetCRLFile(set.value(
"CRL", GetCRLFile()).toString());
118int CParameterUser::OnSave(QSettings &set)
120 set.beginGroup(
"User");
121 set.setValue(
"Name", GetUser());
123 set.beginGroup(
"Authentication");
125 foreach(
auto t, GetType()) {
126 type.push_back(QString::number((
int)t));
128 set.setValue(
"Type", type);
129 set.setValue(
"Type/Used", (
int)GetUsedType());
131 set.setValue(
"SavePassword", GetSavePassword());
132 if(GetSavePassword() && !GetPassword().isEmpty()) {
135 if(para && para->GetUseSystemCredential()) {
136 QString key(
"Password");
137 auto net = qobject_cast<CParameterNet*>(parent());
139 key = GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
141 auto pWriteJob =
new QKeychain::WritePasswordJob(
"io.github.KangLin/RabbitRemoteControl");
142 connect(pWriteJob, &QKeychain::WritePasswordJob::finished, [
this, pWriteJob, key]() {
143 if (pWriteJob->error()) {
144 qCritical(log) <<
"Fail: write key" << key <<
";" << pWriteJob->errorString();
147 qDebug(log) <<
"Write key" << key <<
"succeeded.";
149 pWriteJob->setKey(key);
150 pWriteJob->setTextData(GetPassword());
155 SavePassword(
"Password", GetPassword(), set, GetSavePassword());
159 set.beginGroup(
"PublicKey");
160 set.beginGroup(
"File");
162 set.setValue(
"PublicKey", GetPublicKeyFile());
163 set.setValue(
"PrivateKey", GetPrivateKeyFile());
164 set.setValue(
"SavePassphrase", GetSavePassphrase());
165 if(GetSavePassphrase() && !GetPassphrase().isEmpty()) {
168 if(para && para->GetUseSystemCredential()) {
169 QString key(
"Passphrase");
170 auto net = qobject_cast<CParameterNet*>(parent());
172 key = GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
174 auto pWriteJob =
new QKeychain::WritePasswordJob(
"io.github.KangLin/RabbitRemoteControl");
175 connect(pWriteJob, &QKeychain::WritePasswordJob::finished, [
this, pWriteJob, key]() {
176 if (pWriteJob->error()) {
177 qCritical(log) <<
"Fail: write pass phrase key" << key <<
";" << pWriteJob->errorString();
180 qDebug(log) <<
"Writepass phrase key" << key <<
"succeeded.";
182 pWriteJob->setKey(key);
183 pWriteJob->setTextData(GetPassphrase());
188 SavePassword(
"Passphrase", GetPassphrase(), set, GetSavePassphrase());
192 set.setValue(
"CA", GetCAFile());
193 set.setValue(
"CRL", GetCRLFile());
203QList<CParameterUser::TYPE> CParameterUser::GetType()
const
208int CParameterUser::SetType(QList<TYPE> type)
222int CParameterUser::SetUsedType(TYPE type)
224 if(m_UsedType == type)
231const QString CParameterUser::GetUser()
const
236void CParameterUser::SetUser(
const QString &szUser)
238 if (m_szUser == szUser)
244const QString CParameterUser::GetPassword()
const
249void CParameterUser::SetPassword(
const QString &szPassword)
251 if(m_szPassword == szPassword)
253 m_szPassword = szPassword;
257const bool CParameterUser::GetSavePassword()
const
259 return m_bSavePassword;
264 if (m_bSavePassword == save)
266 m_bSavePassword = save;
274 QString szErr =
"The CParameterClient is null";
275 qCritical(log) << szErr;
276 Q_ASSERT_X(
false,
"CParameterUser", szErr.toStdString().c_str());
283 SetUser(RabbitCommon::CTools::GetCurrentUser());
295 return m_bUseSystemFile;
298int CParameterUser::SetUseSystemFile(
bool use)
300 if(m_bUseSystemFile == use)
302 m_bUseSystemFile = use;
307QString CParameterUser::GetPassphrase()
const
309 return m_szPassphrase;
312int CParameterUser::SetPassphrase(
const QString passphrase)
314 if(m_szPassphrase == passphrase)
316 m_szPassphrase = passphrase;
321bool CParameterUser::GetSavePassphrase()
const
323 return m_bSavePassphrase;
326int CParameterUser::SetSavePassphrase(
bool bSave)
328 if(m_bSavePassphrase == bSave)
330 m_bSavePassphrase = bSave;
335QString CParameterUser::GetPublicKeyFile()
const
337 return m_szPublicKeyFile;
340int CParameterUser::SetPublicKeyFile(
const QString szFile)
342 if(m_szPublicKeyFile == szFile)
344 m_szPublicKeyFile = szFile;
349QString CParameterUser::GetPrivateKeyFile()
const
351 return m_szPrivateKeyFile;
354int CParameterUser::SetPrivateKeyFile(
const QString szFile)
356 if(m_szPrivateKeyFile == szFile)
358 m_szPrivateKeyFile = szFile;
363QString CParameterUser::GetCAFile()
const
368int CParameterUser::SetCAFile(
const QString &ca)
377QString CParameterUser::GetCRLFile()
const
382int CParameterUser::SetCRLFile(
const QString &crl)
384 if(m_szCRLFile == crl)
391QString CParameterUser::ConvertTypeToName(TYPE t)
393 return m_TypeName[t];
396int CParameterUser::SetTypeName(TYPE t,
const QString& szName)
398 m_TypeName[t] = szName;
402void CParameterUser::slotLoadPassword()
405 qDebug(log) << Q_FUNC_INFO;
406 QKeychain::ReadPasswordJob* pReadJob = qobject_cast<QKeychain::ReadPasswordJob*>(sender());
407 if(!pReadJob)
return;
408 QString key = pReadJob->key();
409 if (pReadJob->error()) {
410 qCritical(log) <<
"Fail: read key" << key <<
";" << pReadJob->errorString();
413 qDebug(log) <<
"Read key" << key <<
"succeeded.";
414 SetPassword(pReadJob->textData());
418void CParameterUser::slotLoadPassPhrase()
421 qDebug(log) << Q_FUNC_INFO;
422 QKeychain::ReadPasswordJob* pReadJob = qobject_cast<QKeychain::ReadPasswordJob*>(sender());
423 if(!pReadJob)
return;
424 QString key = pReadJob->key();
425 if (pReadJob->error()) {
426 qCritical(log) <<
"Fail: read pass phrase key" << key <<
";" << pReadJob->errorString();
429 qDebug(log) <<
"Read pass phrase key" << key <<
"succeeded.";
430 SetPassphrase(pReadJob->textData());
Operational parameter interface.
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin.
It contains user and password It only valid in plugin.
virtual void slotSetGlobalParameters() override
Initialize this parameter based on the global parameter.
void SetSavePassword(bool save)
Set save password.
bool GetUseSystemFile() const
[Initialize parameter after set CParameterPlugin]
int SetModified(bool bModified=true)
When setting parameters, if there is a modification, it is called.