chore: add isInAppPurchase and isTestPurchase in primary config

This commit is contained in:
vkamn
2026-03-25 13:57:47 +08:00
parent edc42fb7e4
commit b9f4ff56d8
3 changed files with 23 additions and 11 deletions

View File

@@ -72,6 +72,7 @@ namespace apiDefs
constexpr QLatin1String transactionId("transaction_id");
constexpr QLatin1String isTestPurchase("is_test_purchase");
constexpr QLatin1String isInAppPurchase("is_in_app_purchase");
constexpr QLatin1String userCountryCode("user_country_code");

View File

@@ -343,6 +343,7 @@ QStringList GatewayController::getProxyUrls(const QString &serviceType, const QS
qDebug() << "empty storage endpoint list";
return {};
}
std::random_device randomDevice;
std::mt19937 generator(randomDevice());
std::shuffle(baseUrls.begin(), baseUrls.end(), generator);

View File

@@ -980,18 +980,13 @@ ErrorCode ApiConfigsController::importServiceFromBilling(const QByteArray &respo
return ErrorCode::ApiPurchaseError;
}
duplicateServerIndex = m_serversModel->indexOfServerWithVpnKey(key);
if (duplicateServerIndex >= 0) {
qInfo().noquote() << "[IAP] Subscription config with the same vpn_key already exists";
return ErrorCode::ApiConfigAlreadyAdded;
}
QString normalizedKey = key;
normalizedKey.replace(QStringLiteral("vpn://"), QString());
QByteArray configString = QByteArray::fromBase64(normalizedKey.toUtf8(), QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
QByteArray configUncompressed = qUncompress(configString);
if (!configUncompressed.isEmpty()) {
const bool payloadWasCompressed = !configUncompressed.isEmpty();
if (payloadWasCompressed) {
configString = configUncompressed;
}
@@ -1002,12 +997,27 @@ ErrorCode ApiConfigsController::importServiceFromBilling(const QByteArray &respo
QJsonObject configObject = QJsonDocument::fromJson(configString).object();
quint16 crc = qChecksum(QJsonDocument(configObject).toJson());
auto apiConfig = configObject.value(apiDefs::key::apiConfig).toObject();
apiConfig[apiDefs::key::vpnKey] = normalizedKey;
apiConfig[apiDefs::key::isTestPurchase] = isTestPurchase;
apiConfig.insert(apiDefs::key::isTestPurchase, isTestPurchase);
apiConfig.insert(apiDefs::key::isInAppPurchase, true);
configObject.insert(apiDefs::key::apiConfig, apiConfig);
configString = QJsonDocument(configObject).toJson();
if (payloadWasCompressed) {
configString = qCompress(configString, 8);
}
normalizedKey = QString(configString.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals));
duplicateServerIndex = m_serversModel->indexOfServerWithVpnKey(normalizedKey);
if (duplicateServerIndex >= 0) {
qInfo().noquote() << "[IAP] Subscription config with the same vpn_key already exists";
return ErrorCode::ApiConfigAlreadyAdded;
}
apiConfig.insert(apiDefs::key::vpnKey, normalizedKey);
configObject.insert(apiDefs::key::apiConfig, apiConfig);
quint16 crc = qChecksum(QJsonDocument(configObject).toJson());
configObject.insert(config_key::crc, crc);
m_serversModel->addServer(configObject);