From 88afb27c4242fafb294235ee1023e9888f4c4d0c Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 26 Aug 2024 17:34:56 +0330 Subject: [PATCH] feat: Add local address to wireguard --- fmt/Bean2CoreObj_box.cpp | 2 +- fmt/Bean2Link.cpp | 1 + fmt/Link2Bean.cpp | 4 ++ fmt/WireguardBean.h | 2 + ui/edit/edit_wireguard.cpp | 2 + ui/edit/edit_wireguard.ui | 77 ++++++++++++++++++++++---------------- 6 files changed, 55 insertions(+), 33 deletions(-) diff --git a/fmt/Bean2CoreObj_box.cpp b/fmt/Bean2CoreObj_box.cpp index f6e4018..db2eea2 100644 --- a/fmt/Bean2CoreObj_box.cpp +++ b/fmt/Bean2CoreObj_box.cpp @@ -264,7 +264,7 @@ namespace NekoGui_fmt { {"server", serverAddress}, {"server_port", serverPort}, {"interface_name", tun_name}, - {"local_address", QJsonArray{"172.20.0.1/24", "fdfe:dcba:9876::1/96"}}, + {"local_address", QListStr2QJsonArray(localAddress)}, {"private_key", privateKey}, {"peer_public_key", publicKey}, {"pre_shared_key", preSharedKey}, diff --git a/fmt/Bean2Link.cpp b/fmt/Bean2Link.cpp index 7681af3..e6b8278 100644 --- a/fmt/Bean2Link.cpp +++ b/fmt/Bean2Link.cpp @@ -266,6 +266,7 @@ namespace NekoGui_fmt { q.addQueryItem("reserved", FormatReserved()); q.addQueryItem("mtu", Int2String(MTU)); q.addQueryItem("use_system_interface", useSystemInterface ? "true":"false"); + q.addQueryItem("local_address", localAddress.join("-")); url.setQuery(q); return url.toString(QUrl::FullyEncoded); } diff --git a/fmt/Link2Bean.cpp b/fmt/Link2Bean.cpp index d7b6f85..02ac27a 100644 --- a/fmt/Link2Bean.cpp +++ b/fmt/Link2Bean.cpp @@ -361,6 +361,10 @@ namespace NekoGui_fmt { if (!rawReserved.isEmpty()) { for (const auto &item: rawReserved.split("-")) reserved += item.toInt(); } + auto rawLocalAddr = query.queryItemValue("local_address"); + if (!rawLocalAddr.isEmpty()) { + for (const auto &item: rawLocalAddr.split("-")) localAddress += item; + } MTU = query.queryItemValue("mtu").toInt(); useSystemInterface = query.queryItemValue("use_system_interface") == "true"; diff --git a/fmt/WireguardBean.h b/fmt/WireguardBean.h index fc8ca58..8c0e46e 100644 --- a/fmt/WireguardBean.h +++ b/fmt/WireguardBean.h @@ -9,6 +9,7 @@ namespace NekoGui_fmt { QString publicKey; QString preSharedKey; QList reserved; + QStringList localAddress; int MTU = 1420; bool useSystemInterface = false; bool enableGSO = false; @@ -18,6 +19,7 @@ namespace NekoGui_fmt { _add(new configItem("public_key", &publicKey, itemType::string)); _add(new configItem("pre_shared_key", &preSharedKey, itemType::string)); _add(new configItem("reserved", &reserved, itemType::integerList)); + _add(new configItem("local_address", &localAddress, itemType::stringList)); _add(new configItem("mtu", &MTU, itemType::integer)); _add(new configItem("use_system_proxy", &useSystemInterface, itemType::boolean)); _add(new configItem("enable_gso", &enableGSO, itemType::boolean)); diff --git a/ui/edit/edit_wireguard.cpp b/ui/edit/edit_wireguard.cpp index e01e0f6..1a3136d 100644 --- a/ui/edit/edit_wireguard.cpp +++ b/ui/edit/edit_wireguard.cpp @@ -28,6 +28,7 @@ void EditWireguard::onStart(std::shared_ptr _ent) { ui->mtu->setText(Int2String(bean->MTU)); ui->sys_ifc->setChecked(bean->useSystemInterface); ui->enable_gso->setChecked(bean->enableGSO); + ui->local_addr->setText(bean->localAddress.join(",")); } bool EditWireguard::onEnd() { @@ -45,6 +46,7 @@ bool EditWireguard::onEnd() { bean->MTU = ui->mtu->text().toInt(); bean->useSystemInterface = ui->sys_ifc->isChecked(); bean->enableGSO = ui->enable_gso->isChecked(); + bean->localAddress = ui->local_addr->text().replace(" ", "").split(","); return true; } \ No newline at end of file diff --git a/ui/edit/edit_wireguard.ui b/ui/edit/edit_wireguard.ui index f72da99..b995938 100644 --- a/ui/edit/edit_wireguard.ui +++ b/ui/edit/edit_wireguard.ui @@ -14,29 +14,10 @@ EditWireguard - - - - - - - - - - - + + - Public Key - - - - - - - - - - Enable GSO + MTU @@ -47,20 +28,26 @@ - - + + - Private Key + 1420 - + Use System Interface + + + + + + @@ -68,17 +55,43 @@ - - + + - 1420 + Private Key - - + + - MTU + Enable GSO + + + + + + + + + + Public Key + + + + + + + + + + + + + <html><head/><body><p>comma seperated list of subnets</p></body></html> + + + Local Address