From 08e150ffd017cf82838b0cb81d72dda6a2a9d72f Mon Sep 17 00:00:00 2001 From: "danil.martynenko" <danil.martynenko@demlabs.net> Date: Fri, 20 Dec 2024 17:19:05 +0300 Subject: [PATCH] [*] fixed reset serial key --- core/DapSession.cpp | 57 +++++++------------ vpn/client/DapCmdHandlers/DapCmdConnect.cpp | 50 ++++++++-------- .../DapCmdHandlers/DapCmdResetSerialKey.cpp | 14 +++-- vpn/qml/handlers/DapCmdResetSerialKey.cpp | 5 +- 4 files changed, 59 insertions(+), 67 deletions(-) diff --git a/core/DapSession.cpp b/core/DapSession.cpp index efb2b4b7b..d8f99b6b2 100644 --- a/core/DapSession.cpp +++ b/core/DapSession.cpp @@ -820,57 +820,44 @@ void DapSession::answerBugReport() void DapSession::errorResetSerialKey(const QString& error) { - qDebug() << "Reset serial key error: network error"; - emit sigResetSerialKeyError (2, tr ("Reset error: ") + error); + qDebug() << "Reset serial key error: " << error; + int errorCode = (error == "Serial key expired") ? 1 : 2; + emit sigResetSerialKeyError(errorCode, tr("Reset error: ") + error); } +// At some point, expired keys started being identified as an error, +// which led to the invocation of the errorResetSerialKey callback. +// Therefore, duplication ("Serial key expired") is kept in both errorResetSerialKey and onResetSerialKey. void DapSession::onResetSerialKey() { - if(m_netKeyActivateReply->getReplyData().size() <= 0 ) - { - emit errorResetSerialKey (tr ("Wrong answer from server")); + if (m_netKeyActivateReply->getReplyData().isEmpty()) { + emit sigResetSerialKeyError(2, tr("Wrong answer from server")); return; } QByteArray replyArr; m_dapCryptCDB->decode(m_netKeyActivateReply->getReplyData(), replyArr, KeyRoleSession); - qDebug() << "Serial key reset reply: " << QString::fromUtf8(replyArr); + qDebug() << "Processing serial key reset, reply: " << QString::fromUtf8(replyArr); QString op_code = QString::fromUtf8(replyArr).left(4); - if (op_code == OP_CODE_GENERAL_ERR) - { - emit sigResetSerialKeyError (1, tr ("Unknown authorization error")); - return; - } - else if (op_code == OP_CODE_ALREADY_ACTIVATED) - { - emit sigResetSerialKeyError (1, tr ("Serial key already activated on another device")); - return; - } - else if (op_code == OP_CODE_NOT_FOUND_LOGIN_IN_DB) - { - emit sigResetSerialKeyError (1, isSerial ? tr("Serial key not found in database") : tr ("Login not found in database")); - return; - } - else if (op_code == OP_CODE_SUBSCRIBE_EXPIRED) - { - emit sigResetSerialKeyError (1, tr ("Serial key expired")); - return; - } - else if (op_code == OP_CODE_CANT_CONNECTION_TO_DB) - { - emit sigResetSerialKeyError (1, tr ("Can't connect to database")); - return; - } - else if (op_code == OP_CODE_INCORRECT_SYM) - { - emit sigResetSerialKeyError(1, tr ("Incorrect symbols in request")); + static const QMap<QString, QString> errorMessages = { + {OP_CODE_GENERAL_ERR, tr("Unknown authorization error")}, + {OP_CODE_ALREADY_ACTIVATED, tr("Serial key already activated on another device")}, + {OP_CODE_NOT_FOUND_LOGIN_IN_DB, isSerial ? tr("Serial key not found in database") : tr("Login not found in database")}, + {OP_CODE_SUBSCRIBE_EXPIRED, tr("Serial key expired")}, + {OP_CODE_CANT_CONNECTION_TO_DB, tr("Can't connect to database")}, + {OP_CODE_INCORRECT_SYM, tr("Incorrect symbols in request")} + }; + + if (errorMessages.contains(op_code)) { + emit sigResetSerialKeyError(1, errorMessages.value(op_code)); return; } - emit sigSerialKeyReseted (tr ("Serial key reset successfully")); + emit sigSerialKeyReseted(tr("Serial key reset successfully")); } + void DapSession::answerBugReportsStatus() { if (!m_netBugReportsStatusReply) diff --git a/vpn/client/DapCmdHandlers/DapCmdConnect.cpp b/vpn/client/DapCmdHandlers/DapCmdConnect.cpp index b23d46a06..ed292a324 100644 --- a/vpn/client/DapCmdHandlers/DapCmdConnect.cpp +++ b/vpn/client/DapCmdHandlers/DapCmdConnect.cpp @@ -54,26 +54,17 @@ void DapCmdConnect::handle(const QJsonObject* params) { DapCmdServiceAbstract::handle(params); - if (params->contains(ACTION_KEY)) - { - //this is disconnect request - QString req = params->value(ACTION_KEY).toString(); - if (req == "Disconnect") - { + if (params->contains(ACTION_KEY)) { + QString req = params->value(ACTION_KEY).toString(""); + if (req == "Disconnect") { qDebug() << "DapCmdConnect::Disconnect signal"; emit sigDisconnect(); return; - } - - if (req == "RestartService") - { + } else if (req == "RestartService") { qDebug() << "DapCmdConnect::RestartService signal"; emit sigRestartService(false); return; - } - - if (req == "RestartServiceIfRunning") - { + } else if (req == "RestartServiceIfRunning") { qDebug() << "DapCmdConnect::RestartServiceIfRunning signal"; emit sigRestartService(true); return; @@ -86,27 +77,34 @@ void DapCmdConnect::handle(const QJsonObject* params) {UPDATE_ROUTE_TABLE, params->value(UPDATE_ROUTE_TABLE)} }; + if (!mandatoryConnParams[ADDRESS_KEY].isString() || !mandatoryConnParams[PORT_KEY].isDouble()) { + qWarning() << "Missing or invalid mandatory connection parameters"; + return; + } + bool updateRouteTable = mandatoryConnParams[UPDATE_ROUTE_TABLE].toBool(true); QString serialKey; - if(params->contains("serial")) - { - serialKey = params->value("serial").toString(); - } - else - { - serialKey = QString(DapServiceDataLocal::instance()->serialKeyData()->serialKey()).remove('-'); + if (params->contains("serial")) { + serialKey = params->value("serial").toString().remove('-'); + if (serialKey.isEmpty()) { + serialKey = DapServiceDataLocal::instance()->serialKeyData()->serialKey().remove('-'); + } + } else { + serialKey = DapServiceDataLocal::instance()->serialKeyData()->serialKey().remove('-'); } uint16_t port = uint16_t(mandatoryConnParams[PORT_KEY].toInt()); QString address = mandatoryConnParams[ADDRESS_KEY].toString(); - if (!serialKey.isEmpty()) - { + qDebug() << "Address:" << address << ", Port:" << port << ", UpdateRouteTable:" << updateRouteTable; + qDebug() << "SerialKey:" << (serialKey.isEmpty() ? "No serial key provided" : "Serial key provided"); + + if (!serialKey.isEmpty()) { emit sigConnect(serialKey, "", "", address, port, updateRouteTable); - } - else - { + } else { emit sigConnectNoAuth(address, port); } } + + diff --git a/vpn/client/DapCmdHandlers/DapCmdResetSerialKey.cpp b/vpn/client/DapCmdHandlers/DapCmdResetSerialKey.cpp index 85a75975f..973e4a204 100644 --- a/vpn/client/DapCmdHandlers/DapCmdResetSerialKey.cpp +++ b/vpn/client/DapCmdHandlers/DapCmdResetSerialKey.cpp @@ -3,22 +3,25 @@ DapCmdResetSerialKey::DapCmdResetSerialKey(QObject *parent) : DapCmdServiceAbstract (DapJsonCmdType::SEND_RESET_SERIAL_KEY_REQUEST, parent) { +} + +void DapCmdResetSerialKey::handle(const QJsonObject *params) +{ + DapCmdServiceAbstract::handle(params); + connect(this, &DapCmdResetSerialKey::sigResetSerialKeyReplied, [&] (const QString& reply) { QJsonObject l_obj; l_obj["reset_reply"] = reply; sendCmd(&l_obj); }); -} -void DapCmdResetSerialKey::handle(const QJsonObject *params) -{ - DapCmdServiceAbstract::handle(params); emit sigResetRequestSent(); } void DapCmdResetSerialKey::sendResetSerialError(const int& a_errorCode, const QString& error) { - qWarning() <<"Error message: "<< error; + qWarning() << "Error code: " << a_errorCode << ", message: " << error; + QJsonObject response; QJsonObject errorObj; @@ -28,3 +31,4 @@ void DapCmdResetSerialKey::sendResetSerialError(const int& a_errorCode, const QS sendCmd(&response); } + diff --git a/vpn/qml/handlers/DapCmdResetSerialKey.cpp b/vpn/qml/handlers/DapCmdResetSerialKey.cpp index 3e5650b0b..fe1d3fd2a 100644 --- a/vpn/qml/handlers/DapCmdResetSerialKey.cpp +++ b/vpn/qml/handlers/DapCmdResetSerialKey.cpp @@ -22,7 +22,7 @@ void DapCmdResetSerialKey::handleResult(const QJsonObject& result) void DapCmdResetSerialKey::handleError(int code, const QString& message) { - Q_UNUSED(code); Q_UNUSED(message); + qWarning() << "Error code:" << code << ", message:" << message; qWarning() << *m_errorObject; switch (code) { @@ -32,6 +32,9 @@ void DapCmdResetSerialKey::handleError(int code, const QString& message) case 2: emit sigResetSerialKeyErrorSetOnlyMessage(message); break; + default: + qWarning() << "Unknown error code received."; + break; } } -- GitLab