moved certificate content acquisition from ClientManagementLogic to ClientInfoLogic
This commit is contained in:
parent
f6e8346841
commit
d6d3bf6943
7 changed files with 41 additions and 23 deletions
|
@ -1,8 +1,8 @@
|
||||||
#include "clientManagementModel.h"
|
#include "clientManagementModel.h"
|
||||||
|
|
||||||
ClientManagementModel::ClientManagementModel(std::shared_ptr<Settings> settings, QObject *parent) :
|
#include <QJsonObject>
|
||||||
m_settings(settings),
|
|
||||||
QAbstractListModel(parent)
|
ClientManagementModel::ClientManagementModel(QObject *parent) : QAbstractListModel(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,13 +21,13 @@ void ClientManagementModel::setContent(const QVector<QVariant> &data)
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonObject ClientManagementModel::getContent(Proto protocol)
|
QJsonObject ClientManagementModel::getContent(amnezia::Proto protocol)
|
||||||
{
|
{
|
||||||
QJsonObject clientsTable;
|
QJsonObject clientsTable;
|
||||||
for (const auto &item : m_content) {
|
for (const auto &item : m_content) {
|
||||||
if (protocol == Proto::OpenVpn) {
|
if (protocol == amnezia::Proto::OpenVpn) {
|
||||||
clientsTable[item.toJsonObject()["openvpnCertId"].toString()] = item.toJsonObject();
|
clientsTable[item.toJsonObject()["openvpnCertId"].toString()] = item.toJsonObject();
|
||||||
} else if (protocol == Proto::WireGuard) {
|
} else if (protocol == amnezia::Proto::WireGuard) {
|
||||||
clientsTable[item.toJsonObject()["wireguardPublicKey"].toString()] = item.toJsonObject();
|
clientsTable[item.toJsonObject()["wireguardPublicKey"].toString()] = item.toJsonObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include <QAbstractListModel>
|
#include <QAbstractListModel>
|
||||||
|
|
||||||
#include "settings.h"
|
#include "protocols/protocols_defs.h"
|
||||||
|
|
||||||
class ClientManagementModel : public QAbstractListModel
|
class ClientManagementModel : public QAbstractListModel
|
||||||
{
|
{
|
||||||
|
@ -17,11 +17,11 @@ public:
|
||||||
WireGuardPublicKey,
|
WireGuardPublicKey,
|
||||||
};
|
};
|
||||||
|
|
||||||
ClientManagementModel(std::shared_ptr<Settings> settings, QObject *parent = nullptr);
|
ClientManagementModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
void clearData();
|
void clearData();
|
||||||
void setContent(const QVector<QVariant> &data);
|
void setContent(const QVector<QVariant> &data);
|
||||||
QJsonObject getContent(Proto protocol);
|
QJsonObject getContent(amnezia::Proto protocol);
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
void setData(const QModelIndex &index, QVariant data, int role = Qt::DisplayRole);
|
void setData(const QModelIndex &index, QVariant data, int role = Qt::DisplayRole);
|
||||||
|
@ -31,7 +31,6 @@ protected:
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<Settings> m_settings; //TODO remove this?
|
|
||||||
QVector<QVariant> m_content;
|
QVector<QVariant> m_content;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,10 @@ void ClientInfoLogic::setCurrentClientId(int index)
|
||||||
|
|
||||||
void ClientInfoLogic::onUpdatePage()
|
void ClientInfoLogic::onUpdatePage()
|
||||||
{
|
{
|
||||||
set_busyIndicatorIsRunning(false);
|
set_pageContentVisible(false);
|
||||||
|
set_busyIndicatorIsRunning(true);
|
||||||
|
|
||||||
|
const ServerCredentials credentials = m_settings->serverCredentials(uiLogic()->selectedServerIndex);
|
||||||
const DockerContainer container = m_settings->defaultContainer(uiLogic()->selectedServerIndex);
|
const DockerContainer container = m_settings->defaultContainer(uiLogic()->selectedServerIndex);
|
||||||
const QString containerNameString = ContainerProps::containerHumanNames().value(container);
|
const QString containerNameString = ContainerProps::containerHumanNames().value(container);
|
||||||
set_labelCurrentVpnProtocolText(tr("Service: ") + containerNameString);
|
set_labelCurrentVpnProtocolText(tr("Service: ") + containerNameString);
|
||||||
|
@ -47,12 +49,35 @@ void ClientInfoLogic::onUpdatePage()
|
||||||
|
|
||||||
set_lineEditNameAliasText(model->data(modelIndex, ClientManagementModel::ClientRoles::NameRole).toString());
|
set_lineEditNameAliasText(model->data(modelIndex, ClientManagementModel::ClientRoles::NameRole).toString());
|
||||||
if (currentMainProtocol == Proto::OpenVpn) {
|
if (currentMainProtocol == Proto::OpenVpn) {
|
||||||
set_labelOpenVpnCertId(model->data(modelIndex, ClientManagementModel::ClientRoles::OpenVpnCertIdRole).toString());
|
const QString certId = model->data(modelIndex, ClientManagementModel::ClientRoles::OpenVpnCertIdRole).toString();
|
||||||
set_textAreaOpenVpnCertData(model->data(modelIndex, ClientManagementModel::ClientRoles::OpenVpnCertDataRole).toString());
|
QString certData = model->data(modelIndex, ClientManagementModel::ClientRoles::OpenVpnCertDataRole).toString();
|
||||||
|
|
||||||
|
if (certData.isEmpty()) {
|
||||||
|
QString stdOut;
|
||||||
|
auto cbReadStdOut = [&](const QString &data, QSharedPointer<QSsh::SshRemoteProcess> proc) {
|
||||||
|
stdOut += data + "\n";
|
||||||
|
};
|
||||||
|
|
||||||
|
const QString getOpenVpnCertData = QString("sudo docker exec -i $CONTAINER_NAME bash -c 'cat /opt/amnezia/openvpn/pki/issued/%1.crt'")
|
||||||
|
.arg(certId);
|
||||||
|
const QString script = m_serverController->replaceVars(getOpenVpnCertData, m_serverController->genVarsForScript(credentials, container));
|
||||||
|
ErrorCode error = m_serverController->runScript(credentials, script, cbReadStdOut);
|
||||||
|
certData = stdOut;
|
||||||
|
m_serverController->disconnectFromHost(credentials);
|
||||||
|
if (isErrorOccured(error)) {
|
||||||
|
set_busyIndicatorIsRunning(false);
|
||||||
|
uiLogic()->closePage();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set_labelOpenVpnCertId(certId);
|
||||||
|
set_textAreaOpenVpnCertData(certData);
|
||||||
} else if (currentMainProtocol == Proto::WireGuard) {
|
} else if (currentMainProtocol == Proto::WireGuard) {
|
||||||
set_textAreaWireGuardKeyData(model->data(modelIndex, ClientManagementModel::ClientRoles::WireGuardPublicKey).toString());
|
set_textAreaWireGuardKeyData(model->data(modelIndex, ClientManagementModel::ClientRoles::WireGuardPublicKey).toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
set_pageContentVisible(true);
|
||||||
|
set_busyIndicatorIsRunning(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientInfoLogic::onLineEditNameAliasEditingFinished()
|
void ClientInfoLogic::onLineEditNameAliasEditingFinished()
|
||||||
|
|
|
@ -19,6 +19,7 @@ class ClientInfoLogic : public PageLogicBase
|
||||||
AUTO_PROPERTY(QString, labelCurrentVpnProtocolText)
|
AUTO_PROPERTY(QString, labelCurrentVpnProtocolText)
|
||||||
AUTO_PROPERTY(QString, textAreaWireGuardKeyData)
|
AUTO_PROPERTY(QString, textAreaWireGuardKeyData)
|
||||||
AUTO_PROPERTY(bool, busyIndicatorIsRunning);
|
AUTO_PROPERTY(bool, busyIndicatorIsRunning);
|
||||||
|
AUTO_PROPERTY(bool, pageContentVisible);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ClientInfoLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
ClientInfoLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||||
|
|
|
@ -87,19 +87,11 @@ ErrorCode ClientManagementLogic::getClientsList(const ServerCredentials &credent
|
||||||
for (auto &openvpnCertId : certsIds) {
|
for (auto &openvpnCertId : certsIds) {
|
||||||
openvpnCertId.replace(".crt", "");
|
openvpnCertId.replace(".crt", "");
|
||||||
if (!clientsTable.contains(openvpnCertId)) {
|
if (!clientsTable.contains(openvpnCertId)) {
|
||||||
stdOut.clear();
|
|
||||||
const QString getOpenVpnCertData = QString("sudo docker exec -i $CONTAINER_NAME bash -c 'cat /opt/amnezia/openvpn/pki/issued/%1.crt'")
|
|
||||||
.arg(openvpnCertId);
|
|
||||||
script = m_serverController->replaceVars(getOpenVpnCertData, m_serverController->genVarsForScript(credentials, container));
|
|
||||||
error = m_serverController->runScript(credentials, script, cbReadStdOut);
|
|
||||||
if (error != ErrorCode::NoError) {
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
QJsonObject client;
|
QJsonObject client;
|
||||||
client["openvpnCertId"] = openvpnCertId;
|
client["openvpnCertId"] = openvpnCertId;
|
||||||
client["clientName"] = QString("Client %1").arg(count);
|
client["clientName"] = QString("Client %1").arg(count);
|
||||||
client["openvpnCertData"] = stdOut;
|
client["openvpnCertData"] = "";
|
||||||
clientsTable[openvpnCertId] = client;
|
clientsTable[openvpnCertId] = client;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ PageClientInfoBase {
|
||||||
id: fl
|
id: fl
|
||||||
anchors.top: caption.bottom
|
anchors.top: caption.bottom
|
||||||
contentHeight: content.height
|
contentHeight: content.height
|
||||||
|
visible: ClientInfoLogic.pageContentVisible
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: content
|
id: content
|
||||||
|
|
|
@ -89,7 +89,7 @@ UiLogic::UiLogic(std::shared_ptr<Settings> settings, std::shared_ptr<VpnConfigur
|
||||||
{
|
{
|
||||||
m_containersModel = new ContainersModel(settings, this);
|
m_containersModel = new ContainersModel(settings, this);
|
||||||
m_protocolsModel = new ProtocolsModel(settings, this);
|
m_protocolsModel = new ProtocolsModel(settings, this);
|
||||||
m_clientManagementModel = new ClientManagementModel(settings, this);
|
m_clientManagementModel = new ClientManagementModel(this);
|
||||||
m_vpnConnection = new VpnConnection(settings, configurator, serverController);
|
m_vpnConnection = new VpnConnection(settings, configurator, serverController);
|
||||||
m_vpnConnection->moveToThread(&m_vpnConnectionThread);
|
m_vpnConnection->moveToThread(&m_vpnConnectionThread);
|
||||||
m_vpnConnectionThread.start();
|
m_vpnConnectionThread.start();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue