win7 support fixes
wizard added
This commit is contained in:
parent
45e5ec76dd
commit
4ba964db47
16 changed files with 2043 additions and 467 deletions
|
@ -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", "");
|
||||
|
|
|
@ -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 |
|
@ -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";
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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 '\
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,9 @@ private:
|
|||
static bool setupDriverCertificate();
|
||||
static bool removeDriver(const QString& tapInstanceId);
|
||||
|
||||
static bool oldDriversRequired();
|
||||
static bool restartTapService();
|
||||
|
||||
};
|
||||
|
||||
#endif // TAPCONTROLLER_H
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue