mirror of
https://github.com/2dust/v2rayN.git
synced 2026-11-13 16:05:01 +03:00
fix: import SIP008 subscriptions with numeric ports (#10575)
This commit is contained in:
@@ -2,6 +2,38 @@ namespace ServiceLib.Tests.Fmt;
|
|||||||
|
|
||||||
public class ShadowsocksFmtTests
|
public class ShadowsocksFmtTests
|
||||||
{
|
{
|
||||||
|
[Test]
|
||||||
|
[Arguments("8388", true)]
|
||||||
|
[Arguments("\"8388\"", true)]
|
||||||
|
[Arguments("8388", false)]
|
||||||
|
[Arguments("\"8388\"", false)]
|
||||||
|
public async Task ResolveSip008_ObjectAndArrayDocuments_ShouldPreserveServerFields(string port, bool useObject)
|
||||||
|
{
|
||||||
|
var server = $$"""
|
||||||
|
{
|
||||||
|
"id": "27b8a625-4f4b-4428-9f0f-8a2317db7c79",
|
||||||
|
"remarks": "SIP008 server",
|
||||||
|
"server": "example.com",
|
||||||
|
"server_port": {{port}},
|
||||||
|
"password": "example",
|
||||||
|
"method": "chacha20-ietf-poly1305"
|
||||||
|
}
|
||||||
|
""";
|
||||||
|
var document = useObject
|
||||||
|
? $$"""{"version": 1, "servers": [{{server}}]}"""
|
||||||
|
: $"[{server}]";
|
||||||
|
|
||||||
|
var resolved = ShadowsocksFmt.ResolveSip008(document);
|
||||||
|
|
||||||
|
await resolved.Should().NotBeNull();
|
||||||
|
await resolved!.Should().HaveCount(1);
|
||||||
|
await resolved[0].Remarks.Should().BeEqualTo("SIP008 server");
|
||||||
|
await resolved[0].Address.Should().BeEqualTo("example.com");
|
||||||
|
await resolved[0].Port.Should().BeEqualTo(8388);
|
||||||
|
await resolved[0].Password.Should().BeEqualTo("example");
|
||||||
|
await resolved[0].GetProtocolExtra().SsMethod.Should().BeEqualTo("chacha20-ietf-poly1305");
|
||||||
|
}
|
||||||
|
|
||||||
// SIP002 user info that is not base64 is "method:password", percent-encoded once.
|
// SIP002 user info that is not base64 is "method:password", percent-encoded once.
|
||||||
[Test]
|
[Test]
|
||||||
[Arguments("ss://2022-blake3-aes-128-gcm:p%2541ss@1.2.3.4:8388#demo", "p%41ss")]
|
[Arguments("ss://2022-blake3-aes-128-gcm:p%2541ss@1.2.3.4:8388#demo", "p%41ss")]
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ public class ShadowsocksFmt : BaseFmt
|
|||||||
{
|
{
|
||||||
//SsSIP008
|
//SsSIP008
|
||||||
var lstSsServer = JsonUtils.Deserialize<List<SsServer>>(result);
|
var lstSsServer = JsonUtils.Deserialize<List<SsServer>>(result);
|
||||||
if (lstSsServer?.Count <= 0)
|
if (lstSsServer == null || lstSsServer.Count == 0)
|
||||||
{
|
{
|
||||||
var ssSIP008 = JsonUtils.Deserialize<SsSIP008>(result);
|
var ssSIP008 = JsonUtils.Deserialize<SsSIP008>(result);
|
||||||
if (ssSIP008?.servers?.Count > 0)
|
if (ssSIP008?.servers?.Count > 0)
|
||||||
@@ -301,7 +301,7 @@ public class ShadowsocksFmt : BaseFmt
|
|||||||
Remarks = it.remarks,
|
Remarks = it.remarks,
|
||||||
Password = it.password,
|
Password = it.password,
|
||||||
Address = it.server,
|
Address = it.server,
|
||||||
Port = it.server_port.ToInt()
|
Port = it.server_port
|
||||||
};
|
};
|
||||||
ssItem.SetProtocolExtra(new ProtocolExtraItem() { SsMethod = it.method });
|
ssItem.SetProtocolExtra(new ProtocolExtraItem() { SsMethod = it.method });
|
||||||
lst.Add(ssItem);
|
lst.Add(ssItem);
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ public class SsServer
|
|||||||
{
|
{
|
||||||
public string? remarks { get; set; }
|
public string? remarks { get; set; }
|
||||||
public string? server { get; set; }
|
public string? server { get; set; }
|
||||||
public string? server_port { get; set; }
|
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
|
||||||
|
public int server_port { get; set; }
|
||||||
public string? method { get; set; }
|
public string? method { get; set; }
|
||||||
public string? password { get; set; }
|
public string? password { get; set; }
|
||||||
public string? plugin { get; set; }
|
public string? plugin { get; set; }
|
||||||
|
|||||||
Reference in New Issue
Block a user