diff --git a/client/core/servercontroller.cpp b/client/core/servercontroller.cpp
index 0304a28f..e27f6ff8 100644
--- a/client/core/servercontroller.cpp
+++ b/client/core/servercontroller.cpp
@@ -364,25 +364,31 @@ ErrorCode ServerController::removeContainer(const ServerCredentials &credentials
ErrorCode ServerController::setupContainer(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &config)
{
qDebug().noquote() << "ServerController::setupContainer" << containerToString(container);
- qDebug().noquote() << QJsonDocument(config).toJson();
+ //qDebug().noquote() << QJsonDocument(config).toJson();
ErrorCode e = ErrorCode::NoError;
e = installDockerWorker(credentials, container);
if (e) return e;
+ qDebug().noquote() << "ServerController::setupContainer installDockerWorker finished";
e = prepareHostWorker(credentials, container, config);
if (e) return e;
+ qDebug().noquote() << "ServerController::setupContainer prepareHostWorker finished";
removeContainer(credentials, container);
+ qDebug().noquote() << "ServerController::setupContainer removeContainer finished";
e = buildContainerWorker(credentials, container, config);
if (e) return e;
+ qDebug().noquote() << "ServerController::setupContainer buildContainerWorker finished";
e = runContainerWorker(credentials, container, config);
if (e) return e;
+ qDebug().noquote() << "ServerController::setupContainer runContainerWorker finished";
e = configureContainerWorker(credentials, container, config);
if (e) return e;
+ qDebug().noquote() << "ServerController::setupContainer configureContainerWorker finished";
return startupContainerWorker(credentials, container, config);
}
diff --git a/client/defines.h b/client/defines.h
index ae54ddfd..6e38e9be 100644
--- a/client/defines.h
+++ b/client/defines.h
@@ -4,7 +4,7 @@
#define APPLICATION_NAME "AmneziaVPN"
#define SERVICE_NAME "AmneziaVPN-service"
#define ORGANIZATION_NAME "AmneziaVPN.ORG"
-#define APP_MAJOR_VERSION "1.7.5"
-#define APP_VERSION "1.7.5.3"
+#define APP_MAJOR_VERSION "1.7.6"
+#define APP_VERSION "1.7.6.1"
#endif // DEFINES_H
diff --git a/client/server_scripts/openvpn_cloak/Dockerfile b/client/server_scripts/openvpn_cloak/Dockerfile
index fe02f60f..358dfd99 100644
--- a/client/server_scripts/openvpn_cloak/Dockerfile
+++ b/client/server_scripts/openvpn_cloak/Dockerfile
@@ -16,6 +16,10 @@ RUN chmod a+x /opt/amnezia/start.sh
RUN curl -L https://github.com/cbeuw/Cloak/releases/download/v2.5.3/ck-server-linux-amd64-v2.5.3 > /usr/bin/ck-server
RUN chmod a+x /usr/bin/ck-server
+RUN curl -L https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.10.9/shadowsocks-v1.10.9.x86_64-unknown-linux-musl.tar.xz > /usr/bin/ss.tar.xz
+RUN tar -Jxvf /usr/bin/ss.tar.xz -C /usr/bin/
+RUN chmod a+x /usr/bin/ssserver
+
# Tune network
RUN echo -e " \n\
fs.file-max = 51200 \n\
diff --git a/client/server_scripts/openvpn_cloak/configure_container.sh b/client/server_scripts/openvpn_cloak/configure_container.sh
index 4a564b0a..6576a9d3 100644
--- a/client/server_scripts/openvpn_cloak/configure_container.sh
+++ b/client/server_scripts/openvpn_cloak/configure_container.sh
@@ -37,9 +37,13 @@ echo $CLOAK_PRIVATE_KEY > /opt/amnezia/cloak/cloak_private.key; \
echo -e "{\\n\
\"ProxyBook\": {\\n\
\"openvpn\": [\\n\
- \"$OPENVPN_TRANSPORT_PROTO\",\\n\
- \"localhost:$OPENVPN_PORT\"\\n\
- ]\\n\
+ \"$OPENVPN_TRANSPORT_PROTO\",\\n\
+ \"localhost:$OPENVPN_PORT\"\\n\
+ ],\\n\
+ \"shadowsocks\": [\\n\
+ \"tcp\",\\n\
+ \"localhost:$SHADOWSOCKS_SERVER_PORT\"\\n\
+ ]\\n\
},\\n\
\"BypassUID\": [\\n\
\"$CLOAK_BYPASS_UID\"\\n\
@@ -51,3 +55,17 @@ echo -e "{\\n\
\"DatabasePath\": \"userinfo.db\",\\n\
\"StreamTimeout\": 300\\n\
}" >/opt/amnezia/cloak/ck-config.json'
+
+# ShadowSocks config
+sudo docker exec -i $CONTAINER_NAME bash -c '\
+mkdir -p /opt/amnezia/shadowsocks; \
+cd /opt/amnezia/shadowsocks || exit 1; \
+SHADOWSOCKS_PASSWORD=$(openssl rand -base64 32 | tr "=" "A" | tr "+" "A" | tr "/" "A") && echo $SHADOWSOCKS_PASSWORD > /opt/amnezia/shadowsocks/shadowsocks.key; \
+echo -e "{\\n\
+ \"local_port\": 8585,\\n\
+ \"method\": \"$SHADOWSOCKS_CIPHER\",\\n\
+ \"password\": \"$SHADOWSOCKS_PASSWORD\",\\n\
+ \"server\": \"0.0.0.0\",\\n\
+ \"server_port\": $SHADOWSOCKS_SERVER_PORT,\\n\
+ \"timeout\": 60\\n\
+}" >/opt/amnezia/shadowsocks/ss-config.json'
diff --git a/client/server_scripts/openvpn_cloak/start.sh b/client/server_scripts/openvpn_cloak/start.sh
index a9b7a8c5..5b078ca6 100644
--- a/client/server_scripts/openvpn_cloak/start.sh
+++ b/client/server_scripts/openvpn_cloak/start.sh
@@ -21,9 +21,11 @@ iptables -t nat -A POSTROUTING -s $OPENVPN_SUBNET_IP/$OPENVPN_SUBNET_CIDR -o eth
# kill daemons in case of restart
killall -KILL openvpn
killall -KILL ck-server
+killall -KILL ssserver
# start daemons if configured
if [ -f /opt/amnezia/openvpn/ca.crt ]; then (openvpn --config /opt/amnezia/openvpn/server.conf --daemon); fi
+if [ -f /opt/amnezia/shadowsocks/ss-config.json ]; then (ssserver -c /opt/amnezia/shadowsocks/ss-config.json &); fi
if [ -f /opt/amnezia/cloak/ck-config.json ]; then (ck-server -c /opt/amnezia/cloak/ck-config.json &); fi
tail -f /dev/null
diff --git a/client/server_scripts/openvpn_shadowsocks/configure_container.sh b/client/server_scripts/openvpn_shadowsocks/configure_container.sh
index ba34520d..b04f1ca8 100644
--- a/client/server_scripts/openvpn_shadowsocks/configure_container.sh
+++ b/client/server_scripts/openvpn_shadowsocks/configure_container.sh
@@ -25,7 +25,7 @@ tls-server \\n\
tls-version-min 1.2 \\n\
$OPENVPN_TLS_AUTH" >/opt/amnezia/openvpn/server.conf'
-# Cloak config
+# ShadowSocks config
sudo docker exec -i $CONTAINER_NAME bash -c '\
mkdir -p /opt/amnezia/shadowsocks; \
cd /opt/amnezia/shadowsocks || exit 1; \
diff --git a/client/server_scripts/openvpn_shadowsocks/start.sh b/client/server_scripts/openvpn_shadowsocks/start.sh
index 1b75b968..48e7b6f8 100644
--- a/client/server_scripts/openvpn_shadowsocks/start.sh
+++ b/client/server_scripts/openvpn_shadowsocks/start.sh
@@ -25,4 +25,5 @@ killall -KILL ssserver
# start daemons if configured
if [ -f /opt/amnezia/openvpn/ca.crt ]; then (openvpn --config /opt/amnezia/openvpn/server.conf --daemon); fi
if [ -f /opt/amnezia/shadowsocks/ss-config.json ]; then (ssserver -c /opt/amnezia/shadowsocks/ss-config.json &); fi
+
tail -f /dev/null
diff --git a/client/ui/mainwindow.cpp b/client/ui/mainwindow.cpp
index 4085b306..b0e61e89 100644
--- a/client/ui/mainwindow.cpp
+++ b/client/ui/mainwindow.cpp
@@ -57,6 +57,10 @@ MainWindow::MainWindow(QWidget *parent) :
{
ui->setupUi(this);
+ ui->frame_wireguard_settings->hide();
+ ui->frame_wireguard->hide();
+ ui->frame_new_server_settings_parent_wireguard->hide();
+
setupTray();
setupUiConnections();
setupNewServerConnections();
@@ -1216,7 +1220,7 @@ void MainWindow::setupAppSettingsConnections()
connect(ui->pushButton_app_settings_open_logs, &QPushButton::clicked, this, [this](){
Debug::openLogsFolder();
- QDesktopServices::openUrl(QUrl::fromLocalFile(Utils::systemLogPath()));
+ //QDesktopServices::openUrl(QUrl::fromLocalFile(Utils::systemLogPath()));
});
}
@@ -1566,6 +1570,17 @@ void MainWindow::setupSharePageConnections()
});
});
+ connect(ui->pushButton_share_full_save, &QPushButton::clicked, this, [this](){
+ if (ui->textEdit_share_full_code->toPlainText().isEmpty()) return;
+
+ QString fileName = QFileDialog::getSaveFileName(this, tr("Save AmneziaVPN config"),
+ QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.amnezia");
+ QSaveFile save(fileName);
+ save.open(QIODevice::WriteOnly);
+ save.write(ui->textEdit_share_full_code->toPlainText().toUtf8());
+ save.commit();
+ });
+
connect(ui->pushButton_share_amnezia_copy, &QPushButton::clicked, this, [this](){
if (ui->textEdit_share_amnezia_code->toPlainText().isEmpty()) return;
@@ -1606,14 +1621,14 @@ void MainWindow::setupSharePageConnections()
});
});
-// connect(ui->pushButton_share_cloak_copy, &QPushButton::clicked, this, [this](){
-// QGuiApplication::clipboard()->setText(ui->textEdit_share_openvpn_code->toPlainText());
-// ui->pushButton_share_cloak_copy->setText(tr("Copied"));
+ connect(ui->pushButton_share_cloak_copy, &QPushButton::clicked, this, [this](){
+ QGuiApplication::clipboard()->setText(ui->plainTextEdit_share_cloak->toPlainText());
+ ui->pushButton_share_cloak_copy->setText(tr("Copied"));
-// QTimer::singleShot(3000, this, [this]() {
-// ui->pushButton_share_cloak_copy->setText(tr("Copy"));
-// });
-// });
+ QTimer::singleShot(3000, this, [this]() {
+ ui->pushButton_share_cloak_copy->setText(tr("Copy"));
+ });
+ });
connect(ui->pushButton_share_amnezia_generate, &QPushButton::clicked, this, [this](){
ui->pushButton_share_amnezia_generate->setEnabled(false);
@@ -2129,22 +2144,11 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre
ui->pushButton_share_openvpn_copy->setEnabled(false);
ui->pushButton_share_openvpn_save->setEnabled(false);
-// QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, Protocol::OpenVpn);
-// QString cfg = protoConfig.value(config_key::last_config).toString();
-// if (!cfg.isEmpty()) {
-// // TODO add redirect-gateway def1 bypass-dhcp here and on click Generate config
-// ui->textEdit_share_openvpn_code->setPlainText(cfg);
-// }
-// else {
-// cfg = tr("Press Generate config");
-// ui->textEdit_share_openvpn_code->setPlainText(cfg);
-// ui->pushButton_share_openvpn_copy->setEnabled(false);
-// ui->pushButton_share_openvpn_save->setEnabled(false);
-// }
ui->toolBox_share_connection->setCurrentWidget(ui->page_share_openvpn);
}
- if (container == DockerContainer::OpenVpnOverShadowSocks) {
+ if (container == DockerContainer::OpenVpnOverShadowSocks ||
+ container == DockerContainer::OpenVpnOverCloak) {
ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client"));
ui->toolBox_share_connection->addItem(ui->page_share_shadowsocks, tr(" Share for ShadowSocks client"));
@@ -2185,7 +2189,27 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre
}
if (container == DockerContainer::OpenVpnOverCloak) {
- ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client"));
+ //ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client"));
+ ui->toolBox_share_connection->addItem(ui->page_share_cloak, tr(" Share for Cloak client"));
+ ui->plainTextEdit_share_cloak->setPlainText(QString(""));
+
+ QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, Protocol::Cloak);
+ QString cfg = protoConfig.value(config_key::last_config).toString();
+
+ if (cfg.isEmpty()) {
+ const QJsonObject &containerConfig = m_settings.containerConfig(serverIndex, container);
+
+ ErrorCode e = ErrorCode::NoError;
+ cfg = CloakConfigurator::genCloakConfig(credentials, container, containerConfig, &e);
+
+ ui->pushButton_share_cloak_copy->setEnabled(true);
+ }
+
+ QJsonObject cloakConfig = QJsonDocument::fromJson(cfg.toUtf8()).object();
+ cloakConfig.remove(config_key::transport_proto);
+ cloakConfig.insert("ProxyMethod", "shadowsocks");
+
+ ui->plainTextEdit_share_cloak->setPlainText(QJsonDocument(cloakConfig).toJson());
}
// Full access
diff --git a/client/ui/mainwindow.ui b/client/ui/mainwindow.ui
index 6fb5b318..09c5b326 100644
--- a/client/ui/mainwindow.ui
+++ b/client/ui/mainwindow.ui
@@ -274,7 +274,7 @@ QPushButton:hover {
- 8
+ 17
@@ -5815,7 +5815,7 @@ QToolBox::tab:hover {
0
- 0
+ 3
6
@@ -5825,8 +5825,8 @@ QToolBox::tab:hover {
0
0
- 100
- 30
+ 360
+ 360
@@ -5884,7 +5884,7 @@ p, li { white-space: pre-wrap; }
10
- 180
+ 260
341
111
@@ -5947,14 +5947,50 @@ background: #282932;
Copy
+
+
+
+ 10
+ 180
+ 341
+ 40
+
+
+
+ PointingHandCursor
+
+
+ QPushButton {
+ font-size: 13pt;
+ font: "Open Sans Semibold";
+ color:rgb(212, 212, 212);
+
+background: #181922;
+border-radius: 4px;
+
+font-family: Lato;
+font-style: normal;
+font-weight: normal;
+font-size: 16px;
+line-height: 21px;
+
+}
+QPushButton:hover {
+background: #282932;
+}
+
+
+ Save file
+
+
0
0
- 100
- 30
+ 360
+ 360
@@ -6149,8 +6185,8 @@ background: #282932;
0
0
- 100
- 30
+ 360
+ 360
@@ -6315,8 +6351,8 @@ background: #282932;
0
0
- 100
- 30
+ 360
+ 360
@@ -6493,10 +6529,10 @@ background: #282932;
- 65
- 250
- 240
- 240
+ 85
+ 235
+ 200
+ 200
@@ -6539,13 +6575,59 @@ color: #15CDCB;
0
0
- 100
- 30
+ 360
+ 360
Share for Cloak client
+
+
+
+ 10
+ 290
+ 331
+ 40
+
+
+
+ PointingHandCursor
+
+
+ QPushButton {
+ font-size: 13pt;
+ font: "Open Sans Semibold";
+ color:rgb(212, 212, 212);
+
+background: #181922;
+border-radius: 4px;
+
+font-family: Lato;
+font-style: normal;
+font-weight: normal;
+font-size: 16px;
+line-height: 21px;
+
+}
+QPushButton:hover {
+background: #282932;
+}
+
+
+ Copy
+
+
+
+
+
+ 10
+ 30
+ 331
+ 221
+
+
+
diff --git a/service/server/tapcontroller_win.cpp b/service/server/tapcontroller_win.cpp
index ec038886..b388997a 100644
--- a/service/server/tapcontroller_win.cpp
+++ b/service/server/tapcontroller_win.cpp
@@ -299,6 +299,7 @@ bool TapController::oldDriversRequired()
{
if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7) return true;
if (QSysInfo::prettyProductName().contains("Server 2008")) return true;
+ if (QSysInfo::prettyProductName().contains("Server 2012")) return true;
return false;
}