diff --git a/client/ui/controllers/exportController.cpp b/client/ui/controllers/exportController.cpp index 4f3fe7d5..2b102e13 100644 --- a/client/ui/controllers/exportController.cpp +++ b/client/ui/controllers/exportController.cpp @@ -327,7 +327,8 @@ void ExportController::updateClientManagementModel(const DockerContainer contain void ExportController::revokeConfig(const int row, const DockerContainer container, ServerCredentials credentials) { - ErrorCode errorCode = m_clientManagementModel->revokeClient(row, container, credentials); + ErrorCode errorCode = m_clientManagementModel->revokeClient(row, container, credentials, + m_serversModel->getCurrentlyProcessedServerIndex()); if (errorCode != ErrorCode::NoError) { emit exportErrorOccurred(errorString(errorCode)); } diff --git a/client/ui/models/clientManagementModel.cpp b/client/ui/models/clientManagementModel.cpp index 0b1be2cc..7c81c80e 100644 --- a/client/ui/models/clientManagementModel.cpp +++ b/client/ui/models/clientManagementModel.cpp @@ -296,30 +296,36 @@ ErrorCode ClientManagementModel::renameClient(const int row, const QString &clie } ErrorCode ClientManagementModel::revokeClient(const int row, const DockerContainer container, - ServerCredentials credentials) + ServerCredentials credentials, const int serverIndex) { ErrorCode errorCode = ErrorCode::NoError; + auto client = m_clientsTable.at(row).toObject(); + QString clientId = client.value(configKey::clientId).toString(); if (container == DockerContainer::OpenVpn || container == DockerContainer::ShadowSocks || container == DockerContainer::Cloak) { - errorCode = revokeOpenVpn(row, container, credentials); + errorCode = revokeOpenVpn(row, container, credentials, serverIndex); } else if (container == DockerContainer::WireGuard || container == DockerContainer::Awg) { errorCode = revokeWireGuard(row, container, credentials); } if (errorCode == ErrorCode::NoError) { - auto client = m_clientsTable.at(row).toObject(); - QString clientId = client.value(configKey::clientId).toString(); - - const auto server = m_settings->defaultServer(); + const auto server = m_settings->server(serverIndex); QJsonArray containers = server.value(config_key::containers).toArray(); for (auto i = 0; i < containers.size(); i++) { auto containerConfig = containers.at(i).toObject(); auto containerType = ContainerProps::containerFromString(containerConfig.value(config_key::container).toString()); - auto protocolConfig = containerConfig.value(ContainerProps::containerTypeToString(containerType)).toObject(); + if (containerType == container) { + QJsonObject protocolConfig; + if (container == DockerContainer::ShadowSocks || container == DockerContainer::Cloak) { + protocolConfig = containerConfig.value(ContainerProps::containerTypeToString(DockerContainer::OpenVpn)).toObject(); + } else { + protocolConfig = containerConfig.value(ContainerProps::containerTypeToString(containerType)).toObject(); + } - if (protocolConfig.value(config_key::last_config).toString().contains(clientId)) { - emit adminConfigRevoked(container); + if (protocolConfig.value(config_key::last_config).toString().contains(clientId)) { + emit adminConfigRevoked(container); + } } } } @@ -328,7 +334,7 @@ ErrorCode ClientManagementModel::revokeClient(const int row, const DockerContain } ErrorCode ClientManagementModel::revokeOpenVpn(const int row, const DockerContainer container, - ServerCredentials credentials) + ServerCredentials credentials, const int serverIndex) { auto client = m_clientsTable.at(row).toObject(); QString clientId = client.value(configKey::clientId).toString(); @@ -337,6 +343,7 @@ ErrorCode ClientManagementModel::revokeOpenVpn(const int row, const DockerContai "cd /opt/amnezia/openvpn ;\\" "easyrsa revoke %1 ;\\" "easyrsa gen-crl ;\\" + "chmod 666 pki/crl.pem ;\\" "cp pki/crl.pem .'") .arg(clientId); @@ -356,12 +363,7 @@ ErrorCode ClientManagementModel::revokeOpenVpn(const int row, const DockerContai const QByteArray clientsTableString = QJsonDocument(m_clientsTable).toJson(); QString clientsTableFile = QString("/opt/amnezia/%1/clientsTable"); - if (container == DockerContainer::OpenVpn || container == DockerContainer::ShadowSocks - || container == DockerContainer::Cloak) { - clientsTableFile = clientsTableFile.arg(ContainerProps::containerTypeToString(DockerContainer::OpenVpn)); - } else { - clientsTableFile = clientsTableFile.arg(ContainerProps::containerTypeToString(container)); - } + clientsTableFile = clientsTableFile.arg(ContainerProps::containerTypeToString(DockerContainer::OpenVpn)); error = serverController.uploadTextFileToContainer(container, credentials, clientsTableString, clientsTableFile); if (error != ErrorCode::NoError) { logger.error() << "Failed to upload the clientsTable file to the server"; diff --git a/client/ui/models/clientManagementModel.h b/client/ui/models/clientManagementModel.h index ba36c26f..c003881b 100644 --- a/client/ui/models/clientManagementModel.h +++ b/client/ui/models/clientManagementModel.h @@ -28,7 +28,7 @@ public slots: ServerCredentials credentials); ErrorCode renameClient(const int row, const QString &userName, const DockerContainer container, ServerCredentials credentials, bool addTimeStamp = false); - ErrorCode revokeClient(const int index, const DockerContainer container, ServerCredentials credentials); + ErrorCode revokeClient(const int index, const DockerContainer container, ServerCredentials credentials, const int serverIndex); protected: QHash roleNames() const override; @@ -41,7 +41,7 @@ private: void migration(const QByteArray &clientsTableString); - ErrorCode revokeOpenVpn(const int row, const DockerContainer container, ServerCredentials credentials); + ErrorCode revokeOpenVpn(const int row, const DockerContainer container, ServerCredentials credentials, const int serverIndex); ErrorCode revokeWireGuard(const int row, const DockerContainer container, ServerCredentials credentials); ErrorCode getOpenVpnClients(ServerController &serverController, DockerContainer container, ServerCredentials credentials, int &count);