This commit is contained in:
DHR60 2026-05-04 15:40:26 +08:00
parent 298f370f72
commit d5ebe96f66
14 changed files with 51 additions and 37 deletions

View file

@ -9,22 +9,23 @@ public class WireguardFmtTests
[Fact]
public void ResolveConfig_ShouldParsePeersAndIgnoreInlineComments()
{
var config = """
[Interface]
PrivateKey = interface-private-key
Address = 10.0.0.2/32, fd00::2/128 ; inline comment
MTU = 1420
const string config =
"""
[Interface]
PrivateKey = interface-private-key
Address = 10.0.0.2/32, fd00::2/128 ; inline comment
MTU = 1420
[Peer]
PublicKey = peer-public-key
PresharedKey = peer-preshared-key
Reserved = 1, 2, 3 # inline comment
Endpoint = [2001:db8::1]:51820 # inline comment
[Peer]
PublicKey = peer-public-key
PresharedKey = peer-preshared-key
Reserved = 1, 2, 3 # inline comment
Endpoint = [2001:db8::1]:51820 # inline comment
[Peer]
PublicKey = peer-public-key-2
Endpoint = example.com:12345
""";
[Peer]
PublicKey = peer-public-key-2
Endpoint = example.com:12345
""";
var resolved = WireguardFmt.ResolveConfig(config);
@ -43,4 +44,4 @@ public class WireguardFmtTests
second.Address.Should().Be("example.com");
second.Port.Should().Be(12345);
}
}
}

View file

@ -791,9 +791,22 @@ public static class ConfigHandler
profileItem.Address = profileItem.Address.TrimEx();
profileItem.Password = profileItem.Password.TrimEx();
var wgReserved = profileItem.GetProtocolExtra().WgReserved?.TrimEx();
if (!wgReserved.IsNullOrEmpty())
if (!wgReserved.IsNullOrEmpty()
&& !wgReserved.Contains(','))
{
wgReserved = wgReserved.Replace(", ", ",");
// Base64 format, convert to standard format
try
{
var bytes = Convert.FromBase64String(wgReserved);
var reserved = new byte[3];
Array.Copy(bytes, reserved, Math.Min(bytes.Length, 3));
wgReserved = string.Join(", ", reserved);
}
catch
{
// If conversion fails, keep the original value
}
}
profileItem.SetProtocolExtra(profileItem.GetProtocolExtra() with
{
@ -1735,15 +1748,15 @@ public static class ConfigHandler
{
await RemoveServersViaSubid(config, subid, isSub);
}
var lstSsServer = WireguardFmt.ResolveConfig(strData);
if (lstSsServer?.Count > 0)
var lstServer = WireguardFmt.ResolveConfig(strData);
if (lstServer?.Count > 0)
{
var counter = 0;
foreach (var ssItem in lstSsServer)
foreach (var item in lstServer)
{
ssItem.Subid = subid;
ssItem.IsSub = isSub;
if (await AddWireguardServer(config, ssItem) == 0)
item.Subid = subid;
item.IsSub = isSub;
if (await AddWireguardServer(config, item) == 0)
{
counter++;
}

View file

@ -3448,7 +3448,7 @@ namespace ServiceLib.Resx {
}
/// <summary>
/// 查找类似 Reserved (2,3,4) 的本地化字符串。
/// 查找类似 Reserved 的本地化字符串。
/// </summary>
public static string TbReserved {
get {

View file

@ -1075,7 +1075,7 @@
<value>کلید خصوصی</value>
</data>
<data name="TbReserved" xml:space="preserve">
<value>Reserved (2,3,4)</value>
<value>Reserved</value>
</data>
<data name="TbLocalAddress" xml:space="preserve">
<value>آدرس (IPv4, IPv6)</value>

View file

@ -1072,7 +1072,7 @@
<value>PrivateKey</value>
</data>
<data name="TbReserved" xml:space="preserve">
<value>Reserved (2,3,4)</value>
<value>Reserved</value>
</data>
<data name="TbLocalAddress" xml:space="preserve">
<value>Address (IPv4,IPv6)</value>

View file

@ -1075,7 +1075,7 @@
<value>Privát kulcs</value>
</data>
<data name="TbReserved" xml:space="preserve">
<value>Fenntartott (2,3,4)</value>
<value>Fenntartott</value>
</data>
<data name="TbLocalAddress" xml:space="preserve">
<value>Cím (IPv4, IPv6)</value>

View file

@ -1075,7 +1075,7 @@
<value>Private Key</value>
</data>
<data name="TbReserved" xml:space="preserve">
<value>Reserved (2,3,4)</value>
<value>Reserved</value>
</data>
<data name="TbLocalAddress" xml:space="preserve">
<value>Address (IPv4, IPv6)</value>

View file

@ -1075,7 +1075,7 @@
<value>Приватный ключ</value>
</data>
<data name="TbReserved" xml:space="preserve">
<value>Зарезервировано (2, 3, 4)</value>
<value>Зарезервировано</value>
</data>
<data name="TbLocalAddress" xml:space="preserve">
<value>Адрес (IPv4, IPv6)</value>

View file

@ -1072,7 +1072,7 @@
<value>PrivateKey</value>
</data>
<data name="TbReserved" xml:space="preserve">
<value>Reserved (2,3,4)</value>
<value>Reserved</value>
</data>
<data name="TbLocalAddress" xml:space="preserve">
<value>Address (IPv4,IPv6)</value>

View file

@ -1072,7 +1072,7 @@
<value>PrivateKey</value>
</data>
<data name="TbReserved" xml:space="preserve">
<value>Reserved (2,3,4)</value>
<value>Reserved</value>
</data>
<data name="TbLocalAddress" xml:space="preserve">
<value>Address (Ipv4,Ipv6)</value>

View file

@ -309,7 +309,7 @@ public partial class CoreConfigSingboxService
{
var protocolExtra = _node.GetProtocolExtra();
endpoint.address = Utils.String2List(protocolExtra.WgInterfaceAddress);
endpoint.address = Utils.String2List(protocolExtra.WgInterfaceAddress)?.Select(s => s.Trim()).ToList() ?? ["172.16.0.2/32"];
endpoint.type = Global.ProtocolTypes[_node.ConfigType];
switch (_node.ConfigType)
@ -320,7 +320,7 @@ public partial class CoreConfigSingboxService
{
public_key = protocolExtra.WgPublicKey ?? string.Empty,
pre_shared_key = protocolExtra.WgPresharedKey,
reserved = Utils.String2List(protocolExtra.WgReserved)?.Select(int.Parse).ToList(),
reserved = Utils.String2List(protocolExtra.WgReserved)?.Select(s => s.Trim()).Select(int.Parse).ToList(),
address = _node.Address,
port = _node.Port,
allowed_ips = ["0.0.0.0/0", "::/0"],

View file

@ -263,9 +263,9 @@ public partial class CoreConfigV2rayService
};
var setting = new Outboundsettings4Ray
{
address = Utils.String2List(protocolExtra.WgInterfaceAddress),
address = Utils.String2List(protocolExtra.WgInterfaceAddress)?.Select(s => s.Trim()).ToList() ?? ["172.16.0.2/32"],
secretKey = _node.Password,
reserved = Utils.String2List(protocolExtra.WgReserved)?.Select(int.Parse).ToList(),
reserved = Utils.String2List(protocolExtra.WgReserved)?.Select(s => s.Trim()).Select(int.Parse).ToList(),
mtu = protocolExtra.WgMtu > 0 ? protocolExtra.WgMtu : Global.TunMtus.First(),
peers = [peer]
};

View file

@ -563,7 +563,7 @@
Grid.Column="1"
Width="400"
Margin="{StaticResource Margin4}"
Watermark="2,3,4" />
Watermark="0, 0, 0" />
<TextBlock
Grid.Row="5"

View file

@ -745,7 +745,7 @@
Grid.Column="1"
Width="400"
Margin="{StaticResource Margin4}"
materialDesign:HintAssist.Hint="2,3,4"
materialDesign:HintAssist.Hint="0, 0, 0"
Style="{StaticResource DefTextBox}" />
<TextBlock