win7 support fixes

wizard added
This commit is contained in:
pokamest 2021-05-18 15:50:52 +03:00
parent 45e5ec76dd
commit 4ba964db47
16 changed files with 2043 additions and 467 deletions

View file

@ -203,7 +203,14 @@ QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentia
config.replace("$OPENVPN_CA_CERT", connData.caCert);
config.replace("$OPENVPN_CLIENT_CERT", connData.clientCert);
config.replace("$OPENVPN_PRIV_KEY", connData.privKey);
if (config.contains("$OPENVPN_TA_KEY")) {
config.replace("$OPENVPN_TA_KEY", connData.taKey);
}
else {
config.replace("<tls-auth>", "");
config.replace("</tls-auth>", "");
}
#ifdef Q_OS_MAC
config.replace("block-outside-dns", "");
@ -222,6 +229,11 @@ QString OpenVpnConfigurator::processConfigWithLocalSettings(QString config)
if (m_settings().customRouting()) {
config.replace("redirect-gateway def1 bypass-dhcp", "");
}
else {
if(!config.contains("redirect-gateway def1 bypass-dhcp")) {
config.append("redirect-gateway def1 bypass-dhcp\n");
}
}
#ifdef Q_OS_MAC
config.replace("block-outside-dns", "");

View file

@ -529,9 +529,17 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential
bool isNcpDisabled = openvpnConfig.value(config_key::ncp_disable).toBool(amnezia::protocols::openvpn::defaultNcpDisable);
vars.append({{"$OPENVPN_NCP_DISABLE", isNcpDisabled ? protocols::openvpn::ncpDisableString : "" }});
vars.append({{"$OPENVPN_CIPHER", openvpnConfig.value(config_key::cipher).toString(amnezia::protocols::openvpn::defaultCipher) }});
vars.append({{"$OPENVPN_HASH", openvpnConfig.value(config_key::hash).toString(amnezia::protocols::openvpn::defaultHash) }});
bool isTlsAuth = openvpnConfig.value(config_key::tls_auth).toBool(amnezia::protocols::openvpn::defaultTlsAuth);
vars.append({{"$OPENVPN_TLS_AUTH", isTlsAuth ? protocols::openvpn::tlsAuthString : "" }});
if (!isTlsAuth) {
// erase $OPENVPN_TA_KEY, so it will not set in OpenVpnConfigurator::genOpenVpnConfig
vars.append({{"$OPENVPN_TA_KEY", "" }});
}
// ShadowSocks vars
vars.append({{"$SHADOWSOCKS_SERVER_PORT", ssConfig.value(config_key::port).toString(amnezia::protocols::shadowsocks::defaultPort) }});
vars.append({{"$SHADOWSOCKS_LOCAL_PORT", ssConfig.value(config_key::local_port).toString(amnezia::protocols::shadowsocks::defaultLocalProxyPort) }});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

After

Width:  |  Height:  |  Size: 324 B

Before After
Before After

View file

@ -29,6 +29,7 @@ constexpr char transport_proto[] = "transport_proto";
constexpr char cipher[] = "cipher";
constexpr char hash[] = "hash";
constexpr char ncp_disable[] = "ncp_disable";
constexpr char tls_auth[] = "tls_auth";
constexpr char site[] = "site";
constexpr char block_outside_dns[] = "block_outside_dns";
@ -72,7 +73,9 @@ constexpr char defaultCipher[] = "AES-256-GCM";
constexpr char defaultHash[] = "SHA512";
constexpr bool defaultBlockOutsideDns = true;
constexpr bool defaultNcpDisable = false;
constexpr bool defaultTlsAuth = true;
constexpr char ncpDisableString[] = "ncp-disable";
constexpr char tlsAuthString[] = "tls-auth /opt/amnezia/openvpn/ta.key 0";
}

View file

@ -23,5 +23,5 @@ status openvpn-status.log \\n\
verb 1 \\n\
tls-server \\n\
tls-version-min 1.2 \\n\
tls-auth /opt/amnezia/openvpn/ta.key 0" >>/opt/amnezia/openvpn/server.conf'
$OPENVPN_TLS_AUTH" >/opt/amnezia/openvpn/server.conf'

View file

@ -23,7 +23,7 @@ status openvpn-status.log \\n\
verb 1 \\n\
tls-server \\n\
tls-version-min 1.2 \\n\
tls-auth /opt/amnezia/openvpn/ta.key 0" >>/opt/amnezia/openvpn/server.conf'
$OPENVPN_TLS_AUTH" >/opt/amnezia/openvpn/server.conf'
# Cloak config
sudo docker exec -i $CONTAINER_NAME bash -c '\

View file

@ -23,7 +23,7 @@ status openvpn-status.log \\n\
verb 1 \\n\
tls-server \\n\
tls-version-min 1.2 \\n\
tls-auth /opt/amnezia/openvpn/ta.key 0" >>/opt/amnezia/openvpn/server.conf'
$OPENVPN_TLS_AUTH" >/opt/amnezia/openvpn/server.conf'
# Cloak config
sudo docker exec -i $CONTAINER_NAME bash -c '\

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -121,6 +121,8 @@ void SlidingStackedWidget::slideInWgtImpl(QWidget * newwidget, enum t_direction
}
else m_active = true;
m_nextWidget = newwidget;
enum t_direction directionhint;
int now = currentIndex(); // currentIndex() is a function inherited from QStackedWidget
int next = indexOf(newwidget);
@ -209,6 +211,18 @@ void SlidingStackedWidget::slideInWgtImpl(QWidget * newwidget, enum t_direction
// that we implement here below in animationDoneSlot.
}
void SlidingStackedWidget::setCurrentWidget(QWidget *w)
{
m_nextWidget = w;
QStackedWidget::setCurrentWidget(w);
}
QWidget *SlidingStackedWidget::nextWidget() const
{
if (m_nextWidget == nullptr) return currentWidget();
return m_nextWidget;
}
void SlidingStackedWidget::animationDoneSlot(void) {
// when ready, call the QStackedWidget slot setCurrentIndex(int)
setCurrentIndex(m_next); // this function is inherited from QStackedWidget

View file

@ -34,6 +34,9 @@ public:
SlidingStackedWidget(QWidget *parent);
~SlidingStackedWidget(void);
QWidget *nextWidget() const;
void setCurrentWidget(QWidget *w);
public slots:
// Some basic settings API
void setSpeed(int speed); // animation duration in milliseconds
@ -77,6 +80,8 @@ protected:
QPropertyAnimation *animnow;
QPropertyAnimation *animnext;
QParallelAnimationGroup *animgroup;
QWidget *m_nextWidget = nullptr;
};
#endif // SLIDINGSTACKEDWIDGET_H

View file

@ -57,6 +57,9 @@ MainWindow::MainWindow(QWidget *parent) :
setupTray();
setupUiConnections();
setupNewServerConnections();
setupWizardConnections();
setupGeneralSettingsConnections();
setupAppSettingsConnections();
setupNetworkSettingsConnections();
setupProtocolsPageConnections();
@ -98,6 +101,7 @@ MainWindow::MainWindow(QWidget *parent) :
});
//ui->pushButton_general_settings_exit->hide();
updateSharingPage(selectedServerIndex, m_settings.serverCredentials(selectedServerIndex), selectedDockerContainer);
setFixedSize(width(),height());
@ -173,6 +177,8 @@ void MainWindow::showOnStartup()
void MainWindow::goToPage(Page page, bool reset, bool slide)
{
//qDebug() << "goToPage" << page;
if (ui->stackedWidget_main->nextWidget() == getPageWidget(page)) return;
if (reset) {
if (page == Page::ServerSettings) {
updateServerPage();
@ -186,7 +192,7 @@ void MainWindow::goToPage(Page page, bool reset, bool slide)
if (page == Page::Start) {
updateStartPage();
}
if (page == Page::NewServer_2) {
if (page == Page::NewServerProtocols) {
ui->pushButton_new_server_settings_cloak->setChecked(true);
ui->pushButton_new_server_settings_cloak->setChecked(false);
ui->pushButton_new_server_settings_ss->setChecked(true);
@ -257,7 +263,13 @@ QWidget *MainWindow::getPageWidget(MainWindow::Page page)
switch (page) {
case(Page::Start): return ui->page_start;
case(Page::NewServer): return ui->page_new_server;
case(Page::NewServer_2): return ui->page_new_server_2;
case(Page::NewServerProtocols): return ui->page_new_server_protocols;
case(Page::Wizard): return ui->page_setup_wizard;
case(Page::WizardHigh): return ui->page_setup_wizard_high_level;
case(Page::WizardLow): return ui->page_setup_wizard_low_level;
case(Page::WizardMedium): return ui->page_setup_wizard_medium_level;
case(Page::WizardVpnMode): return ui->page_setup_wizard_vpn_mode;
case(Page::ServerConfiguring): return ui->page_new_server_configuring;
case(Page::Vpn): return ui->page_vpn;
case(Page::GeneralSettings): return ui->page_general_settings;
case(Page::AppSettings): return ui->page_app_settings;
@ -317,6 +329,13 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
case Qt::Key_Q:
qApp->quit();
break;
case Qt::Key_H:
selectedServerIndex = m_settings.defaultServerIndex();
selectedDockerContainer = m_settings.defaultContainer(selectedServerIndex);
updateSharingPage(selectedServerIndex, m_settings.serverCredentials(selectedServerIndex), selectedDockerContainer);
goToPage(Page::ShareConnection);
break;
#endif
case Qt::Key_C:
qDebug().noquote() << "Def server" << m_settings.defaultServerIndex() << m_settings.defaultContainerName(m_settings.defaultServerIndex());
@ -335,11 +354,12 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
goToPage(Page::ServerVpnProtocols);
break;
case Qt::Key_Escape:
if (currentPage() == Page::Vpn) break;
if (currentPage() == Page::ServerConfiguring) break;
if (currentPage() == Page::Start && pagesStack.size() < 2) break;
if (! ui->stackedWidget_main->isAnimationRunning() && ui->stackedWidget_main->currentWidget()->isEnabled()) {
if (currentPage() != Page::Vpn && currentPage() != Page::Start) {
closePage();
}
}
default:
;
}
@ -430,9 +450,14 @@ void MainWindow::onPushButtonNewServerConnect(bool)
ui->pushButton_new_server_connect->setEnabled(false);
ui->pushButton_new_server_connect->setText(tr("Connecting..."));
ErrorCode e = ErrorCode::NoError;
#ifdef Q_DEBUG
//QString output = ServerController::checkSshConnection(serverCredentials, &e);
#else
QString output;
#endif
bool ok = true;
if (e) {
ui->label_new_server_wait_info->show();
@ -452,10 +477,10 @@ void MainWindow::onPushButtonNewServerConnect(bool)
ui->pushButton_new_server_connect->setText(tr("Connect"));
installCredentials = serverCredentials;
if (ok) goToPage(Page::NewServer_2);
if (ok) goToPage(Page::NewServer);
}
void MainWindow::onPushButtonNewServerConnectConfigure(bool)
QMap<DockerContainer, QJsonObject> MainWindow::getInstallConfigsFromProtocolsPage() const
{
QJsonObject cloakConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpnOverCloak) },
@ -479,32 +504,70 @@ void MainWindow::onPushButtonNewServerConnectConfigure(bool)
}
};
QJsonArray containerConfigs;
QList<DockerContainer> containers;
QMap<DockerContainer, QJsonObject> containers;
if (ui->checkBox_new_server_cloak->isChecked()) {
containerConfigs.append(cloakConfig);
containers.append(DockerContainer::OpenVpnOverCloak);
containers.insert(DockerContainer::OpenVpnOverCloak, cloakConfig);
}
if (ui->checkBox_new_server_ss->isChecked()) {
containerConfigs.append(ssConfig);
containers.append(DockerContainer::OpenVpnOverShadowSocks);
containers.insert(DockerContainer::OpenVpnOverShadowSocks, ssConfig);
}
if (ui->checkBox_new_server_openvpn->isChecked()) {
containerConfigs.append(openVpnConfig);
containers.append(DockerContainer::OpenVpn);
containers.insert(DockerContainer::OpenVpn, openVpnConfig);
}
return containers;
}
QMap<DockerContainer, QJsonObject> MainWindow::getInstallConfigsFromWizardPage() const
{
QJsonObject cloakConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpnOverCloak) },
{ config_key::cloak, QJsonObject {
{ config_key::site, ui->lineEdit_setup_wizard_high_website_masking->text() }}
}
};
QJsonObject ssConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpnOverShadowSocks) }
};
QJsonObject openVpnConfig {
{ config_key::container, amnezia::containerToString(DockerContainer::OpenVpn) }
};
QMap<DockerContainer, QJsonObject> containers;
if (ui->radioButton_setup_wizard_high->isChecked()) {
containers.insert(DockerContainer::OpenVpnOverCloak, cloakConfig);
}
if (ui->radioButton_setup_wizard_medium->isChecked()) {
containers.insert(DockerContainer::OpenVpnOverShadowSocks, ssConfig);
}
if (ui->radioButton_setup_wizard_low->isChecked()) {
containers.insert(DockerContainer::OpenVpn, openVpnConfig);
}
return containers;
}
void MainWindow::installServer(const QMap<DockerContainer, QJsonObject> &containers)
{
if (containers.isEmpty()) return;
// bool ok = true;
bool ok = installServer(installCredentials, containers, containerConfigs,
ui->page_new_server_2,
ui->progressBar_new_server_connection,
ui->pushButton_new_server_connect_configure,
ui->label_new_server_wait_info);
goToPage(Page::ServerConfiguring);
QEventLoop loop;
QTimer::singleShot(500, &loop, SLOT(quit()));
loop.exec();
qApp->processEvents();
bool ok = installContainers(installCredentials, containers,
ui->page_new_server_configuring,
ui->progressBar_new_server_configuring,
nullptr,
ui->label_new_server_configuring_wait_info);
if (ok) {
QJsonObject server;
@ -514,15 +577,22 @@ void MainWindow::onPushButtonNewServerConnectConfigure(bool)
server.insert(config_key::port, installCredentials.port);
server.insert(config_key::description, m_settings.nextAvailableServerName());
QJsonArray containerConfigs;
for (const QJsonObject &cfg : containers) {
containerConfigs.append(cfg);
}
server.insert(config_key::containers, containerConfigs);
server.insert(config_key::defaultContainer, containerToString(containers.first()));
server.insert(config_key::defaultContainer, containerToString(containers.firstKey()));
m_settings.addServer(server);
m_settings.setDefaultServer(m_settings.serversCount() - 1);
goToPage(Page::Vpn);
setStartPage(Page::Vpn);
qApp->processEvents();
}
else {
closePage();
}
}
void MainWindow::onPushButtonNewServerImport(bool)
@ -564,18 +634,21 @@ void MainWindow::onPushButtonNewServerImport(bool)
}
bool MainWindow::installServer(ServerCredentials credentials,
QList<DockerContainer> containers, QJsonArray configs,
bool MainWindow::installContainers(ServerCredentials credentials,
const QMap<DockerContainer, QJsonObject> &containers,
QWidget *page, QProgressBar *progress, QPushButton *button, QLabel *info)
{
page->setEnabled(false);
button->setVisible(false);
if (!progress) return false;
info->setVisible(true);
info->setText(tr("Please wait, configuring process may take up to 5 minutes"));
if (page) page->setEnabled(false);
if (button) button->setVisible(false);
if (info) info->setVisible(true);
if (info) info->setText(tr("Please wait, configuring process may take up to 5 minutes"));
for (int i = 0; i < containers.size(); ++i) {
int cnt = 0;
for (QMap<DockerContainer, QJsonObject>::const_iterator i = containers.constBegin(); i != containers.constEnd(); i++, cnt++) {
QTimer timer;
connect(&timer, &QTimer::timeout, [progress](){
progress->setValue(progress->value() + 1);
@ -585,16 +658,16 @@ bool MainWindow::installServer(ServerCredentials credentials,
timer.start(1000);
progress->setTextVisible(true);
progress->setFormat(QString("Installing %1 %2 %3").arg(i+1).arg(tr("of")).arg(containers.size()));
progress->setFormat(QString("Installing %1 %2 %3").arg(cnt+1).arg(tr("of")).arg(containers.size()));
ErrorCode e = ServerController::setupContainer(credentials, containers.at(i), configs.at(i).toObject());
ErrorCode e = ServerController::setupContainer(credentials, i.key(), i.value());
qDebug() << "Setup server finished with code" << e;
ServerController::disconnectFromHost(credentials);
if (e) {
page->setEnabled(true);
button->setVisible(true);
info->setVisible(false);
if (page) page->setEnabled(true);
if (button) button->setVisible(true);
if (info) info->setVisible(false);
QMessageBox::warning(this, APPLICATION_NAME,
tr("Error occurred while configuring server.") + "\n" +
@ -625,9 +698,9 @@ bool MainWindow::installServer(ServerCredentials credentials,
}
button->show();
page->setEnabled(true);
info->setText(tr("Amnezia server installed"));
if (button) button->show();
if (page) page->setEnabled(true);
if (info) info->setText(tr("Amnezia server installed"));
return true;
}
@ -893,51 +966,36 @@ void MainWindow::setupUiConnections()
else hide();
});
connect(ui->pushButton_general_settings_exit, &QPushButton::clicked, this, [&](){ qApp->quit(); });
connect(ui->pushButton_new_server_get_info, &QPushButton::clicked, this, [&](){
QDesktopServices::openUrl(QUrl("https://amnezia.org"));
});
connect(ui->pushButton_new_server_connect, SIGNAL(clicked(bool)), this, SLOT(onPushButtonNewServerConnect(bool)));
connect(ui->pushButton_new_server_connect_configure, SIGNAL(clicked(bool)), this, SLOT(onPushButtonNewServerConnectConfigure(bool)));
connect(ui->pushButton_new_server_import, SIGNAL(clicked(bool)), this, SLOT(onPushButtonNewServerImport(bool)));
connect(ui->pushButton_vpn_add_site, &QPushButton::clicked, this, [this](){ goToPage(Page::Sites); });
connect(ui->pushButton_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::GeneralSettings); });
connect(ui->pushButton_app_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::AppSettings); });
connect(ui->pushButton_network_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::NetworkSettings); });
connect(ui->pushButton_server_settings, &QPushButton::clicked, this, [this](){
selectedServerIndex = m_settings.defaultServerIndex();
goToPage(Page::ServerSettings);
});
connect(ui->pushButton_servers_list, &QPushButton::clicked, this, [this](){ goToPage(Page::ServersList); });
connect(ui->pushButton_share_connection, &QPushButton::clicked, this, [this](){
selectedServerIndex = m_settings.defaultServerIndex();
selectedDockerContainer = m_settings.defaultContainer(selectedServerIndex);
goToPage(Page::ShareConnection);
updateSharingPage(selectedServerIndex, m_settings.serverCredentials(selectedServerIndex), selectedDockerContainer);
//updateShareCodePage();
});
connect(ui->pushButton_back_from_sites, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_settings, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_start, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_new_server, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_new_server_2, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_app_settings, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_network_settings, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_server_settings, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_servers, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_share, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_server_vpn_protocols, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_openvpn_settings, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_cloak_settings, &QPushButton::clicked, this, [this](){ closePage(); });
connect(ui->pushButton_back_from_shadowsocks_settings, &QPushButton::clicked, this, [this](){ closePage(); });
QVector<QPushButton *> backButtons {
ui->pushButton_back_from_sites,
ui->pushButton_back_from_settings,
ui->pushButton_back_from_start,
ui->pushButton_back_from_new_server,
ui->pushButton_back_from_new_server_protocols,
ui->pushButton_back_from_setup_wizard,
ui->pushButton_back_from_setup_wizard_high,
ui->pushButton_back_from_setup_wizard_low,
ui->pushButton_back_from_setup_wizard_medium,
ui->pushButton_back_from_setup_wizard_vpn_mode,
ui->pushButton_back_from_app_settings,
ui->pushButton_back_from_network_settings,
ui->pushButton_back_from_server_settings,
ui->pushButton_back_from_servers,
ui->pushButton_back_from_share,
ui->pushButton_back_from_server_vpn_protocols,
ui->pushButton_back_from_openvpn_settings,
ui->pushButton_back_from_cloak_settings,
ui->pushButton_back_from_shadowsocks_settings
};
for (QPushButton *b : backButtons) {
connect(b, &QPushButton::clicked, this, [this](){ closePage(); });
}
connect(ui->pushButton_sites_add_custom, &QPushButton::clicked, this, [this](){ onPushButtonAddCustomSitesClicked(); });
@ -962,6 +1020,58 @@ void MainWindow::setupUiConnections()
});
}
void MainWindow::setupNewServerConnections()
{
connect(ui->pushButton_new_server_get_info, &QPushButton::clicked, this, [](){
QDesktopServices::openUrl(QUrl("https://amnezia.org"));
});
connect(ui->pushButton_new_server_connect, SIGNAL(clicked(bool)), this, SLOT(onPushButtonNewServerConnect(bool)));
connect(ui->pushButton_new_server_import, SIGNAL(clicked(bool)), this, SLOT(onPushButtonNewServerImport(bool)));
connect(ui->pushButton_new_server_connect_configure, &QPushButton::clicked, this, [this](){
installServer(getInstallConfigsFromProtocolsPage());
});
}
void MainWindow::setupWizardConnections()
{
connect(ui->pushButton_new_server_wizard, &QPushButton::clicked, this, [this](){ goToPage(Page::Wizard); });
connect(ui->pushButton_new_server_advanced, &QPushButton::clicked, this, [this](){ goToPage(Page::NewServerProtocols); });
connect(ui->pushButton_setup_wizard_next, &QPushButton::clicked, this, [this](){
if (ui->radioButton_setup_wizard_high->isChecked()) goToPage(Page::WizardHigh);
if (ui->radioButton_setup_wizard_medium->isChecked()) goToPage(Page::WizardMedium);
if (ui->radioButton_setup_wizard_low->isChecked()) goToPage(Page::WizardLow);
});
connect(ui->pushButton_setup_wizard_high_next, &QPushButton::clicked, this, [this](){
QString domain = ui->lineEdit_setup_wizard_high_website_masking->text();
if (domain.isEmpty() || !domain.contains(".")) return;
goToPage(Page::WizardVpnMode);
});
connect(ui->lineEdit_setup_wizard_high_website_masking, &QLineEdit::textEdited, this, [this](){
QString text = ui->lineEdit_setup_wizard_high_website_masking->text();
text.replace("http://", "");
text.replace("https://", "");
if (text.isEmpty()) return;
text = text.split("/").first();
ui->lineEdit_setup_wizard_high_website_masking->setText(text);
});
connect(ui->pushButton_setup_wizard_medium_next, &QPushButton::clicked, this, [this](){ goToPage(Page::WizardVpnMode); });
connect(ui->pushButton_setup_wizard_vpn_mode_finish, &QPushButton::clicked, this, [this](){
installServer(getInstallConfigsFromWizardPage());
m_settings.setCustomRouting(ui->checkBox_setup_wizard_vpn_mode->isChecked());
});
connect(ui->pushButton_setup_wizard_low_finish, &QPushButton::clicked, this, [this](){
installServer(getInstallConfigsFromWizardPage());
});
}
void MainWindow::setupAppSettingsConnections()
{
connect(ui->checkBox_app_settings_autostart, &QCheckBox::stateChanged, this, [this](int state){
@ -982,6 +1092,34 @@ void MainWindow::setupAppSettingsConnections()
connect(ui->pushButton_app_settings_check_for_updates, &QPushButton::clicked, this, [this](){
QDesktopServices::openUrl(QUrl("https://github.com/amnezia-vpn/desktop-client/releases/latest"));
});
connect(ui->pushButton_app_settings_open_logs, &QPushButton::clicked, this, [this](){
Debug::openLogsFolder();
QDesktopServices::openUrl(QUrl::fromLocalFile(Utils::systemLogPath()));
});
}
void MainWindow::setupGeneralSettingsConnections()
{
connect(ui->pushButton_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::GeneralSettings); });
connect(ui->pushButton_app_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::AppSettings); });
connect(ui->pushButton_network_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::NetworkSettings); });
connect(ui->pushButton_server_settings, &QPushButton::clicked, this, [this](){
selectedServerIndex = m_settings.defaultServerIndex();
goToPage(Page::ServerSettings);
});
connect(ui->pushButton_servers_list, &QPushButton::clicked, this, [this](){ goToPage(Page::ServersList); });
connect(ui->pushButton_share_connection, &QPushButton::clicked, this, [this](){
selectedServerIndex = m_settings.defaultServerIndex();
selectedDockerContainer = m_settings.defaultContainer(selectedServerIndex);
updateSharingPage(selectedServerIndex, m_settings.serverCredentials(selectedServerIndex), selectedDockerContainer);
goToPage(Page::ShareConnection);
});
connect(ui->pushButton_general_settings_add_server, &QPushButton::clicked, this, [this](){ goToPage(Page::Start); });
}
void MainWindow::setupNetworkSettingsConnections()
@ -1732,6 +1870,9 @@ void MainWindow::updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerConta
bool isNcpDisabled = openvpnConfig.value(config_key::ncp_disable).toBool(protocols::openvpn::defaultNcpDisable);
ui->checkBox_proto_openvpn_auto_encryption->setChecked(!isNcpDisabled);
bool isTlsAuth = openvpnConfig.value(config_key::tls_auth).toBool(protocols::openvpn::defaultTlsAuth);
ui->checkBox_proto_openvpn_tls_auth->setChecked(isTlsAuth);
if (container == DockerContainer::OpenVpnOverShadowSocks) {
ui->radioButton_proto_openvpn_udp->setEnabled(false);
ui->radioButton_proto_openvpn_tcp->setEnabled(false);
@ -1809,6 +1950,7 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre
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) {
@ -1842,6 +1984,12 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre
ui->label_share_ss_port->setText(ssConfig.value("server_port").toString());
ui->label_share_ss_method->setText(ssConfig.value("method").toString());
ui->label_share_ss_password->setText(ssConfig.value("password").toString());
ui->toolBox_share_connection->setCurrentWidget(ui->page_share_shadowsocks);
ui->page_share_shadowsocks->show();
ui->page_share_shadowsocks->raise();
qDebug() << ui->page_share_shadowsocks->size();
ui->toolBox_share_connection->layout()->update();
}
// Amnezia sharing
@ -1856,6 +2004,9 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre
// ui->textEdit_share_amnezia_code->setPlainText(QJsonDocument(exportContainer).toJson());
ui->textEdit_share_amnezia_code->setPlainText(tr(""));
repaint();
update();
updateGeometry();
}
void MainWindow::makeSitesListItem(QListWidget *listWidget, const QString &address)
@ -1949,6 +2100,7 @@ QJsonObject MainWindow::getOpenVpnConfigFromPage(QJsonObject oldConfig)
oldConfig.insert(config_key::hash, ui->comboBox_proto_openvpn_hash->currentText());
oldConfig.insert(config_key::block_outside_dns, ui->checkBox_proto_openvpn_block_dns->isChecked());
oldConfig.insert(config_key::port, ui->lineEdit_proto_openvpn_port->text());
oldConfig.insert(config_key::tls_auth, ui->checkBox_proto_openvpn_tls_auth->isChecked());
return oldConfig;
}

View file

@ -40,8 +40,10 @@ public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
enum Page {Start, NewServer, NewServer_2, Vpn, GeneralSettings, AppSettings, NetworkSettings,
ServerSettings, ServerVpnProtocols, ServersList, ShareConnection, Sites,
enum Page {Start, NewServer, NewServerProtocols, Vpn,
Wizard, WizardLow, WizardMedium, WizardHigh, WizardVpnMode, ServerConfiguring,
GeneralSettings, AppSettings, NetworkSettings, ServerSettings,
ServerVpnProtocols, ServersList, ShareConnection, Sites,
OpenVpnSettings, ShadowSocksSettings, CloakSettings};
Q_ENUM(Page)
@ -54,7 +56,7 @@ private slots:
void onPushButtonConnectClicked(bool checked);
void onPushButtonNewServerConnect(bool);
void onPushButtonNewServerConnectConfigure(bool);
void installServer(const QMap<DockerContainer, QJsonObject> &containers);
void onPushButtonNewServerImport(bool);
void onPushButtonClearServer(bool);
@ -81,7 +83,7 @@ private:
QWidget *getPageWidget(Page page);
Page currentPage();
bool installServer(ServerCredentials credentials, QList<DockerContainer> containers, QJsonArray configs,
bool installContainers(ServerCredentials credentials, const QMap<DockerContainer, QJsonObject> &containers,
QWidget *page, QProgressBar *progress, QPushButton *button, QLabel *info);
ErrorCode doInstallAction(const std::function<ErrorCode()> &action, QWidget *page, QProgressBar *progress, QPushButton *button, QLabel *info);
@ -90,7 +92,10 @@ private:
void setTrayIcon(const QString &iconPath);
void setupUiConnections();
void setupNewServerConnections();
void setupWizardConnections();
void setupAppSettingsConnections();
void setupGeneralSettingsConnections();
void setupNetworkSettingsConnections();
void setupProtocolsPageConnections();
void setupNewServerPageConnections();
@ -121,6 +126,9 @@ private:
QJsonObject getShadowSocksConfigFromPage(QJsonObject oldConfig);
QJsonObject getCloakConfigFromPage(QJsonObject oldConfig);
QMap<DockerContainer, QJsonObject> getInstallConfigsFromProtocolsPage() const;
QMap<DockerContainer, QJsonObject> getInstallConfigsFromWizardPage() const;
private:
Ui::MainWindow *ui;
VpnConnection* m_vpnConnection;
@ -157,7 +165,7 @@ private:
QStack<Page> pagesStack;
int selectedServerIndex = -1; // server index to use when proto settings page opened
DockerContainer selectedDockerContainer; // same
ServerCredentials installCredentials; // used to save cred between pages new_server and new_server_2
ServerCredentials installCredentials; // used to save cred between pages new_server and new_server_protocols and wizard
};
#endif // MAINWINDOW_H

File diff suppressed because it is too large Load diff

View file

@ -140,6 +140,10 @@ bool TapController::checkAndSetup()
qDebug() << "TapController: Installing TAP driver...";
bool ok = setupDriver();
if (QSysInfo::prettyProductName().contains("Server 2008")) {
restartTapService();
}
if (ok) qDebug() << "TapController: TAP driver successfully installed";
else qDebug() << "TapController: Failed to install TAP driver";
@ -255,7 +259,7 @@ QString TapController::getTapInstallPath()
{
#ifdef Q_OS_WIN
if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7) {
if (oldDriversRequired()) {
return qApp->applicationDirPath() + "\\tap\\"+ QSysInfo::currentCpuArchitecture() + "_windows_7\\tapinstall.exe";
}
else {
@ -285,7 +289,7 @@ QString TapController::getOpenVpnPath()
QString TapController::getTapDriverDir()
{
if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7) {
if (oldDriversRequired()) {
return qApp->applicationDirPath() + "\\tap\\"+ QSysInfo::currentCpuArchitecture() + "_windows_7\\";
}
else {
@ -323,9 +327,36 @@ bool TapController::removeDriver(const QString& tapInstanceId)
}
}
bool TapController::oldDriversRequired()
{
if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7) return true;
if (QSysInfo::prettyProductName().contains("Server 2008")) return true;
return false;
}
bool TapController::restartTapService()
{
{
QProcess tapRestartroc;
tapRestartroc.start("net", QStringList() << "stop" << "TapiSrv");
if(!tapRestartroc.waitForStarted()) return false;
tapRestartroc.waitForFinished();
}
{
QProcess tapRestartroc;
tapRestartroc.start("net", QStringList() << "start" << "TapiSrv");
if(!tapRestartroc.waitForStarted()) return false;
tapRestartroc.waitForFinished();
}
return true;
}
bool TapController::setupDriver()
{
if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7) {
if (oldDriversRequired()) {
setupDriverCertificate();
}

View file

@ -35,6 +35,9 @@ private:
static bool setupDriverCertificate();
static bool removeDriver(const QString& tapInstanceId);
static bool oldDriversRequired();
static bool restartTapService();
};
#endif // TAPCONTROLLER_H