Skip to content

Commit

Permalink
Merge pull request #467 from amnezia-vpn/feature/full-access-last-config
Browse files Browse the repository at this point in the history
full access config no longer contains the last_config field
  • Loading branch information
pokamest committed Dec 25, 2023
2 parents 5ad54bf + 9290775 commit 414740f
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 3 deletions.
2 changes: 2 additions & 0 deletions client/amnezia_application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,8 @@ void AmneziaApplication::initModels()

m_clientManagementModel.reset(new ClientManagementModel(m_settings, this));
m_engine->rootContext()->setContextProperty("ClientManagementModel", m_clientManagementModel.get());
connect(m_clientManagementModel.get(), &ClientManagementModel::adminConfigRevoked,
m_serversModel.get(), &ServersModel::clearCachedProfile);

connect(m_configurator.get(), &VpnConfigurator::newVpnConfigCreated, this,
[this](const QString &clientId, const QString &clientName, const DockerContainer container,
Expand Down
16 changes: 16 additions & 0 deletions client/ui/controllers/exportController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,22 @@ void ExportController::generateFullAccessConfig()
int serverIndex = m_serversModel->getCurrentlyProcessedServerIndex();
QJsonObject config = m_settings->server(serverIndex);

QJsonArray containers = config.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());

for (auto protocol : ContainerProps::protocolsForContainer(containerType)) {
auto protocolConfig = containerConfig.value(ProtocolProps::protoToString(protocol)).toObject();

protocolConfig.remove(config_key::last_config);
containerConfig[ProtocolProps::protoToString(protocol)] = protocolConfig;
}

containers.replace(i, containerConfig);
}
config[config_key::containers] = containers;

QByteArray compressedConfig = QJsonDocument(config).toJson();
compressedConfig = qCompress(compressedConfig, 8);
m_config = QString("vpn://%1")
Expand Down
26 changes: 23 additions & 3 deletions client/ui/models/clientManagementModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -257,13 +257,33 @@ ErrorCode ClientManagementModel::renameClient(const int row, const QString &clie
ErrorCode ClientManagementModel::revokeClient(const int row, const DockerContainer container,
ServerCredentials credentials)
{
ErrorCode errorCode = ErrorCode::NoError;

if (container == DockerContainer::OpenVpn || container == DockerContainer::ShadowSocks
|| container == DockerContainer::Cloak) {
return revokeOpenVpn(row, container, credentials);
errorCode = revokeOpenVpn(row, container, credentials);
} else if (container == DockerContainer::WireGuard || container == DockerContainer::Awg) {
return revokeWireGuard(row, container, credentials);
errorCode = revokeWireGuard(row, container, credentials);
}
return ErrorCode::NoError;

if (errorCode == ErrorCode::NoError) {
auto client = m_clientsTable.at(row).toObject();
QString clientId = client.value(configKey::clientId).toString();

const auto server = m_settings->defaultServer();
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 (protocolConfig.value(config_key::last_config).toString().contains(clientId)) {
emit adminConfigRevoked(container);
}
}
}

return errorCode;
}

ErrorCode ClientManagementModel::revokeOpenVpn(const int row, const DockerContainer container,
Expand Down
3 changes: 3 additions & 0 deletions client/ui/models/clientManagementModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ public slots:
protected:
QHash<int, QByteArray> roleNames() const override;

signals:
void adminConfigRevoked(const DockerContainer container);

private:
bool isClientExists(const QString &clientId);

Expand Down
8 changes: 8 additions & 0 deletions client/ui/models/servers_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,14 @@ void ServersModel::clearCachedProfiles()
updateContainersModel();
}

void ServersModel::clearCachedProfile(const DockerContainer container)
{
m_settings->clearLastConnectionConfig(m_currentlyProcessedServerIndex, container);

m_servers.replace(m_currentlyProcessedServerIndex, m_settings->server(m_currentlyProcessedServerIndex));
updateContainersModel();
}

bool ServersModel::isAmneziaDnsContainerInstalled(const int serverIndex)
{
QJsonObject server = m_servers.at(serverIndex).toObject();
Expand Down
1 change: 1 addition & 0 deletions client/ui/models/servers_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public slots:
void addContainerConfig(const int containerIndex, const QJsonObject config);

void clearCachedProfiles();
void clearCachedProfile(const DockerContainer container);

ErrorCode removeContainer(const int containerIndex);
ErrorCode removeAllContainers();
Expand Down

0 comments on commit 414740f

Please sign in to comment.