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";
21 , m_Type(QList<TYPE>() << TYPE::UserPassword)
22 , m_UsedType(TYPE::UserPassword)
23 , m_bSavePassword(false)
24 , m_bUseSystemFile(true)
25 , m_bSavePassphrase(false)
27 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());
208QList<CParameterUser::TYPE> CParameterUser::GetType()
const
213int CParameterUser::SetType(QList<TYPE> type)
227int CParameterUser::SetUsedType(TYPE type)
229 if(m_UsedType == type)
236const QString CParameterUser::GetUser()
const
241void CParameterUser::SetUser(
const QString &szUser)
243 if (m_szUser == szUser)
249const QString CParameterUser::GetPassword()
const
254void CParameterUser::SetPassword(
const QString &szPassword)
256 if(m_szPassword == szPassword)
258 m_szPassword = szPassword;
262const bool CParameterUser::GetSavePassword()
const
264 return m_bSavePassword;
269 if (m_bSavePassword == save)
271 m_bSavePassword = save;
279 QString szErr =
"The CParameterClient is null";
280 qCritical(log) << szErr;
281 Q_ASSERT_X(
false,
"CParameterUser", szErr.toStdString().c_str());
288 SetUser(RabbitCommon::CTools::GetCurrentUser());
300 return m_bUseSystemFile;
303int CParameterUser::SetUseSystemFile(
bool use)
305 if(m_bUseSystemFile == use)
307 m_bUseSystemFile = use;
312QString CParameterUser::GetPassphrase()
const
314 return m_szPassphrase;
317int CParameterUser::SetPassphrase(
const QString passphrase)
319 if(m_szPassphrase == passphrase)
321 m_szPassphrase = passphrase;
326bool CParameterUser::GetSavePassphrase()
const
328 return m_bSavePassphrase;
331int CParameterUser::SetSavePassphrase(
bool bSave)
333 if(m_bSavePassphrase == bSave)
335 m_bSavePassphrase = bSave;
340QString CParameterUser::GetPublicKeyFile()
const
342 return m_szPublicKeyFile;
345int CParameterUser::SetPublicKeyFile(
const QString szFile)
347 if(m_szPublicKeyFile == szFile)
349 m_szPublicKeyFile = szFile;
354QString CParameterUser::GetPrivateKeyFile()
const
356 return m_szPrivateKeyFile;
359int CParameterUser::SetPrivateKeyFile(
const QString szFile)
361 if(m_szPrivateKeyFile == szFile)
363 m_szPrivateKeyFile = szFile;
368QString CParameterUser::GetCAFile()
const
373int CParameterUser::SetCAFile(
const QString &ca)
382QString CParameterUser::GetCRLFile()
const
387int CParameterUser::SetCRLFile(
const QString &crl)
389 if(m_szCRLFile == crl)
396QString CParameterUser::ConvertTypeToName(TYPE t)
398 return m_TypeName[t];
401int CParameterUser::SetTypeName(TYPE t,
const QString& szName)
403 m_TypeName[t] = szName;
407void CParameterUser::slotLoadPassword()
410 qDebug(log) << Q_FUNC_INFO;
411 QKeychain::ReadPasswordJob* pReadJob = qobject_cast<QKeychain::ReadPasswordJob*>(sender());
412 if(!pReadJob)
return;
413 QString key = pReadJob->key();
414 if (pReadJob->error()) {
415 qCritical(log) <<
"Fail: read key" << key <<
";" << pReadJob->errorString();
418 qDebug(log) <<
"Read key" << key <<
"succeeded.";
419 SetPassword(pReadJob->textData());
423void CParameterUser::slotLoadPassPhrase()
426 qDebug(log) << Q_FUNC_INFO;
427 QKeychain::ReadPasswordJob* pReadJob = qobject_cast<QKeychain::ReadPasswordJob*>(sender());
428 if(!pReadJob)
return;
429 QString key = pReadJob->key();
430 if (pReadJob->error()) {
431 qCritical(log) <<
"Fail: read pass phrase key" << key <<
";" << pReadJob->errorString();
434 qDebug(log) <<
"Read pass phrase key" << key <<
"succeeded.";
435 SetPassphrase(pReadJob->textData());
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin
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)
在设置参数时,如果有修改,则调用。