fixed clear profile

This commit is contained in:
dranik
2026-06-10 15:23:13 +03:00
parent e2b6128269
commit 4e3d50f3fd
2 changed files with 21 additions and 1 deletions
@@ -234,7 +234,13 @@ ErrorCode InstallController::updateServerConfig(const QString &serverId, DockerC
} else if (container == DockerContainer::Telemt) {
TelemtInstaller::uploadClientSettingsSnapshot(sshSession, credentials, container, newConfig);
}
clearCachedProfile(serverId, container);
// Only revoke/clear the cached client profile when the container was reinstalled
// (a fresh client is generated in that case). On a light settings update the
// existing client is reused, so revoking it here would break the admin's own
// config (matches 4.8.15.4, which cleared the profile only on container update).
if (reinstallRequired) {
clearCachedProfile(serverId, container);
}
adminConfig->updateContainerConfig(container, newConfig);
m_serversRepository->editServer(serverId, adminConfig->toJson(), serverConfigUtils::ConfigType::SelfHostedAdmin);
}
@@ -466,6 +466,20 @@ XrayProtocolConfig XrayProtocolConfig::fromJson(const QJsonObject &json)
}
}
}
// The client id lives inside the native config (outbounds[0].settings.vnext[0].users[0].id).
// Without extracting it here clientId() returns empty, which broke client revocation
// (e.g. "Clear profile" could not find/revoke the entry in the Share list).
const QJsonArray outbounds = parsed.value(protocols::xray::outbounds).toArray();
if (!outbounds.isEmpty()) {
const QJsonObject settings = outbounds[0].toObject().value(protocols::xray::settings).toObject();
const QJsonArray vnext = settings.value(protocols::xray::vnext).toArray();
if (!vnext.isEmpty()) {
const QJsonArray users = vnext[0].toObject().value(protocols::xray::users).toArray();
if (!users.isEmpty()) {
clientCfg.id = users[0].toObject().value(protocols::xray::id).toString();
}
}
}
c.clientConfig = clientCfg;
} else {
c.clientConfig = XrayClientConfig::fromJson(parsed);