Skip to content

Commit

Permalink
Merge pull request #479 from amnezia-vpn/feature/client-management-mi…
Browse files Browse the repository at this point in the history
…grations

added migration from version 3 of client management to version 4
  • Loading branch information
pokamest committed Dec 26, 2023
2 parents e878911 + 8f53d56 commit c9bde5c
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
29 changes: 27 additions & 2 deletions client/ui/models/clientManagementModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,23 @@ QVariant ClientManagementModel::data(const QModelIndex &index, int role) const
return QVariant();
}

void ClientManagementModel::migration(const QByteArray &clientsTableString)
{
QJsonObject clientsTable = QJsonDocument::fromJson(clientsTableString).object();

for (auto &clientId : clientsTable.keys()) {
QJsonObject client;
client[configKey::clientId] = clientId;

QJsonObject userData;
userData[configKey::clientName] = clientsTable.value(clientId).toObject().value(configKey::clientName);
client[configKey::userData] = userData;

m_clientsTable.push_back(client);
}

}

ErrorCode ClientManagementModel::updateModel(DockerContainer container, ServerCredentials credentials)
{
beginResetModel();
Expand All @@ -56,8 +73,14 @@ ErrorCode ClientManagementModel::updateModel(DockerContainer container, ServerCr

ErrorCode error = ErrorCode::NoError;

const QString clientsTableFile =
QString("/opt/amnezia/%1/clientsTable").arg(ContainerProps::containerTypeToString(container));
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));
}

const QByteArray clientsTableString =
serverController.getTextFileFromContainer(container, credentials, clientsTableFile, &error);
if (error != ErrorCode::NoError) {
Expand All @@ -69,6 +92,8 @@ ErrorCode ClientManagementModel::updateModel(DockerContainer container, ServerCr
m_clientsTable = QJsonDocument::fromJson(clientsTableString).array();

if (m_clientsTable.isEmpty()) {
migration(clientsTableString);

int count = 0;

if (container == DockerContainer::OpenVpn || container == DockerContainer::ShadowSocks
Expand Down
2 changes: 2 additions & 0 deletions client/ui/models/clientManagementModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public slots:
private:
bool isClientExists(const QString &clientId);

void migration(const QByteArray &clientsTableString);

ErrorCode revokeOpenVpn(const int row, const DockerContainer container, ServerCredentials credentials);
ErrorCode revokeWireGuard(const int row, const DockerContainer container, ServerCredentials credentials);

Expand Down

0 comments on commit c9bde5c

Please sign in to comment.