You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
4.9 KiB
164 lines
4.9 KiB
// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd.
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
#include "dp4_login_module.h"
|
|
#include "dp4loginwidget.h"
|
|
|
|
#include <QTranslator>
|
|
#include <QApplication>
|
|
|
|
namespace dss
|
|
{
|
|
namespace module_v2
|
|
{
|
|
|
|
Dp4LoginModule::Dp4LoginModule(QObject *parent)
|
|
: QObject(parent)
|
|
, m_loginWidget(nullptr)
|
|
, m_appData(nullptr)
|
|
, m_callback(nullptr)
|
|
, m_msgCallback(nullptr)
|
|
{
|
|
setObjectName(QStringLiteral("Dp4LoginModule"));
|
|
installTranslator();
|
|
}
|
|
|
|
Dp4LoginModule::~Dp4LoginModule()
|
|
{
|
|
if (m_loginWidget) {
|
|
m_loginWidget->deleteLater();
|
|
}
|
|
}
|
|
|
|
void Dp4LoginModule::init()
|
|
{
|
|
if (m_loginWidget) {
|
|
m_loginWidget->reset();
|
|
return;
|
|
}
|
|
|
|
m_loginWidget = new Dp4LoginWidget;
|
|
m_loginWidget->reset();
|
|
connect(m_loginWidget, &Dp4LoginWidget::requestSendAuthen, this, [ this ](const QString &account, const QString &token) {
|
|
// 发送认证的信息
|
|
if (m_callback && m_appData) {
|
|
AuthCallbackData data;
|
|
data.account = account;
|
|
data.token = token;
|
|
data.result = 1;
|
|
m_callback(&data, &m_appData);
|
|
}
|
|
});
|
|
}
|
|
|
|
void Dp4LoginModule::setAppData(AppDataPtr appData)
|
|
{
|
|
m_appData = appData;
|
|
}
|
|
|
|
void Dp4LoginModule::setAuthCallback(AuthCallbackFun callback)
|
|
{
|
|
m_callback = callback;
|
|
}
|
|
|
|
void Dp4LoginModule::setMessageCallback(MessageCallbackFunc msgCallback)
|
|
{
|
|
m_msgCallback = msgCallback;
|
|
}
|
|
|
|
QWidget *Dp4LoginModule::content()
|
|
{
|
|
// 此处返回窗体必须从此处创建,因为该插件是在子线程中加载,而窗体需要在主线程中显示,因此此处第一次获取的时候再返回它的窗体即可
|
|
return m_loginWidget;
|
|
}
|
|
|
|
void Dp4LoginModule::reset()
|
|
{
|
|
init();
|
|
}
|
|
|
|
void Dp4LoginModule::installTranslator()
|
|
{
|
|
// 加载翻译文件
|
|
QString translationFile = QString("%1/dp4-login-plugin_%2.qm").arg(QM_FILES_DIR).arg(QLocale::system().name());
|
|
QFile file(translationFile);
|
|
if (!file.exists())
|
|
return;
|
|
|
|
static QTranslator translator(this);
|
|
translator.load(translationFile);
|
|
QApplication::installTranslator(&translator);
|
|
}
|
|
|
|
QString Dp4LoginModule::message(const QString &message)
|
|
{
|
|
qInfo() << Q_FUNC_INFO;
|
|
QJsonParseError jsonParseError;
|
|
const QJsonDocument messageDoc = QJsonDocument::fromJson(message.toLatin1(), &jsonParseError);
|
|
if (jsonParseError.error != QJsonParseError::NoError || messageDoc.isEmpty()) {
|
|
qWarning() << Q_FUNC_INFO << "Failed to obtain message from shell!: " << message;
|
|
return "";
|
|
}
|
|
|
|
QJsonObject retObj;
|
|
retObj["Code"] = 0;
|
|
retObj["Message"] = "Success";
|
|
|
|
QJsonObject msgObj = messageDoc.object();
|
|
QString cmdType = msgObj.value("CmdType").toString();
|
|
QJsonObject data = msgObj.value("Data").toObject();
|
|
qInfo() << "Cmd type: " << cmdType;
|
|
if (cmdType == "CurrentUserChanged") {
|
|
if (m_loginWidget) {
|
|
QJsonObject data = msgObj.value("Data").toObject();
|
|
QString userName = data.value("Name").toString();
|
|
QString fullName = data.value("Fullname").toString();
|
|
QString avatar = data.value("Avatar").toString();
|
|
m_loginWidget->setCurrentAccount(userName, fullName, avatar);
|
|
}
|
|
} else if (cmdType == "GetConfigs") {
|
|
QJsonObject retDataObj;
|
|
retDataObj["ShowAvatar"] = false;
|
|
retDataObj["ShowUserName"] = false;
|
|
retDataObj["ShowSwitchButton"] = false;
|
|
retDataObj["ShowLockButton"] = false;
|
|
retDataObj["DefaultAuthLevel"] = DefaultAuthLevel::StrongDefault;
|
|
retDataObj["DisableOtherAuthentications"] = true;
|
|
retDataObj["showBackGroundColor"] = false;
|
|
retDataObj["AuthType"] = AuthType::AT_Custom;
|
|
|
|
retObj["Data"] = retDataObj;
|
|
} else if (cmdType == "StartAuth") {
|
|
} else if (cmdType == "AuthState") {
|
|
// 认证类型
|
|
int authType = data.value("AuthType").toInt();
|
|
int authState = data.value("AuthState").toInt();
|
|
if (authType == AuthType::AT_All && authState == AuthState::AS_Success) {
|
|
init();
|
|
} else if (m_loginWidget) {
|
|
m_loginWidget->updateAuthenResult(authType, authState);
|
|
}
|
|
} else if (cmdType == "LimitsInfo") {
|
|
} else if (cmdType == "Message") {
|
|
// 验证后接收到了错误的消息
|
|
if (m_loginWidget)
|
|
m_loginWidget->setMessage(data.value("type").toString(), data.value("content").toString());
|
|
} else if (cmdType == "GetAuthenInfo") {
|
|
QJsonObject retDataObj;
|
|
// 是否需要调用外部的登录方式
|
|
retDataObj.insert("AuthenType", "password");
|
|
retObj["Data"] = retDataObj;
|
|
} else if (cmdType == "IsPluginEnabled") {
|
|
QJsonObject retDataObj;
|
|
// 当前插件自动启动
|
|
retDataObj.insert("IsPluginEnabled", true);
|
|
retObj["Data"] = retDataObj;
|
|
}
|
|
|
|
QJsonDocument doc;
|
|
doc.setObject(retObj);
|
|
return doc.toJson();
|
|
}
|
|
|
|
}
|
|
}
|
|
|