Merge pull request #473 from amnezia-vpn/bugfix/new-client-on-connection
fixed hang after creating configuration on connection
This commit is contained in:
commit
f1a0b7f0ef
6 changed files with 21 additions and 7 deletions
|
@ -330,6 +330,7 @@ void AmneziaApplication::initModels()
|
||||||
ServerCredentials credentials) {
|
ServerCredentials credentials) {
|
||||||
m_serversModel->reloadContainerConfig();
|
m_serversModel->reloadContainerConfig();
|
||||||
m_clientManagementModel->appendClient(clientId, clientName, container, credentials);
|
m_clientManagementModel->appendClient(clientId, clientName, container, credentials);
|
||||||
|
emit m_configurator->clientModelUpdated();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
signals:
|
signals:
|
||||||
void newVpnConfigCreated(const QString &clientId, const QString &clientName, const DockerContainer container,
|
void newVpnConfigCreated(const QString &clientId, const QString &clientName, const DockerContainer container,
|
||||||
ServerCredentials credentials);
|
ServerCredentials credentials);
|
||||||
|
void clientModelUpdated();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VPN_CONFIGURATOR_H
|
#endif // VPN_CONFIGURATOR_H
|
||||||
|
|
|
@ -15,6 +15,7 @@ namespace
|
||||||
constexpr char clientName[] = "clientName";
|
constexpr char clientName[] = "clientName";
|
||||||
constexpr char container[] = "container";
|
constexpr char container[] = "container";
|
||||||
constexpr char userData[] = "userData";
|
constexpr char userData[] = "userData";
|
||||||
|
constexpr char creationDate[] = "creationDate";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +41,7 @@ QVariant ClientManagementModel::data(const QModelIndex &index, int role) const
|
||||||
|
|
||||||
switch (role) {
|
switch (role) {
|
||||||
case ClientNameRole: return userData.value(configKey::clientName).toString();
|
case ClientNameRole: return userData.value(configKey::clientName).toString();
|
||||||
|
case CreationDateRole: return userData.value(configKey::creationDate).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
@ -200,19 +202,20 @@ ErrorCode ClientManagementModel::appendClient(const QString &clientId, const QSt
|
||||||
|
|
||||||
for (int i = 0; i < m_clientsTable.size(); i++) {
|
for (int i = 0; i < m_clientsTable.size(); i++) {
|
||||||
if (m_clientsTable.at(i).toObject().value(configKey::clientId) == clientId) {
|
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;
|
QJsonObject client;
|
||||||
client[configKey::clientId] = clientId;
|
client[configKey::clientId] = clientId;
|
||||||
|
|
||||||
QJsonObject userData;
|
QJsonObject userData;
|
||||||
userData[configKey::clientName] = clientName;
|
userData[configKey::clientName] = clientName;
|
||||||
|
userData[configKey::creationDate] = QDateTime::currentDateTime().toString();
|
||||||
client[configKey::userData] = userData;
|
client[configKey::userData] = userData;
|
||||||
m_clientsTable.push_back(client);
|
m_clientsTable.push_back(client);
|
||||||
endResetModel();
|
endInsertRows();
|
||||||
|
|
||||||
const QByteArray clientsTableString = QJsonDocument(m_clientsTable).toJson();
|
const QByteArray clientsTableString = QJsonDocument(m_clientsTable).toJson();
|
||||||
|
|
||||||
|
@ -229,11 +232,14 @@ ErrorCode ClientManagementModel::appendClient(const QString &clientId, const QSt
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorCode ClientManagementModel::renameClient(const int row, const QString &clientName, const DockerContainer container,
|
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 client = m_clientsTable.at(row).toObject();
|
||||||
auto userData = client[configKey::userData].toObject();
|
auto userData = client[configKey::userData].toObject();
|
||||||
userData[configKey::clientName] = clientName;
|
userData[configKey::clientName] = clientName;
|
||||||
|
if (addTimeStamp) {
|
||||||
|
userData[configKey::creationDate] = QDateTime::currentDateTime().toString();
|
||||||
|
}
|
||||||
client[configKey::userData] = userData;
|
client[configKey::userData] = userData;
|
||||||
|
|
||||||
m_clientsTable.replace(row, client);
|
m_clientsTable.replace(row, client);
|
||||||
|
@ -389,5 +395,6 @@ QHash<int, QByteArray> ClientManagementModel::roleNames() const
|
||||||
{
|
{
|
||||||
QHash<int, QByteArray> roles;
|
QHash<int, QByteArray> roles;
|
||||||
roles[ClientNameRole] = "clientName";
|
roles[ClientNameRole] = "clientName";
|
||||||
|
roles[CreationDateRole] = "creationDate";
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ class ClientManagementModel : public QAbstractListModel
|
||||||
public:
|
public:
|
||||||
enum Roles {
|
enum Roles {
|
||||||
ClientNameRole = Qt::UserRole + 1,
|
ClientNameRole = Qt::UserRole + 1,
|
||||||
|
CreationDateRole
|
||||||
};
|
};
|
||||||
|
|
||||||
ClientManagementModel(std::shared_ptr<Settings> settings, QObject *parent = nullptr);
|
ClientManagementModel(std::shared_ptr<Settings> settings, QObject *parent = nullptr);
|
||||||
|
@ -26,7 +27,7 @@ public slots:
|
||||||
ErrorCode appendClient(const QString &clientId, const QString &clientName, const DockerContainer container,
|
ErrorCode appendClient(const QString &clientId, const QString &clientName, const DockerContainer container,
|
||||||
ServerCredentials credentials);
|
ServerCredentials credentials);
|
||||||
ErrorCode renameClient(const int row, const QString &userName, const DockerContainer container,
|
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);
|
ErrorCode revokeClient(const int index, const DockerContainer container, ServerCredentials credentials);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -581,7 +581,7 @@ PageType {
|
||||||
Layout.bottomMargin: 24
|
Layout.bottomMargin: 24
|
||||||
|
|
||||||
headerText: clientName
|
headerText: clientName
|
||||||
descriptionText: serverSelector.text
|
descriptionText: qsTr("Creation date: ") + creationDate
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicButtonType {
|
BasicButtonType {
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QHostInfo>
|
#include <QHostInfo>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
#include <QEventLoop>
|
||||||
|
|
||||||
#include <configurators/cloak_configurator.h>
|
#include <configurators/cloak_configurator.h>
|
||||||
#include <configurators/openvpn_configurator.h>
|
#include <configurators/openvpn_configurator.h>
|
||||||
|
@ -250,7 +251,10 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex, const Ser
|
||||||
m_settings->setProtocolConfig(serverIndex, container, proto, protoObject);
|
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;
|
return configData;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue