1
0
Fork 0
mirror of https://github.com/proxysu/ProxySU.git synced 2025-04-13 22:20:55 +00:00

refactoring

This commit is contained in:
next-autumn 2021-03-26 18:13:32 +08:00
parent 0c146f176d
commit 754aff18a4
20 changed files with 424 additions and 330 deletions

View 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;
}
}
}

View file

@ -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,

View file

@ -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)}";

View file

@ -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
} }
} }

View file

@ -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">

View file

@ -0,0 +1,13 @@
{
"port": 12345,
"protocol": "shadowsocks",
"settings": {
"clients": [
{
"password": "example_user_1",
"method": "aes-128-gcm"
}
],
"network": "tcp,udp"
}
}

View 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; }
}
}

View file

@ -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
{
get
{
return Checked_VLESS_TCP ? Visibility.Visible : Visibility.Hidden;
}
}
public Visibility VLESS_WS_Path_Visibility
{
get
{
return Checked_VLESS_WS ? Visibility.Visible : Visibility.Hidden;
}
}
public Visibility VLESS_H2_Path_Visibility
{
get
{
return Checked_VLESS_H2 ? Visibility.Visible : Visibility.Hidden;
}
} }
public Visibility VMESS_TCP_Path_Visibility public partial class XraySettingsViewModel
{ {
get // vmess tcp
public bool Checked_VMESS_TCP
{ {
return Checked_VMESS_TCP ? Visibility.Visible : Visibility.Hidden; get => settings.Types.Contains(XrayType.VMESS_TCP);
set
{
CheckBoxChanged(value, XrayType.VMESS_TCP);
Notify("Checked_VMESS_TCP");
} }
} }
public Visibility VMESS_WS_Path_Visibility public string VMESS_TCP_Path
{ {
get get => settings.VMESS_TCP_Path;
{ set => settings.VMESS_TCP_Path = value;
return Checked_VMESS_WS ? Visibility.Visible : Visibility.Hidden;
} }
} public string VMESS_TCP_ShareLink
public Visibility VMESS_H2_Path_Visibility
{ {
get get => ShareLink.Build(XrayType.VMESS_TCP, 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 ws
public bool Checked_VMESS_WS
{
get => settings.Types.Contains(XrayType.VMESS_WS);
set
{
CheckBoxChanged(value, XrayType.VMESS_WS);
Notify("Checked_VMESS_WS");
}
}
public string VMESS_WS_Path
{
get => settings.VMESS_WS_Path;
set => settings.VMESS_WS_Path = value;
}
public string VMESS_WS_TLS_ShareLink
{
get => ShareLink.Build(XrayType.VMESS_WS, settings);
}
// 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
{
get => ShareLink.Build(XrayType.VLESS_WS_TLS, settings);
} }
public string VLESS_H2_TLS_ShareLink public string VLESS_TCP_ShareLink
{ {
get => ShareLink.Build(XrayType.VLESS_H2_TLS, settings); get => ShareLink.Build(XrayType.VLESS_TCP, settings);
} }
public string VMESS_TCP_TLS_ShareLink
// vless ws
public string VLESS_WS_Path
{ {
get => ShareLink.Build(XrayType.VMESS_TCP_TLS, settings); get => settings.VLESS_WS_Path;
set => settings.VLESS_WS_Path = value;
} }
public string VMESS_WS_TLS_ShareLink public bool Checked_VLESS_WS
{ {
get => ShareLink.Build(XrayType.VMESS_WS_TLS, settings); get
{
return settings.Types.Contains(XrayType.VLESS_WS);
} }
public string VMESS_H2_TLS_ShareLink set
{ {
get => ShareLink.Build(XrayType.VMESS_H2_TLS, settings); CheckBoxChanged(value, XrayType.VLESS_WS);
Notify("Checked_VLESS_WS");
} }
public string Trojan_TCP_TLS_ShareLink }
public string VLESS_WS_ShareLink
{ {
get => ShareLink.Build(XrayType.Trojan_TCP_TLS, settings); get => ShareLink.Build(XrayType.VLESS_WS, settings);
} }
} }

View file

@ -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>

View file

@ -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,40 +292,98 @@
<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>
<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>

View file

@ -53,5 +53,6 @@ namespace ProxySU_Core.Views
{ {
Settings.UUID = Guid.NewGuid().ToString(); Settings.UUID = Guid.NewGuid().ToString();
} }
} }
} }