// 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 #include 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["SwitchUserWhenCheckAccount"] = 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 == "AccountError") { // 验证后接收到了错误的消息 if (m_loginWidget) m_loginWidget->setAccountError(); } 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(); } } }