Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed hang after creating configuration on connection #473

Merged
merged 1 commit into from
Dec 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions client/amnezia_application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,7 @@ void AmneziaApplication::initModels()
ServerCredentials credentials) {
m_serversModel->reloadContainerConfig();
m_clientManagementModel->appendClient(clientId, clientName, container, credentials);
emit m_configurator->clientModelUpdated();
});
}

Expand Down
1 change: 1 addition & 0 deletions client/configurators/vpn_configurator.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class VpnConfigurator : public ConfiguratorBase
signals:
void newVpnConfigCreated(const QString &clientId, const QString &clientName, const DockerContainer container,
ServerCredentials credentials);
void clientModelUpdated();
};

#endif // VPN_CONFIGURATOR_H
15 changes: 11 additions & 4 deletions client/ui/models/clientManagementModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ namespace
constexpr char clientName[] = "clientName";
constexpr char container[] = "container";
constexpr char userData[] = "userData";
constexpr char creationDate[] = "creationDate";
}
}

Expand All @@ -40,6 +41,7 @@ QVariant ClientManagementModel::data(const QModelIndex &index, int role) const

switch (role) {
case ClientNameRole: return userData.value(configKey::clientName).toString();
case CreationDateRole: return userData.value(configKey::creationDate).toString();
}

return QVariant();
Expand Down Expand Up @@ -200,19 +202,20 @@ ErrorCode ClientManagementModel::appendClient(const QString &clientId, const QSt

for (int i = 0; i < m_clientsTable.size(); i++) {
if (m_clientsTable.at(i).toObject().value(configKey::clientId) == clientId) {
return renameClient(i, clientName, container, credentials);
return renameClient(i, clientName, container, credentials, true);
}
}

beginResetModel();
beginInsertRows(QModelIndex(), rowCount(), 1);
QJsonObject client;
client[configKey::clientId] = clientId;

QJsonObject userData;
userData[configKey::clientName] = clientName;
userData[configKey::creationDate] = QDateTime::currentDateTime().toString();
client[configKey::userData] = userData;
m_clientsTable.push_back(client);
endResetModel();
endInsertRows();

const QByteArray clientsTableString = QJsonDocument(m_clientsTable).toJson();

Expand All @@ -229,11 +232,14 @@ ErrorCode ClientManagementModel::appendClient(const QString &clientId, const QSt
}

ErrorCode ClientManagementModel::renameClient(const int row, const QString &clientName, const DockerContainer container,
ServerCredentials credentials)
ServerCredentials credentials, bool addTimeStamp)
{
auto client = m_clientsTable.at(row).toObject();
auto userData = client[configKey::userData].toObject();
userData[configKey::clientName] = clientName;
if (addTimeStamp) {
userData[configKey::creationDate] = QDateTime::currentDateTime().toString();
}
client[configKey::userData] = userData;

m_clientsTable.replace(row, client);
Expand Down Expand Up @@ -369,5 +375,6 @@ QHash<int, QByteArray> ClientManagementModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[ClientNameRole] = "clientName";
roles[CreationDateRole] = "creationDate";
return roles;
}
3 changes: 2 additions & 1 deletion client/ui/models/clientManagementModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class ClientManagementModel : public QAbstractListModel
public:
enum Roles {
ClientNameRole = Qt::UserRole + 1,
CreationDateRole
};

ClientManagementModel(std::shared_ptr<Settings> settings, QObject *parent = nullptr);
Expand All @@ -26,7 +27,7 @@ public slots:
ErrorCode appendClient(const QString &clientId, const QString &clientName, const DockerContainer container,
ServerCredentials credentials);
ErrorCode renameClient(const int row, const QString &userName, const DockerContainer container,
ServerCredentials credentials);
ServerCredentials credentials, bool addTimeStamp = false);
ErrorCode revokeClient(const int index, const DockerContainer container, ServerCredentials credentials);

protected:
Expand Down
2 changes: 1 addition & 1 deletion client/ui/qml/Pages2/PageShare.qml
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ PageType {
Layout.bottomMargin: 24

headerText: clientName
descriptionText: serverSelector.text
descriptionText: qsTr("Creation date: ") + creationDate
}

BasicButtonType {
Expand Down
6 changes: 5 additions & 1 deletion client/vpnconnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <QFile>
#include <QHostInfo>
#include <QJsonObject>
#include <QEventLoop>

#include <configurators/cloak_configurator.h>
#include <configurators/openvpn_configurator.h>
Expand Down Expand Up @@ -246,7 +247,10 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex, const Ser
m_settings->setProtocolConfig(serverIndex, container, proto, protoObject);
}

emit m_configurator->newVpnConfigCreated(clientId, "unnamed client", container, credentials);
QEventLoop wait;
emit m_configurator->newVpnConfigCreated(clientId, QString("Admin [%1]").arg(QSysInfo::prettyProductName()), container, credentials);
QObject::connect(m_configurator.get(), &VpnConfigurator::clientModelUpdated, &wait, &QEventLoop::quit);
wait.exec();
}

return configData;
Expand Down