From 92689d084cfd82bc735e26d40c84de1b63810549 Mon Sep 17 00:00:00 2001 From: Nethius Date: Fri, 21 Mar 2025 10:25:44 +0700 Subject: [PATCH] feature/old api proxy (#1484) * feature: proxy old api requests through gateway * chore: bump version --- CMakeLists.txt | 4 +- .../controllers/api/apiConfigsController.cpp | 54 +++++++------------ 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ccae139..21cd78f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR) set(PROJECT AmneziaVPN) -project(${PROJECT} VERSION 4.8.4.4 +project(${PROJECT} VERSION 4.8.4.5 DESCRIPTION "AmneziaVPN" HOMEPAGE_URL "https://amnezia.org/" ) @@ -11,7 +11,7 @@ string(TIMESTAMP CURRENT_DATE "%Y-%m-%d") set(RELEASE_DATE "${CURRENT_DATE}") set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH}) -set(APP_ANDROID_VERSION_CODE 2081) +set(APP_ANDROID_VERSION_CODE 2082) if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") set(MZ_PLATFORM_NAME "linux") diff --git a/client/ui/controllers/api/apiConfigsController.cpp b/client/ui/controllers/api/apiConfigsController.cpp index b8696201..00e6ae3d 100644 --- a/client/ui/controllers/api/apiConfigsController.cpp +++ b/client/ui/controllers/api/apiConfigsController.cpp @@ -19,7 +19,7 @@ namespace constexpr char cloak[] = "cloak"; constexpr char awg[] = "awg"; - constexpr char apiEdnpoint[] = "api_endpoint"; + constexpr char apiEndpoint[] = "api_endpoint"; constexpr char accessToken[] = "api_key"; constexpr char certificate[] = "certificate"; constexpr char publicKey[] = "public_key"; @@ -251,7 +251,6 @@ bool ApiConfigsController::updateServiceFromGateway(const int serverIndex, const newServerConfig.insert(configKey::apiConfig, newApiConfig); newServerConfig.insert(configKey::authData, authData); - // newServerConfig.insert( m_serversModel->editServer(newServerConfig, serverIndex); if (reloadServiceConfig) { @@ -270,54 +269,37 @@ bool ApiConfigsController::updateServiceFromGateway(const int serverIndex, const bool ApiConfigsController::updateServiceFromTelegram(const int serverIndex) { - auto serverConfig = m_serversModel->getServerConfig(serverIndex); - auto installationUuid = m_settings->getInstallationUuid(true); - #ifdef Q_OS_IOS IosController::Instance()->requestInetAccess(); QThread::msleep(10); #endif - if (serverConfig.value(config_key::configVersion).toInt()) { - QNetworkRequest request; - request.setTransferTimeout(apiDefs::requestTimeoutMsecs); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - request.setRawHeader("Authorization", "Api-Key " + serverConfig.value(configKey::accessToken).toString().toUtf8()); - QString endpoint = serverConfig.value(configKey::apiEdnpoint).toString(); - request.setUrl(endpoint); + GatewayController gatewayController(m_settings->getGatewayEndpoint(), m_settings->isDevGatewayEnv(), apiDefs::requestTimeoutMsecs); - QString protocol = serverConfig.value(configKey::protocol).toString(); + auto serverConfig = m_serversModel->getServerConfig(serverIndex); + auto installationUuid = m_settings->getInstallationUuid(true); - ApiPayloadData apiPayloadData = generateApiPayloadData(protocol); + QString serviceProtocol = serverConfig.value(configKey::protocol).toString(); + ApiPayloadData apiPayloadData = generateApiPayloadData(serviceProtocol); - QJsonObject apiPayload = fillApiPayload(protocol, apiPayloadData); - apiPayload[configKey::uuid] = installationUuid; + QJsonObject apiPayload = fillApiPayload(serviceProtocol, apiPayloadData); + apiPayload[configKey::uuid] = installationUuid; + apiPayload[configKey::accessToken] = serverConfig.value(configKey::accessToken).toString(); + apiPayload[configKey::apiEndpoint] = serverConfig.value(configKey::apiEndpoint).toString(); - QByteArray requestBody = QJsonDocument(apiPayload).toJson(); + QByteArray responseBody; + ErrorCode errorCode = gatewayController.post(QString("%1v1/proxy_config"), apiPayload, responseBody); - QNetworkReply *reply = amnApp->networkManager()->post(request, requestBody); + if (errorCode == ErrorCode::NoError) { + fillServerConfig(serviceProtocol, apiPayloadData, responseBody, serverConfig); - QEventLoop wait; - connect(reply, &QNetworkReply::finished, &wait, &QEventLoop::quit); - - QList sslErrors; - connect(reply, &QNetworkReply::sslErrors, [this, &sslErrors](const QList &errors) { sslErrors = errors; }); - wait.exec(); - - auto errorCode = apiUtils::checkNetworkReplyErrors(sslErrors, reply); - if (errorCode != ErrorCode::NoError) { - reply->deleteLater(); - emit errorOccurred(errorCode); - return false; - } - - auto apiResponseBody = reply->readAll(); - reply->deleteLater(); - fillServerConfig(protocol, apiPayloadData, apiResponseBody, serverConfig); m_serversModel->editServer(serverConfig, serverIndex); emit updateServerFromApiFinished(); + return true; + } else { + emit errorOccurred(errorCode); + return false; } - return true; } bool ApiConfigsController::deactivateDevice()