Bug fixes:
- auto install tap - share connectionState - service crash fix
This commit is contained in:
parent
a50cdd5bc2
commit
953eca6695
25 changed files with 919 additions and 89 deletions
|
@ -1,5 +1,8 @@
|
|||
#include <QApplication>
|
||||
#include <QClipboard>
|
||||
#include <QDesktopServices>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QKeyEvent>
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
|
@ -17,7 +20,6 @@
|
|||
#include "debug.h"
|
||||
#include "defines.h"
|
||||
#include "mainwindow.h"
|
||||
#include "settings.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "utils.h"
|
||||
#include "vpnconnection.h"
|
||||
|
@ -33,8 +35,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
QMainWindow(parent),
|
||||
#endif
|
||||
ui(new Ui::MainWindow),
|
||||
m_vpnConnection(nullptr),
|
||||
m_settings(new Settings)
|
||||
m_vpnConnection(nullptr)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->label_error_text->clear();
|
||||
|
@ -43,8 +44,6 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
ui->stackedWidget_main->setSpeed(200);
|
||||
ui->stackedWidget_main->setAnimation(QEasingCurve::Linear);
|
||||
|
||||
ui->pushButton_blocked_list->setEnabled(false);
|
||||
ui->pushButton_share_connection->setEnabled(false);
|
||||
#ifdef Q_OS_MAC
|
||||
ui->widget_tittlebar->hide();
|
||||
ui->stackedWidget_main->move(0,0);
|
||||
|
@ -53,7 +52,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
|
||||
// Post initialization
|
||||
|
||||
if (m_settings->haveAuthData()) {
|
||||
if (m_settings.haveAuthData()) {
|
||||
goToPage(Page::Vpn, true, false);
|
||||
} else {
|
||||
goToPage(Page::Start, true, false);
|
||||
|
@ -62,12 +61,20 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
setupTray();
|
||||
setupUiConnections();
|
||||
|
||||
customSitesModel = new QStringListModel();
|
||||
ui->listView_sites_custom->setModel(customSitesModel);
|
||||
|
||||
connect(ui->listView_sites_custom, &QListView::doubleClicked, [&](const QModelIndex &index){
|
||||
QDesktopServices::openUrl("https://" + index.data().toString());
|
||||
});
|
||||
connect(ui->lineEdit_sites_add_custom, &QLineEdit::returnPressed, [&](){
|
||||
ui->pushButton_sites_add_custom->click();
|
||||
});
|
||||
|
||||
initCustomSites();
|
||||
|
||||
ui->pushButton_general_settings_exit->hide();
|
||||
ui->pushButton_share_connection->hide();
|
||||
ui->radioButton_mode_all_sites->hide();
|
||||
ui->radioButton_mode_include_selected_sites->hide();
|
||||
ui->pushButton_blocked_list->hide();
|
||||
ui->label_description->hide();
|
||||
//ui->pushButton_share_connection->hide();
|
||||
|
||||
setFixedSize(width(),height());
|
||||
|
||||
|
@ -119,9 +126,9 @@ void MainWindow::goToPage(Page page, bool reset, bool slide)
|
|||
ui->label_server_settings_wait_info->hide();
|
||||
ui->label_server_settings_wait_info->clear();
|
||||
ui->label_server_settings_server->setText(QString("%1@%2:%3")
|
||||
.arg(m_settings->userName())
|
||||
.arg(m_settings->serverName())
|
||||
.arg(m_settings->serverPort()));
|
||||
.arg(m_settings.userName())
|
||||
.arg(m_settings.serverName())
|
||||
.arg(m_settings.serverPort()));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -241,8 +248,8 @@ void MainWindow::onPushButtonNewServerConnectWithNewData(bool)
|
|||
ui->label_new_server_wait_info);
|
||||
|
||||
if (ok) {
|
||||
m_settings->setServerCredentials(serverCredentials);
|
||||
m_settings->save();
|
||||
m_settings.setServerCredentials(serverCredentials);
|
||||
m_settings.save();
|
||||
|
||||
goToPage(Page::Vpn);
|
||||
qApp->processEvents();
|
||||
|
@ -251,6 +258,29 @@ void MainWindow::onPushButtonNewServerConnectWithNewData(bool)
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::onPushButtonNewServerConnectWithExistingCode(bool)
|
||||
{
|
||||
QString s = ui->lineEdit_start_existing_code->text();
|
||||
s.replace("vpn://", "");
|
||||
QJsonObject o = QJsonDocument::fromJson(QByteArray::fromBase64(s.toUtf8())).object();
|
||||
|
||||
qDebug().noquote() << QByteArray::fromBase64(s.toUtf8());
|
||||
ServerCredentials credentials;
|
||||
credentials.hostName = o.value("h").toString();
|
||||
credentials.port = o.value("p").toInt();
|
||||
credentials.userName = o.value("u").toString();
|
||||
credentials.password = o.value("w").toString();
|
||||
|
||||
m_settings.setServerCredentials(credentials);
|
||||
m_settings.save();
|
||||
|
||||
goToPage(Page::Vpn);
|
||||
qDebug() << QString("Added server %3@%1:%2").
|
||||
arg(credentials.hostName).
|
||||
arg(credentials.port).
|
||||
arg(credentials.userName);
|
||||
}
|
||||
|
||||
bool MainWindow::installServer(ServerCredentials credentials,
|
||||
QWidget *page, QProgressBar *progress, QPushButton *button, QLabel *info)
|
||||
{
|
||||
|
@ -312,7 +342,7 @@ bool MainWindow::installServer(ServerCredentials credentials,
|
|||
void MainWindow::onPushButtonReinstallServer(bool)
|
||||
{
|
||||
onDisconnect();
|
||||
installServer(m_settings->serverCredentials(),
|
||||
installServer(m_settings.serverCredentials(),
|
||||
ui->page_server_settings,
|
||||
ui->progressBar_server_settings_reinstall,
|
||||
ui->pushButton_server_settings_reinstall,
|
||||
|
@ -323,7 +353,7 @@ void MainWindow::onPushButtonClearServer(bool)
|
|||
{
|
||||
onDisconnect();
|
||||
|
||||
ErrorCode e = ServerController::removeServer(m_settings->serverCredentials(), Protocol::Any);
|
||||
ErrorCode e = ServerController::removeServer(m_settings.serverCredentials(), Protocol::Any);
|
||||
if (e) {
|
||||
QMessageBox::warning(this, APPLICATION_NAME,
|
||||
tr("Error occurred while configuring server.") + "\n" +
|
||||
|
@ -342,12 +372,12 @@ void MainWindow::onPushButtonForgetServer(bool)
|
|||
{
|
||||
onDisconnect();
|
||||
|
||||
m_settings->setUserName("");
|
||||
m_settings->setPassword("");
|
||||
m_settings->setServerName("");
|
||||
m_settings->setServerPort();
|
||||
m_settings.setUserName("");
|
||||
m_settings.setPassword("");
|
||||
m_settings.setServerName("");
|
||||
m_settings.setServerPort();
|
||||
|
||||
m_settings->save();
|
||||
m_settings.save();
|
||||
|
||||
goToPage(Page::Start);
|
||||
}
|
||||
|
@ -483,6 +513,7 @@ void MainWindow::setupUiConnections()
|
|||
connect(ui->pushButton_connect, SIGNAL(clicked(bool)), this, SLOT(onPushButtonConnectClicked(bool)));
|
||||
connect(ui->pushButton_new_server_setup, &QPushButton::clicked, this, [this](){ goToPage(Page::NewServer); });
|
||||
connect(ui->pushButton_new_server_connect_with_new_data, SIGNAL(clicked(bool)), this, SLOT(onPushButtonNewServerConnectWithNewData(bool)));
|
||||
connect(ui->pushButton_new_server_connect, SIGNAL(clicked(bool)), this, SLOT(onPushButtonNewServerConnectWithExistingCode(bool)));
|
||||
|
||||
connect(ui->pushButton_server_settings_reinstall, SIGNAL(clicked(bool)), this, SLOT(onPushButtonReinstallServer(bool)));
|
||||
connect(ui->pushButton_server_settings_clear, SIGNAL(clicked(bool)), this, SLOT(onPushButtonClearServer(bool)));
|
||||
|
@ -491,7 +522,19 @@ void MainWindow::setupUiConnections()
|
|||
connect(ui->pushButton_blocked_list, &QPushButton::clicked, this, [this](){ goToPage(Page::Sites); });
|
||||
connect(ui->pushButton_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::GeneralSettings); });
|
||||
connect(ui->pushButton_server_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::ServerSettings); });
|
||||
connect(ui->pushButton_share_connection, &QPushButton::clicked, this, [this](){ goToPage(Page::ShareConnection); });
|
||||
connect(ui->pushButton_share_connection, &QPushButton::clicked, this, [this](){
|
||||
goToPage(Page::ShareConnection);
|
||||
updateShareCode();
|
||||
});
|
||||
|
||||
connect(ui->pushButton_copy_sharing_code, &QPushButton::clicked, this, [this](){
|
||||
QGuiApplication::clipboard()->setText(ui->textEdit_sharing_code->toPlainText());
|
||||
ui->pushButton_copy_sharing_code->setText(tr("Copied"));
|
||||
|
||||
QTimer::singleShot(3000, [this]() {
|
||||
ui->pushButton_copy_sharing_code->setText(tr("Copy"));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
connect(ui->pushButton_back_from_sites, &QPushButton::clicked, this, [this](){ goToPage(Page::Vpn); });
|
||||
|
@ -500,6 +543,8 @@ void MainWindow::setupUiConnections()
|
|||
connect(ui->pushButton_back_from_server_settings, &QPushButton::clicked, this, [this](){ goToPage(Page::GeneralSettings); });
|
||||
connect(ui->pushButton_back_from_share, &QPushButton::clicked, this, [this](){ goToPage(Page::GeneralSettings); });
|
||||
|
||||
connect(ui->pushButton_sites_add_custom, &QPushButton::clicked, this, [this](){ onPushButtonAddCustomSitesClicked(); });
|
||||
connect(ui->pushButton_sites_delete_custom, &QPushButton::clicked, this, [this](){ onPushButtonDeleteCustomSiteClicked(); });
|
||||
}
|
||||
|
||||
void MainWindow::setTrayState(VpnProtocol::ConnectionState state)
|
||||
|
@ -564,7 +609,7 @@ void MainWindow::onConnect()
|
|||
qApp->processEvents();
|
||||
|
||||
// TODO: Call connectToVpn with restricted server account
|
||||
ServerCredentials credentials = m_settings->serverCredentials();
|
||||
ServerCredentials credentials = m_settings.serverCredentials();
|
||||
|
||||
ErrorCode errorCode = m_vpnConnection->connectToVpn(credentials);
|
||||
if (errorCode) {
|
||||
|
@ -591,3 +636,89 @@ void MainWindow::onTrayActionConnect()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::onPushButtonAddCustomSitesClicked()
|
||||
{
|
||||
QString newSite = ui->lineEdit_sites_add_custom->text();
|
||||
|
||||
if (newSite.isEmpty()) return;
|
||||
if (!newSite.contains(".")) return;
|
||||
|
||||
// get domain name if it present
|
||||
newSite.replace("https://", "");
|
||||
newSite.replace("http://", "");
|
||||
newSite.replace("ftp://", "");
|
||||
|
||||
newSite = newSite.split("/", QString::SkipEmptyParts).first();
|
||||
|
||||
|
||||
QStringList customSites = m_settings.customSites();
|
||||
if (!customSites.contains(newSite)) {
|
||||
customSites.append(newSite);
|
||||
m_settings.setCustomSites(customSites);
|
||||
|
||||
QString newIp = Utils::getIPAddress(newSite);
|
||||
QStringList customIps = m_settings.customIps();
|
||||
if (!newIp.isEmpty() && !customIps.contains(newIp)) {
|
||||
customIps.append(newIp);
|
||||
m_settings.setCustomIps(customIps);
|
||||
|
||||
// add to routes immediatelly
|
||||
// if (vpnStatus() == VPNStatusConnected) {
|
||||
// //Router::Instance().routeAdd(newIp, vpnGate());
|
||||
// }
|
||||
}
|
||||
|
||||
initCustomSites();
|
||||
|
||||
ui->lineEdit_sites_add_custom->clear();
|
||||
}
|
||||
else {
|
||||
qDebug() << "customSites already contains" << newSite;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::onPushButtonDeleteCustomSiteClicked()
|
||||
{
|
||||
QModelIndex index = ui->listView_sites_custom->currentIndex();
|
||||
QString siteToDelete = index.data(Qt::DisplayRole).toString();
|
||||
|
||||
if (siteToDelete.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QString ipToDelete = Utils::getIPAddress(siteToDelete);
|
||||
|
||||
QStringList customSites = m_settings.customSites();
|
||||
customSites.removeAll(siteToDelete);
|
||||
qDebug() << "Deleted custom site:" << siteToDelete;
|
||||
m_settings.setCustomSites(customSites);
|
||||
|
||||
QStringList customIps = m_settings.customIps();
|
||||
customIps.removeAll(ipToDelete);
|
||||
qDebug() << "Deleted custom ip:" << ipToDelete;
|
||||
m_settings.setCustomIps(customIps);
|
||||
|
||||
|
||||
initCustomSites();
|
||||
|
||||
//Router::Instance().routeDelete(Utils::getIPAddress(ipToDelete));
|
||||
//Router::Instance().flushDns();
|
||||
}
|
||||
|
||||
void MainWindow::initCustomSites()
|
||||
{
|
||||
customSitesModel->setStringList(m_settings.customSites());
|
||||
}
|
||||
|
||||
void MainWindow::updateShareCode()
|
||||
{
|
||||
QJsonObject o;
|
||||
o.insert("h", m_settings.serverName());
|
||||
o.insert("p", m_settings.serverPort());
|
||||
o.insert("u", m_settings.userName());
|
||||
o.insert("w", m_settings.password());
|
||||
|
||||
QByteArray ba = QJsonDocument(o).toJson().toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
|
||||
ui->textEdit_sharing_code->setText(QString("vpn://%1").arg(QString(ba)));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue