3#include <QLoggingCategory>
4#include <QCryptographicHash>
7#include "RabbitCommonEncrypt.h"
8#include "RabbitCommonTools.h"
9#include "DlgInputPassword.h"
10#include "ParameterOperate.h"
12static Q_LOGGING_CATEGORY(log,
"Parameter.Operate")
17 , m_pParameterPlugin(
nullptr)
20 check = connect(
this, SIGNAL(sigSetGlobalParameters()),
21 this, SLOT(slotSetGlobalParameters()));
26 check = connect(m_Parent, SIGNAL(sigSetGlobalParameters()),
27 this, SIGNAL(sigSetGlobalParameters()));
51QByteArray CParameterOperate::PasswordSum(
const std::string &password,
52 const std::string &key)
54 std::string pw =
"RabbitRemoteControl";
55 QCryptographicHash sum(QCryptographicHash::Md5);
57#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
59 sum.addData(password.c_str(), password.length());
60 sum.addData(pw.c_str(), pw.length());
62 sum.addData(key.c_str(), key.length());
65 sum.addData(QByteArrayView(password.c_str(), password.length()));
66 sum.addData(QByteArrayView(pw.c_str(), pw.length()));
68 sum.addData(QByteArrayView(key.c_str(), key.length()));
81int CParameterOperate::LoadPassword(
const QString &szTitle,
86 QByteArray sum = set.value(szKey +
"_sum").toByteArray();
87 QByteArray pwByte = set.value(szKey).toByteArray();
90 RabbitCommon::CEncrypt e;
96 e.SetPassword(key.c_str());
98 if(!e.Dencode(pwByte, password)
99 && PasswordSum(password.toStdString(), key) == sum)
102 qDebug(log) <<
"Password don't dencode or sum is error";
105 case CParameterPlugin::PromptType::First:
113 case CParameterPlugin::PromptType::No:
119 if(QDialog::Accepted != d.exec())
122 key = d.GetPassword().toStdString();
123 if(key.empty())
return -1;
126 return LoadPassword(szTitle, szKey, password, set);
131int CParameterOperate::SavePassword(
const QString &szKey,
132 const QString &password,
133 QSettings &set,
bool bSave)
138 set.remove(szKey +
"_sum");
142 QByteArray encryptPassword;
143 RabbitCommon::CEncrypt e;
148 case CParameterPlugin::PromptType::First:
156 if(QDialog::Accepted != dlg.exec())
158 szKey = dlg.GetPassword();
160 key = szKey.toStdString();
163 case CParameterPlugin::PromptType::No:
168 e.SetPassword(key.c_str());
169 if(password.isEmpty())
171 e.Encode(password, encryptPassword);
172 set.setValue(szKey, encryptPassword);
173 set.setValue(szKey +
"_sum", PasswordSum(password.toStdString(), key));
177const QString CParameterOperate::GetName()
const
182void CParameterOperate::SetName(
const QString& szName)
184 if(m_szName == szName)
188 emit sigNameChanged(m_szName);
191int CParameterOperate::OnLoad(QSettings &set)
193 SetName(set.value(
"Name", GetName()).toString());
197int CParameterOperate::OnSave(QSettings &set)
199 set.setValue(
"Name", GetName());
void sigSetGlobalParameters()
仅由此类使用
virtual void slotSetGlobalParameters()
设置 CParameterPlugin 后调用,用于初始化与 CParameterPlugin 有关的操作。
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin
CParameterPlugin * m_pParameterPlugin
int SetModified(bool bModified=true)
在设置参数时,如果有修改,则调用。