#include "LoginAndCheckAccountsScript.h" #include #include "adb/AdbUtils.h" #include "dao/BankProfileDAO.h" #include "dao/DeviceDAO.h" #include "dump/TaskDumpRecorder.h" #include "AppLogger.h" #include "GetProfileInfoScript.h" namespace Dushanbe { LoginAndCheckAccountsScript::LoginAndCheckAccountsScript( QString deviceId, QString appCode, QObject *parent, bool pinCheckOnly ) : CommonScript(parent), m_deviceId(std::move(deviceId)), m_appCode(std::move(appCode)), m_pinCheckOnly(pinCheckOnly) { } LoginAndCheckAccountsScript::~LoginAndCheckAccountsScript() = default; void LoginAndCheckAccountsScript::doStart() { // Канонический ключ материала (device.id в БД) — для лукапов BankProfile; // m_deviceId же перезаписываем ADB-серийником для команд. const QString canonicalDeviceId = m_deviceId; DeviceInfo device = DeviceDAO::getDeviceById(m_deviceId); if (device.id.isEmpty()) device = DeviceDAO::findByAdbSerial(m_deviceId); if (!device.adbSerial.isEmpty()) m_deviceId = device.adbSerial; const BankProfileInfo app = BankProfileDAO::getApplication(device.id, m_appCode); qDebug() << "[Dushanbe::Login] device.id=" << device.id << "adbSerial=" << device.adbSerial << "appCode=" << m_appCode << "app.id=" << app.id << "pinCode.length=" << app.pinCode.length() << "package=" << app.package; if (device.id.isEmpty() || app.id == -1) { m_error = "Device or app not found: " + m_deviceId + " " + m_appCode; qCritical() << m_error; emit finishedWithResult(m_error); return; } const TaskDumpMeta dumpMeta{{}, 0, {}, {}, app.bankProfileId, app.phone, device.id}; TaskDumpRecorder::Scope dumpScope("dushanbe", "FETCH_PROFILE", m_deviceId, dumpMeta, &m_error); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) { m_error = "Cant open the home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode; qWarning() << m_error; m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId); if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot); AppLogger::log("dushanbe/LoginAndCheck", m_deviceId, m_error, {}, "FETCH_PROFILE"); BankProfileDAO::updateComment(app.id, "Не прошла проверка " + QDateTime::currentDateTime().toString("dd.MM.yyyy HH:mm:ss")); AdbUtils::tryToKillApplication(m_deviceId, app.package); emit finishedWithResult(m_error); return; } // Скриншот домашнего экрана — отправляем в мониторинг m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId); if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot); if (m_pinCheckOnly) { emit finishedWithResult(m_error); return; } // В GetProfileInfoScript отдаём КАНОНИЧЕСКИЙ ключ материала, а не ADB-серийник, // чтобы BankProfileDAO::getApplication нашла правильную запись с bank_profile_id. GetProfileInfoScript profileScript(canonicalDeviceId, m_appCode); profileScript.start(); emit finishedWithResult(m_error); } } // namespace Dushanbe