diff --git a/client/settings.cpp b/client/settings.cpp
index 6b97ed9e..5694efed 100644
--- a/client/settings.cpp
+++ b/client/settings.cpp
@@ -171,10 +171,10 @@ void Settings::clearLastConnectionConfig(int serverIndex, DockerContainer contai
qDebug() << "Settings::clearLastConnectionConfig for" << serverIndex << container << proto;
}
-bool Settings::haveAuthData() const
+bool Settings::haveAuthData(int serverIndex) const
{
- ServerCredentials cred = defaultServerCredentials();
-
+ if (serverIndex < 0) return false;
+ ServerCredentials cred = serverCredentials(serverIndex);
return (!cred.hostName.isEmpty() && !cred.userName.isEmpty() && !cred.password.isEmpty());
}
diff --git a/client/settings.h b/client/settings.h
index 3a6c0e2c..048b66a5 100644
--- a/client/settings.h
+++ b/client/settings.h
@@ -70,7 +70,7 @@ public:
void clearLastConnectionConfig(int serverIndex, DockerContainer container, Protocol proto = Protocol::Any);
- bool haveAuthData() const;
+ bool haveAuthData(int serverIndex) const;
QString nextAvailableServerName() const;
// App settings section
diff --git a/client/ui/mainwindow.cpp b/client/ui/mainwindow.cpp
index b21a6d58..933f79ea 100644
--- a/client/ui/mainwindow.cpp
+++ b/client/ui/mainwindow.cpp
@@ -88,7 +88,7 @@ MainWindow::MainWindow(QWidget *parent) :
// Post initialization
goToPage(Page::Start, true, false);
- if (m_settings.haveAuthData()) {
+ if (m_settings.defaultServerIndex() >= 0) {
goToPage(Page::Vpn, true, false);
}
@@ -114,7 +114,7 @@ MainWindow::MainWindow(QWidget *parent) :
onConnectionStateChanged(VpnProtocol::ConnectionState::Disconnected);
- if (m_settings.isAutoConnect() && m_settings.haveAuthData()) {
+ if (m_settings.isAutoConnect() && m_settings.defaultServerIndex() >= 0) {
QTimer::singleShot(1000, this, [this](){
ui->pushButton_connect->setEnabled(false);
onConnect();
@@ -224,6 +224,17 @@ void MainWindow::goToPage(Page page, bool reset, bool slide)
pagesStack.push(page);
}
+void MainWindow::setStartPage(MainWindow::Page page, bool slide)
+{
+ if (slide)
+ ui->stackedWidget_main->slideInWidget(getPageWidget(page), SlidingStackedWidget::RIGHT2LEFT);
+ else
+ ui->stackedWidget_main->setCurrentWidget(getPageWidget(page));
+
+ pagesStack.clear();
+ pagesStack.push(page);
+}
+
void MainWindow::closePage()
{
Page prev = pagesStack.pop();
@@ -506,9 +517,16 @@ void MainWindow::onPushButtonNewServerImport(bool)
ServerCredentials credentials;
credentials.hostName = o.value("h").toString();
+ if (credentials.hostName.isEmpty()) credentials.hostName = o.value(config_key::hostName).toString();
+
credentials.port = o.value("p").toInt();
+ if (credentials.port == 0) credentials.port = o.value(config_key::port).toInt();
+
credentials.userName = o.value("u").toString();
+ if (credentials.userName.isEmpty()) credentials.userName = o.value(config_key::userName).toString();
+
credentials.password = o.value("w").toString();
+ if (credentials.password.isEmpty()) credentials.password = o.value(config_key::password).toString();
qDebug() << QString("Added server %3@%1:%2").
arg(credentials.hostName).
@@ -517,13 +535,15 @@ void MainWindow::onPushButtonNewServerImport(bool)
//qDebug() << QString("Password") << credentials.password;
- if (!credentials.isValid()) {
- return;
+ if (credentials.isValid() || o.contains(config_key::containers)) {
+ m_settings.addServer(o);
+ setStartPage(Page::Vpn);
+ }
+ else {
+ qDebug() << "Failed to import profile";
+ qDebug().noquote() << QJsonDocument(o).toJson();
}
- //m_settings.setServerCredentials(credentials);
-
- goToPage(Page::Vpn);
}
bool MainWindow::installServer(ServerCredentials credentials,
@@ -862,8 +882,12 @@ void MainWindow::setupUiConnections()
});
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);
- updateShareCodePage();
+ updateSharingPage(selectedServerIndex, m_settings.serverCredentials(selectedServerIndex), selectedDockerContainer);
+ //updateShareCodePage();
});
@@ -1027,7 +1051,7 @@ void MainWindow::setupProtocolsPageConnections()
connect(ui->pushButton_proto_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpn;
updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn),
- selectedDockerContainer);
+ selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::OpenVpnSettings);
});
@@ -1035,13 +1059,13 @@ void MainWindow::setupProtocolsPageConnections()
connect(ui->pushButton_proto_ss_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn),
- selectedDockerContainer);
+ selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::OpenVpnSettings);
});
connect(ui->pushButton_proto_ss_openvpn_cont_ss_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
updateShadowSocksPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::ShadowSocks),
- selectedDockerContainer);
+ selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::ShadowSocksSettings);
});
@@ -1049,19 +1073,19 @@ void MainWindow::setupProtocolsPageConnections()
connect(ui->pushButton_proto_cloak_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn),
- selectedDockerContainer);
+ selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::OpenVpnSettings);
});
connect(ui->pushButton_proto_cloak_openvpn_cont_ss_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
updateShadowSocksPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::ShadowSocks),
- selectedDockerContainer);
+ selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::ShadowSocksSettings);
});
connect(ui->pushButton_proto_cloak_openvpn_cont_cloak_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
updateCloakPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::Cloak),
- selectedDockerContainer);
+ selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::CloakSettings);
});
@@ -1283,7 +1307,8 @@ void MainWindow::setupSharePageConnections()
serverConfig.insert(config_key::defaultContainer, containerToString(selectedDockerContainer));
- ui->textEdit_share_amnezia_code->setPlainText(QJsonDocument(serverConfig).toJson());
+ QByteArray ba = QJsonDocument(serverConfig).toJson().toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
+ ui->textEdit_share_amnezia_code->setPlainText(QString("vpn://%1").arg(QString(ba)));
ui->pushButton_share_amnezia_generate->setEnabled(true);
ui->pushButton_share_amnezia_copy->setEnabled(true);
@@ -1510,6 +1535,9 @@ void MainWindow::updateServerPage()
ui->label_server_settings_wait_info->hide();
ui->label_server_settings_wait_info->clear();
+ ui->pushButton_server_settings_clear->setVisible(m_settings.haveAuthData(selectedServerIndex));
+ ui->pushButton_server_settings_clear_client_cache->setVisible(m_settings.haveAuthData(selectedServerIndex));
+
QJsonObject server = m_settings.server(selectedServerIndex);
QString port = server.value(config_key::port).toString();
ui->label_server_settings_server->setText(QString("%1@%2%3%4")
@@ -1546,23 +1574,29 @@ void MainWindow::updateProtocolsPage()
auto containers = m_settings.containers(selectedServerIndex);
+ bool haveAuthData = m_settings.haveAuthData(selectedServerIndex);
+
DockerContainer defaultContainer = m_settings.defaultContainer(selectedServerIndex);
ui->pushButton_proto_cloak_openvpn_cont_default->setChecked(defaultContainer == DockerContainer::OpenVpnOverCloak);
ui->pushButton_proto_ss_openvpn_cont_default->setChecked(defaultContainer == DockerContainer::OpenVpnOverShadowSocks);
ui->pushButton_proto_openvpn_cont_default->setChecked(defaultContainer == DockerContainer::OpenVpn);
- ui->pushButton_proto_cloak_openvpn_cont_default->setVisible(containers.contains(DockerContainer::OpenVpnOverCloak));
- ui->pushButton_proto_ss_openvpn_cont_default->setVisible(containers.contains(DockerContainer::OpenVpnOverShadowSocks));
- ui->pushButton_proto_openvpn_cont_default->setVisible(containers.contains(DockerContainer::OpenVpn));
+ ui->pushButton_proto_cloak_openvpn_cont_default->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverCloak));
+ ui->pushButton_proto_ss_openvpn_cont_default->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverShadowSocks));
+ ui->pushButton_proto_openvpn_cont_default->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpn));
- ui->pushButton_proto_cloak_openvpn_cont_share->setVisible(containers.contains(DockerContainer::OpenVpnOverCloak));
- ui->pushButton_proto_ss_openvpn_cont_share->setVisible(containers.contains(DockerContainer::OpenVpnOverShadowSocks));
- ui->pushButton_proto_openvpn_cont_share->setVisible(containers.contains(DockerContainer::OpenVpn));
+ ui->pushButton_proto_cloak_openvpn_cont_share->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverCloak));
+ ui->pushButton_proto_ss_openvpn_cont_share->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverShadowSocks));
+ ui->pushButton_proto_openvpn_cont_share->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpn));
ui->pushButton_proto_cloak_openvpn_cont_install->setChecked(containers.contains(DockerContainer::OpenVpnOverCloak));
ui->pushButton_proto_ss_openvpn_cont_install->setChecked(containers.contains(DockerContainer::OpenVpnOverShadowSocks));
ui->pushButton_proto_openvpn_cont_install->setChecked(containers.contains(DockerContainer::OpenVpn));
+ ui->pushButton_proto_cloak_openvpn_cont_install->setEnabled(haveAuthData);
+ ui->pushButton_proto_ss_openvpn_cont_install->setEnabled(haveAuthData);
+ ui->pushButton_proto_openvpn_cont_install->setEnabled(haveAuthData);
+
ui->frame_openvpn_ss_cloak_settings->setVisible(containers.contains(DockerContainer::OpenVpnOverCloak));
ui->frame_openvpn_ss_settings->setVisible(containers.contains(DockerContainer::OpenVpnOverShadowSocks));
ui->frame_openvpn_settings->setVisible(containers.contains(DockerContainer::OpenVpn));
@@ -1582,8 +1616,12 @@ void MainWindow::updateShareCodePage()
//qDebug() << "Share code" << QJsonDocument(o).toJson();
}
-void MainWindow::updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container)
+void MainWindow::updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData)
{
+ ui->widget_proto_openvpn->setEnabled(haveAuthData);
+ ui->pushButton_proto_openvpn_save->setVisible(haveAuthData);
+ ui->progressBar_proto_openvpn_reset->setVisible(haveAuthData);
+
ui->radioButton_proto_openvpn_udp->setEnabled(true);
ui->radioButton_proto_openvpn_tcp->setEnabled(true);
@@ -1620,8 +1658,12 @@ void MainWindow::updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerConta
ui->lineEdit_proto_openvpn_port->setEnabled(container == DockerContainer::OpenVpn);
}
-void MainWindow::updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container)
+void MainWindow::updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData)
{
+ ui->widget_proto_ss->setEnabled(haveAuthData);
+ ui->pushButton_proto_shadowsocks_save->setVisible(haveAuthData);
+ ui->progressBar_proto_shadowsocks_reset->setVisible(haveAuthData);
+
ui->comboBox_proto_shadowsocks_cipher->setCurrentText(ssConfig.value(config_key::cipher).
toString(protocols::shadowsocks::defaultCipher));
@@ -1631,8 +1673,12 @@ void MainWindow::updateShadowSocksPage(const QJsonObject &ssConfig, DockerContai
ui->lineEdit_proto_shadowsocks_port->setEnabled(container == DockerContainer::OpenVpnOverShadowSocks);
}
-void MainWindow::updateCloakPage(const QJsonObject &ckConfig, DockerContainer container)
+void MainWindow::updateCloakPage(const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData)
{
+ ui->widget_proto_cloak->setEnabled(haveAuthData);
+ ui->pushButton_proto_cloak_save->setVisible(haveAuthData);
+ ui->progressBar_proto_cloak_reset->setVisible(haveAuthData);
+
ui->comboBox_proto_cloak_cipher->setCurrentText(ckConfig.value(config_key::cipher).
toString(protocols::cloak::defaultCipher));
@@ -1713,15 +1759,17 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre
}
// Amnezia sharing
- QJsonObject exportContainer;
- for (Protocol p: protocolsForContainer(container)) {
- QJsonObject protocolConfig = containerConfig.value(protoToString(p)).toObject();
- protocolConfig.remove(config_key::last_config);
- exportContainer.insert(protoToString(p), protocolConfig);
- }
- exportContainer.insert(config_key::container, containerToString(container));
+// QJsonObject exportContainer;
+// for (Protocol p: protocolsForContainer(container)) {
+// QJsonObject protocolConfig = containerConfig.value(protoToString(p)).toObject();
+// protocolConfig.remove(config_key::last_config);
+// exportContainer.insert(protoToString(p), protocolConfig);
+// }
+// exportContainer.insert(config_key::container, containerToString(container));
- ui->textEdit_share_amnezia_code->setPlainText(QJsonDocument(exportContainer).toJson());
+// ui->textEdit_share_amnezia_code->setPlainText(QJsonDocument(exportContainer).toJson());
+
+ ui->textEdit_share_amnezia_code->setPlainText(tr(""));
}
void MainWindow::makeSitesListItem(QListWidget *listWidget, const QString &address)
diff --git a/client/ui/mainwindow.h b/client/ui/mainwindow.h
index b1b97da9..b253d084 100644
--- a/client/ui/mainwindow.h
+++ b/client/ui/mainwindow.h
@@ -73,6 +73,7 @@ private slots:
private:
void goToPage(Page page, bool reset = true, bool slide = true);
+ void setStartPage(Page page, bool slide = true);
void closePage();
QWidget *getPageWidget(Page page);
@@ -101,9 +102,9 @@ private:
void updateServersListPage();
void updateProtocolsPage();
void updateShareCodePage();
- void updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container);
- void updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container);
- void updateCloakPage(const QJsonObject &ckConfig, DockerContainer container);
+ void updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData);
+ void updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData);
+ void updateCloakPage(const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData);
void updateSharingPage(int serverIndex, const ServerCredentials &credentials,
DockerContainer container);
diff --git a/client/ui/mainwindow.ui b/client/ui/mainwindow.ui
index 44033597..bd0becfe 100644
--- a/client/ui/mainwindow.ui
+++ b/client/ui/mainwindow.ui
@@ -287,7 +287,7 @@ QPushButton:hover {
- 11
+ 14
@@ -4149,8 +4149,8 @@ QToolBox::tab:hover {
0
0
- 360
- 360
+ 100
+ 30
@@ -4437,8 +4437,8 @@ background: #282932;
0
0
- 360
- 360
+ 100
+ 30
@@ -4603,8 +4603,8 @@ background: #282932;
0
0
- 360
- 360
+ 100
+ 30
@@ -4827,8 +4827,8 @@ color: #15CDCB;
0
0
- 360
- 360
+ 100
+ 30
@@ -4838,34 +4838,6 @@ color: #15CDCB;
-
-
-
- 20
- 30
- 340
- 40
-
-
-
- font-family: Lato;
-font-style: normal;
-font-weight: bold;
-font-size: 20px;
-line-height: 25px;
-color: #100A44;
-
-
-
- OpenVPN Settings
-
-
- Qt::AlignCenter
-
-
- true
-
-
@@ -4898,224 +4870,209 @@ QPushButton:hover {
-
+
- 30
- 95
- 321
- 31
+ 0
+ 40
+ 380
+ 600
-
-
-
-
-
-
-
-
-
- true
-
-
-
- 30
- 70
- 291
- 21
-
-
-
- VPN Addresses Subnet
-
-
- true
-
-
-
-
-
- 30
- 380
- 151
- 31
-
-
- -
-
- AES-256-GCM
+
+
+
+ 10
+ 0
+ 340
+ 30
+
-
- -
-
- AES-192-GCM
+
+ font-family: Lato;
+font-style: normal;
+font-weight: bold;
+font-size: 20px;
+line-height: 25px;
+color: #100A44;
+
-
- -
- AES-128-GCM
+ OpenVPN Settings
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+
+ true
+
+
+
+ 200
+ 310
+ 151
+ 21
+
-
- -
- AES-256-CBC
+ Hash
+
+
+ true
+
+
+
+
+ true
+
+
+
+ 30
+ 310
+ 151
+ 21
+
-
- -
- AES-192-CBC
+ Cipher
+
+
+ true
+
+
+
+
+ true
+
+
+
+ 30
+ 110
+ 151
+ 21
+
-
- -
- AES-128-CBC
+ Network protocol
+
+
+ true
+
+
+
+
+
+ 30
+ 65
+ 321
+ 31
+
+
+
+
-
- -
- ChaCha20-Poly1305
+
+
+
+
+
+
+ 30
+ 340
+ 151
+ 31
+
+
+ -
+
+ AES-256-GCM
+
+
+ -
+
+ AES-192-GCM
+
+
+ -
+
+ AES-128-GCM
+
+
+ -
+
+ AES-256-CBC
+
+
+ -
+
+ AES-192-CBC
+
+
+ -
+
+ AES-128-CBC
+
+
+ -
+
+ ChaCha20-Poly1305
+
+
+ -
+
+ ARIA-256-CBC
+
+
+ -
+
+ CAMELLIA-256-CBC
+
+
+ -
+
+ none
+
+
+
+
+
+ true
+
+
+
+ 30
+ 40
+ 291
+ 21
+
-
- -
- ARIA-256-CBC
+ VPN Addresses Subnet
-
- -
-
- CAMELLIA-256-CBC
+
+ true
-
- -
-
- none
+
+
+
+
+ 30
+ 500
+ 321
+ 40
+
-
-
-
-
- true
-
-
-
- 30
- 350
- 151
- 21
-
-
-
- Cipher
-
-
- true
-
-
-
-
-
- 200
- 380
- 151
- 31
-
-
- -
-
- SHA512
+
+ PointingHandCursor
-
- -
-
- SHA384
-
-
- -
-
- SHA256
-
-
- -
-
- SHA3-512
-
-
- -
-
- SHA3-384
-
-
- -
-
- SHA3-256
-
-
- -
-
- whirlpool
-
-
- -
-
- BLAKE2b512
-
-
- -
-
- BLAKE2s256
-
-
-
-
-
- true
-
-
-
- 200
- 350
- 151
- 21
-
-
-
- Hash
-
-
- true
-
-
-
-
-
- 30
- 440
- 321
- 21
-
-
-
- Block DNS requests outside of VPN
-
-
- false
-
-
-
-
-
- 30
- 530
- 311
- 40
-
-
-
- PointingHandCursor
-
-
- QPushButton {
+
+ QPushButton {
color:rgb(212, 212, 212);
border-radius: 4px;
@@ -5131,107 +5088,194 @@ border-radius: 4px;
QPushButton:hover {
background: #211966;
}
-
-
- Save and restart VPN
-
-
-
-
- true
-
-
-
- 30
- 140
- 151
- 21
-
-
-
- Network protocol
-
-
- true
-
-
-
-
-
- 30
- 170
- 321
- 71
-
-
-
- QFrame{
+
+
+ Save and restart VPN
+
+
+
+
+
+ 30
+ 140
+ 321
+ 71
+
+
+
+ QFrame{
border: 1px solid lightgray;
border-radius: 2px;
margin-top: 0px;
}
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
-
-
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
+
+ 10
+ 40
+ 171
+ 19
+
+
+
+ TCP
+
+
+
+
+
+ 10
+ 10
+ 171
+ 19
+
+
+
+ UDP
+
+
+
+
- 10
- 40
- 171
- 19
+ 200
+ 230
+ 151
+ 31
+
+
+
+
+
+
+
+
+
+
+
+
+ 30
+ 280
+ 321
+ 21
- TCP
+ Auto-negotiate encryption
+
+
+ false
-
+
- 10
- 10
- 171
- 19
+ 200
+ 340
+ 151
+ 31
+
+
+ -
+
+ SHA512
+
+
+ -
+
+ SHA384
+
+
+ -
+
+ SHA256
+
+
+ -
+
+ SHA3-512
+
+
+ -
+
+ SHA3-384
+
+
+ -
+
+ SHA3-256
+
+
+ -
+
+ whirlpool
+
+
+ -
+
+ BLAKE2b512
+
+
+ -
+
+ BLAKE2s256
+
+
+
+
+
+ true
+
+
+
+ 30
+ 230
+ 151
+ 31
- UDP
+ Port
+
+
+ true
-
-
-
-
- 30
- 320
- 321
- 21
-
-
-
- Auto-negotiate encryption
-
-
- false
-
-
-
-
-
- 30
- 530
- 311
- 40
-
-
-
- QProgressBar{
+
+
+
+ 30
+ 400
+ 321
+ 21
+
+
+
+ Block DNS requests outside of VPN
+
+
+ false
+
+
+
+
+
+ 30
+ 500
+ 321
+ 40
+
+
+
+ QProgressBar{
color:rgb(212, 212, 212);
border-radius: 4px;
@@ -5251,124 +5295,61 @@ border-radius: 4px 0px 0px 4px;
}
-
-
- 24
-
-
- Qt::AlignCenter
-
-
- true
-
-
- Configuring...
-
+
+
+ 24
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+ Configuring...
+
+
+
+
+ true
+
+
+
+ 30
+ 550
+ 321
+ 41
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+ progressBar_proto_openvpn_reset
+ label_38
+ label_97
+ label_99
+ label_100
+ lineEdit_proto_openvpn_subnet
+ comboBox_proto_openvpn_cipher
+ label_98
+ pushButton_proto_openvpn_save
+ frame_3
+ lineEdit_proto_openvpn_port
+ checkBox_proto_openvpn_auto_encryption
+ comboBox_proto_openvpn_hash
+ label_103
+ checkBox_proto_openvpn_block_dns
+ label_proto_openvpn_info
-
-
- true
-
-
-
- 40
- 570
- 301
- 41
-
-
-
-
-
-
- Qt::AlignCenter
-
-
- true
-
-
-
-
-
- 200
- 260
- 151
- 31
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
- 30
- 260
- 151
- 31
-
-
-
- Port
-
-
- true
-
-
- progressBar_proto_openvpn_reset
- label_38
- pushButton_back_from_openvpn_settings
- lineEdit_proto_openvpn_subnet
- label_98
- comboBox_proto_openvpn_cipher
- label_99
- comboBox_proto_openvpn_hash
- label_97
- checkBox_proto_openvpn_block_dns
- pushButton_proto_openvpn_save
- label_100
- frame_3
- checkBox_proto_openvpn_auto_encryption
- label_proto_openvpn_info
- lineEdit_proto_openvpn_port
- label_103
-
-
-
- 20
- 30
- 340
- 40
-
-
-
- font-family: Lato;
-font-style: normal;
-font-weight: bold;
-font-size: 20px;
-line-height: 25px;
-color: #100A44;
-
-
-
- ShadowSocks Settings
-
-
- Qt::AlignCenter
-
-
- true
-
-
@@ -5401,42 +5382,167 @@ QPushButton:hover {
-
+
- 190
- 80
- 151
- 31
+ 0
+ 40
+ 380
+ 600
- -
-
- chacha20-poly1305
+
+
+
+ 190
+ 110
+ 151
+ 31
+
-
- -
-
- aes-256-gcm
+
+
-
- -
- aes-128-gcm
+
-
-
-
-
-
- 30
- 530
- 311
- 40
-
-
-
- QProgressBar{
+
+
+
+
+ 20
+ 0
+ 340
+ 30
+
+
+
+ font-family: Lato;
+font-style: normal;
+font-weight: bold;
+font-size: 20px;
+line-height: 25px;
+color: #100A44;
+
+
+
+ ShadowSocks Settings
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+
+ true
+
+
+
+ 30
+ 110
+ 151
+ 31
+
+
+
+ Port
+
+
+ true
+
+
+
+
+
+ 190
+ 60
+ 151
+ 31
+
+
+ -
+
+ chacha20-poly1305
+
+
+ -
+
+ aes-256-gcm
+
+
+ -
+
+ aes-128-gcm
+
+
+
+
+
+ true
+
+
+
+ 30
+ 60
+ 151
+ 31
+
+
+
+ Cipher
+
+
+ true
+
+
+
+
+
+ 30
+ 500
+ 321
+ 40
+
+
+
+ PointingHandCursor
+
+
+ QPushButton {
+color:rgb(212, 212, 212);
+border-radius: 4px;
+
+font-family: Lato;
+font-style: normal;
+font-weight: normal;
+font-size: 16px;
+line-height: 21px;
+
+background: #100A44;
+border-radius: 4px;
+}
+QPushButton:hover {
+background: #211966;
+}
+
+
+ Save and restart VPN
+
+
+
+
+
+ 30
+ 500
+ 321
+ 40
+
+
+
+ QProgressBar{
color:rgb(212, 212, 212);
border-radius: 4px;
@@ -5456,160 +5562,53 @@ border-radius: 4px 0px 0px 4px;
}
-
-
- 24
-
-
- Qt::AlignCenter
-
-
- true
-
-
- Configuring...
-
-
-
-
-
- 30
- 530
- 311
- 40
-
-
-
- PointingHandCursor
-
-
- QPushButton {
-color:rgb(212, 212, 212);
-border-radius: 4px;
-
-font-family: Lato;
-font-style: normal;
-font-weight: normal;
-font-size: 16px;
-line-height: 21px;
-
-background: #100A44;
-border-radius: 4px;
-}
-QPushButton:hover {
-background: #211966;
-}
-
-
- Save and restart VPN
-
-
-
-
- true
-
-
-
- 30
- 80
- 151
- 31
-
-
-
- Cipher
-
-
- true
-
-
-
-
- true
-
-
-
- 40
- 570
- 301
- 41
-
-
-
-
-
-
- Qt::AlignCenter
-
-
- true
-
-
-
-
-
- 190
- 130
- 151
- 31
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
- 30
- 130
- 151
- 31
-
-
-
- Port
-
-
- true
-
+
+
+ 24
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+ Configuring...
+
+
+
+
+ true
+
+
+
+ 30
+ 550
+ 321
+ 41
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+ progressBar_proto_shadowsocks_reset
+ lineEdit_proto_shadowsocks_port
+ label_43
+ label_104
+ comboBox_proto_shadowsocks_cipher
+ label_101
+ pushButton_proto_shadowsocks_save
+ label_proto_shadowsocks_info
-
-
-
- 20
- 30
- 340
- 40
-
-
-
- font-family: Lato;
-font-style: normal;
-font-weight: bold;
-font-size: 20px;
-line-height: 25px;
-color: #100A44;
-
-
-
- Cloak Settings
-
-
- Qt::AlignCenter
-
-
- true
-
-
@@ -5642,71 +5641,218 @@ QPushButton:hover {
-
+
- 190
- 80
- 151
- 31
+ 0
+ 40
+ 381
+ 600
- -
-
- chacha20-poly1305
+
+
+
+ 190
+ 160
+ 151
+ 31
+
-
- -
-
- aes-256-gcm
+
+
-
- -
- aes-192-gcm
+
+
+
+
+
+ true
+
+
+
+ 30
+ 160
+ 151
+ 31
+
-
- -
- aes-128-gcm
+ Port
+
+
+ true
+
+
+
+
+
+ 20
+ 0
+ 340
+ 30
+
+
+
+ font-family: Lato;
+font-style: normal;
+font-weight: bold;
+font-size: 20px;
+line-height: 25px;
+color: #100A44;
+
-
- -
- plain
+ Cloak Settings
-
-
-
-
- true
-
-
-
- 30
- 80
- 151
- 31
-
-
-
- Cipher
-
-
- true
-
-
-
-
-
- 30
- 530
- 311
- 40
-
-
-
- QProgressBar{
+
+ Qt::AlignCenter
+
+
+ true
+
+
+
+
+
+ 190
+ 110
+ 151
+ 31
+
+
+
+
+
+
+ mail.ru
+
+
+
+
+ true
+
+
+
+ 30
+ 60
+ 151
+ 31
+
+
+
+ Cipher
+
+
+ true
+
+
+
+
+
+ 30
+ 110
+ 130
+ 31
+
+
+
+
+ 130
+ 0
+
+
+
+
+ 130
+ 16777215
+
+
+
+ Fake Web Site
+
+
+
+
+
+ 190
+ 60
+ 151
+ 31
+
+
+ -
+
+ chacha20-poly1305
+
+
+ -
+
+ aes-256-gcm
+
+
+ -
+
+ aes-192-gcm
+
+
+ -
+
+ aes-128-gcm
+
+
+ -
+
+ plain
+
+
+
+
+
+
+ 30
+ 500
+ 321
+ 40
+
+
+
+ PointingHandCursor
+
+
+ QPushButton {
+color:rgb(212, 212, 212);
+border-radius: 4px;
+
+font-family: Lato;
+font-style: normal;
+font-weight: normal;
+font-size: 16px;
+line-height: 21px;
+
+background: #100A44;
+border-radius: 4px;
+}
+QPushButton:hover {
+background: #211966;
+}
+
+
+ Save and restart VPN
+
+
+
+
+
+ 30
+ 500
+ 321
+ 40
+
+
+
+ QProgressBar{
color:rgb(212, 212, 212);
border-radius: 4px;
@@ -5726,151 +5872,52 @@ border-radius: 4px 0px 0px 4px;
}
-
-
- 24
-
-
- Qt::AlignCenter
-
-
- true
-
-
- Configuring...
-
-
-
-
- true
-
-
-
- 40
- 580
- 301
- 41
-
-
-
-
-
-
- Qt::AlignCenter
-
-
- true
-
-
-
-
-
- 30
- 530
- 311
- 40
-
-
-
- PointingHandCursor
-
-
- QPushButton {
-color:rgb(212, 212, 212);
-border-radius: 4px;
-
-font-family: Lato;
-font-style: normal;
-font-weight: normal;
-font-size: 16px;
-line-height: 21px;
-
-background: #100A44;
-border-radius: 4px;
-}
-QPushButton:hover {
-background: #211966;
-}
-
-
- Save and restart VPN
-
-
-
-
-
- 30
- 130
- 130
- 31
-
-
-
-
- 130
- 0
-
-
-
-
- 130
- 16777215
-
-
-
- Fake Web Site
-
-
-
-
-
- 190
- 180
- 151
- 31
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
- 30
- 180
- 151
- 31
-
-
-
- Port
-
-
- true
-
-
-
-
-
- 190
- 130
- 151
- 31
-
-
-
-
-
-
- mail.ru
-
+
+
+ 24
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+ Configuring...
+
+
+
+
+ true
+
+
+
+ 30
+ 550
+ 321
+ 41
+
+
+
+
+
+
+ Qt::AlignCenter
+
+
+ true
+
+
+ progressBar_proto_cloak_reset
+ lineEdit_proto_cloak_port
+ label_105
+ label_44
+ lineEdit_proto_cloak_site
+ label_102
+ label_47
+ comboBox_proto_cloak_cipher
+ pushButton_proto_cloak_save
+ label_proto_cloak_info