diff --git a/client/configurators/wireguard_configurator.h b/client/configurators/wireguard_configurator.h index c1b4aa3c..d2422981 100644 --- a/client/configurators/wireguard_configurator.h +++ b/client/configurators/wireguard_configurator.h @@ -31,11 +31,11 @@ public: QString processConfigWithLocalSettings(QString config); QString processConfigWithExportSettings(QString config); + static ConnectionData genClientKeys(); + private: ConnectionData prepareWireguardConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr); - - ConnectionData genClientKeys(); bool m_isAwg; QString m_serverConfigPath; diff --git a/client/ui/controllers/apiController.cpp b/client/ui/controllers/apiController.cpp index 14a05410..521a5e8f 100644 --- a/client/ui/controllers/apiController.cpp +++ b/client/ui/controllers/apiController.cpp @@ -5,12 +5,14 @@ #include #include "configurators/openvpn_configurator.h" +#include "configurators/wireguard_configurator.h" namespace { namespace configKey { constexpr char cloak[] = "cloak"; + constexpr char awg[] = "awg"; constexpr char apiEdnpoint[] = "api_endpoint"; constexpr char accessToken[] = "api_key"; @@ -26,33 +28,42 @@ ApiController::ApiController(const QSharedPointer &serversModel, { } -QString ApiController::genPublicKey(const QString &protocol) -{ - if (protocol == configKey::cloak) { - return "."; - } - return QString(); -} - -QString ApiController::genCertificateRequest(const QString &protocol) -{ - if (protocol == configKey::cloak) { - m_certRequest = OpenVpnConfigurator::createCertRequest(); - return m_certRequest.request; - } - return QString(); -} - -void ApiController::processCloudConfig(const QString &protocol, QString &config) +void ApiController::processCloudConfig(const QString &protocol, const ApiController::ApiPayloadData &apiPayloadData, QString &config) { if (protocol == configKey::cloak) { config.replace("", "\n"); - config.replace("$OPENVPN_PRIV_KEY", m_certRequest.privKey); + config.replace("$OPENVPN_PRIV_KEY", apiPayloadData.certRequest.privKey); return; + } else if (protocol == configKey::awg) { + config.replace("$WIREGUARD_CLIENT_PRIVATE_KEY", apiPayloadData.wireGUardClientPubKey); } return; } +ApiController::ApiPayloadData ApiController::generateApiPayloadData(const QString &protocol) +{ + ApiController::ApiPayloadData apiPayload; + if (protocol == configKey::cloak) { + apiPayload.certRequest = OpenVpnConfigurator::createCertRequest(); + } else if (protocol == configKey::awg) { + auto connData = WireguardConfigurator::genClientKeys(); + apiPayload.wireGUardClientPubKey = connData.clientPubKey; + apiPayload.wireGuardClientPrivKey = connData.clientPrivKey; + } + return apiPayload; +} + +QJsonObject ApiController::fillApiPayload(const QString &protocol, const ApiController::ApiPayloadData &apiPayloadData) +{ + QJsonObject obj; + if (protocol == configKey::cloak) { + obj[configKey::certificate] = apiPayloadData.certRequest.request; + } else if (protocol == configKey::awg) { + obj[configKey::publicKey] = apiPayloadData.wireGUardClientPubKey; + } + return obj; +} + bool ApiController::updateServerConfigFromApi() { auto serverConfig = m_serversModel->getDefaultServerConfig(); @@ -71,13 +82,9 @@ bool ApiController::updateServerConfigFromApi() QString protocol = serverConfig.value(configKey::protocol).toString(); - QJsonObject obj; + auto apiPayloadData = generateApiPayloadData(protocol); - obj[configKey::publicKey] = genPublicKey(protocol); - obj[configKey::certificate] = genCertificateRequest(protocol); - - QByteArray requestBody = QJsonDocument(obj).toJson(); - qDebug() << requestBody; + QByteArray requestBody = QJsonDocument(fillApiPayload(protocol, apiPayloadData)).toJson(); QScopedPointer reply; reply.reset(manager.post(request, requestBody)); @@ -100,7 +107,7 @@ bool ApiController::updateServerConfigFromApi() } QString configStr = ba; - processCloudConfig(protocol, configStr); + processCloudConfig(protocol, apiPayloadData, configStr); QJsonObject cloudConfig = QJsonDocument::fromJson(configStr.toUtf8()).object(); diff --git a/client/ui/controllers/apiController.h b/client/ui/controllers/apiController.h index 1ce933c6..d7b15b77 100644 --- a/client/ui/controllers/apiController.h +++ b/client/ui/controllers/apiController.h @@ -22,15 +22,19 @@ signals: void errorOccurred(const QString &errorMessage); private: - QString genPublicKey(const QString &protocol); - QString genCertificateRequest(const QString &protocol); + struct ApiPayloadData { + OpenVpnConfigurator::ConnectionData certRequest; - void processCloudConfig(const QString &protocol, QString &config); + QString wireGuardClientPrivKey; + QString wireGUardClientPubKey; + }; + + ApiPayloadData generateApiPayloadData(const QString &protocol); + QJsonObject fillApiPayload(const QString &protocol, const ApiController::ApiPayloadData &apiPayloadData); + void processCloudConfig(const QString &protocol, const ApiController::ApiPayloadData &apiPayloadData, QString &config); QSharedPointer m_serversModel; QSharedPointer m_containersModel; - - OpenVpnConfigurator::ConnectionData m_certRequest; }; #endif // APICONTROLLER_H