3#include <QLoggingCategory>
4#include <QCryptographicHash>
7#include "RabbitCommonDir.h"
8#include "RabbitCommonEncrypt.h"
9#include "RabbitCommonTools.h"
10#include "DlgInputPassword.h"
11#include "ParameterOperate.h"
13static Q_LOGGING_CATEGORY(log,
"Parameter.Operate")
18 , m_pParameterPlugin(
nullptr)
21 check = connect(
this, SIGNAL(sigSetGlobalParameters()),
22 this, SLOT(slotSetGlobalParameters()));
27 check = connect(m_Parent, SIGNAL(sigSetGlobalParameters()),
28 this, SIGNAL(sigSetGlobalParameters()));
52QByteArray CParameterOperate::PasswordSum(
const std::string &password,
53 const std::string &key)
55 std::string pw =
"RabbitRemoteControl";
56 QCryptographicHash sum(QCryptographicHash::Md5);
58#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
60 sum.addData(password.c_str(), password.length());
61 sum.addData(pw.c_str(), pw.length());
63 sum.addData(key.c_str(), key.length());
66 sum.addData(QByteArrayView(password.c_str(), password.length()));
67 sum.addData(QByteArrayView(pw.c_str(), pw.length()));
69 sum.addData(QByteArrayView(key.c_str(), key.length()));
87 QByteArray sum = set.value(szKey +
"_sum").toByteArray();
88 QByteArray pwByte = set.value(szKey).toByteArray();
91 RabbitCommon::CEncrypt e;
98 QSettings s(RabbitCommon::CDir::Instance()->GetFileUserConfigure(), QSettings::IniFormat);
99 QByteArray baRandom = s.value(
"Plugin/Password/Random").toByteArray();
101 if(!baRandom.isEmpty()) {
102 RabbitCommon::CEncrypt eRandom;
103 eRandom.Dencode(baRandom, szRandom);
105 if(!szRandom.isEmpty())
106 e.SetPassword(szRandom.toStdString().c_str());
108 e.SetPassword(key.c_str());
111 if(!e.Dencode(pwByte, password)
112 && PasswordSum(password.toStdString(), key) == sum)
115 qDebug(log) <<
"Password don't dencode or sum is error";
118 case CParameterPlugin::PromptType::First:
126 case CParameterPlugin::PromptType::No:
132 if(QDialog::Accepted != d.exec())
135 key = d.GetPassword().toStdString();
136 if(key.empty())
return -1;
144int CParameterOperate::SavePassword(
const QString &szKey,
145 const QString &password,
146 QSettings &set,
bool bSave)
152 set.remove(szKey +
"_sum");
156 QByteArray encryptPassword;
157 RabbitCommon::CEncrypt e;
164 case CParameterPlugin::PromptType::First:
172 if(QDialog::Accepted != dlg.exec())
174 szKey = dlg.GetPassword();
176 key = szKey.toStdString();
179 case CParameterPlugin::PromptType::No:
186 QSettings s(RabbitCommon::CDir::Instance()->GetFileUserConfigure(), QSettings::IniFormat);
187 QByteArray baRandom = s.value(
"Plugin/Password/Random").toByteArray();
189 if(baRandom.isEmpty()) {
191 szRandom = RabbitCommon::CPasswordGenerator::GeneratePassword().c_str();
192 RabbitCommon::CEncrypt eRandom;
194 eRandom.Encode(szRandom, baRandom);
195 s.setValue(
"Plugin/Password/Random", baRandom);
197 RabbitCommon::CEncrypt eRandom;
198 eRandom.Dencode(baRandom, szRandom);
200 e.SetPassword(szRandom.toStdString().c_str());
202 e.SetPassword(key.c_str());
204 if(password.isEmpty())
206 e.Encode(password, encryptPassword);
207 set.setValue(szKey, encryptPassword);
208 set.setValue(szKey +
"_sum", PasswordSum(password.toStdString(), key));
212const QString CParameterOperate::GetName()
const
217void CParameterOperate::SetName(
const QString& szName)
219 if(m_szName == szName)
223 emit sigNameChanged(m_szName);
226int CParameterOperate::OnLoad(QSettings &set)
228 SetName(set.value(
"Name", GetName()).toString());
232int CParameterOperate::OnSave(QSettings &set)
234 set.setValue(
"Name", GetName());
int LoadPassword(const QString &szTitle, const QString &szKey, QString &password, QSettings &set)
Restore password
void sigSetGlobalParameters()
仅由此类使用
virtual void slotSetGlobalParameters()
设置 CParameterPlugin 后调用,用于初始化与 CParameterPlugin 有关的操作。
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin
CParameterPlugin * m_pParameterPlugin
int SetModified(bool bModified=true)
在设置参数时,如果有修改,则调用。