amnezia-client/client/core/models/servers/apiV2ServerConfig.cpp
2025-06-20 22:18:47 +08:00

125 lines
5.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "apiV2ServerConfig.h"
#include <QJsonArray>
#include <QJsonDocument>
#include "protocols/protocols_defs.h"
using namespace amnezia;
ApiV2ServerConfig::ApiV2ServerConfig(const QJsonObject &serverConfigObject) : ServerConfig(serverConfigObject)
{
name = serverConfigObject.value(config_key::name).toString();
description = serverConfigObject.value(config_key::description).toString();
auto apiConfigObject = serverConfigObject.value("api_config").toObject();
auto availableCountriesArray = apiConfigObject.value("available_countries").toArray();
for (const auto &countryValue : availableCountriesArray) {
auto countryObject = countryValue.toObject();
apiv2::Country country;
country.code = countryObject.value("server_country_code").toString();
country.name = countryObject.value("server_country_name").toString();
apiConfig.availableCountries.append(country);
}
auto subscriptionObject = apiConfigObject.value("subscription").toObject();
apiConfig.subscription.end_date = subscriptionObject.value("end_date").toString();
auto publicKeyObject = apiConfigObject.value("public_key").toObject();
apiConfig.publicKey.expiresAt = publicKeyObject.value("expires_at").toString();
apiConfig.serverCountryCode = apiConfigObject.value("server_country_code").toString();
apiConfig.serverCountryName = apiConfigObject.value("server_country_name").toString();
apiConfig.serviceProtocol = apiConfigObject.value("service_protocol").toString();
apiConfig.serviceType = apiConfigObject.value("service_type").toString();
apiConfig.userCountryCode = apiConfigObject.value("user_country_code").toString();
apiConfig.vpnKey = apiConfigObject.value("vpn_key").toString();
}
QJsonObject ApiV2ServerConfig::toJson() const
{
// Сначала вызываем родительскую функцию для сериализации базовых полей
QJsonObject json = ServerConfig::toJson();
// Добавляем свои поля только если они не пустые
if (!name.isEmpty()) {
json[config_key::name] = name;
}
if (!description.isEmpty()) {
json[config_key::description] = description;
}
// Сериализация API конфигурации
QJsonObject apiConfigJson;
// Сериализация доступных стран только если массив не пустой
if (!apiConfig.availableCountries.isEmpty()) {
QJsonArray availableCountriesArray;
for (const auto &country : apiConfig.availableCountries) {
QJsonObject countryObject;
if (!country.code.isEmpty()) {
countryObject["server_country_code"] = country.code;
}
if (!country.name.isEmpty()) {
countryObject["server_country_name"] = country.name;
}
if (!countryObject.isEmpty()) {
availableCountriesArray.append(countryObject);
}
}
if (!availableCountriesArray.isEmpty()) {
apiConfigJson["available_countries"] = availableCountriesArray;
}
}
// Сериализация подписки только если есть данные
if (!apiConfig.subscription.end_date.isEmpty()) {
QJsonObject subscriptionObject;
subscriptionObject["end_date"] = apiConfig.subscription.end_date;
apiConfigJson["subscription"] = subscriptionObject;
}
// Сериализация публичного ключа только если есть данные
if (!apiConfig.publicKey.expiresAt.isEmpty()) {
QJsonObject publicKeyObject;
publicKeyObject["expires_at"] = apiConfig.publicKey.expiresAt;
apiConfigJson["public_key"] = publicKeyObject;
}
// Сериализация информации о сервере только если не пустая
if (!apiConfig.serverCountryCode.isEmpty()) {
apiConfigJson["server_country_code"] = apiConfig.serverCountryCode;
}
if (!apiConfig.serverCountryName.isEmpty()) {
apiConfigJson["server_country_name"] = apiConfig.serverCountryName;
}
// Сериализация информации о сервисе только если не пустая
if (!apiConfig.serviceProtocol.isEmpty()) {
apiConfigJson["service_protocol"] = apiConfig.serviceProtocol;
}
if (!apiConfig.serviceType.isEmpty()) {
apiConfigJson["service_type"] = apiConfig.serviceType;
}
// Сериализация информации о пользователе только если не пустая
if (!apiConfig.userCountryCode.isEmpty()) {
apiConfigJson["user_country_code"] = apiConfig.userCountryCode;
}
// Сериализация VPN ключа только если не пустой
if (!apiConfig.vpnKey.isEmpty()) {
apiConfigJson["vpn_key"] = apiConfig.vpnKey;
}
// Добавляем API конфигурацию в основной JSON только если есть данные
if (!apiConfigJson.isEmpty()) {
json["api_config"] = apiConfigJson;
}
return json;
}