mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-22 02:01:08 +07:00
fix: remove nested qeventloop from isConfigValid (also rename to validateConfig) (#2305)
* fix: remove nested qeventloop from isConfigValid (also rename to validateConfig) * chore: bump version
This commit is contained in:
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
|
||||||
|
|
||||||
set(PROJECT AmneziaVPN)
|
set(PROJECT AmneziaVPN)
|
||||||
set(AMNEZIAVPN_VERSION 4.8.14.1)
|
set(AMNEZIAVPN_VERSION 4.8.14.3)
|
||||||
|
|
||||||
project(${PROJECT} VERSION ${AMNEZIAVPN_VERSION}
|
project(${PROJECT} VERSION ${AMNEZIAVPN_VERSION}
|
||||||
DESCRIPTION "AmneziaVPN"
|
DESCRIPTION "AmneziaVPN"
|
||||||
@@ -12,7 +12,7 @@ string(TIMESTAMP CURRENT_DATE "%Y-%m-%d")
|
|||||||
set(RELEASE_DATE "${CURRENT_DATE}")
|
set(RELEASE_DATE "${CURRENT_DATE}")
|
||||||
|
|
||||||
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
|
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
|
||||||
set(APP_ANDROID_VERSION_CODE 2112)
|
set(APP_ANDROID_VERSION_CODE 2114)
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
set(MZ_PLATFORM_NAME "linux")
|
set(MZ_PLATFORM_NAME "linux")
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ add_custom_command(TARGET ${PROJECT} POST_BUILD
|
|||||||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||||||
$<TARGET_BUNDLE_DIR:AmneziaVPN>/Contents/Frameworks
|
$<TARGET_BUNDLE_DIR:AmneziaVPN>/Contents/Frameworks
|
||||||
COMMAND /usr/bin/find "$<TARGET_BUNDLE_DIR:AmneziaVPN>/Contents/Frameworks/OpenVPNAdapter.framework" -name "*.sha256" -delete
|
COMMAND /usr/bin/find "$<TARGET_BUNDLE_DIR:AmneziaVPN>/Contents/Frameworks/OpenVPNAdapter.framework" -name "*.sha256" -delete
|
||||||
COMMAND /usr/bin/codesign --force --sign "Apple Distribution"
|
COMMAND /usr/bin/codesign --force --sign "Apple Distribution: Privacy Technologies OU"
|
||||||
"$<TARGET_BUNDLE_DIR:AmneziaVPN>/Contents/Frameworks/OpenVPNAdapter.framework/Versions/Current/OpenVPNAdapter"
|
"$<TARGET_BUNDLE_DIR:AmneziaVPN>/Contents/Frameworks/OpenVPNAdapter.framework/Versions/Current/OpenVPNAdapter"
|
||||||
COMMAND ${QT_BIN_DIR_DETECTED}/macdeployqt $<TARGET_BUNDLE_DIR:AmneziaVPN> -appstore-compliant -qmldir=${CMAKE_CURRENT_SOURCE_DIR}
|
COMMAND ${QT_BIN_DIR_DETECTED}/macdeployqt $<TARGET_BUNDLE_DIR:AmneziaVPN> -appstore-compliant -qmldir=${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Signing OpenVPNAdapter framework"
|
COMMENT "Signing OpenVPNAdapter framework"
|
||||||
|
|||||||
@@ -368,7 +368,11 @@ void CoreController::initPrepareConfigHandler()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_installController->isConfigValid()) {
|
m_installController->validateConfig();
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(m_installController.get(), &InstallController::configValidated, this, [this](bool isValid) {
|
||||||
|
if (!isValid) {
|
||||||
emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected);
|
emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -987,37 +987,33 @@ void InstallController::addEmptyServer()
|
|||||||
emit installServerFinished(tr("Server added successfully"));
|
emit installServerFinished(tr("Server added successfully"));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InstallController::isConfigValid()
|
void InstallController::validateConfig()
|
||||||
{
|
{
|
||||||
int serverIndex = m_serversModel->getDefaultServerIndex();
|
int serverIndex = m_serversModel->getDefaultServerIndex();
|
||||||
QJsonObject serverConfigObject = m_serversModel->getServerConfig(serverIndex);
|
QJsonObject serverConfigObject = m_serversModel->getServerConfig(serverIndex);
|
||||||
|
|
||||||
if (apiUtils::isServerFromApi(serverConfigObject)) {
|
if (apiUtils::isServerFromApi(serverConfigObject)) {
|
||||||
return true;
|
emit configValidated(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_serversModel->data(serverIndex, ServersModel::Roles::HasInstalledContainers).toBool()) {
|
if (!m_serversModel->data(serverIndex, ServersModel::Roles::HasInstalledContainers).toBool()) {
|
||||||
emit noInstalledContainers();
|
emit noInstalledContainers();
|
||||||
return false;
|
emit configValidated(false);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DockerContainer container = qvariant_cast<DockerContainer>(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole));
|
DockerContainer container = qvariant_cast<DockerContainer>(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole));
|
||||||
|
|
||||||
if (container == DockerContainer::None) {
|
if (container == DockerContainer::None) {
|
||||||
emit installationErrorOccurred(ErrorCode::NoInstalledContainersError);
|
emit installationErrorOccurred(ErrorCode::NoInstalledContainersError);
|
||||||
return false;
|
emit configValidated(false);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSharedPointer<ServerController> serverController(new ServerController(m_settings));
|
|
||||||
VpnConfigurationsController vpnConfigurationController(m_settings, serverController);
|
|
||||||
|
|
||||||
QJsonObject containerConfig = m_containersModel->getContainerConfig(container);
|
QJsonObject containerConfig = m_containersModel->getContainerConfig(container);
|
||||||
ServerCredentials credentials = m_serversModel->getServerCredentials(serverIndex);
|
ServerCredentials credentials = m_serversModel->getServerCredentials(serverIndex);
|
||||||
|
QSharedPointer<ServerController> serverController(new ServerController(m_settings));
|
||||||
QFutureWatcher<ErrorCode> watcher;
|
|
||||||
|
|
||||||
QFuture<ErrorCode> future = QtConcurrent::run([this, container, &credentials, &containerConfig, &serverController]() {
|
|
||||||
ErrorCode errorCode = ErrorCode::NoError;
|
|
||||||
|
|
||||||
auto isProtocolConfigExists = [](const QJsonObject &containerConfig, const DockerContainer container) {
|
auto isProtocolConfigExists = [](const QJsonObject &containerConfig, const DockerContainer container) {
|
||||||
for (Proto protocol : ContainerProps::protocolsForContainer(container)) {
|
for (Proto protocol : ContainerProps::protocolsForContainer(container)) {
|
||||||
@@ -1031,35 +1027,54 @@ bool InstallController::isConfigValid()
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!isProtocolConfigExists(containerConfig, container)) {
|
if (isProtocolConfigExists(containerConfig, container)) {
|
||||||
VpnConfigurationsController vpnConfigurationController(m_settings, serverController);
|
emit configValidated(true);
|
||||||
errorCode = vpnConfigurationController.createProtocolConfigForContainer(credentials, container, containerConfig);
|
return;
|
||||||
if (errorCode != ErrorCode::NoError) {
|
|
||||||
return errorCode;
|
|
||||||
}
|
}
|
||||||
m_serversModel->updateContainerConfig(container, containerConfig);
|
|
||||||
|
|
||||||
errorCode = m_clientManagementModel->appendClient(container, credentials, containerConfig,
|
struct ValidationResult {
|
||||||
QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController);
|
ErrorCode errorCode = ErrorCode::NoError;
|
||||||
if (errorCode != ErrorCode::NoError) {
|
QJsonObject containerConfig;
|
||||||
return errorCode;
|
};
|
||||||
}
|
|
||||||
}
|
QFuture<ValidationResult> future =
|
||||||
return errorCode;
|
QtConcurrent::run([settings = m_settings, serverController, credentials, containerConfig, container]() mutable {
|
||||||
|
ValidationResult result;
|
||||||
|
result.containerConfig = containerConfig;
|
||||||
|
|
||||||
|
VpnConfigurationsController vpnConfigurationController(settings, serverController);
|
||||||
|
result.errorCode = vpnConfigurationController.createProtocolConfigForContainer(credentials, container,
|
||||||
|
result.containerConfig);
|
||||||
|
return result;
|
||||||
});
|
});
|
||||||
|
|
||||||
QEventLoop wait;
|
auto *watcher = new QFutureWatcher<ValidationResult>(this);
|
||||||
connect(&watcher, &QFutureWatcher<ErrorCode>::finished, &wait, &QEventLoop::quit);
|
connect(watcher, &QFutureWatcher<ValidationResult>::finished, this,
|
||||||
watcher.setFuture(future);
|
[this, watcher, container, credentials, serverController]() {
|
||||||
wait.exec();
|
auto result = watcher->result();
|
||||||
|
watcher->deleteLater();
|
||||||
|
|
||||||
ErrorCode errorCode = watcher.result();
|
if (result.errorCode != ErrorCode::NoError) {
|
||||||
|
emit installationErrorOccurred(result.errorCode);
|
||||||
if (errorCode != ErrorCode::NoError) {
|
emit configValidated(false);
|
||||||
emit installationErrorOccurred(errorCode);
|
return;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
|
m_serversModel->updateContainerConfig(container, result.containerConfig);
|
||||||
|
|
||||||
|
ErrorCode appendError = m_clientManagementModel->appendClient(
|
||||||
|
container, credentials, result.containerConfig,
|
||||||
|
QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController);
|
||||||
|
|
||||||
|
if (appendError != ErrorCode::NoError) {
|
||||||
|
emit installationErrorOccurred(appendError);
|
||||||
|
emit configValidated(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit configValidated(true);
|
||||||
|
});
|
||||||
|
watcher->setFuture(future);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InstallController::isUpdateDockerContainerRequired(const DockerContainer container, const QJsonObject &oldConfig,
|
bool InstallController::isUpdateDockerContainerRequired(const DockerContainer container, const QJsonObject &oldConfig,
|
||||||
|
|||||||
@@ -50,9 +50,10 @@ public slots:
|
|||||||
|
|
||||||
void addEmptyServer();
|
void addEmptyServer();
|
||||||
|
|
||||||
bool isConfigValid();
|
void validateConfig();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
void configValidated(bool isValid);
|
||||||
void installContainerFinished(const QString &finishMessage, bool isServiceInstall);
|
void installContainerFinished(const QString &finishMessage, bool isServiceInstall);
|
||||||
void installServerFinished(const QString &finishMessage);
|
void installServerFinished(const QString &finishMessage);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user