diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 588854d3..891c305a 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -68,8 +68,7 @@ #endif m_settings = std::shared_ptr(new Settings); - m_serverController = std::shared_ptr(new ServerController(m_settings, this)); - m_configurator = std::shared_ptr(new VpnConfigurator(m_settings, m_serverController, this)); + m_configurator = std::shared_ptr(new VpnConfigurator(m_settings, this)); } AmneziaApplication::~AmneziaApplication() @@ -90,7 +89,7 @@ AmneziaApplication::~AmneziaApplication() void AmneziaApplication::init() { m_engine = new QQmlApplicationEngine; - m_uiLogic = new UiLogic(m_settings, m_configurator, m_serverController); + m_uiLogic = new UiLogic(m_settings, m_configurator); const QUrl url(QStringLiteral("qrc:/ui/qml/main.qml")); QObject::connect(m_engine, &QQmlApplicationEngine::objectCreated, diff --git a/client/amnezia_application.h b/client/amnezia_application.h index f0f8f529..1ac6e772 100644 --- a/client/amnezia_application.h +++ b/client/amnezia_application.h @@ -49,7 +49,6 @@ private: UiLogic *m_uiLogic {}; std::shared_ptr m_settings; std::shared_ptr m_configurator; - std::shared_ptr m_serverController; ContainerProps* m_containerProps {}; ProtocolProps* m_protocolProps {}; diff --git a/client/configurators/cloak_configurator.cpp b/client/configurators/cloak_configurator.cpp index 0cfd74fc..6206d141 100644 --- a/client/configurators/cloak_configurator.cpp +++ b/client/configurators/cloak_configurator.cpp @@ -7,8 +7,8 @@ #include "core/servercontroller.h" #include "containers/containers_defs.h" -CloakConfigurator::CloakConfigurator(std::shared_ptr settings, std::shared_ptr serverController, QObject *parent): - ConfiguratorBase(settings, serverController, parent) +CloakConfigurator::CloakConfigurator(std::shared_ptr settings, QObject *parent): + ConfiguratorBase(settings, parent) { } @@ -17,12 +17,13 @@ QString CloakConfigurator::genCloakConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode) { ErrorCode e = ErrorCode::NoError; + ServerController serverController(m_settings); - QString cloakPublicKey = m_serverController->getTextFileFromContainer(container, credentials, + QString cloakPublicKey = serverController.getTextFileFromContainer(container, credentials, amnezia::protocols::cloak::ckPublicKeyPath, &e); cloakPublicKey.replace("\n", ""); - QString cloakBypassUid = m_serverController->getTextFileFromContainer(container, credentials, + QString cloakBypassUid = serverController.getTextFileFromContainer(container, credentials, amnezia::protocols::cloak::ckBypassUidKeyPath, &e); cloakBypassUid.replace("\n", ""); @@ -47,8 +48,8 @@ QString CloakConfigurator::genCloakConfig(const ServerCredentials &credentials, config.insert(config_key::remote, credentials.hostName); config.insert(config_key::port, "$CLOAK_SERVER_PORT"); - QString textCfg = m_serverController->replaceVars(QJsonDocument(config).toJson(), - m_serverController->genVarsForScript(credentials, container, containerConfig)); + QString textCfg = serverController.replaceVars(QJsonDocument(config).toJson(), + serverController.genVarsForScript(credentials, container, containerConfig)); // qDebug().noquote() << textCfg; return textCfg; diff --git a/client/configurators/cloak_configurator.h b/client/configurators/cloak_configurator.h index c6184805..cf6cd002 100644 --- a/client/configurators/cloak_configurator.h +++ b/client/configurators/cloak_configurator.h @@ -11,8 +11,7 @@ class CloakConfigurator : ConfiguratorBase { Q_OBJECT public: - CloakConfigurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + CloakConfigurator(std::shared_ptr settings, QObject *parent = nullptr); QString genCloakConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr); diff --git a/client/configurators/configurator_base.cpp b/client/configurators/configurator_base.cpp index 44377401..c24d7e1f 100644 --- a/client/configurators/configurator_base.cpp +++ b/client/configurators/configurator_base.cpp @@ -1,10 +1,8 @@ #include "configurator_base.h" -ConfiguratorBase::ConfiguratorBase(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent) +ConfiguratorBase::ConfiguratorBase(std::shared_ptr settings, QObject *parent) : QObject{parent}, - m_settings(settings), - m_serverController(serverController) + m_settings(settings) { } diff --git a/client/configurators/configurator_base.h b/client/configurators/configurator_base.h index 8c0614d9..da43a2bc 100644 --- a/client/configurators/configurator_base.h +++ b/client/configurators/configurator_base.h @@ -4,7 +4,6 @@ #include class Settings; -class ServerController; #include "containers/containers_defs.h" #include "core/defs.h" @@ -13,13 +12,10 @@ class ConfiguratorBase : public QObject { Q_OBJECT public: - explicit ConfiguratorBase(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + explicit ConfiguratorBase(std::shared_ptr settings, QObject *parent = nullptr); protected: std::shared_ptr m_settings; - std::shared_ptr m_serverController; - }; #endif // CONFIGURATORBASE_H diff --git a/client/configurators/ikev2_configurator.cpp b/client/configurators/ikev2_configurator.cpp index 9b702824..7ed83da1 100644 --- a/client/configurators/ikev2_configurator.cpp +++ b/client/configurators/ikev2_configurator.cpp @@ -15,8 +15,8 @@ #include "core/servercontroller.h" -Ikev2Configurator::Ikev2Configurator(std::shared_ptr settings, std::shared_ptr serverController, QObject *parent): - ConfiguratorBase(settings, serverController, parent) +Ikev2Configurator::Ikev2Configurator(std::shared_ptr settings, QObject *parent): + ConfiguratorBase(settings, parent) { } @@ -41,16 +41,17 @@ Ikev2Configurator::ConnectionData Ikev2Configurator::prepareIkev2Config(const Se "--extKeyUsage serverAuth,clientAuth -8 \"%1\"") .arg(connData.clientId); - ErrorCode e = m_serverController->runContainerScript(credentials, container, scriptCreateCert); + ServerController serverController(m_settings); + ErrorCode e = serverController.runContainerScript(credentials, container, scriptCreateCert); QString scriptExportCert = QString("pk12util -W \"%1\" -d sql:/etc/ipsec.d -n \"%2\" -o \"%3\"") .arg(connData.password) .arg(connData.clientId) .arg(certFileName); - e = m_serverController->runContainerScript(credentials, container, scriptExportCert); + e = serverController.runContainerScript(credentials, container, scriptExportCert); - connData.clientCert = m_serverController->getTextFileFromContainer(container, credentials, certFileName, &e); - connData.caCert = m_serverController->getTextFileFromContainer(container, credentials, "/etc/ipsec.d/ca_cert_base64.p12", &e); + connData.clientCert = serverController.getTextFileFromContainer(container, credentials, certFileName, &e); + connData.caCert = serverController.getTextFileFromContainer(container, credentials, "/etc/ipsec.d/ca_cert_base64.p12", &e); qDebug() << "Ikev2Configurator::ConnectionData client cert size:" << connData.clientCert.size(); qDebug() << "Ikev2Configurator::ConnectionData ca cert size:" << connData.caCert.size(); diff --git a/client/configurators/ikev2_configurator.h b/client/configurators/ikev2_configurator.h index 35c03b19..a7d379f2 100644 --- a/client/configurators/ikev2_configurator.h +++ b/client/configurators/ikev2_configurator.h @@ -11,8 +11,7 @@ class Ikev2Configurator : ConfiguratorBase { Q_OBJECT public: - Ikev2Configurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + Ikev2Configurator(std::shared_ptr settings, QObject *parent = nullptr); struct ConnectionData { QByteArray clientCert; // p12 client cert diff --git a/client/configurators/openvpn_configurator.cpp b/client/configurators/openvpn_configurator.cpp index 0ef6da0a..456aeb4d 100644 --- a/client/configurators/openvpn_configurator.cpp +++ b/client/configurators/openvpn_configurator.cpp @@ -19,8 +19,8 @@ #include #include -OpenVpnConfigurator::OpenVpnConfigurator(std::shared_ptr settings, std::shared_ptr serverController, QObject *parent): - ConfiguratorBase(settings, serverController, parent) +OpenVpnConfigurator::OpenVpnConfigurator(std::shared_ptr settings, QObject *parent): + ConfiguratorBase(settings, parent) { } @@ -40,7 +40,8 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::prepareOpenVpnConfig(co arg(amnezia::protocols::openvpn::clientsDirPath). arg(connData.clientId); - ErrorCode e = m_serverController->uploadTextFileToContainer(container, credentials, connData.request, reqFileName); + ServerController serverController(m_settings); + ErrorCode e = serverController.uploadTextFileToContainer(container, credentials, connData.request, reqFileName); if (e) { if (errorCode) *errorCode = e; return connData; @@ -52,8 +53,8 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::prepareOpenVpnConfig(co return connData; } - connData.caCert = m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::openvpn::caCertPath, &e); - connData.clientCert = m_serverController->getTextFileFromContainer(container, credentials, + connData.caCert = serverController.getTextFileFromContainer(container, credentials, amnezia::protocols::openvpn::caCertPath, &e); + connData.clientCert = serverController.getTextFileFromContainer(container, credentials, QString("%1/%2.crt").arg(amnezia::protocols::openvpn::clientCertPath).arg(connData.clientId), &e); if (e) { @@ -61,7 +62,7 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::prepareOpenVpnConfig(co return connData; } - connData.taKey = m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::openvpn::taKeyPath, &e); + connData.taKey = serverController.getTextFileFromContainer(container, credentials, amnezia::protocols::openvpn::taKeyPath, &e); if (connData.caCert.isEmpty() || connData.clientCert.isEmpty() || connData.taKey.isEmpty()) { if (errorCode) *errorCode = ErrorCode::SshSftpFailureError; @@ -73,8 +74,9 @@ OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::prepareOpenVpnConfig(co QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode) { - QString config = m_serverController->replaceVars(amnezia::scriptData(ProtocolScriptType::openvpn_template, container), - m_serverController->genVarsForScript(credentials, container, containerConfig)); + ServerController serverController(m_settings); + QString config = serverController.replaceVars(amnezia::scriptData(ProtocolScriptType::openvpn_template, container), + serverController.genVarsForScript(credentials, container, containerConfig)); ConnectionData connData = prepareOpenVpnConfig(credentials, container, errorCode); if (errorCode && *errorCode) { @@ -163,10 +165,11 @@ ErrorCode OpenVpnConfigurator::signCert(DockerContainer container, .arg(ContainerProps::containerToString(container)) .arg(clientId); + ServerController serverController(m_settings); QStringList scriptList {script_import, script_sign}; - QString script = m_serverController->replaceVars(scriptList.join("\n"), m_serverController->genVarsForScript(credentials, container)); + QString script = serverController.replaceVars(scriptList.join("\n"), serverController.genVarsForScript(credentials, container)); - return m_serverController->runScript(credentials, script); + return serverController.runScript(credentials, script); } OpenVpnConfigurator::ConnectionData OpenVpnConfigurator::createCertRequest() diff --git a/client/configurators/openvpn_configurator.h b/client/configurators/openvpn_configurator.h index 25230499..3b84e0a0 100644 --- a/client/configurators/openvpn_configurator.h +++ b/client/configurators/openvpn_configurator.h @@ -11,8 +11,7 @@ class OpenVpnConfigurator : ConfiguratorBase { Q_OBJECT public: - OpenVpnConfigurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + OpenVpnConfigurator(std::shared_ptr settings, QObject *parent = nullptr); struct ConnectionData { QString clientId; diff --git a/client/configurators/shadowsocks_configurator.cpp b/client/configurators/shadowsocks_configurator.cpp index 97503ac4..a71064c8 100644 --- a/client/configurators/shadowsocks_configurator.cpp +++ b/client/configurators/shadowsocks_configurator.cpp @@ -7,8 +7,8 @@ #include "containers/containers_defs.h" #include "core/servercontroller.h" -ShadowSocksConfigurator::ShadowSocksConfigurator(std::shared_ptr settings, std::shared_ptr serverController, QObject *parent): - ConfiguratorBase(settings, serverController, parent) +ShadowSocksConfigurator::ShadowSocksConfigurator(std::shared_ptr settings, QObject *parent): + ConfiguratorBase(settings, parent) { } @@ -17,9 +17,10 @@ QString ShadowSocksConfigurator::genShadowSocksConfig(const ServerCredentials &c DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode) { ErrorCode e = ErrorCode::NoError; + ServerController serverController(m_settings); - QString ssKey = m_serverController->getTextFileFromContainer(container, credentials, - amnezia::protocols::shadowsocks::ssKeyPath, &e); + QString ssKey = serverController.getTextFileFromContainer(container, credentials, + amnezia::protocols::shadowsocks::ssKeyPath, &e); ssKey.replace("\n", ""); if (e) { @@ -36,8 +37,8 @@ QString ShadowSocksConfigurator::genShadowSocksConfig(const ServerCredentials &c config.insert("method", "$SHADOWSOCKS_CIPHER"); - QString textCfg = m_serverController->replaceVars(QJsonDocument(config).toJson(), - m_serverController->genVarsForScript(credentials, container, containerConfig)); + QString textCfg = serverController.replaceVars(QJsonDocument(config).toJson(), + serverController.genVarsForScript(credentials, container, containerConfig)); //qDebug().noquote() << textCfg; return textCfg; diff --git a/client/configurators/shadowsocks_configurator.h b/client/configurators/shadowsocks_configurator.h index be80f169..b03149eb 100644 --- a/client/configurators/shadowsocks_configurator.h +++ b/client/configurators/shadowsocks_configurator.h @@ -10,8 +10,7 @@ class ShadowSocksConfigurator : ConfiguratorBase { Q_OBJECT public: - ShadowSocksConfigurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + ShadowSocksConfigurator(std::shared_ptr settings, QObject *parent = nullptr); QString genShadowSocksConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr); diff --git a/client/configurators/ssh_configurator.cpp b/client/configurators/ssh_configurator.cpp index 725f6ead..e1435bc3 100644 --- a/client/configurators/ssh_configurator.cpp +++ b/client/configurators/ssh_configurator.cpp @@ -15,8 +15,8 @@ #include "utilities.h" -SshConfigurator::SshConfigurator(std::shared_ptr settings, std::shared_ptr serverController, QObject *parent): - ConfiguratorBase(settings, serverController, parent) +SshConfigurator::SshConfigurator(std::shared_ptr settings, QObject *parent): + ConfiguratorBase(settings, parent) { } diff --git a/client/configurators/ssh_configurator.h b/client/configurators/ssh_configurator.h index d7a177c3..2f8cb550 100644 --- a/client/configurators/ssh_configurator.h +++ b/client/configurators/ssh_configurator.h @@ -11,8 +11,7 @@ class SshConfigurator : ConfiguratorBase { Q_OBJECT public: - SshConfigurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + SshConfigurator(std::shared_ptr settings, QObject *parent = nullptr); QProcessEnvironment prepareEnv(); QString convertOpenSShKey(const QString &key); diff --git a/client/configurators/vpn_configurator.cpp b/client/configurators/vpn_configurator.cpp index 1433eeaa..ceb6a5a4 100644 --- a/client/configurators/vpn_configurator.cpp +++ b/client/configurators/vpn_configurator.cpp @@ -14,16 +14,15 @@ #include "utilities.h" #include "settings.h" -VpnConfigurator::VpnConfigurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent): - ConfiguratorBase(settings, serverController, parent) +VpnConfigurator::VpnConfigurator(std::shared_ptr settings, QObject *parent): + ConfiguratorBase(settings, parent) { - openVpnConfigurator = std::shared_ptr(new OpenVpnConfigurator(settings, serverController, this)); - shadowSocksConfigurator = std::shared_ptr(new ShadowSocksConfigurator(settings, serverController, this)); - cloakConfigurator = std::shared_ptr(new CloakConfigurator(settings, serverController, this)); - wireguardConfigurator = std::shared_ptr(new WireguardConfigurator(settings, serverController, this)); - ikev2Configurator = std::shared_ptr(new Ikev2Configurator(settings, serverController, this)); - sshConfigurator = std::shared_ptr(new SshConfigurator(settings, serverController, this)); + openVpnConfigurator = std::shared_ptr(new OpenVpnConfigurator(settings, this)); + shadowSocksConfigurator = std::shared_ptr(new ShadowSocksConfigurator(settings, this)); + cloakConfigurator = std::shared_ptr(new CloakConfigurator(settings, this)); + wireguardConfigurator = std::shared_ptr(new WireguardConfigurator(settings, this)); + ikev2Configurator = std::shared_ptr(new Ikev2Configurator(settings, this)); + sshConfigurator = std::shared_ptr(new SshConfigurator(settings, this)); } QString VpnConfigurator::genVpnProtocolConfig(const ServerCredentials &credentials, diff --git a/client/configurators/vpn_configurator.h b/client/configurators/vpn_configurator.h index 47bdc1fd..5d0fcfee 100644 --- a/client/configurators/vpn_configurator.h +++ b/client/configurators/vpn_configurator.h @@ -19,8 +19,7 @@ class VpnConfigurator : ConfiguratorBase { Q_OBJECT public: - VpnConfigurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + VpnConfigurator(std::shared_ptr settings, QObject *parent = nullptr); QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, Proto proto, ErrorCode *errorCode = nullptr); @@ -35,8 +34,6 @@ public: void updateContainerConfigAfterInstallation(DockerContainer container, QJsonObject &containerConfig, const QString &stdOut); - std::shared_ptr m_serverController; - std::shared_ptr openVpnConfigurator; std::shared_ptr shadowSocksConfigurator; std::shared_ptr cloakConfigurator; diff --git a/client/configurators/wireguard_configurator.cpp b/client/configurators/wireguard_configurator.cpp index 4c22dc62..f7ab1657 100644 --- a/client/configurators/wireguard_configurator.cpp +++ b/client/configurators/wireguard_configurator.cpp @@ -21,8 +21,8 @@ #include "core/servercontroller.h" #include "settings.h" -WireguardConfigurator::WireguardConfigurator(std::shared_ptr settings, std::shared_ptr serverController, QObject *parent): - ConfiguratorBase(settings, serverController, parent) +WireguardConfigurator::WireguardConfigurator(std::shared_ptr settings, QObject *parent): + ConfiguratorBase(settings, parent) { } @@ -70,6 +70,7 @@ WireguardConfigurator::ConnectionData WireguardConfigurator::prepareWireguardCon } ErrorCode e = ErrorCode::NoError; + ServerController serverController(m_settings); // Get list of already created clients (only IP addreses) QString nextIpNumber; @@ -81,7 +82,7 @@ WireguardConfigurator::ConnectionData WireguardConfigurator::prepareWireguardCon return ErrorCode::NoError; }; - e = m_serverController->runContainerScript(credentials, container, script, cbReadStdOut); + e = serverController.runContainerScript(credentials, container, script, cbReadStdOut); if (errorCode && e) { *errorCode = e; return connData; @@ -119,14 +120,14 @@ WireguardConfigurator::ConnectionData WireguardConfigurator::prepareWireguardCon } // Get keys - connData.serverPubKey = m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::wireguard::serverPublicKeyPath, &e); + connData.serverPubKey = serverController.getTextFileFromContainer(container, credentials, amnezia::protocols::wireguard::serverPublicKeyPath, &e); connData.serverPubKey.replace("\n", ""); if (e) { if (errorCode) *errorCode = e; return connData; } - connData.pskKey = m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::wireguard::serverPskKeyPath, &e); + connData.pskKey = serverController.getTextFileFromContainer(container, credentials, amnezia::protocols::wireguard::serverPskKeyPath, &e); connData.pskKey.replace("\n", ""); if (e) { @@ -144,7 +145,7 @@ WireguardConfigurator::ConnectionData WireguardConfigurator::prepareWireguardCon arg(connData.pskKey). arg(connData.clientIP); - e = m_serverController->uploadTextFileToContainer(container, credentials, configPart, + e = serverController.uploadTextFileToContainer(container, credentials, configPart, protocols::wireguard::serverConfigPath, libssh::SftpOverwriteMode::SftpAppendToExisting); if (e) { @@ -152,9 +153,9 @@ WireguardConfigurator::ConnectionData WireguardConfigurator::prepareWireguardCon return connData; } - e = m_serverController->runScript(credentials, - m_serverController->replaceVars("sudo docker exec -i $CONTAINER_NAME bash -c 'wg syncconf wg0 <(wg-quick strip /opt/amnezia/wireguard/wg0.conf)'", - m_serverController->genVarsForScript(credentials, container))); + e = serverController.runScript(credentials, + serverController.replaceVars("sudo docker exec -i $CONTAINER_NAME bash -c 'wg syncconf wg0 <(wg-quick strip /opt/amnezia/wireguard/wg0.conf)'", + serverController.genVarsForScript(credentials, container))); return connData; } @@ -162,8 +163,9 @@ WireguardConfigurator::ConnectionData WireguardConfigurator::prepareWireguardCon QString WireguardConfigurator::genWireguardConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode) { - QString config = m_serverController->replaceVars(amnezia::scriptData(ProtocolScriptType::wireguard_template, container), - m_serverController->genVarsForScript(credentials, container, containerConfig)); + ServerController serverController(m_settings); + QString config = serverController.replaceVars(amnezia::scriptData(ProtocolScriptType::wireguard_template, container), + serverController.genVarsForScript(credentials, container, containerConfig)); ConnectionData connData = prepareWireguardConfig(credentials, container, containerConfig, errorCode); if (errorCode && *errorCode) { diff --git a/client/configurators/wireguard_configurator.h b/client/configurators/wireguard_configurator.h index 76790d74..ab903d29 100644 --- a/client/configurators/wireguard_configurator.h +++ b/client/configurators/wireguard_configurator.h @@ -11,8 +11,7 @@ class WireguardConfigurator : ConfiguratorBase { Q_OBJECT public: - WireguardConfigurator(std::shared_ptr settings, - std::shared_ptr serverController, QObject *parent = nullptr); + WireguardConfigurator(std::shared_ptr settings, QObject *parent = nullptr); struct ConnectionData { QString clientPrivKey; // client private key diff --git a/client/core/servercontroller.cpp b/client/core/servercontroller.cpp index 03ecf86d..0963f0e1 100644 --- a/client/core/servercontroller.cpp +++ b/client/core/servercontroller.cpp @@ -39,6 +39,7 @@ ServerController::ServerController(std::shared_ptr settings, QObject * ServerController::~ServerController() { + m_sshClient.disconnectFromHost(); } @@ -629,11 +630,6 @@ void ServerController::setCancelInstallation(const bool cancel) m_cancelInstallation = cancel; } -void ServerController::disconnectFromHost(const ServerCredentials &credentials) -{ - m_sshClient.disconnectFromHost(); -} - ErrorCode ServerController::setupServerFirewall(const ServerCredentials &credentials) { return runScript(credentials, diff --git a/client/core/servercontroller.h b/client/core/servercontroller.h index 99ae3cd6..431104e7 100644 --- a/client/core/servercontroller.h +++ b/client/core/servercontroller.h @@ -22,8 +22,6 @@ public: typedef QList> Vars; - void disconnectFromHost(const ServerCredentials &credentials); - ErrorCode removeAllContainers(const ServerCredentials &credentials); ErrorCode removeContainer(const ServerCredentials &credentials, DockerContainer container); ErrorCode setupContainer(const ServerCredentials &credentials, DockerContainer container, diff --git a/client/ui/pages_logic/AdvancedServerSettingsLogic.cpp b/client/ui/pages_logic/AdvancedServerSettingsLogic.cpp index 187af9ee..71d9567e 100644 --- a/client/ui/pages_logic/AdvancedServerSettingsLogic.cpp +++ b/client/ui/pages_logic/AdvancedServerSettingsLogic.cpp @@ -44,10 +44,11 @@ void AdvancedServerSettingsLogic::onPushButtonClearServerClicked() uiLogic()->pageLogic()->onDisconnect(); } - ErrorCode e = m_serverController->removeAllContainers(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex)); - if (e) { + ServerController serverController(m_settings); + ErrorCode errorCode = serverController.removeAllContainers(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex)); + if (errorCode) { emit uiLogic()->showWarningMessage(tr("Error occurred while cleaning the server.") + "\n" + - tr("Error message: ") + errorString(e) + "\n" + + tr("Error message: ") + errorString(errorCode) + "\n" + tr("See logs for details.")); } else { set_labelWaitInfoVisible(true); diff --git a/client/ui/pages_logic/PageLogicBase.cpp b/client/ui/pages_logic/PageLogicBase.cpp index 9274ef49..05c4e3a1 100644 --- a/client/ui/pages_logic/PageLogicBase.cpp +++ b/client/ui/pages_logic/PageLogicBase.cpp @@ -11,7 +11,6 @@ PageLogicBase::PageLogicBase(UiLogic *logic, QObject *parent): { m_settings = logic->m_settings; m_configurator = logic->m_configurator; - m_serverController = logic->m_serverController; } diff --git a/client/ui/pages_logic/PageLogicBase.h b/client/ui/pages_logic/PageLogicBase.h index 887b0ec7..6616de9d 100644 --- a/client/ui/pages_logic/PageLogicBase.h +++ b/client/ui/pages_logic/PageLogicBase.h @@ -28,7 +28,6 @@ protected: std::shared_ptr m_settings; std::shared_ptr m_configurator; - std::shared_ptr m_serverController; signals: void updatePage(); diff --git a/client/ui/pages_logic/ServerConfiguringProgressLogic.cpp b/client/ui/pages_logic/ServerConfiguringProgressLogic.cpp index f6a8abdb..9874837f 100644 --- a/client/ui/pages_logic/ServerConfiguringProgressLogic.cpp +++ b/client/ui/pages_logic/ServerConfiguringProgressLogic.cpp @@ -96,19 +96,18 @@ ErrorCode ServerConfiguringProgressLogic::doInstallAction(const std::functionremoveContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), container); + ServerController serverController(m_settings); + ErrorCode e = serverController.removeContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), container); m_settings->removeContainerConfig(uiLogic()->m_selectedServerIndex, container); //buttonSetEnabledFunc(true); @@ -84,7 +85,8 @@ void ServerContainersLogic::onPushButtonRemoveClicked(DockerContainer container) void ServerContainersLogic::onPushButtonContinueClicked(DockerContainer c, int port, TransportProto tp) { - QJsonObject config = m_serverController->createContainerInitialConfig(c, port, tp); + ServerController serverController(m_settings); + QJsonObject config = serverController.createContainerInitialConfig(c, port, tp); emit uiLogic()->goToPage(Page::ServerConfiguringProgress); qApp->processEvents(); @@ -95,7 +97,8 @@ void ServerContainersLogic::onPushButtonContinueClicked(DockerContainer c, int p if (errorCode == ErrorCode::NoError) { if (!uiLogic()->isContainerAlreadyAddedToGui(c)) { auto installAction = [this, c, &config]() { - return m_serverController->setupContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), c, config); + ServerController serverController(m_settings); + return serverController.setupContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), c, config); }; errorCode = uiLogic()->pageLogic()->doInstallAction(installAction); diff --git a/client/ui/pages_logic/StartPageLogic.cpp b/client/ui/pages_logic/StartPageLogic.cpp index cddd6d40..6708a276 100644 --- a/client/ui/pages_logic/StartPageLogic.cpp +++ b/client/ui/pages_logic/StartPageLogic.cpp @@ -131,10 +131,11 @@ void StartPageLogic::onPushButtonConnect() set_pushButtonConnectEnabled(false); set_pushButtonConnectText(tr("Connecting...")); + ServerController serverController(m_settings); ErrorCode errorCode = ErrorCode::NoError; if (pushButtonConnectKeyChecked()) { - auto passphraseCallback = [this]() { + auto passphraseCallback = [this, &serverController]() { emit showPassphraseRequestMessage(); QEventLoop loop; QObject::connect(this, &StartPageLogic::passphraseDialogClosed, &loop, &QEventLoop::quit); @@ -142,14 +143,14 @@ void StartPageLogic::onPushButtonConnect() return m_privateKeyPassphrase; }; - m_serverController->setPassphraseCallback(passphraseCallback); + serverController.setPassphraseCallback(passphraseCallback); } - QString output = m_serverController->checkSshConnection(serverCredentials, &errorCode); + QString output = serverController.checkSshConnection(serverCredentials, &errorCode); if (pushButtonConnectKeyChecked()) { QString decryptedPrivateKey; - errorCode = uiLogic()->m_serverController->getDecryptedPrivateKey(serverCredentials, decryptedPrivateKey); + errorCode = serverController.getDecryptedPrivateKey(serverCredentials, decryptedPrivateKey); if (errorCode == ErrorCode::NoError) { serverCredentials.password = decryptedPrivateKey; } diff --git a/client/ui/pages_logic/protocols/CloakLogic.cpp b/client/ui/pages_logic/protocols/CloakLogic.cpp index d62f8624..3256de87 100644 --- a/client/ui/pages_logic/protocols/CloakLogic.cpp +++ b/client/ui/pages_logic/protocols/CloakLogic.cpp @@ -112,15 +112,16 @@ void CloakLogic::onPushButtonSaveClicked() progressBarFunc.setTextVisibleFunc(true); progressBarFunc.setTextFunc(QString("Configuring...")); - ErrorCode e = uiLogic()->pageLogic()->doInstallAction([this, containerConfig, &newContainerConfig](){ - return m_serverController->updateContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), - uiLogic()->m_selectedDockerContainer, - containerConfig, - newContainerConfig); - }, - pageFunc, progressBarFunc, - saveButtonFunc, waitInfoFunc, - busyInfoFuncy, cancelButtonFunc); + + auto installAction = [this, containerConfig, &newContainerConfig]() { + ServerController serverController(m_settings); + return serverController.updateContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), + uiLogic()->m_selectedDockerContainer, containerConfig, newContainerConfig); + }; + + ErrorCode e = uiLogic()->pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, + saveButtonFunc, waitInfoFunc, + busyInfoFuncy, cancelButtonFunc); if (!e) { m_settings->setContainerConfig(uiLogic()->m_selectedServerIndex, uiLogic()->m_selectedDockerContainer, newContainerConfig); diff --git a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp index d5deecf3..fe3a2ed6 100644 --- a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp +++ b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp @@ -162,15 +162,16 @@ void OpenVpnLogic::onPushButtonSaveClicked() progressBarFunc.setTextVisibleFunc(true); progressBarFunc.setTextFunc(QString("Configuring...")); - ErrorCode e = uiLogic()->pageLogic()->doInstallAction([this, containerConfig, &newContainerConfig](){ - return m_serverController->updateContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), - uiLogic()->m_selectedDockerContainer, - containerConfig, - newContainerConfig); - }, - pageFunc, progressBarFunc, - saveButtonFunc, waitInfoFunc, - busyInfoFuncy, cancelButtonFunc); + + auto installAction = [this, containerConfig, &newContainerConfig]() { + ServerController serverController(m_settings); + return serverController.updateContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), + uiLogic()->m_selectedDockerContainer, containerConfig, newContainerConfig); + }; + + ErrorCode e = uiLogic()->pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, + saveButtonFunc, waitInfoFunc, + busyInfoFuncy, cancelButtonFunc); if (!e) { m_settings->setContainerConfig(uiLogic()->m_selectedServerIndex, uiLogic()->m_selectedDockerContainer, newContainerConfig); diff --git a/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp b/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp index 708073a6..b1d75b8b 100644 --- a/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp +++ b/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp @@ -104,8 +104,10 @@ void ShadowSocksLogic::onPushButtonSaveClicked() progressBarFunc.setTextVisibleFunc(true); progressBarFunc.setTextFunc(QString("Configuring...")); + auto installAction = [this, containerConfig, &newContainerConfig]() { - return m_serverController->updateContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), + ServerController serverController(m_settings); + return serverController.updateContainer(m_settings->serverCredentials(uiLogic()->m_selectedServerIndex), uiLogic()->m_selectedDockerContainer, containerConfig, newContainerConfig); }; ErrorCode e = uiLogic()->pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, diff --git a/client/ui/uilogic.cpp b/client/ui/uilogic.cpp index 2b66d6c9..52f3bbc0 100644 --- a/client/ui/uilogic.cpp +++ b/client/ui/uilogic.cpp @@ -78,16 +78,14 @@ using namespace amnezia; using namespace PageEnumNS; UiLogic::UiLogic(std::shared_ptr settings, std::shared_ptr configurator, - std::shared_ptr serverController, QObject *parent) : QObject(parent), m_settings(settings), - m_configurator(configurator), - m_serverController(serverController) + m_configurator(configurator) { m_containersModel = new ContainersModel(settings, this); m_protocolsModel = new ProtocolsModel(settings, this); - m_vpnConnection = new VpnConnection(settings, configurator, serverController); + m_vpnConnection = new VpnConnection(settings, configurator); m_vpnConnection->moveToThread(&m_vpnConnectionThread); m_vpnConnectionThread.start(); @@ -337,7 +335,8 @@ void UiLogic::installServer(QPair &container) if (!isContainerAlreadyAddedToGui(container.first)) { progressBarFunc.setTextFunc(QString("Installing %1").arg(ContainerProps::containerToString(container.first))); auto installAction = [&] () { - return m_serverController->setupContainer(m_installCredentials, container.first, container.second); + ServerController serverController(m_settings); + return serverController.setupContainer(m_installCredentials, container.first, container.second); }; errorCode = pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, noButton, waitInfoFunc, @@ -531,7 +530,8 @@ ErrorCode UiLogic::addAlreadyInstalledContainersGui(bool createNewServer, bool & } QMap installedContainers; - ErrorCode errorCode = m_serverController->getAlreadyInstalledContainers(credentials, installedContainers); + ServerController serverController(m_settings); + ErrorCode errorCode = serverController.getAlreadyInstalledContainers(credentials, installedContainers); if (errorCode != ErrorCode::NoError) { return errorCode; } diff --git a/client/ui/uilogic.h b/client/ui/uilogic.h index 3a5559f2..e4eb9185 100644 --- a/client/ui/uilogic.h +++ b/client/ui/uilogic.h @@ -67,8 +67,7 @@ class UiLogic : public QObject READONLY_PROPERTY(QObject *, protocolsModel) public: - explicit UiLogic(std::shared_ptr settings, std::shared_ptr configurator, - std::shared_ptr serverController, QObject *parent = nullptr); + explicit UiLogic(std::shared_ptr settings, std::shared_ptr configurator, QObject *parent = nullptr); ~UiLogic(); void showOnStartup(); @@ -180,7 +179,6 @@ private: std::shared_ptr m_settings; std::shared_ptr m_configurator; - std::shared_ptr m_serverController; NotificationHandler* m_notificationHandler; diff --git a/client/vpnconnection.cpp b/client/vpnconnection.cpp index 21643ae5..c9e97e03 100644 --- a/client/vpnconnection.cpp +++ b/client/vpnconnection.cpp @@ -30,11 +30,9 @@ #include "vpnconnection.h" VpnConnection::VpnConnection(std::shared_ptr settings, - std::shared_ptr configurator, - std::shared_ptr serverController, QObject* parent) : QObject(parent), + std::shared_ptr configurator, QObject* parent) : QObject(parent), m_settings(settings), m_configurator(configurator), - m_serverController(serverController), m_isIOSConnected(false) { } diff --git a/client/vpnconnection.h b/client/vpnconnection.h index ab8f2de0..8dea7478 100644 --- a/client/vpnconnection.h +++ b/client/vpnconnection.h @@ -33,8 +33,7 @@ class VpnConnection : public QObject public: explicit VpnConnection(std::shared_ptr settings, - std::shared_ptr configurator, - std::shared_ptr serverController, QObject* parent = nullptr); + std::shared_ptr configurator, QObject* parent = nullptr); ~VpnConnection() override; static QString bytesPerSecToText(quint64 bytes); @@ -96,7 +95,6 @@ protected: private: std::shared_ptr m_settings; std::shared_ptr m_configurator; - std::shared_ptr m_serverController; QJsonObject m_vpnConfiguration; QJsonObject m_routeMode;