Skip to content

Commit

Permalink
added reconnection to vpn after changing any protocol settings
Browse files Browse the repository at this point in the history
  • Loading branch information
Nethius committed Sep 17, 2023
1 parent bfc8c10 commit c0cb5b9
Show file tree
Hide file tree
Showing 11 changed files with 33 additions and 79 deletions.
4 changes: 2 additions & 2 deletions client/amnezia_application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,8 +336,8 @@ void AmneziaApplication::initControllers()
&PageController::showPassphraseRequestDrawer);
connect(m_pageController.get(), &PageController::passphraseRequestDrawerClosed, m_installController.get(),
&InstallController::setEncryptedPassphrase);
connect(m_installController.get(), &InstallController::currentContainerChanged, m_connectionController.get(),
&ConnectionController::onCurrentContainerChanged);
connect(m_installController.get(), &InstallController::currentContainerUpdated, m_connectionController.get(),
&ConnectionController::onCurrentContainerUpdated);

m_importController.reset(new ImportController(m_serversModel, m_containersModel, m_settings));
m_engine->rootContext()->setContextProperty("ImportController", m_importController.get());
Expand Down
8 changes: 5 additions & 3 deletions client/core/servercontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,11 +290,13 @@ ErrorCode ServerController::setupContainer(const ServerCredentials &credentials,
return startupContainerWorker(credentials, container, config);
}

ErrorCode ServerController::updateContainer(const bool reinstallRequired,
const ServerCredentials &credentials,
DockerContainer container,
ErrorCode ServerController::updateContainer(const ServerCredentials &credentials, DockerContainer container,
const QJsonObject &oldConfig, QJsonObject &newConfig)
{
bool reinstallRequired = isReinstallContainerRequired(container, oldConfig, newConfig);
qDebug() << "ServerController::updateContainer for container" << container << "reinstall required is"
<< reinstallRequired;

if (reinstallRequired) {
return setupContainer(credentials, container, newConfig, true);
} else {
Expand Down
11 changes: 4 additions & 7 deletions client/core/servercontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@ class ServerController : public QObject
ErrorCode removeContainer(const ServerCredentials &credentials, DockerContainer container);
ErrorCode setupContainer(const ServerCredentials &credentials, DockerContainer container, QJsonObject &config,
bool isUpdate = false);
ErrorCode updateContainer(const bool reinstallRequired, const ServerCredentials &credentials,
DockerContainer container,
const QJsonObject &oldConfig,
QJsonObject &newConfig);
ErrorCode updateContainer(const ServerCredentials &credentials, DockerContainer container,
const QJsonObject &oldConfig, QJsonObject &newConfig);

ErrorCode getAlreadyInstalledContainers(const ServerCredentials &credentials,
QMap<DockerContainer, QJsonObject> &installedContainers);
Expand Down Expand Up @@ -63,8 +61,6 @@ class ServerController : public QObject
ErrorCode getDecryptedPrivateKey(const ServerCredentials &credentials, QString &decryptedPrivateKey,
const std::function<QString()> &callback);

bool isReinstallContainerRequired(DockerContainer container, const QJsonObject &oldConfig,
const QJsonObject &newConfig);
private:
ErrorCode installDockerWorker(const ServerCredentials &credentials, DockerContainer container);
ErrorCode prepareHostWorker(const ServerCredentials &credentials, DockerContainer container,
Expand All @@ -77,7 +73,8 @@ class ServerController : public QObject

ErrorCode isServerPortBusy(const ServerCredentials &credentials, DockerContainer container,
const QJsonObject &config);

bool isReinstallContainerRequired(DockerContainer container, const QJsonObject &oldConfig,
const QJsonObject &newConfig);
ErrorCode isUserInSudo(const ServerCredentials &credentials, DockerContainer container);
ErrorCode isServerDpkgBusy(const ServerCredentials &credentials, DockerContainer container);

Expand Down
6 changes: 3 additions & 3 deletions client/ui/controllers/connectionController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,10 @@ void ConnectionController::onConnectionStateChanged(Vpn::ConnectionState state)
emit connectionStateChanged();
}

void ConnectionController::onCurrentContainerChanged()
void ConnectionController::onCurrentContainerUpdated()
{
if(m_isConnected || m_isConnectionInProgress) {
emit reconnectWithChangedContainer(tr("Settings updated successfully, Reconnnection..."));
if (m_isConnected || m_isConnectionInProgress) {
emit reconnectWithUpdatedContainer(tr("Settings updated successfully, Reconnnection..."));
openConnection();
}
}
Expand Down
4 changes: 2 additions & 2 deletions client/ui/controllers/connectionController.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public slots:
QString getLastConnectionError();
void onConnectionStateChanged(Vpn::ConnectionState state);

void onCurrentContainerChanged();
void onCurrentContainerUpdated();

signals:
void connectToVpn(int serverIndex, const ServerCredentials &credentials, DockerContainer container,
Expand All @@ -41,7 +41,7 @@ public slots:
void connectionStateChanged();

void connectionErrorOccurred(const QString &errorMessage);
void reconnectWithChangedContainer(const QString &message);
void reconnectWithUpdatedContainer(const QString &message);

private:
QSharedPointer<ServersModel> m_serversModel;
Expand Down
16 changes: 4 additions & 12 deletions client/ui/controllers/installController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,22 +254,14 @@ void InstallController::updateContainer(QJsonObject config)
ServerController serverController(m_settings);
connect(&serverController, &ServerController::serverIsBusy, this, &InstallController::serverIsBusy);

bool reinstallRequired = serverController.isReinstallContainerRequired(container, oldContainerConfig, config);
auto errorCode = serverController.updateContainer(reinstallRequired, serverCredentials, container, oldContainerConfig, config);
auto errorCode = serverController.updateContainer(serverCredentials, container, oldContainerConfig, config);
if (errorCode == ErrorCode::NoError) {
m_containersModel->setData(modelIndex, config, ContainersModel::Roles::ConfigRole);
m_protocolModel->updateModel(config);

bool isCurrentContainerChanged = false;
if (reinstallRequired &&
(serverIndex == m_serversModel->getDefaultServerIndex()) &&
(container == m_containersModel->getDefaultContainer()) ) {
isCurrentContainerChanged = true;
}


if (isCurrentContainerChanged) {
emit currentContainerChanged();
if ((serverIndex == m_serversModel->getDefaultServerIndex())
&& (container == m_containersModel->getDefaultContainer())) {
emit currentContainerUpdated();
} else {
emit updateContainerFinished(tr("Settings updated successfully"));
}
Expand Down
2 changes: 1 addition & 1 deletion client/ui/controllers/installController.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public slots:

void serverIsBusy(const bool isBusy);

void currentContainerChanged();
void currentContainerUpdated();

private:
void installServer(DockerContainer container, QJsonObject &config);
Expand Down
16 changes: 0 additions & 16 deletions client/ui/qml/Pages2/PageProtocolCloakSettings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,6 @@ import "../Components"
PageType {
id: root

Connections {
target: ConnectionController

function onReconnectWithChangedContainer(message) {
PageController.showNotificationMessage(message)
}
}

Connections {
target: InstallController

function onUpdateContainerFinished(message) {
PageController.showNotificationMessage(message)
}
}

ColumnLayout {
id: backButton

Expand Down
16 changes: 0 additions & 16 deletions client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,6 @@ import "../Components"
PageType {
id: root

Connections {
target: ConnectionController

function onReconnectWithChangedContainer(message) {
PageController.showNotificationMessage(message)
}
}

Connections {
target: InstallController

function onUpdateContainerFinished(message) {
PageController.showNotificationMessage(message)
}
}

ColumnLayout {
id: backButton

Expand Down
17 changes: 0 additions & 17 deletions client/ui/qml/Pages2/PageProtocolShadowSocksSettings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,6 @@ import "../Components"
PageType {
id: root


Connections {
target: ConnectionController

function onReconnectWithChangedContainer(message) {
PageController.showNotificationMessage(message)
}
}

Connections {
target: InstallController

function onUpdateContainerFinished(message) {
PageController.showNotificationMessage(message)
}
}

ColumnLayout {
id: backButton

Expand Down
12 changes: 12 additions & 0 deletions client/ui/qml/Pages2/PageStart.qml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,18 @@ PageType {
PageController.closePage()
}
}

function onUpdateContainerFinished(message) {
PageController.showNotificationMessage(message)
}
}

Connections {
target: ConnectionController

function onReconnectWithUpdatedContainer(message) {
PageController.showNotificationMessage(message)
}
}

StackViewType {
Expand Down

0 comments on commit c0cb5b9

Please sign in to comment.