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());
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin
用户名与验证方式。此类仅在插件内有效。它的界面是 CParameterUserUI
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)
在设置参数时,如果有修改,则调用。