import/export fixes

This commit is contained in:
pokamest 2021-05-10 14:19:36 +03:00
parent e3fb239de9
commit 835f767c3f
5 changed files with 943 additions and 847 deletions

View file

@ -171,10 +171,10 @@ void Settings::clearLastConnectionConfig(int serverIndex, DockerContainer contai
qDebug() << "Settings::clearLastConnectionConfig for" << serverIndex << container << proto; 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()); return (!cred.hostName.isEmpty() && !cred.userName.isEmpty() && !cred.password.isEmpty());
} }

View file

@ -70,7 +70,7 @@ public:
void clearLastConnectionConfig(int serverIndex, DockerContainer container, Protocol proto = Protocol::Any); void clearLastConnectionConfig(int serverIndex, DockerContainer container, Protocol proto = Protocol::Any);
bool haveAuthData() const; bool haveAuthData(int serverIndex) const;
QString nextAvailableServerName() const; QString nextAvailableServerName() const;
// App settings section // App settings section

View file

@ -88,7 +88,7 @@ MainWindow::MainWindow(QWidget *parent) :
// Post initialization // Post initialization
goToPage(Page::Start, true, false); goToPage(Page::Start, true, false);
if (m_settings.haveAuthData()) { if (m_settings.defaultServerIndex() >= 0) {
goToPage(Page::Vpn, true, false); goToPage(Page::Vpn, true, false);
} }
@ -114,7 +114,7 @@ MainWindow::MainWindow(QWidget *parent) :
onConnectionStateChanged(VpnProtocol::ConnectionState::Disconnected); onConnectionStateChanged(VpnProtocol::ConnectionState::Disconnected);
if (m_settings.isAutoConnect() && m_settings.haveAuthData()) { if (m_settings.isAutoConnect() && m_settings.defaultServerIndex() >= 0) {
QTimer::singleShot(1000, this, [this](){ QTimer::singleShot(1000, this, [this](){
ui->pushButton_connect->setEnabled(false); ui->pushButton_connect->setEnabled(false);
onConnect(); onConnect();
@ -224,6 +224,17 @@ void MainWindow::goToPage(Page page, bool reset, bool slide)
pagesStack.push(page); 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() void MainWindow::closePage()
{ {
Page prev = pagesStack.pop(); Page prev = pagesStack.pop();
@ -506,9 +517,16 @@ void MainWindow::onPushButtonNewServerImport(bool)
ServerCredentials credentials; ServerCredentials credentials;
credentials.hostName = o.value("h").toString(); credentials.hostName = o.value("h").toString();
if (credentials.hostName.isEmpty()) credentials.hostName = o.value(config_key::hostName).toString();
credentials.port = o.value("p").toInt(); credentials.port = o.value("p").toInt();
if (credentials.port == 0) credentials.port = o.value(config_key::port).toInt();
credentials.userName = o.value("u").toString(); credentials.userName = o.value("u").toString();
if (credentials.userName.isEmpty()) credentials.userName = o.value(config_key::userName).toString();
credentials.password = o.value("w").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"). qDebug() << QString("Added server %3@%1:%2").
arg(credentials.hostName). arg(credentials.hostName).
@ -517,13 +535,15 @@ void MainWindow::onPushButtonNewServerImport(bool)
//qDebug() << QString("Password") << credentials.password; //qDebug() << QString("Password") << credentials.password;
if (!credentials.isValid()) { if (credentials.isValid() || o.contains(config_key::containers)) {
return; 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, 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_servers_list, &QPushButton::clicked, this, [this](){ goToPage(Page::ServersList); });
connect(ui->pushButton_share_connection, &QPushButton::clicked, this, [this](){ connect(ui->pushButton_share_connection, &QPushButton::clicked, this, [this](){
selectedServerIndex = m_settings.defaultServerIndex();
selectedDockerContainer = m_settings.defaultContainer(selectedServerIndex);
goToPage(Page::ShareConnection); 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](){ connect(ui->pushButton_proto_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpn; selectedDockerContainer = DockerContainer::OpenVpn;
updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn), updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn),
selectedDockerContainer); selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::OpenVpnSettings); goToPage(Page::OpenVpnSettings);
}); });
@ -1035,13 +1059,13 @@ void MainWindow::setupProtocolsPageConnections()
connect(ui->pushButton_proto_ss_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){ connect(ui->pushButton_proto_ss_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks; selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn), updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn),
selectedDockerContainer); selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::OpenVpnSettings); goToPage(Page::OpenVpnSettings);
}); });
connect(ui->pushButton_proto_ss_openvpn_cont_ss_config, &QPushButton::clicked, this, [this](){ connect(ui->pushButton_proto_ss_openvpn_cont_ss_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks; selectedDockerContainer = DockerContainer::OpenVpnOverShadowSocks;
updateShadowSocksPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::ShadowSocks), updateShadowSocksPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::ShadowSocks),
selectedDockerContainer); selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::ShadowSocksSettings); goToPage(Page::ShadowSocksSettings);
}); });
@ -1049,19 +1073,19 @@ void MainWindow::setupProtocolsPageConnections()
connect(ui->pushButton_proto_cloak_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){ connect(ui->pushButton_proto_cloak_openvpn_cont_openvpn_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverCloak; selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn), updateOpenVpnPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::OpenVpn),
selectedDockerContainer); selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::OpenVpnSettings); goToPage(Page::OpenVpnSettings);
}); });
connect(ui->pushButton_proto_cloak_openvpn_cont_ss_config, &QPushButton::clicked, this, [this](){ connect(ui->pushButton_proto_cloak_openvpn_cont_ss_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverCloak; selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
updateShadowSocksPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::ShadowSocks), updateShadowSocksPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::ShadowSocks),
selectedDockerContainer); selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::ShadowSocksSettings); goToPage(Page::ShadowSocksSettings);
}); });
connect(ui->pushButton_proto_cloak_openvpn_cont_cloak_config, &QPushButton::clicked, this, [this](){ connect(ui->pushButton_proto_cloak_openvpn_cont_cloak_config, &QPushButton::clicked, this, [this](){
selectedDockerContainer = DockerContainer::OpenVpnOverCloak; selectedDockerContainer = DockerContainer::OpenVpnOverCloak;
updateCloakPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::Cloak), updateCloakPage(m_settings.protocolConfig(selectedServerIndex, selectedDockerContainer, Protocol::Cloak),
selectedDockerContainer); selectedDockerContainer, m_settings.haveAuthData(selectedServerIndex));
goToPage(Page::CloakSettings); goToPage(Page::CloakSettings);
}); });
@ -1283,7 +1307,8 @@ void MainWindow::setupSharePageConnections()
serverConfig.insert(config_key::defaultContainer, containerToString(selectedDockerContainer)); 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_generate->setEnabled(true);
ui->pushButton_share_amnezia_copy->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->hide();
ui->label_server_settings_wait_info->clear(); 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); QJsonObject server = m_settings.server(selectedServerIndex);
QString port = server.value(config_key::port).toString(); QString port = server.value(config_key::port).toString();
ui->label_server_settings_server->setText(QString("%1@%2%3%4") ui->label_server_settings_server->setText(QString("%1@%2%3%4")
@ -1546,23 +1574,29 @@ void MainWindow::updateProtocolsPage()
auto containers = m_settings.containers(selectedServerIndex); auto containers = m_settings.containers(selectedServerIndex);
bool haveAuthData = m_settings.haveAuthData(selectedServerIndex);
DockerContainer defaultContainer = m_settings.defaultContainer(selectedServerIndex); DockerContainer defaultContainer = m_settings.defaultContainer(selectedServerIndex);
ui->pushButton_proto_cloak_openvpn_cont_default->setChecked(defaultContainer == DockerContainer::OpenVpnOverCloak); 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_ss_openvpn_cont_default->setChecked(defaultContainer == DockerContainer::OpenVpnOverShadowSocks);
ui->pushButton_proto_openvpn_cont_default->setChecked(defaultContainer == DockerContainer::OpenVpn); 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_cloak_openvpn_cont_default->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverCloak));
ui->pushButton_proto_ss_openvpn_cont_default->setVisible(containers.contains(DockerContainer::OpenVpnOverShadowSocks)); ui->pushButton_proto_ss_openvpn_cont_default->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverShadowSocks));
ui->pushButton_proto_openvpn_cont_default->setVisible(containers.contains(DockerContainer::OpenVpn)); 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_cloak_openvpn_cont_share->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverCloak));
ui->pushButton_proto_ss_openvpn_cont_share->setVisible(containers.contains(DockerContainer::OpenVpnOverShadowSocks)); ui->pushButton_proto_ss_openvpn_cont_share->setVisible(haveAuthData && containers.contains(DockerContainer::OpenVpnOverShadowSocks));
ui->pushButton_proto_openvpn_cont_share->setVisible(containers.contains(DockerContainer::OpenVpn)); 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_cloak_openvpn_cont_install->setChecked(containers.contains(DockerContainer::OpenVpnOverCloak));
ui->pushButton_proto_ss_openvpn_cont_install->setChecked(containers.contains(DockerContainer::OpenVpnOverShadowSocks)); 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_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_cloak_settings->setVisible(containers.contains(DockerContainer::OpenVpnOverCloak));
ui->frame_openvpn_ss_settings->setVisible(containers.contains(DockerContainer::OpenVpnOverShadowSocks)); ui->frame_openvpn_ss_settings->setVisible(containers.contains(DockerContainer::OpenVpnOverShadowSocks));
ui->frame_openvpn_settings->setVisible(containers.contains(DockerContainer::OpenVpn)); ui->frame_openvpn_settings->setVisible(containers.contains(DockerContainer::OpenVpn));
@ -1582,8 +1616,12 @@ void MainWindow::updateShareCodePage()
//qDebug() << "Share code" << QJsonDocument(o).toJson(); //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_udp->setEnabled(true);
ui->radioButton_proto_openvpn_tcp->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); 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). ui->comboBox_proto_shadowsocks_cipher->setCurrentText(ssConfig.value(config_key::cipher).
toString(protocols::shadowsocks::defaultCipher)); toString(protocols::shadowsocks::defaultCipher));
@ -1631,8 +1673,12 @@ void MainWindow::updateShadowSocksPage(const QJsonObject &ssConfig, DockerContai
ui->lineEdit_proto_shadowsocks_port->setEnabled(container == DockerContainer::OpenVpnOverShadowSocks); 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). ui->comboBox_proto_cloak_cipher->setCurrentText(ckConfig.value(config_key::cipher).
toString(protocols::cloak::defaultCipher)); toString(protocols::cloak::defaultCipher));
@ -1713,15 +1759,17 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre
} }
// Amnezia sharing // Amnezia sharing
QJsonObject exportContainer; // QJsonObject exportContainer;
for (Protocol p: protocolsForContainer(container)) { // for (Protocol p: protocolsForContainer(container)) {
QJsonObject protocolConfig = containerConfig.value(protoToString(p)).toObject(); // QJsonObject protocolConfig = containerConfig.value(protoToString(p)).toObject();
protocolConfig.remove(config_key::last_config); // protocolConfig.remove(config_key::last_config);
exportContainer.insert(protoToString(p), protocolConfig); // exportContainer.insert(protoToString(p), protocolConfig);
} // }
exportContainer.insert(config_key::container, containerToString(container)); // 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) void MainWindow::makeSitesListItem(QListWidget *listWidget, const QString &address)

View file

@ -73,6 +73,7 @@ private slots:
private: private:
void goToPage(Page page, bool reset = true, bool slide = true); void goToPage(Page page, bool reset = true, bool slide = true);
void setStartPage(Page page, bool slide = true);
void closePage(); void closePage();
QWidget *getPageWidget(Page page); QWidget *getPageWidget(Page page);
@ -101,9 +102,9 @@ private:
void updateServersListPage(); void updateServersListPage();
void updateProtocolsPage(); void updateProtocolsPage();
void updateShareCodePage(); void updateShareCodePage();
void updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container); void updateOpenVpnPage(const QJsonObject &openvpnConfig, DockerContainer container, bool haveAuthData);
void updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container); void updateShadowSocksPage(const QJsonObject &ssConfig, DockerContainer container, bool haveAuthData);
void updateCloakPage(const QJsonObject &ckConfig, DockerContainer container); void updateCloakPage(const QJsonObject &ckConfig, DockerContainer container, bool haveAuthData);
void updateSharingPage(int serverIndex, const ServerCredentials &credentials, void updateSharingPage(int serverIndex, const ServerCredentials &credentials,
DockerContainer container); DockerContainer container);

File diff suppressed because it is too large Load diff