7#include "ParameterUser.h"
8#include "ParameterNet.h"
9#include "RabbitCommonTools.h"
10#include <QLoggingCategory>
12static Q_LOGGING_CATEGORY(log,
"Client.Parameter.User")
13static QString ServiceName()
16 return "io.github.KangLin/RabbitRemoteControl";
22 m_Data.m_Type << TYPE::UserPassword;
23 m_Data.m_UsedType = TYPE::UserPassword;
24 m_Data.m_bSavePassword =
false;
25 m_Data.m_bUseSystemFile =
true;
26 m_Data.m_bSavePassphrase =
false;
27 m_Data.m_TypeName = {{TYPE::None, tr(
"None")},
28 {TYPE::OnlyPassword, tr(
"Password")},
29 {TYPE::UserPassword, tr(
"Username and password")},
30 {TYPE::PublicKey, tr(
"Public key")},
31 {TYPE::OnlyPasswordX509None, tr(
"Password with X509 none")},
32 {TYPE::OnlyPasswordX509, tr(
"Password with X509")},
33 {TYPE::UserPasswordX509None, tr(
"Username and password with X509 none")},
34 {TYPE::UserPasswordX509, tr(
"Username and password with X509")}
38int CParameterUser::OnLoad(QSettings &set)
40 set.beginGroup(
"User");
41 SetUser(set.value(
"Name", GetUser()).toString());
43 set.beginGroup(
"Authentication");
45 foreach(
auto t, GetType()) {
46 type.push_back(QString::number((
int)t));
49 vType = set.value(
"Type", type).toStringList();
51 foreach(
auto s, vType)
53 lstType.push_back((
TYPE)s.toInt());
56 SetUsedType((
TYPE)set.value(
"Type/Used", (
int)GetUsedType()).toInt());
63 if(para && para->GetUseSystemCredential()) {
64 QString key(
"Password");
65 auto net = qobject_cast<CParameterNet*>(parent());
67 key = ServiceName() +
"/" + GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
69 auto pReadJob =
new QKeychain::ReadPasswordJob(ServiceName());
70 connect(pReadJob, &QKeychain::ReadPasswordJob::finished,
this, &CParameterUser::slotLoadPassword);
71 pReadJob->setKey(key);
77 if(!
LoadPassword(tr(
"Password"),
"Password", szPassword, set))
78 SetPassword(szPassword);
82 set.beginGroup(
"PublicKey");
83 set.beginGroup(
"File");
85 SetPublicKeyFile(set.value(
"PublicKey",
86 GetPublicKeyFile()).toString());
87 SetPrivateKeyFile(set.value(
"PrivateKey",
88 GetPrivateKeyFile()).toString());
89 SetSavePassphrase(set.value(
"SavePassphrase", GetSavePassphrase()).toBool());
90 if(GetSavePassphrase()) {
93 if(para && para->GetUseSystemCredential()) {
94 QString key(
"Passphrase");
95 auto net = qobject_cast<CParameterNet*>(parent());
97 key = ServiceName() +
"/" + GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
99 auto pReadJob =
new QKeychain::ReadPasswordJob(
"io.github.KangLin/RabbitRemoteControl");
100 connect(pReadJob, &QKeychain::ReadPasswordJob::finished,
this, &CParameterUser::slotLoadPassPhrase);
101 pReadJob->setKey(key);
107 if(!
LoadPassword(tr(
"Passphrase"),
"Passphrase", szPassword, set))
108 SetPassphrase(szPassword);
112 SetCAFile(set.value(
"CA", GetCAFile()).toString());
113 SetCRLFile(set.value(
"CRL", GetCRLFile()).toString());
123int CParameterUser::OnSave(QSettings &set)
125 set.beginGroup(
"User");
126 set.setValue(
"Name", GetUser());
128 set.beginGroup(
"Authentication");
130 foreach(
auto t, GetType()) {
131 type.push_back(QString::number((
int)t));
133 set.setValue(
"Type", type);
134 set.setValue(
"Type/Used", (
int)GetUsedType());
136 set.setValue(
"SavePassword", GetSavePassword());
137 if(GetSavePassword() && !GetPassword().isEmpty()) {
140 if(para && para->GetUseSystemCredential()) {
141 QString key(
"Password");
142 auto net = qobject_cast<CParameterNet*>(parent());
144 key = ServiceName() +
"/" + GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
146 auto pWriteJob =
new QKeychain::WritePasswordJob(ServiceName());
147 connect(pWriteJob, &QKeychain::WritePasswordJob::finished, [
this, pWriteJob, key]() {
148 if (pWriteJob->error()) {
149 qCritical(log) <<
"Fail: write key" << key <<
";" << pWriteJob->errorString();
152 qDebug(log) <<
"Write key" << key <<
"succeeded.";
154 pWriteJob->setKey(key);
155 pWriteJob->setTextData(GetPassword());
160 SavePassword(
"Password", GetPassword(), set, GetSavePassword());
164 set.beginGroup(
"PublicKey");
165 set.beginGroup(
"File");
167 set.setValue(
"PublicKey", GetPublicKeyFile());
168 set.setValue(
"PrivateKey", GetPrivateKeyFile());
169 set.setValue(
"SavePassphrase", GetSavePassphrase());
170 if(GetSavePassphrase() && !GetPassphrase().isEmpty()) {
173 if(para && para->GetUseSystemCredential()) {
174 QString key(
"Passphrase");
175 auto net = qobject_cast<CParameterNet*>(parent());
177 key = ServiceName() +
"/" + GetUser() +
"@" + net->GetHost() +
":" + QString::number(net->GetPort()) +
"/" + key;
179 auto pWriteJob =
new QKeychain::WritePasswordJob(ServiceName());
180 connect(pWriteJob, &QKeychain::WritePasswordJob::finished, [
this, pWriteJob, key]() {
181 if (pWriteJob->error()) {
182 qCritical(log) <<
"Fail: write pass phrase key" << key <<
";" << pWriteJob->errorString();
185 qDebug(log) <<
"Writepass phrase key" << key <<
"succeeded.";
187 pWriteJob->setKey(key);
188 pWriteJob->setTextData(GetPassphrase());
193 SavePassword(
"Passphrase", GetPassphrase(), set, GetSavePassphrase());
197 set.setValue(
"CA", GetCAFile());
198 set.setValue(
"CRL", GetCRLFile());
214QList<CParameterUser::TYPE> CParameterUser::GetType()
const
216 return m_Data.m_Type;
219int CParameterUser::SetType(QList<TYPE> type)
221 if(m_Data.m_Type == type)
223 m_Data.m_Type = type;
230 return m_Data.m_UsedType;
233int CParameterUser::SetUsedType(TYPE type)
235 if(m_Data.m_UsedType == type)
237 m_Data.m_UsedType = type;
242const QString CParameterUser::GetUser()
const
244 return m_Data.m_szUser;
247void CParameterUser::SetUser(
const QString &szUser)
249 if (m_Data.m_szUser == szUser)
251 m_Data.m_szUser = szUser;
255const QString CParameterUser::GetPassword()
const
257 return m_Data.m_szPassword;
260void CParameterUser::SetPassword(
const QString &szPassword)
262 if(m_Data.m_szPassword == szPassword)
264 m_Data.m_szPassword = szPassword;
268const bool CParameterUser::GetSavePassword()
const
270 return m_Data.m_bSavePassword;
275 if (m_Data.m_bSavePassword == save)
277 m_Data.m_bSavePassword = save;
285 QString szErr =
"The CParameterClient is null";
286 qCritical(log) << szErr;
287 Q_ASSERT_X(
false,
"CParameterUser", szErr.toStdString().c_str());
294 SetUser(RabbitCommon::CTools::GetCurrentUser());
306 return m_Data.m_bUseSystemFile;
309int CParameterUser::SetUseSystemFile(
bool use)
311 if(m_Data.m_bUseSystemFile == use)
313 m_Data.m_bUseSystemFile = use;
318QString CParameterUser::GetPassphrase()
const
320 return m_Data.m_szPassphrase;
323int CParameterUser::SetPassphrase(
const QString passphrase)
325 if(m_Data.m_szPassphrase == passphrase)
327 m_Data.m_szPassphrase = passphrase;
332bool CParameterUser::GetSavePassphrase()
const
334 return m_Data.m_bSavePassphrase;
337int CParameterUser::SetSavePassphrase(
bool bSave)
339 if(m_Data.m_bSavePassphrase == bSave)
341 m_Data.m_bSavePassphrase = bSave;
346QString CParameterUser::GetPublicKeyFile()
const
348 return m_Data.m_szPublicKeyFile;
351int CParameterUser::SetPublicKeyFile(
const QString szFile)
353 if(m_Data.m_szPublicKeyFile == szFile)
355 m_Data.m_szPublicKeyFile = szFile;
360QString CParameterUser::GetPrivateKeyFile()
const
362 return m_Data.m_szPrivateKeyFile;
365int CParameterUser::SetPrivateKeyFile(
const QString szFile)
367 if(m_Data.m_szPrivateKeyFile == szFile)
369 m_Data.m_szPrivateKeyFile = szFile;
374QString CParameterUser::GetCAFile()
const
376 return m_Data.m_szCAFile;
379int CParameterUser::SetCAFile(
const QString &ca)
381 if(m_Data.m_szCAFile == ca)
383 m_Data.m_szCAFile = ca;
388QString CParameterUser::GetCRLFile()
const
390 return m_Data.m_szCRLFile;
393int CParameterUser::SetCRLFile(
const QString &crl)
395 if(m_Data.m_szCRLFile == crl)
397 m_Data.m_szCRLFile = crl;
402QString CParameterUser::ConvertTypeToName(TYPE t)
404 return m_Data.m_TypeName[t];
407int CParameterUser::SetTypeName(TYPE t,
const QString& szName)
409 m_Data.m_TypeName[t] = szName;
413void CParameterUser::slotLoadPassword()
416 qDebug(log) << Q_FUNC_INFO;
417 QKeychain::ReadPasswordJob* pReadJob = qobject_cast<QKeychain::ReadPasswordJob*>(sender());
418 if(!pReadJob)
return;
419 QString key = pReadJob->key();
420 if (pReadJob->error()) {
421 qCritical(log) <<
"Fail: read key" << key <<
";" << pReadJob->errorString();
424 qDebug(log) <<
"Read key" << key <<
"succeeded.";
425 SetPassword(pReadJob->textData());
429void CParameterUser::slotLoadPassPhrase()
432 qDebug(log) << Q_FUNC_INFO;
433 QKeychain::ReadPasswordJob* pReadJob = qobject_cast<QKeychain::ReadPasswordJob*>(sender());
434 if(!pReadJob)
return;
435 QString key = pReadJob->key();
436 if (pReadJob->error()) {
437 qCritical(log) <<
"Fail: read pass phrase key" << key <<
";" << pReadJob->errorString();
440 qDebug(log) <<
"Read pass phrase key" << key <<
"succeeded.";
441 SetPassphrase(pReadJob->textData());
Operational parameter interface.
int LoadPassword(const QString &szTitle, const QString &szKey, QString &password, QSettings &set)
Restore password.
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.
TYPE
Used to control display interface elements.
bool GetUseSystemFile() const
[Initialize parameter after set CParameterPlugin]
int SetModified(bool bModified=true)
When setting parameters, if there is a modification, it is called.