mirror of
https://github.com/proxysu/ProxySU.git
synced 2025-04-13 22:20:55 +00:00
refactoring
This commit is contained in:
parent
0c146f176d
commit
754aff18a4
20 changed files with 424 additions and 330 deletions
34
ProxySU_Core/Converters/VisibleConverter.cs
Normal file
34
ProxySU_Core/Converters/VisibleConverter.cs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Data;
|
||||||
|
|
||||||
|
namespace ProxySU_Core.Converters
|
||||||
|
{
|
||||||
|
public class VisibleConverter : IValueConverter
|
||||||
|
{
|
||||||
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
return value.Equals(true) ? Visibility.Visible : Visibility.Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.Equals(Visibility.Visible))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -104,7 +104,7 @@ namespace ProxySU_Core.Models.Developers
|
||||||
xrayConfig.inbounds.Add(baseBound);
|
xrayConfig.inbounds.Add(baseBound);
|
||||||
baseBound.settings.clients[0].id = parameters.UUID;
|
baseBound.settings.clients[0].id = parameters.UUID;
|
||||||
|
|
||||||
if (parameters.Types.Contains(XrayType.VLESS_WS_TLS))
|
if (parameters.Types.Contains(XrayType.VLESS_WS))
|
||||||
{
|
{
|
||||||
var wsInbound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_WS_TLS.json"));
|
var wsInbound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_WS_TLS.json"));
|
||||||
wsInbound.port = VLESS_WS_Port;
|
wsInbound.port = VLESS_WS_Port;
|
||||||
|
@ -136,7 +136,7 @@ namespace ProxySU_Core.Models.Developers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (parameters.Types.Contains(XrayType.VMESS_TCP_TLS))
|
if (parameters.Types.Contains(XrayType.VMESS_TCP))
|
||||||
{
|
{
|
||||||
var mtcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_TCP_TLS.json"));
|
var mtcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_TCP_TLS.json"));
|
||||||
mtcpBound.port = VMESS_TCP_Port;
|
mtcpBound.port = VMESS_TCP_Port;
|
||||||
|
@ -151,7 +151,7 @@ namespace ProxySU_Core.Models.Developers
|
||||||
xrayConfig.inbounds.Add(JToken.FromObject(mtcpBound));
|
xrayConfig.inbounds.Add(JToken.FromObject(mtcpBound));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parameters.Types.Contains(XrayType.VMESS_WS_TLS))
|
if (parameters.Types.Contains(XrayType.VMESS_WS))
|
||||||
{
|
{
|
||||||
var mwsBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_WS_TLS.json"));
|
var mwsBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_WS_TLS.json"));
|
||||||
mwsBound.port = VMESS_WS_Port;
|
mwsBound.port = VMESS_WS_Port;
|
||||||
|
@ -166,7 +166,7 @@ namespace ProxySU_Core.Models.Developers
|
||||||
xrayConfig.inbounds.Add(JToken.FromObject(mwsBound));
|
xrayConfig.inbounds.Add(JToken.FromObject(mwsBound));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parameters.Types.Contains(XrayType.Trojan_TCP_TLS))
|
if (parameters.Types.Contains(XrayType.Trojan_TCP))
|
||||||
{
|
{
|
||||||
var trojanTcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "Trojan_TCP_TLS.json"));
|
var trojanTcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "Trojan_TCP_TLS.json"));
|
||||||
trojanTcpBound.port = Trojan_TCP_Port;
|
trojanTcpBound.port = Trojan_TCP_Port;
|
||||||
|
@ -179,7 +179,7 @@ namespace ProxySU_Core.Models.Developers
|
||||||
xrayConfig.inbounds.Add(JToken.FromObject(trojanTcpBound));
|
xrayConfig.inbounds.Add(JToken.FromObject(trojanTcpBound));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parameters.Types.Contains(XrayType.Trojan_WS_TLS)) { }
|
if (parameters.Types.Contains(XrayType.Trojan_WS)) { }
|
||||||
|
|
||||||
return JsonConvert.SerializeObject(
|
return JsonConvert.SerializeObject(
|
||||||
xrayConfig,
|
xrayConfig,
|
||||||
|
|
|
@ -15,13 +15,13 @@ namespace ProxySU_Core.Models
|
||||||
{
|
{
|
||||||
switch (xrayType)
|
switch (xrayType)
|
||||||
{
|
{
|
||||||
case XrayType.VLESS_TCP_TLS:
|
case XrayType.VLESS_TCP:
|
||||||
case XrayType.VLESS_TCP_XTLS:
|
case XrayType.VLESS_TCP_XTLS:
|
||||||
case XrayType.VLESS_WS_TLS:
|
case XrayType.VLESS_WS:
|
||||||
case XrayType.Trojan_TCP_TLS:
|
case XrayType.Trojan_TCP:
|
||||||
return BuildVlessShareLink(xrayType, settings);
|
return BuildVlessShareLink(xrayType, settings);
|
||||||
case XrayType.VMESS_TCP_TLS:
|
case XrayType.VMESS_TCP:
|
||||||
case XrayType.VMESS_WS_TLS:
|
case XrayType.VMESS_WS:
|
||||||
return BuildVmessShareLink(xrayType, settings);
|
return BuildVmessShareLink(xrayType, settings);
|
||||||
default:
|
default:
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
@ -49,13 +49,13 @@ namespace ProxySU_Core.Models
|
||||||
|
|
||||||
switch (xrayType)
|
switch (xrayType)
|
||||||
{
|
{
|
||||||
case XrayType.VMESS_TCP_TLS:
|
case XrayType.VMESS_TCP:
|
||||||
vmess.ps = "vmess-tcp-tls";
|
vmess.ps = "vmess-tcp-tls";
|
||||||
vmess.net = "tcp";
|
vmess.net = "tcp";
|
||||||
vmess.type = "http";
|
vmess.type = "http";
|
||||||
vmess.path = settings.VMESS_TCP_Path;
|
vmess.path = settings.VMESS_TCP_Path;
|
||||||
break;
|
break;
|
||||||
case XrayType.VMESS_WS_TLS:
|
case XrayType.VMESS_WS:
|
||||||
vmess.ps = "vmess-ws-tls";
|
vmess.ps = "vmess-ws-tls";
|
||||||
vmess.net = "ws";
|
vmess.net = "ws";
|
||||||
vmess.type = "none";
|
vmess.type = "none";
|
||||||
|
@ -84,10 +84,9 @@ namespace ProxySU_Core.Models
|
||||||
|
|
||||||
switch (xrayType)
|
switch (xrayType)
|
||||||
{
|
{
|
||||||
case XrayType.VLESS_TCP_TLS:
|
case XrayType.VLESS_TCP:
|
||||||
_protocol = "vless";
|
_protocol = "vless";
|
||||||
_type = "tcp";
|
_type = "tcp";
|
||||||
_path = settings.VLESS_TCP_Path;
|
|
||||||
_encryption = "none";
|
_encryption = "none";
|
||||||
_descriptiveText = "vless-tcp-tls";
|
_descriptiveText = "vless-tcp-tls";
|
||||||
break;
|
break;
|
||||||
|
@ -98,28 +97,28 @@ namespace ProxySU_Core.Models
|
||||||
_encryption = "none";
|
_encryption = "none";
|
||||||
_descriptiveText = "vless-tcp-xtls";
|
_descriptiveText = "vless-tcp-xtls";
|
||||||
break;
|
break;
|
||||||
case XrayType.VLESS_WS_TLS:
|
case XrayType.VLESS_WS:
|
||||||
_protocol = "vless";
|
_protocol = "vless";
|
||||||
_type = "ws";
|
_type = "ws";
|
||||||
_path = settings.VLESS_WS_Path;
|
_path = settings.VLESS_WS_Path;
|
||||||
_encryption = "none";
|
_encryption = "none";
|
||||||
_descriptiveText = "vless-ws-tls";
|
_descriptiveText = "vless-ws-tls";
|
||||||
break;
|
break;
|
||||||
case XrayType.VMESS_TCP_TLS:
|
case XrayType.VMESS_TCP:
|
||||||
_protocol = "vmess";
|
_protocol = "vmess";
|
||||||
_type = "tcp";
|
_type = "tcp";
|
||||||
_path = settings.VMESS_TCP_Path;
|
_path = settings.VMESS_TCP_Path;
|
||||||
_encryption = "auto";
|
_encryption = "auto";
|
||||||
_descriptiveText = "vmess-tcp-tls";
|
_descriptiveText = "vmess-tcp-tls";
|
||||||
break;
|
break;
|
||||||
case XrayType.VMESS_WS_TLS:
|
case XrayType.VMESS_WS:
|
||||||
_protocol = "vmess";
|
_protocol = "vmess";
|
||||||
_type = "ws";
|
_type = "ws";
|
||||||
_path = settings.VMESS_WS_Path;
|
_path = settings.VMESS_WS_Path;
|
||||||
_encryption = "auto";
|
_encryption = "auto";
|
||||||
_descriptiveText = "vmess-ws-tls";
|
_descriptiveText = "vmess-ws-tls";
|
||||||
break;
|
break;
|
||||||
case XrayType.Trojan_TCP_TLS:
|
case XrayType.Trojan_TCP:
|
||||||
_protocol = "trojan";
|
_protocol = "trojan";
|
||||||
_descriptiveText = "trojan-tcp";
|
_descriptiveText = "trojan-tcp";
|
||||||
break;
|
break;
|
||||||
|
@ -129,7 +128,7 @@ namespace ProxySU_Core.Models
|
||||||
|
|
||||||
|
|
||||||
string parametersURL = string.Empty;
|
string parametersURL = string.Empty;
|
||||||
if (xrayType != XrayType.Trojan_TCP_TLS)
|
if (xrayType != XrayType.Trojan_TCP)
|
||||||
{
|
{
|
||||||
// 4.3 传输层相关段
|
// 4.3 传输层相关段
|
||||||
parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&host={_host}&path={HttpUtility.UrlEncode(_path)}";
|
parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&host={_host}&path={HttpUtility.UrlEncode(_path)}";
|
||||||
|
|
|
@ -19,14 +19,21 @@ namespace ProxySU_Core.Models
|
||||||
Port = 443;
|
Port = 443;
|
||||||
UUID = guid;
|
UUID = guid;
|
||||||
Types = new List<XrayType>();
|
Types = new List<XrayType>();
|
||||||
|
|
||||||
VLESS_WS_Path = "/vlessws";
|
VLESS_WS_Path = "/vlessws";
|
||||||
VLESS_TCP_Path = "/vlesstcp";
|
|
||||||
VLESS_H2_Path = "/vlessh2";
|
VLESS_H2_Path = "/vlessh2";
|
||||||
|
|
||||||
VMESS_WS_Path = "/vmessws";
|
VMESS_WS_Path = "/vmessws";
|
||||||
VMESS_TCP_Path = "/vmesstcp";
|
VMESS_TCP_Path = "/vmesstcp";
|
||||||
VMESS_H2_Path = "/vmessh2";
|
VMESS_H2_Path = "/vmessh2";
|
||||||
|
VMESS_KCP_Seed = guid;
|
||||||
|
VMESS_KCP_Type = "none";
|
||||||
|
|
||||||
TrojanPassword = guid;
|
TrojanPassword = guid;
|
||||||
Trojan_WS_Path = "/trojanws";
|
Trojan_WS_Path = "/trojanws";
|
||||||
|
|
||||||
|
ShadowsocksPassword = guid;
|
||||||
|
ShadowsocksMethod = "aes-128-gcm";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -39,26 +46,19 @@ namespace ProxySU_Core.Models
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string UUID { get; set; }
|
public string UUID { get; set; }
|
||||||
|
|
||||||
|
#region vless
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// vless ws路径
|
/// vless ws路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string VLESS_WS_Path { get; set; }
|
public string VLESS_WS_Path { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// vless tcp路径
|
|
||||||
/// </summary>
|
|
||||||
public string VLESS_TCP_Path { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// vless http2 path
|
/// vless http2 path
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string VLESS_H2_Path { get; set; }
|
public string VLESS_H2_Path { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
#region vmess
|
||||||
/// vless mKcp seed
|
|
||||||
/// </summary>
|
|
||||||
public string VLESS_mKCP_Seed { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// vmess ws路径
|
/// vmess ws路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -75,10 +75,17 @@ namespace ProxySU_Core.Models
|
||||||
public string VMESS_H2_Path { get; set; }
|
public string VMESS_H2_Path { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// vmess mKcp seed
|
/// vmess kcp seed
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string VMESS_mKCP_Seed { get; set; }
|
public string VMESS_KCP_Seed { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// vmess kcp type
|
||||||
|
/// </summary>
|
||||||
|
public string VMESS_KCP_Type { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Trojan
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// trojan密码
|
/// trojan密码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -88,6 +95,20 @@ namespace ProxySU_Core.Models
|
||||||
/// trojan ws path
|
/// trojan ws path
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Trojan_WS_Path { get; set; }
|
public string Trojan_WS_Path { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ShadowsocksAEAD
|
||||||
|
/// <summary>
|
||||||
|
/// ss password
|
||||||
|
/// </summary>
|
||||||
|
public string ShadowsocksPassword { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ss method
|
||||||
|
/// </summary>
|
||||||
|
public string ShadowsocksMethod { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 域名
|
/// 域名
|
||||||
|
@ -109,26 +130,24 @@ namespace ProxySU_Core.Models
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case XrayType.VLESS_TCP_TLS:
|
case XrayType.VLESS_WS:
|
||||||
return VLESS_TCP_Path;
|
|
||||||
case XrayType.VLESS_TCP_XTLS:
|
|
||||||
return VLESS_TCP_Path;
|
|
||||||
case XrayType.VLESS_WS_TLS:
|
|
||||||
return VLESS_WS_Path;
|
return VLESS_WS_Path;
|
||||||
case XrayType.VLESS_H2_TLS:
|
case XrayType.VLESS_H2:
|
||||||
return VLESS_H2_Path;
|
return VLESS_H2_Path;
|
||||||
|
|
||||||
case XrayType.VMESS_TCP_TLS:
|
case XrayType.VMESS_TCP:
|
||||||
return VMESS_TCP_Path;
|
return VMESS_TCP_Path;
|
||||||
case XrayType.VMESS_WS_TLS:
|
case XrayType.VMESS_WS:
|
||||||
return VMESS_WS_Path;
|
return VMESS_WS_Path;
|
||||||
case XrayType.Trojan_WS_TLS:
|
case XrayType.Trojan_WS:
|
||||||
return Trojan_WS_Path;
|
return Trojan_WS_Path;
|
||||||
|
|
||||||
// no path
|
// no path
|
||||||
case XrayType.VLESS_mKCP_Speed:
|
case XrayType.VLESS_TCP_XTLS:
|
||||||
case XrayType.Trojan_TCP_TLS:
|
case XrayType.VLESS_TCP:
|
||||||
case XrayType.VMESS_mKCP_Speed:
|
case XrayType.VLESS_KCP:
|
||||||
|
case XrayType.VMESS_KCP:
|
||||||
|
case XrayType.Trojan_TCP:
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
default:
|
default:
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
@ -144,19 +163,22 @@ namespace ProxySU_Core.Models
|
||||||
VLESS_TCP_XTLS = 100,
|
VLESS_TCP_XTLS = 100,
|
||||||
|
|
||||||
// vless 101开头
|
// vless 101开头
|
||||||
VLESS_TCP_TLS = 101,
|
VLESS_TCP = 101,
|
||||||
VLESS_WS_TLS = 102,
|
VLESS_WS = 102,
|
||||||
VLESS_H2_TLS = 103,
|
VLESS_H2 = 103,
|
||||||
VLESS_mKCP_Speed = 104,
|
VLESS_KCP = 104,
|
||||||
|
|
||||||
// vmess 201开头
|
// vmess 201开头
|
||||||
VMESS_TCP_TLS = 201,
|
VMESS_TCP = 201,
|
||||||
VMESS_WS_TLS = 202,
|
VMESS_WS = 202,
|
||||||
VMESS_H2_TLS = 203,
|
VMESS_H2 = 203,
|
||||||
VMESS_mKCP_Speed = 204,
|
VMESS_KCP = 204,
|
||||||
|
|
||||||
// trojan 301开头
|
// trojan 301开头
|
||||||
Trojan_TCP_TLS = 301,
|
Trojan_TCP = 301,
|
||||||
Trojan_WS_TLS = 302,
|
Trojan_WS = 302,
|
||||||
|
|
||||||
|
// ss
|
||||||
|
ShadowsocksAEAD = 401
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,6 +122,7 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Common\Base64.cs" />
|
<Compile Include="Common\Base64.cs" />
|
||||||
<Compile Include="Converters\LoginSecretTypeConverter.cs" />
|
<Compile Include="Converters\LoginSecretTypeConverter.cs" />
|
||||||
|
<Compile Include="Converters\VisibleConverter.cs" />
|
||||||
<Compile Include="Models\Host.cs" />
|
<Compile Include="Models\Host.cs" />
|
||||||
<Compile Include="Models\ShareLink.cs" />
|
<Compile Include="Models\ShareLink.cs" />
|
||||||
<Compile Include="Models\XraySettings.cs" />
|
<Compile Include="Models\XraySettings.cs" />
|
||||||
|
@ -138,6 +139,7 @@
|
||||||
<Compile Include="Models\LocalProxyType.cs" />
|
<Compile Include="Models\LocalProxyType.cs" />
|
||||||
<Compile Include="Models\LoginSecretType.cs" />
|
<Compile Include="Models\LoginSecretType.cs" />
|
||||||
<Compile Include="Models\Record.cs" />
|
<Compile Include="Models\Record.cs" />
|
||||||
|
<Compile Include="ViewModels\IdValueViewModel.cs" />
|
||||||
<Compile Include="ViewModels\RecordViewModel.cs" />
|
<Compile Include="ViewModels\RecordViewModel.cs" />
|
||||||
<Compile Include="ViewModels\Terminal.cs" />
|
<Compile Include="ViewModels\Terminal.cs" />
|
||||||
<Compile Include="ViewModels\XraySettingsViewModel.cs" />
|
<Compile Include="ViewModels\XraySettingsViewModel.cs" />
|
||||||
|
@ -241,34 +243,35 @@
|
||||||
<None Include="Templates\xray\server\05_inbounds\05_inbounds.json">
|
<None Include="Templates\xray\server\05_inbounds\05_inbounds.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\Trojan_TCP_TLS.json">
|
<None Include="Templates\xray\server\05_inbounds\Shadowsocks-AEAD.json" />
|
||||||
|
<None Include="Templates\xray\server\05_inbounds\Trojan_TCP.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\Trojan_WS_TLS.json">
|
<None Include="Templates\xray\server\05_inbounds\Trojan_WS.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VLESS_HTTP2_TLS.json">
|
<None Include="Templates\xray\server\05_inbounds\VLESS_HTTP2.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VLESS_mKCP.json">
|
<None Include="Templates\xray\server\05_inbounds\VLESS_KCP.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VLESS_TCP_XTLS.json">
|
<None Include="Templates\xray\server\05_inbounds\VLESS_TCP_XTLS.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VLESS_WS_TLS.json">
|
<None Include="Templates\xray\server\05_inbounds\VLESS_WS.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VMESS_HTTP2_TLS.json">
|
<None Include="Templates\xray\server\05_inbounds\VMESS_HTTP2.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VMESS_mKCP.json">
|
<None Include="Templates\xray\server\05_inbounds\VMESS_KCP.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VMESS_TCP_TLS.json">
|
<None Include="Templates\xray\server\05_inbounds\VMESS_TCP.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\05_inbounds\VMESS_WS_TLS.json">
|
<None Include="Templates\xray\server\05_inbounds\VMESS_WS.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Include="Templates\xray\server\06_outbounds\06_outbounds.json">
|
<None Include="Templates\xray\server\06_outbounds\06_outbounds.json">
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"port": 12345,
|
||||||
|
"protocol": "shadowsocks",
|
||||||
|
"settings": {
|
||||||
|
"clients": [
|
||||||
|
{
|
||||||
|
"password": "example_user_1",
|
||||||
|
"method": "aes-128-gcm"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"network": "tcp,udp"
|
||||||
|
}
|
||||||
|
}
|
21
ProxySU_Core/ViewModels/IdValueViewModel.cs
Normal file
21
ProxySU_Core/ViewModels/IdValueViewModel.cs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ProxySU_Core.ViewModels
|
||||||
|
{
|
||||||
|
public class IdValueViewModel
|
||||||
|
{
|
||||||
|
public IdValueViewModel(int id, string value)
|
||||||
|
{
|
||||||
|
Id = id;
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public string Value { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,21 +3,24 @@ using ProxySU_Core.Common;
|
||||||
using ProxySU_Core.Models;
|
using ProxySU_Core.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
namespace ProxySU_Core.ViewModels
|
namespace ProxySU_Core.ViewModels
|
||||||
{
|
{
|
||||||
public class XraySettingsViewModel : BaseViewModel
|
public partial class XraySettingsViewModel : BaseViewModel
|
||||||
{
|
{
|
||||||
public XraySettings settings;
|
public XraySettings settings;
|
||||||
|
|
||||||
public XraySettingsViewModel(XraySettings parameters)
|
public XraySettingsViewModel(XraySettings parameters)
|
||||||
{
|
{
|
||||||
this.settings = parameters;
|
this.settings = parameters;
|
||||||
|
Notify("VMESS_KCP_Type");
|
||||||
}
|
}
|
||||||
|
|
||||||
public string UUID
|
public string UUID
|
||||||
|
@ -42,299 +45,225 @@ namespace ProxySU_Core.ViewModels
|
||||||
set => settings.MaskDomain = value;
|
set => settings.MaskDomain = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string VLESS_TCP_Path
|
|
||||||
{
|
|
||||||
get => settings.VLESS_TCP_Path;
|
|
||||||
set => settings.VLESS_TCP_Path = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string VLESS_WS_Path
|
|
||||||
{
|
|
||||||
get => settings.VLESS_WS_Path;
|
|
||||||
set => settings.VLESS_WS_Path = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string VLESS_H2_Path
|
|
||||||
{
|
|
||||||
get => settings.VLESS_H2_Path;
|
|
||||||
set => settings.VLESS_H2_Path = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string VMESS_TCP_Path
|
|
||||||
{
|
|
||||||
get => settings.VMESS_TCP_Path;
|
|
||||||
set => settings.VMESS_TCP_Path = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string VMESS_WS_Path
|
|
||||||
{
|
|
||||||
get => settings.VMESS_WS_Path;
|
|
||||||
set => settings.VMESS_WS_Path = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string VMESS_H2_Path
|
|
||||||
{
|
|
||||||
get => settings.VMESS_H2_Path;
|
|
||||||
set => settings.VMESS_H2_Path = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string TrojanPassword
|
public string TrojanPassword
|
||||||
{
|
{
|
||||||
get => settings.TrojanPassword;
|
get => settings.TrojanPassword;
|
||||||
set => settings.TrojanPassword = value;
|
set => settings.TrojanPassword = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Checked_VLESS_TCP
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return settings.Types.Contains(XrayType.VLESS_TCP_TLS);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == true)
|
|
||||||
{
|
|
||||||
if (!settings.Types.Contains(XrayType.VLESS_TCP_TLS))
|
|
||||||
settings.Types.Add(XrayType.VLESS_TCP_TLS);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settings.Types.Remove(XrayType.VLESS_TCP_TLS);
|
|
||||||
}
|
|
||||||
Notify("Checked_VLESS_TCP");
|
|
||||||
Notify("VLESS_TCP_Path_Visibility");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Checked_VLESS_XTLS
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return settings.Types.Contains(XrayType.VLESS_TCP_XTLS);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == true)
|
|
||||||
{
|
|
||||||
if (!settings.Types.Contains(XrayType.VLESS_TCP_XTLS))
|
|
||||||
settings.Types.Add(XrayType.VLESS_TCP_XTLS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settings.Types.Remove(XrayType.VLESS_TCP_XTLS);
|
|
||||||
}
|
|
||||||
Notify("Checked_VLESS_XTLS");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Checked_VLESS_WS
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return settings.Types.Contains(XrayType.VLESS_WS_TLS);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == true)
|
|
||||||
{
|
|
||||||
if (!settings.Types.Contains(XrayType.VLESS_WS_TLS))
|
|
||||||
settings.Types.Add(XrayType.VLESS_WS_TLS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settings.Types.Remove(XrayType.VLESS_WS_TLS);
|
|
||||||
}
|
|
||||||
Notify("Checked_VLESS_WS");
|
|
||||||
Notify("VLESS_WS_Path_Visibility");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Checked_VLESS_H2
|
|
||||||
{
|
|
||||||
get => settings.Types.Contains(XrayType.VLESS_H2_TLS);
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == true)
|
|
||||||
{
|
|
||||||
if (!settings.Types.Contains(XrayType.VLESS_H2_TLS))
|
|
||||||
settings.Types.Add(XrayType.VLESS_H2_TLS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settings.Types.Remove(XrayType.VLESS_H2_TLS);
|
|
||||||
}
|
|
||||||
Notify("Checked_VLESS_H2");
|
|
||||||
Notify("VLESS_H2_Path_Visibility");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Checked_VMESS_TCP
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return settings.Types.Contains(XrayType.VMESS_TCP_TLS);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == true)
|
|
||||||
{
|
|
||||||
if (!settings.Types.Contains(XrayType.VMESS_TCP_TLS))
|
|
||||||
settings.Types.Add(XrayType.VMESS_TCP_TLS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settings.Types.Remove(XrayType.VMESS_TCP_TLS);
|
|
||||||
}
|
|
||||||
Notify("Checked_VMESS_TCP");
|
|
||||||
Notify("VMESS_TCP_Path_Visibility");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Checked_VMESS_WS
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return settings.Types.Contains(XrayType.VMESS_WS_TLS);
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == true)
|
|
||||||
{
|
|
||||||
if (!settings.Types.Contains(XrayType.VMESS_WS_TLS))
|
|
||||||
settings.Types.Add(XrayType.VMESS_WS_TLS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settings.Types.Remove(XrayType.VMESS_WS_TLS);
|
|
||||||
}
|
|
||||||
Notify("Checked_VMESS_WS");
|
|
||||||
Notify("VMESS_WS_Path_Visibility");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Checked_VMESS_H2
|
|
||||||
{
|
|
||||||
get => settings.Types.Contains(XrayType.VMESS_H2_TLS);
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value == true)
|
|
||||||
{
|
|
||||||
if (!settings.Types.Contains(XrayType.VMESS_H2_TLS))
|
|
||||||
settings.Types.Add(XrayType.VMESS_H2_TLS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settings.Types.Remove(XrayType.VMESS_H2_TLS);
|
|
||||||
}
|
|
||||||
Notify("Checked_VMESS_H2");
|
|
||||||
Notify("VMESS_H2_Path_Visibility");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public bool Checked_Trojan_TCP
|
public bool Checked_Trojan_TCP
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return settings.Types.Contains(XrayType.Trojan_TCP_TLS);
|
return settings.Types.Contains(XrayType.Trojan_TCP);
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (value == true)
|
if (value == true)
|
||||||
{
|
{
|
||||||
if (!settings.Types.Contains(XrayType.Trojan_TCP_TLS))
|
if (!settings.Types.Contains(XrayType.Trojan_TCP))
|
||||||
settings.Types.Add(XrayType.Trojan_TCP_TLS);
|
settings.Types.Add(XrayType.Trojan_TCP);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
settings.Types.Remove(XrayType.Trojan_TCP_TLS);
|
settings.Types.Remove(XrayType.Trojan_TCP);
|
||||||
}
|
}
|
||||||
Notify("Checked_Trojan_TCP");
|
Notify("Checked_Trojan_TCP");
|
||||||
Notify("Trojan_TCP_Pwd_Visibility");
|
}
|
||||||
|
}
|
||||||
|
public string Trojan_TCP_ShareLink
|
||||||
|
{
|
||||||
|
get => ShareLink.Build(XrayType.Trojan_TCP, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<string> _ssMethods = new List<string> { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305" };
|
||||||
|
public List<string> ShadowSocksMethods => _ssMethods;
|
||||||
|
public bool CheckedShadowSocks
|
||||||
|
{
|
||||||
|
|
||||||
|
get => settings.Types.Contains(XrayType.ShadowsocksAEAD);
|
||||||
|
set
|
||||||
|
{
|
||||||
|
CheckBoxChanged(value, XrayType.ShadowsocksAEAD);
|
||||||
|
Notify("CheckedShadowSocks");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string ShadowSocksPassword
|
||||||
|
{
|
||||||
|
get => settings.ShadowsocksPassword;
|
||||||
|
set => settings.ShadowsocksPassword = value;
|
||||||
|
}
|
||||||
|
public string ShadowSocksMethod
|
||||||
|
{
|
||||||
|
get => settings.ShadowsocksMethod;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
var namespaceStr = typeof(ComboBoxItem).FullName + ":";
|
||||||
|
var trimValue = value.Replace(namespaceStr, "");
|
||||||
|
trimValue = trimValue.Trim();
|
||||||
|
settings.ShadowsocksMethod = trimValue;
|
||||||
|
Notify("ShadowSocksMethod");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string ShadowSocksShareLink
|
||||||
|
{
|
||||||
|
get => ShareLink.Build(XrayType.ShadowsocksAEAD, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void CheckBoxChanged(bool value, XrayType type)
|
||||||
|
{
|
||||||
|
if (value == true)
|
||||||
|
{
|
||||||
|
if (!settings.Types.Contains(type))
|
||||||
|
{
|
||||||
|
settings.Types.Add(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
settings.Types.RemoveAll(x => x == type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Visibility VLESS_TCP_Path_Visibility
|
}
|
||||||
|
|
||||||
|
public partial class XraySettingsViewModel
|
||||||
|
{
|
||||||
|
// vmess tcp
|
||||||
|
public bool Checked_VMESS_TCP
|
||||||
{
|
{
|
||||||
get
|
get => settings.Types.Contains(XrayType.VMESS_TCP);
|
||||||
|
set
|
||||||
{
|
{
|
||||||
return Checked_VLESS_TCP ? Visibility.Visible : Visibility.Hidden;
|
CheckBoxChanged(value, XrayType.VMESS_TCP);
|
||||||
|
Notify("Checked_VMESS_TCP");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public Visibility VLESS_WS_Path_Visibility
|
public string VMESS_TCP_Path
|
||||||
{
|
{
|
||||||
get
|
get => settings.VMESS_TCP_Path;
|
||||||
{
|
set => settings.VMESS_TCP_Path = value;
|
||||||
return Checked_VLESS_WS ? Visibility.Visible : Visibility.Hidden;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public Visibility VLESS_H2_Path_Visibility
|
public string VMESS_TCP_ShareLink
|
||||||
{
|
{
|
||||||
get
|
get => ShareLink.Build(XrayType.VMESS_TCP, settings);
|
||||||
{
|
|
||||||
return Checked_VLESS_H2 ? Visibility.Visible : Visibility.Hidden;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Visibility VMESS_TCP_Path_Visibility
|
// vmess ws
|
||||||
|
public bool Checked_VMESS_WS
|
||||||
{
|
{
|
||||||
get
|
get => settings.Types.Contains(XrayType.VMESS_WS);
|
||||||
|
set
|
||||||
{
|
{
|
||||||
return Checked_VMESS_TCP ? Visibility.Visible : Visibility.Hidden;
|
CheckBoxChanged(value, XrayType.VMESS_WS);
|
||||||
|
Notify("Checked_VMESS_WS");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public Visibility VMESS_WS_Path_Visibility
|
public string VMESS_WS_Path
|
||||||
{
|
{
|
||||||
get
|
get => settings.VMESS_WS_Path;
|
||||||
{
|
set => settings.VMESS_WS_Path = value;
|
||||||
return Checked_VMESS_WS ? Visibility.Visible : Visibility.Hidden;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public Visibility VMESS_H2_Path_Visibility
|
public string VMESS_WS_TLS_ShareLink
|
||||||
{
|
{
|
||||||
get
|
get => ShareLink.Build(XrayType.VMESS_WS, settings);
|
||||||
{
|
|
||||||
return Checked_VMESS_H2 ? Visibility.Visible : Visibility.Hidden;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public Visibility Trojan_TCP_Pwd_Visibility
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Checked_Trojan_TCP ? Visibility.Visible : Visibility.Hidden;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// vmess kcp
|
||||||
|
public string VMESS_KCP_Seed
|
||||||
|
{
|
||||||
|
get => settings.VMESS_KCP_Seed;
|
||||||
|
set => settings.VMESS_KCP_Seed = value;
|
||||||
|
}
|
||||||
|
public string VMESS_KCP_Type
|
||||||
|
{
|
||||||
|
get => settings.VMESS_KCP_Type;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
var namespaceStr = typeof(ComboBoxItem).FullName + ":";
|
||||||
|
var trimValue = value.Replace(namespaceStr, "");
|
||||||
|
trimValue = trimValue.Trim();
|
||||||
|
settings.VMESS_KCP_Type = trimValue;
|
||||||
|
Notify("VMESS_KCP_Type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public bool Checked_VMESS_KCP
|
||||||
|
{
|
||||||
|
get => settings.Types.Contains(XrayType.VMESS_KCP);
|
||||||
|
set
|
||||||
|
{
|
||||||
|
CheckBoxChanged(value, XrayType.VMESS_KCP);
|
||||||
|
Notify("Checked_VMESS_KCP");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string VMESS_KCP_ShareLink
|
||||||
|
{
|
||||||
|
get => ShareLink.Build(XrayType.VMESS_KCP, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<string> _kcpTypes = new List<string> { "none", "srtp", "utp", "wechat-video", "dtls", "wireguard", };
|
||||||
|
public List<string> KcpTypes => _kcpTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public partial class XraySettingsViewModel
|
||||||
|
{
|
||||||
|
|
||||||
|
// vless xtls
|
||||||
|
public bool Checked_VLESS_TCP_XTLS
|
||||||
|
{
|
||||||
|
get => settings.Types.Contains(XrayType.VLESS_TCP_XTLS);
|
||||||
|
set
|
||||||
|
{
|
||||||
|
CheckBoxChanged(value, XrayType.VLESS_TCP_XTLS);
|
||||||
|
Notify("Checked_VLESS_XTLS");
|
||||||
|
}
|
||||||
|
}
|
||||||
public string VLESS_TCP_XTLS_ShareLink
|
public string VLESS_TCP_XTLS_ShareLink
|
||||||
{
|
{
|
||||||
get => ShareLink.Build(XrayType.VLESS_TCP_XTLS, settings);
|
get => ShareLink.Build(XrayType.VLESS_TCP_XTLS, settings);
|
||||||
}
|
}
|
||||||
public string VLESS_TCP_TLS_ShareLink
|
|
||||||
|
|
||||||
|
// vless tcp
|
||||||
|
public bool Checked_VLESS_TCP
|
||||||
{
|
{
|
||||||
get => ShareLink.Build(XrayType.VLESS_TCP_TLS, settings);
|
get => settings.Types.Contains(XrayType.VLESS_TCP);
|
||||||
|
set
|
||||||
|
{
|
||||||
|
CheckBoxChanged(value, XrayType.VLESS_TCP);
|
||||||
|
Notify("Checked_VLESS_TCP");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public string VLESS_WS_TLS_ShareLink
|
public string VLESS_TCP_ShareLink
|
||||||
{
|
{
|
||||||
get => ShareLink.Build(XrayType.VLESS_WS_TLS, settings);
|
get => ShareLink.Build(XrayType.VLESS_TCP, settings);
|
||||||
}
|
}
|
||||||
public string VLESS_H2_TLS_ShareLink
|
|
||||||
|
|
||||||
|
// vless ws
|
||||||
|
public string VLESS_WS_Path
|
||||||
{
|
{
|
||||||
get => ShareLink.Build(XrayType.VLESS_H2_TLS, settings);
|
get => settings.VLESS_WS_Path;
|
||||||
|
set => settings.VLESS_WS_Path = value;
|
||||||
}
|
}
|
||||||
public string VMESS_TCP_TLS_ShareLink
|
public bool Checked_VLESS_WS
|
||||||
{
|
{
|
||||||
get => ShareLink.Build(XrayType.VMESS_TCP_TLS, settings);
|
get
|
||||||
|
{
|
||||||
|
return settings.Types.Contains(XrayType.VLESS_WS);
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
CheckBoxChanged(value, XrayType.VLESS_WS);
|
||||||
|
Notify("Checked_VLESS_WS");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public string VMESS_WS_TLS_ShareLink
|
public string VLESS_WS_ShareLink
|
||||||
{
|
{
|
||||||
get => ShareLink.Build(XrayType.VMESS_WS_TLS, settings);
|
get => ShareLink.Build(XrayType.VLESS_WS, settings);
|
||||||
}
|
|
||||||
public string VMESS_H2_TLS_ShareLink
|
|
||||||
{
|
|
||||||
get => ShareLink.Build(XrayType.VMESS_H2_TLS, settings);
|
|
||||||
}
|
|
||||||
public string Trojan_TCP_TLS_ShareLink
|
|
||||||
{
|
|
||||||
get => ShareLink.Build(XrayType.Trojan_TCP_TLS, settings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||||
<Label Content="流控(flow)" Width="120" />
|
<Label Content="流控(flow)" Width="120" />
|
||||||
<TextBox Text="xtls-rprx-direct" IsReadOnly="True" Width="200" />
|
<TextBox Text="xtls-rprx-splice" IsReadOnly="True" Width="200" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||||
<Label Content="分享链接" Width="120" />
|
<Label Content="分享链接" Width="120" />
|
||||||
<TextBox Text="{Binding Settings.VLESS_TCP_XTLS_ShareLink,Mode=OneTime}" Width="300" IsReadOnly="True" />
|
<TextBox Text="{Binding Settings.VLESS_XTLS_ShareLink,Mode=OneTime}" Width="300" IsReadOnly="True" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
|
||||||
<Label Content="分享链接" Width="120" />
|
<Label Content="分享链接" Width="120" />
|
||||||
<TextBox Text="{Binding Settings.VLESS_TCP_TLS_ShareLink,Mode=OneTime}" Width="300" IsReadOnly="True" />
|
<TextBox Text="{Binding Settings.VLESS_TCP_ShareLink,Mode=OneTime}" Width="300" IsReadOnly="True" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<converters:LoginSecretTypeConverter x:Key="LoginSecretTypeConverter" />
|
<converters:LoginSecretTypeConverter x:Key="LoginSecretTypeConverter" />
|
||||||
<converters:ProxyTypeConverter x:Key="ProxyTypeConverter" />
|
<converters:ProxyTypeConverter x:Key="ProxyTypeConverter" />
|
||||||
|
<converters:VisibleConverter x:Key="VisibleConverter" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
|
@ -98,7 +99,7 @@
|
||||||
Content="{DynamicResource KeyLogin}" />
|
Content="{DynamicResource KeyLogin}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0" Visibility="{Binding PasswordVisiblity}">
|
<StackPanel Orientation="Horizontal" Margin="0,10,0,0" Visibility="{Binding Host.PasswordVisiblity}">
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Width="100"
|
Width="100"
|
||||||
Text="{DynamicResource HostPassword}"
|
Text="{DynamicResource HostPassword}"
|
||||||
|
@ -223,7 +224,7 @@
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<CheckBox Content="VLESS OVER TCP with XTLS"
|
<CheckBox Content="VLESS OVER TCP with XTLS"
|
||||||
Style="{StaticResource MahApps.Styles.CheckBox}"
|
Style="{StaticResource MahApps.Styles.CheckBox}"
|
||||||
IsChecked="{Binding Path=Settings.Checked_VLESS_XTLS}"
|
IsChecked="{Binding Path=Settings.Checked_VLESS_TCP_XTLS}"
|
||||||
Margin="0,10,0,0" />
|
Margin="0,10,0,0" />
|
||||||
<Label Content="数倍性能,首选方式,不支持CDN" Margin="20,0,0,0" />
|
<Label Content="数倍性能,首选方式,不支持CDN" Margin="20,0,0,0" />
|
||||||
|
|
||||||
|
@ -251,11 +252,24 @@
|
||||||
Margin="0,10,0,0" />
|
Margin="0,10,0,0" />
|
||||||
<Label Content="常规,支持CDN" Margin="20,0,0,0" />
|
<Label Content="常规,支持CDN" Margin="20,0,0,0" />
|
||||||
|
|
||||||
|
<CheckBox Content="VMess mKCP"
|
||||||
|
Style="{StaticResource MahApps.Styles.CheckBox}"
|
||||||
|
IsChecked="{Binding Path=Settings.Checked_VMESS_KCP}"
|
||||||
|
Margin="0,10,0,0" />
|
||||||
|
<Label Content="低延迟,适用于游戏" Margin="20,0,0,0" />
|
||||||
|
|
||||||
<CheckBox Content="Trojan over TCP with TLS"
|
<CheckBox Content="Trojan over TCP with TLS"
|
||||||
Style="{StaticResource MahApps.Styles.CheckBox}"
|
Style="{StaticResource MahApps.Styles.CheckBox}"
|
||||||
IsChecked="{Binding Path=Settings.Checked_Trojan_TCP}"
|
IsChecked="{Binding Path=Settings.Checked_Trojan_TCP}"
|
||||||
Margin="0,10,0,0" />
|
Margin="0,10,0,0" />
|
||||||
<Label Content="Torjan协议,不支持CDN" Margin="20,0,0,0" />
|
<Label Content="Torjan协议,不支持CDN" Margin="20,0,0,0" />
|
||||||
|
|
||||||
|
<CheckBox Content="ShadowSocksAEAD"
|
||||||
|
Style="{StaticResource MahApps.Styles.CheckBox}"
|
||||||
|
IsChecked="{Binding Path=Settings.CheckedShadowSocks}"
|
||||||
|
Margin="0,10,0,0" />
|
||||||
|
<Label Content="俗称SS" Margin="20,0,0,0" />
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Margin="60,0,0,0">
|
<StackPanel Margin="60,0,0,0">
|
||||||
|
@ -278,39 +292,97 @@
|
||||||
<TextBox Text="{Binding Path=Settings.MaskDomain}" Width="200" />
|
<TextBox Text="{Binding Path=Settings.MaskDomain}" Width="200" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Margin="0,10,0,0" Orientation="Horizontal" Visibility="{Binding Settings.VLESS_TCP_Path_Visibility}">
|
<StackPanel Margin="0,10,0,0"
|
||||||
<Label Content="VLESS-TCP-Path" Width="120" VerticalAlignment="Center" />
|
Orientation="Horizontal"
|
||||||
<TextBox Text="{Binding Path=Settings.VLESS_TCP_Path}"
|
Visibility="{
|
||||||
IsEnabled="{Binding Checked_VLESS_TCP}"
|
Binding Path=Settings.Checked_VLESS_WS,
|
||||||
Width="200" />
|
Converter={StaticResource VisibleConverter}
|
||||||
</StackPanel>
|
}">
|
||||||
|
<Label Content="VLESS-WS" Width="80" VerticalAlignment="Center" />
|
||||||
<StackPanel Margin="0,10,0,0" Orientation="Horizontal" Visibility="{Binding Settings.VLESS_WS_Path_Visibility}">
|
|
||||||
<Label Content="VLESS-WS-Path" Width="120" VerticalAlignment="Center" />
|
|
||||||
<TextBox Text="{Binding Path=Settings.VLESS_WS_Path}"
|
<TextBox Text="{Binding Path=Settings.VLESS_WS_Path}"
|
||||||
IsEnabled="{Binding Checked_VLESS_WS}"
|
Width="200" />
|
||||||
Width="200" />
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Margin="0,10,0,0" Orientation="Horizontal" Visibility="{Binding Settings.VMESS_TCP_Path_Visibility}">
|
<StackPanel Margin="0,10,0,0"
|
||||||
<Label Content="VMESS-TCP-Path" Width="120" VerticalAlignment="Center" />
|
Orientation="Horizontal"
|
||||||
|
Visibility="{
|
||||||
|
Binding Path=Settings.Checked_VMESS_TCP,
|
||||||
|
Converter={StaticResource VisibleConverter}
|
||||||
|
}">
|
||||||
|
<Label Content="VMESS-TCP" Width="80" VerticalAlignment="Center" />
|
||||||
<TextBox Text="{Binding Path=Settings.VMESS_TCP_Path}"
|
<TextBox Text="{Binding Path=Settings.VMESS_TCP_Path}"
|
||||||
IsEnabled="{Binding Checked_VMESS_TCP}"
|
Width="200" />
|
||||||
Width="200" />
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Margin="0,10,0,0" Orientation="Horizontal" Visibility="{Binding Settings.VMESS_WS_Path_Visibility}">
|
<StackPanel Margin="0,10,0,0"
|
||||||
<Label Content="VMESS-WS-Path" Width="120" VerticalAlignment="Center" />
|
Orientation="Horizontal"
|
||||||
|
Visibility="{
|
||||||
|
Binding Path=Settings.Checked_VMESS_WS,
|
||||||
|
Converter={StaticResource VisibleConverter}
|
||||||
|
}">
|
||||||
|
<Label Content="VMESS-WS" Width="80" VerticalAlignment="Center" />
|
||||||
<TextBox Text="{Binding Path=Settings.VMESS_WS_Path}"
|
<TextBox Text="{Binding Path=Settings.VMESS_WS_Path}"
|
||||||
IsEnabled="{Binding Checked_VMESS_WS}"
|
Width="200" />
|
||||||
Width="200" />
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Margin="0,10,0,0" Orientation="Horizontal" Visibility="{Binding Settings.Trojan_TCP_Pwd_Visibility}">
|
<StackPanel Margin="0,10,0,0"
|
||||||
|
Orientation="Horizontal"
|
||||||
|
Visibility="{
|
||||||
|
Binding Path=Settings.Checked_Trojan_TCP,
|
||||||
|
Converter={StaticResource VisibleConverter}
|
||||||
|
}">
|
||||||
<Label Content="Trojan密码" Width="80" VerticalAlignment="Center" />
|
<Label Content="Trojan密码" Width="80" VerticalAlignment="Center" />
|
||||||
<TextBox Text="{Binding Path=Settings.TrojanPassword}"
|
<TextBox Text="{Binding Path=Settings.TrojanPassword}"
|
||||||
IsEnabled="{Binding Checked_Trojan_TCP}"
|
Width="200" />
|
||||||
Width="200" />
|
</StackPanel>
|
||||||
|
|
||||||
|
<StackPanel Margin="0,10,0,0"
|
||||||
|
Orientation="Horizontal"
|
||||||
|
Visibility="{
|
||||||
|
Binding Path=Settings.Checked_VMESS_KCP,
|
||||||
|
Converter={StaticResource VisibleConverter}
|
||||||
|
}">
|
||||||
|
<Label Content="KCP伪装" Width="80" VerticalAlignment="Center"/>
|
||||||
|
<ComboBox Width="200"
|
||||||
|
ItemsSource="{Binding Path=Settings.KcpTypes}"
|
||||||
|
SelectedValue="{Binding Settings.VMESS_KCP_Type,Mode=TwoWay}">
|
||||||
|
</ComboBox>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<StackPanel Margin="0,10,0,0"
|
||||||
|
Orientation="Horizontal"
|
||||||
|
Visibility="{
|
||||||
|
Binding Path=Settings.Checked_VMESS_KCP,
|
||||||
|
Converter={StaticResource VisibleConverter}
|
||||||
|
}">
|
||||||
|
<Label Content="KCP Seed" Width="80" VerticalAlignment="Center" />
|
||||||
|
<TextBox Text="{Binding Path=Settings.VMESS_KCP_Seed}"
|
||||||
|
Width="200"/>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
|
||||||
|
<StackPanel Margin="0,10,0,0"
|
||||||
|
Orientation="Horizontal"
|
||||||
|
Visibility="{
|
||||||
|
Binding Path=Settings.CheckedShadowSocks,
|
||||||
|
Converter={StaticResource VisibleConverter}
|
||||||
|
}">
|
||||||
|
<Label Content="SS 密码" Width="80" VerticalAlignment="Center" />
|
||||||
|
<TextBox Text="{Binding Path=Settings.ShadowSocksPassword}"
|
||||||
|
Width="200"/>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<StackPanel Margin="0,10,0,0"
|
||||||
|
Orientation="Horizontal"
|
||||||
|
Visibility="{
|
||||||
|
Binding Path=Settings.CheckedShadowSocks,
|
||||||
|
Converter={StaticResource VisibleConverter}
|
||||||
|
}">
|
||||||
|
<Label Content="SS 加密方式" Width="80" VerticalAlignment="Center" />
|
||||||
|
<ComboBox Width="200"
|
||||||
|
ItemsSource="{Binding Settings.ShadowSocksMethods}"
|
||||||
|
SelectedValue="{Binding Settings.ShadowSocksMethod}">
|
||||||
|
</ComboBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
|
@ -53,5 +53,6 @@ namespace ProxySU_Core.Views
|
||||||
{
|
{
|
||||||
Settings.UUID = Guid.NewGuid().ToString();
|
Settings.UUID = Guid.NewGuid().ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue