1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-26 07:06:08 +03:00
This commit is contained in:
next-autumn 2021-04-19 12:12:23 +08:00
parent 5957f49537
commit 95380c5e47
20 changed files with 496 additions and 620 deletions

View File

@ -37,6 +37,8 @@ namespace ProxySU_Core.Models.Developers
public static int Trojan_TCP_Port = 1310; public static int Trojan_TCP_Port = 1310;
public static int Trojan_WS_Port = 1311; public static int Trojan_WS_Port = 1311;
public static int FullbackPort = 8080;
public static dynamic LoadXrayConfig() public static dynamic LoadXrayConfig()
@ -71,15 +73,7 @@ namespace ProxySU_Core.Models.Developers
{ {
var caddyStr = File.ReadAllText(Path.Combine(CaddyFileDir, "base.caddyfile")); var caddyStr = File.ReadAllText(Path.Combine(CaddyFileDir, "base.caddyfile"));
caddyStr = caddyStr.Replace("##domain##", parameters.Domain); caddyStr = caddyStr.Replace("##domain##", parameters.Domain);
caddyStr = caddyStr.Replace("##port##", FullbackPort.ToString());
if (parameters.Port != 443)
{
caddyStr = caddyStr.Replace(":##port##", "");
}
else
{
caddyStr = caddyStr.Replace("##port##", 80.ToString());
}
if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain)) if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain))
{ {
@ -109,7 +103,7 @@ namespace ProxySU_Core.Models.Developers
baseBound.port = parameters.Port; baseBound.port = parameters.Port;
baseBound.settings.fallbacks.Add(JToken.FromObject(new baseBound.settings.fallbacks.Add(JToken.FromObject(new
{ {
dest = 80 dest = FullbackPort
})); }));
xrayConfig.inbounds.Add(baseBound); xrayConfig.inbounds.Add(baseBound);
baseBound.settings.clients[0].id = parameters.UUID; baseBound.settings.clients[0].id = parameters.UUID;
@ -129,7 +123,7 @@ namespace ProxySU_Core.Models.Developers
xrayConfig.inbounds.Add(JToken.FromObject(wsInbound)); xrayConfig.inbounds.Add(JToken.FromObject(wsInbound));
} }
if(parameters.Types.Contains(XrayType.VLESS_gRPC)) if (parameters.Types.Contains(XrayType.VLESS_gRPC))
{ {
var gRPCInBound = GetBound("VLESS_gRPC.json"); var gRPCInBound = GetBound("VLESS_gRPC.json");
gRPCInBound.port = parameters.VLESS_gRPC_Port; gRPCInBound.port = parameters.VLESS_gRPC_Port;
@ -138,7 +132,7 @@ namespace ProxySU_Core.Models.Developers
xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound)); xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound));
} }
if(parameters.Types.Contains(XrayType.VLESS_KCP)) if (parameters.Types.Contains(XrayType.VLESS_KCP))
{ {
var kcpBound = GetBound("VLESS_KCP.json"); var kcpBound = GetBound("VLESS_KCP.json");
kcpBound.port = parameters.VLESS_KCP_Port; kcpBound.port = parameters.VLESS_KCP_Port;
@ -193,6 +187,7 @@ namespace ProxySU_Core.Models.Developers
var trojanTcpBound = GetBound("Trojan_TCP.json"); var trojanTcpBound = GetBound("Trojan_TCP.json");
trojanTcpBound.port = Trojan_TCP_Port; trojanTcpBound.port = Trojan_TCP_Port;
trojanTcpBound.settings.clients[0].password = parameters.TrojanPassword; trojanTcpBound.settings.clients[0].password = parameters.TrojanPassword;
trojanTcpBound.settings.fallbacks[0].dest = FullbackPort;
baseBound.settings.fallbacks[0] = JToken.FromObject(new baseBound.settings.fallbacks[0] = JToken.FromObject(new
{ {
dest = Trojan_TCP_Port, dest = Trojan_TCP_Port,

View File

@ -101,7 +101,7 @@ namespace ProxySU_Core.Models.Developers
} }
} }
public void Uninstall() public void UninstallProxy()
{ {
EnsureRootAuth(); EnsureRootAuth();
WriteOutput("卸载Caddy"); WriteOutput("卸载Caddy");
@ -149,13 +149,11 @@ namespace ProxySU_Core.Models.Developers
/// <summary> /// <summary>
/// 重装Caddy /// 重装Caddy
/// </summary> /// </summary>
public void ReinstallCaddy() public void DoUninstallCaddy()
{ {
EnsureRootAuth(); EnsureRootAuth();
EnsureSystemEnv(); UninstallCaddy();
InstallCaddy(); WriteOutput("************ 卸载Caddy完成 ************");
UploadCaddyFile();
WriteOutput("************ 重装Caddy完成 ************");
} }
/// <summary> /// <summary>

View File

@ -204,29 +204,4 @@ namespace ProxySU_Core.Models
} }
public enum XrayType
{
// 入口
VLESS_TCP_XTLS = 100,
// VLESS 101开头
VLESS_TCP = 101,
VLESS_WS = 102,
VLESS_H2 = 103,
VLESS_KCP = 104,
VLESS_gRPC = 110,
// VMESS 201开头
VMESS_TCP = 201,
VMESS_WS = 202,
VMESS_H2 = 203,
VMESS_KCP = 204,
// Trojan 301开头
Trojan_TCP = 301,
Trojan_WS = 302,
// SS
ShadowsocksAEAD = 401
}
} }

View File

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProxySU_Core.Models
{
public enum XrayType
{
// 入口
VLESS_TCP_XTLS = 100,
// VLESS 101开头
VLESS_TCP = 101,
VLESS_WS = 102,
VLESS_H2 = 103,
VLESS_KCP = 104,
VLESS_gRPC = 110,
// VMESS 201开头
VMESS_TCP = 201,
VMESS_WS = 202,
VMESS_H2 = 203,
VMESS_KCP = 204,
// Trojan 301开头
Trojan_TCP = 301,
Trojan_WS = 302,
// SS
ShadowsocksAEAD = 401
}
}

View File

@ -89,6 +89,9 @@
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="QRCoder, Version=1.4.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\QRCoder.1.4.1\lib\net40\QRCoder.dll</HintPath>
</Reference>
<Reference Include="Renci.SshNet, Version=2020.0.1.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL"> <Reference Include="Renci.SshNet, Version=2020.0.1.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
<HintPath>..\packages\SSH.NET.2020.0.1\lib\net40\Renci.SshNet.dll</HintPath> <HintPath>..\packages\SSH.NET.2020.0.1\lib\net40\Renci.SshNet.dll</HintPath>
</Reference> </Reference>
@ -96,6 +99,7 @@
<Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" /> <Reference Include="System.Configuration" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" /> <Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" /> <Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
@ -126,6 +130,7 @@
<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" />
<Compile Include="Models\XrayType.cs" />
<Compile Include="Tools\DateTimeUtils.cs" /> <Compile Include="Tools\DateTimeUtils.cs" />
<Compile Include="Tools\Extensions.cs" /> <Compile Include="Tools\Extensions.cs" />
<Compile Include="ViewModels\BaseCommand.cs" /> <Compile Include="ViewModels\BaseCommand.cs" />

View File

@ -1,5 +1,9 @@
##domain##:##port## { :##port## {
root * /usr/share/caddy root * /usr/share/caddy
file_server file_server
##reverse_proxy## ##reverse_proxy##
} }
##domain##:80 {
redir https://##domain##{uri}
}

View File

@ -10,7 +10,7 @@
], ],
"fallbacks": [ "fallbacks": [
{ {
"dest": 80 "dest": 8080
} }
] ]
}, },

View File

@ -1,5 +1,6 @@
{ {
"port": 2002, "port": 2002,
"listen": "127.0.0.1",
"protocol": "vless", "protocol": "vless",
"settings": { "settings": {
"clients": [ "clients": [

View File

@ -6,18 +6,26 @@
xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls" xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:local="clr-namespace:ProxySU_Core.Views.ClientInfo" xmlns:local="clr-namespace:ProxySU_Core.Views.ClientInfo"
xmlns:dev="clr-namespace:ProxySU_Core.Models.Developers" xmlns:dev="clr-namespace:ProxySU_Core.Models.Developers"
xmlns:models="clr-namespace:ProxySU_Core.Models"
mc:Ignorable="d" mc:Ignorable="d"
Title="查看配置" Height="500" Width="800"> Title="查看配置" Height="500" Width="800">
<Grid> <Grid>
<TabControl BorderThickness="0,1,0,0" BorderBrush="#DDD"> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="200" />
</Grid.ColumnDefinitions>
<TabControl Grid.Column="0" BorderThickness="0,1,0,0" BorderBrush="#DDD">
<TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="VLESS"> <TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="VLESS">
<TabControl <TabControl
Background="#fff" Background="#fff"
SelectionChanged="BuildQrCode"
Style="{StaticResource MaterialDesignNavigatilRailTabControl}" Style="{StaticResource MaterialDesignNavigatilRailTabControl}"
Padding="10"> Padding="10">
<TabItem Width="200" <TabItem Width="200"
Tag="{x:Static models:XrayType.VLESS_TCP_XTLS}"
IsEnabled="{Binding Settings.Checked_VLESS_TCP_XTLS}" IsEnabled="{Binding Settings.Checked_VLESS_TCP_XTLS}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VLESS-TCP-XTLS"> Header="VLESS-TCP-XTLS">
@ -25,6 +33,7 @@
</TabItem> </TabItem>
<TabItem Width="200" <TabItem Width="200"
Tag="{x:Static models:XrayType.VLESS_TCP}"
IsEnabled="{Binding Settings.Checked_VLESS_TCP}" IsEnabled="{Binding Settings.Checked_VLESS_TCP}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VLESS-TCP-TLS"> Header="VLESS-TCP-TLS">
@ -32,6 +41,7 @@
</TabItem> </TabItem>
<TabItem Width="200" <TabItem Width="200"
Tag="{x:Static models:XrayType.VLESS_WS}"
IsEnabled="{Binding Settings.Checked_VLESS_WS}" IsEnabled="{Binding Settings.Checked_VLESS_WS}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VLESS-WebSocket-TLS"> Header="VLESS-WebSocket-TLS">
@ -39,41 +49,46 @@
</TabItem> </TabItem>
<TabItem Width="200" <TabItem Width="200"
Tag="{x:Static models:XrayType.VLESS_KCP}"
IsEnabled="{Binding Settings.Checked_VLESS_KCP}" IsEnabled="{Binding Settings.Checked_VLESS_KCP}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VLESS-mKCP"> Header="VLESS-mKCP">
<local:VLESS_KCP_Control /> <local:VLESS_KCP_Control />
</TabItem> </TabItem>
<TabItem Width="200" <!--<TabItem Width="200"
IsEnabled="{Binding Settings.Checked_VLESS_gRPC}" IsEnabled="{Binding Settings.Checked_VLESS_gRPC}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VLESS-gRPC"> Header="VLESS-gRPC">
<local:VLESS_gRPC_Control /> <local:VLESS_gRPC_Control />
</TabItem> </TabItem>-->
</TabControl> </TabControl>
</TabItem> </TabItem>
<TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="VMESS"> <TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="VMESS">
<TabControl <TabControl
SelectionChanged="BuildQrCode"
Padding="10" Padding="10"
Style="{StaticResource MaterialDesignNavigatilRailTabControl}"> Style="{StaticResource MaterialDesignNavigatilRailTabControl}">
<TabItem Width="200" <TabItem Width="200"
IsEnabled="{Binding Settings.Checked_VMESS_TCP}" Tag="{x:Static models:XrayType.VMESS_TCP}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" IsEnabled="{Binding Settings.Checked_VMESS_TCP}"
Header="VMESS-TCP-TLS"> Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VMESS-TCP-TLS">
<local:VMESS_TCP_TLS_Control /> <local:VMESS_TCP_TLS_Control />
</TabItem> </TabItem>
<TabItem Width="200" <TabItem Width="200"
IsEnabled="{Binding Settings.Checked_VMESS_WS}" Tag="{x:Static models:XrayType.VMESS_WS}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" IsEnabled="{Binding Settings.Checked_VMESS_WS}"
Header="VMESS-WebSocket-TLS"> Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VMESS-WebSocket-TLS">
<local:VMESS_WS_TLS_Control /> <local:VMESS_WS_TLS_Control />
</TabItem> </TabItem>
<TabItem Width="200" <TabItem Width="200"
IsEnabled="{Binding Settings.Checked_VMESS_KCP}" Tag="{x:Static models:XrayType.VMESS_KCP}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" IsEnabled="{Binding Settings.Checked_VMESS_KCP}"
Header="VMESS-mKCP"> Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="VMESS-mKCP">
<local:VMESS_KCP_Control /> <local:VMESS_KCP_Control />
</TabItem> </TabItem>
</TabControl> </TabControl>
@ -81,9 +96,11 @@
<TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="Trojan"> <TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="Trojan">
<TabControl <TabControl
SelectionChanged="BuildQrCode"
Padding="10" Padding="10"
Style="{StaticResource MaterialDesignNavigatilRailTabControl}"> Style="{StaticResource MaterialDesignNavigatilRailTabControl}">
<TabItem Width="200" <TabItem Width="200"
Tag="{x:Static models:XrayType.Trojan_TCP}"
IsEnabled="{Binding Settings.Checked_Trojan_TCP}" IsEnabled="{Binding Settings.Checked_Trojan_TCP}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="Trojan-TCP"> Header="Trojan-TCP">
@ -94,9 +111,11 @@
<TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="ShadowSocks"> <TabItem metro:HeaderedControlHelper.HeaderFontSize="20" Padding="10,5,10,5" Header="ShadowSocks">
<TabControl <TabControl
SelectionChanged="BuildQrCode"
Padding="10" Padding="10"
Style="{StaticResource MaterialDesignNavigatilRailTabControl}"> Style="{StaticResource MaterialDesignNavigatilRailTabControl}">
<TabItem Width="200" <TabItem Width="200"
Tag="{x:Static models:XrayType.ShadowsocksAEAD}"
IsEnabled="{Binding Settings.CheckedShadowSocks}" IsEnabled="{Binding Settings.CheckedShadowSocks}"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="ShadowSocks"> Header="ShadowSocks">
@ -105,5 +124,7 @@
</TabControl> </TabControl>
</TabItem> </TabItem>
</TabControl> </TabControl>
<Image Grid.Column="1" Width="150" Height="150" x:Name="QrImage" />
</Grid> </Grid>
</metro:MetroWindow> </metro:MetroWindow>

View File

@ -1,7 +1,10 @@
using ProxySU_Core.Models; using ProxySU_Core.Models;
using ProxySU_Core.ViewModels; using ProxySU_Core.ViewModels;
using QRCoder;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -32,5 +35,71 @@ namespace ProxySU_Core.Views.ClientInfo
Settings = new XraySettingsViewModel(record.Settings); Settings = new XraySettingsViewModel(record.Settings);
DataContext = this; DataContext = this;
} }
private void BuildQrCode(object sender, SelectionChangedEventArgs e)
{
var tabControl = e.Source as TabControl;
var item = (tabControl.SelectedItem as TabItem);
var type = (XrayType)item.Tag;
string shareLink = string.Empty;
switch (type)
{
case XrayType.VLESS_TCP_XTLS:
shareLink = Settings.VLESS_TCP_XTLS_ShareLink;
break;
case XrayType.VLESS_TCP:
shareLink = Settings.VLESS_TCP_ShareLink;
break;
case XrayType.VLESS_WS:
shareLink = Settings.VLESS_WS_ShareLink;
break;
case XrayType.VLESS_H2:
break;
case XrayType.VLESS_KCP:
shareLink = Settings.VLESS_KCP_ShareLink;
break;
case XrayType.VLESS_gRPC:
shareLink = Settings.VLESS_gRPC_ShareLink;
break;
case XrayType.VMESS_TCP:
shareLink = Settings.VMESS_TCP_ShareLink;
break;
case XrayType.VMESS_WS:
shareLink = Settings.VMESS_WS_ShareLink;
break;
case XrayType.VMESS_H2:
break;
case XrayType.VMESS_KCP:
shareLink = Settings.VMESS_KCP_ShareLink;
break;
case XrayType.Trojan_TCP:
shareLink = Settings.Trojan_TCP_ShareLink;
break;
case XrayType.Trojan_WS:
break;
case XrayType.ShadowsocksAEAD:
shareLink = Settings.ShadowSocksShareLink;
break;
default:
break;
}
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(shareLink, QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
Bitmap qrCodeImage = qrCode.GetGraphic(20);
MemoryStream ms = new MemoryStream();
qrCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = new MemoryStream(bytes);
image.EndInit();
QrImage.Source = image;
}
} }
} }

View File

@ -9,7 +9,7 @@
xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls" xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
TextElement.FontSize="14" TextElement.FontSize="14"
Title="ProxySU Core" Height="800" Width="1200"> Title="ProxySU Core" Height="670" Width="1050">
<mah:MetroWindow.LeftWindowCommands> <mah:MetroWindow.LeftWindowCommands>
<mah:WindowCommands> <mah:WindowCommands>
@ -44,16 +44,18 @@
<Grid> <Grid>
<TabControl <TabControl
BorderThickness="0,1,0,0"
BorderBrush="#DDD"
Background="#fff" Background="#fff"
Style="{StaticResource MaterialDesignNavigatilRailTabControl}" Padding="20">
Padding="10">
<TabItem <TabItem
Width="160" Width="160"
Height="40"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="{DynamicResource TabItemHeaderAppDeployment}"> Header="{DynamicResource TabItemHeaderAppDeployment}">
<StackPanel Orientation="Vertical"> <StackPanel Orientation="Vertical">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Margin="5,0,0,0">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<Button <Button
Content="{DynamicResource AddHost}" Content="{DynamicResource AddHost}"
Click="AddHost" Click="AddHost"
@ -73,7 +75,7 @@
</StackPanel> </StackPanel>
<DataGrid ItemsSource="{Binding Records}" <DataGrid ItemsSource="{Binding Records}"
Margin="0,20,0,0" Margin="0,10,0,0"
IsReadOnly="True" IsReadOnly="True"
x:Name="DataGrid" x:Name="DataGrid"
CellStyle="{StaticResource DataGridCell}" CellStyle="{StaticResource DataGridCell}"
@ -83,7 +85,9 @@
BorderBrush="#eee" BorderBrush="#eee"
BorderThickness="1" BorderThickness="1"
VerticalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
Height="500" Height="500"
Width="1000"
AutoGenerateColumns="False"> AutoGenerateColumns="False">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridCheckBoxColumn Header="选择" <DataGridCheckBoxColumn Header="选择"
@ -92,10 +96,10 @@
Width="80"/> Width="80"/>
<DataGridTextColumn Header="{DynamicResource HostTag}" <DataGridTextColumn Header="{DynamicResource HostTag}"
Binding="{Binding Path=Host.Tag}" Binding="{Binding Path=Host.Tag}"
Width="150"/> Width="180"/>
<DataGridTextColumn Header="{DynamicResource HostAddress}" <DataGridTextColumn Header="{DynamicResource HostAddress}"
Binding="{Binding Path=Host.Address}" Binding="{Binding Path=Host.Address}"
Width="200"/> Width="180"/>
<DataGridTextColumn Header="{DynamicResource HostPort}" <DataGridTextColumn Header="{DynamicResource HostPort}"
Binding="{Binding Path=Host.Port}" Binding="{Binding Path=Host.Port}"
Width="100"/> Width="100"/>
@ -126,17 +130,19 @@
<TabItem <TabItem
Width="160" Width="160"
Height="40"
FontSize="15"
Style="{StaticResource MaterialDesignNavigationRailTabItem}" Style="{StaticResource MaterialDesignNavigationRailTabItem}"
Header="说明文档"> Header="说明文档">
<StackPanel> <StackPanel>
<StackPanel Margin="0,10,0,0"> <StackPanel Margin="0,0,0,0">
<TextBlock Text="新书指引:" FontWeight="Black" /> <TextBlock Margin="0,0,0,5" Text="新书指引:" FontWeight="Black" />
<TextBlock Text="1. 【添加主机】,填写主机信息及节点配置信息,保存。" /> <TextBlock Text="1. 【添加主机】,填写主机信息及节点配置信息,保存。" />
<TextBlock Text="2. 点【控制台】,自动连接主机,连接成功后,点【一键安装】,待输出 “请尽情享用吧” 代表安装完成。" /> <TextBlock Text="2. 点【控制台】,自动连接主机,连接成功后,点【一键安装】,待输出 “请尽情享用吧” 代表安装完成。" />
<TextBlock Text="3. 在【查看配置】中可以查看节点配置信息,选中【导出配置】可以复制所有节点的分享拦截。" /> <TextBlock Text="3. 在【查看配置】中可以查看节点配置信息,选中【导出配置】可以复制所有节点的分享拦截。" />
</StackPanel> </StackPanel>
<StackPanel Margin="0,10,0,0"> <StackPanel Margin="0,20,0,0">
<TextBlock Text="自定义功能" FontWeight="Black" /> <TextBlock Margin="0,0,0,5" Text="自定义功能" FontWeight="Black" />
<TextBlock Text="【更新配置】用户想修改节点的信息比如增加一个websocket或修改用户id在【编辑】中修改保存后不需要重新安装了这个功能就可以更新配置。" /> <TextBlock Text="【更新配置】用户想修改节点的信息比如增加一个websocket或修改用户id在【编辑】中修改保存后不需要重新安装了这个功能就可以更新配置。" />
<TextBlock Text="【更新内核】更新官方xray-core的最新版本。" /> <TextBlock Text="【更新内核】更新官方xray-core的最新版本。" />
<TextBlock Text="【卸载代理】:卸载 域名证书、caddy服务、xray内核一些安装过程中的基础功能不影响不卸载会影响到您的系统请自行处理。" /> <TextBlock Text="【卸载代理】:卸载 域名证书、caddy服务、xray内核一些安装过程中的基础功能不影响不卸载会影响到您的系统请自行处理。" />
@ -144,8 +150,8 @@
<TextBlock Text="【上传证书】:上传自有证书,将您的证书 crt 和 key 文件打包zip上传即可。" /> <TextBlock Text="【上传证书】:上传自有证书,将您的证书 crt 和 key 文件打包zip上传即可。" />
<TextBlock Text="【上传网站】上传伪装静态网站静态网站必须根目录有一个index.html文件请自行检查。" /> <TextBlock Text="【上传网站】上传伪装静态网站静态网站必须根目录有一个index.html文件请自行检查。" />
</StackPanel> </StackPanel>
<StackPanel Margin="0,10,0,0"> <StackPanel Margin="0,20,0,0">
<TextBlock Text="关于v3版本" FontWeight="Black" /> <TextBlock Margin="0,0,0,5" Text="关于v3版本" FontWeight="Black" />
<TextBlock Text="初步以xray为基础方便自动安装、修改、卸载看建议再考虑其他方式如有需要请先用v2的版本。" /> <TextBlock Text="初步以xray为基础方便自动安装、修改、卸载看建议再考虑其他方式如有需要请先用v2的版本。" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>

View File

@ -166,6 +166,19 @@ namespace ProxySU_Core
} }
} }
private void DeleteHost(object sender, RoutedEventArgs e)
{
if (DataGrid.SelectedItem is RecordViewModel project)
{
var result = MessageBox.Show($"您确认删除主机{project.Host.Tag}吗?", "提示", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
Records.Remove(project);
SaveRecord();
}
}
}
private void ShowClientInfo(object sender, RoutedEventArgs e) private void ShowClientInfo(object sender, RoutedEventArgs e)
{ {
if (DataGrid.SelectedItem is RecordViewModel project) if (DataGrid.SelectedItem is RecordViewModel project)
@ -176,19 +189,6 @@ namespace ProxySU_Core
} }
private void DeleteHost(object sender, RoutedEventArgs e)
{
if (DataGrid.SelectedItem is RecordViewModel project)
{
var result = MessageBox.Show($"您确认删除主机{project.Host.Tag}吗?", "提示", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
Records.Remove(project);
}
}
}
private void Connect(object sender, RoutedEventArgs e) private void Connect(object sender, RoutedEventArgs e)
{ {
var project = DataGrid.SelectedItem as RecordViewModel; var project = DataGrid.SelectedItem as RecordViewModel;

View File

@ -52,185 +52,11 @@
</TabItem> </TabItem>
</TabControl> </TabControl>
<!--<StackPanel Grid.Row="0" Orientation="Horizontal">
<StackPanel Margin="0,0,0,0" Orientation="Horizontal">
<Label Content="xray" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.Port}" Width="50" VerticalAlignment="Center" />
<Label Content="ss" Margin="10,0,0,0" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.ShadowSocksPort}" Width="50" VerticalAlignment="Center" />
<Label Content="mkcp" Margin="10,0,0,0" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.VMESS_KCP_Port}" Width="50" VerticalAlignment="Center" />
</StackPanel>
<TabControl>
<TabItem metro:HeaderedControlHelper.HeaderFontSize="16" Padding="10,5,10,5">
</TabItem>
</TabControl>
<StackPanel>
<CheckBox Content="VMess over TCP with TLS"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VMESS_TCP}"
Margin="0,10,0,0" />
<Label Content="不推荐" Margin="20,0,0,0" Foreground="Red" />
<CheckBox Content="VMess over WS with TLS"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VMESS_WS}"
Margin="0,10,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"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_Trojan_TCP}"
Margin="0,10,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 Margin="60,0,0,0">
<StackPanel Margin="0,0,0,0" Orientation="Horizontal">
<Label Content="xray" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.Port}" Width="50" VerticalAlignment="Center" />
<Label Content="ss" Margin="10,0,0,0" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.ShadowSocksPort}" Width="50" VerticalAlignment="Center" />
<Label Content="mkcp" Margin="10,0,0,0" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.VMESS_KCP_Port}" Width="50" VerticalAlignment="Center" />
</StackPanel>
<StackPanel Margin="0,10,0,0" Orientation="Horizontal">
<Label Content="UUID" Width="80" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.UUID}" Width="200" />
<Button Style="{StaticResource MahApps.Styles.Button.Flat}"
Margin="5,0,0,0"
Click="RandomUuid"
Content="随机" />
</StackPanel>
<StackPanel Margin="0,10,0,0" Orientation="Horizontal">
<Label Content="域名" Width="80" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.Domain}" Width="200" />
</StackPanel>
<StackPanel Margin="0,10,0,0" Orientation="Horizontal">
<Label Content="伪装域名" Width="80" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.MaskDomain}" Width="200" />
</StackPanel>
<StackPanel Margin="0,10,0,0"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.Checked_VLESS_WS,
Converter={StaticResource VisibleConverter}
}">
<Label Content="VLESS-WS" Width="80" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=Settings.VLESS_WS_Path}"
Width="200" />
</StackPanel>
<StackPanel Margin="0,10,0,0"
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}"
Width="200" />
</StackPanel>
<StackPanel Margin="0,10,0,0"
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}"
Width="200" />
</StackPanel>
<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" />
<TextBox Text="{Binding Path=Settings.TrojanPassword}"
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>-->
<Button Content="保存" <Button Content="保存"
Grid.Row="1" Grid.Row="1"
Margin="0,0,20,0" Margin="0,0,20,0"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Width="120" Width="120"
Height="32" Height="32"
Click="Save" /> Click="Save" />

View File

@ -17,47 +17,46 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <StackPanel Margin="0,10,0,0" Grid.Column="0">
<RowDefinition Height="50" /> <CheckBox Content="ShadowSocks&#x0a;SS支持udp。"
<RowDefinition Height="50" /> FontSize="13"
<RowDefinition Height="50" /> Style="{StaticResource MahApps.Styles.CheckBox}"
</Grid.RowDefinitions> IsChecked="{Binding Path=Settings.CheckedShadowSocks}" />
<CheckBox Content="ShadowSocksAEAD&#x0a;SS支持udp。"
Grid.Column="0"
Grid.Row="0"
FontSize="13"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.CheckedShadowSocks}" />
<StackPanel Margin="50,0,0,10"
Grid.Column="1"
Grid.Row="0"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.CheckedShadowSocks,
Converter={StaticResource VisibleConverter}
}">
<Label Content="SS 密码" Width="80" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.ShadowSocksPassword}"
VerticalAlignment="Bottom"
Width="200"/>
</StackPanel> </StackPanel>
<StackPanel Margin="50,0,0,10" <StackPanel Grid.Column="1">
Grid.Column="1" <!--域名-->
Grid.Row="1" <StackPanel Margin="40,10,0,0"
Orientation="Horizontal" Orientation="Horizontal">
Visibility="{ <Label Content="域名" Width="70" />
Binding Path=Settings.CheckedShadowSocks, <TextBox Text="{Binding Path=Settings.Domain}" Width="260" />
Converter={StaticResource VisibleConverter} </StackPanel>
}">
<Label Content="SS 加密方式" Width="80" VerticalAlignment="Bottom" /> <!--ss密码-->
<ComboBox Width="200" <StackPanel Margin="40,10,0,0"
VerticalAlignment="Bottom" Orientation="Horizontal"
ItemsSource="{Binding Settings.ShadowSocksMethods}" Visibility="{
SelectedValue="{Binding Settings.ShadowSocksMethod}"> Binding Path=Settings.CheckedShadowSocks,
</ComboBox> Converter={StaticResource VisibleConverter}
}">
<Label Content="密码" Width="70" />
<TextBox Text="{Binding Path=Settings.ShadowSocksPassword}"
Width="260"/>
</StackPanel>
<!--ss加密方式-->
<StackPanel Margin="40,15,0,0"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.CheckedShadowSocks,
Converter={StaticResource VisibleConverter}
}">
<Label Content="加密方式" Width="70" />
<ComboBox Width="260"
ItemsSource="{Binding Settings.ShadowSocksMethods}"
SelectedValue="{Binding Settings.ShadowSocksMethod}">
</ComboBox>
</StackPanel>
</StackPanel> </StackPanel>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -17,29 +17,33 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <StackPanel Grid.Column="0">
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<CheckBox Content="Trojan over TCP with TLS&#x0a;Trojan" <CheckBox Content="Trojan over TCP with TLS&#x0a;Trojan"
Grid.Column="0"
Grid.Row="0"
FontSize="13" FontSize="13"
Margin="0,10,0,0"
Style="{StaticResource MahApps.Styles.CheckBox}" Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_Trojan_TCP}" /> IsChecked="{Binding Path=Settings.Checked_Trojan_TCP}" />
</StackPanel>
<StackPanel Margin="50,0,0,10" <StackPanel Grid.Column="1">
Grid.Column="1" <!--域名-->
Grid.Row="0" <StackPanel Margin="40,10,0,0"
Orientation="Horizontal" Orientation="Horizontal">
Visibility="{ <Label Content="域名" Width="70" />
Binding Path=Settings.Checked_Trojan_TCP, <TextBox Text="{Binding Path=Settings.Domain}" Width="260" />
Converter={StaticResource VisibleConverter} </StackPanel>
}">
<Label Content="Trojan密码" Width="70" VerticalAlignment="Bottom" /> <!--密码-->
<TextBox Text="{Binding Path=Settings.TrojanPassword}" <StackPanel Margin="40,15,0,0"
VerticalAlignment="Bottom" Orientation="Horizontal"
Width="260" /> Visibility="{
Binding Path=Settings.Checked_Trojan_TCP,
Converter={StaticResource VisibleConverter}
}">
<Label Content="密码" Width="70" />
<TextBox Text="{Binding Path=Settings.TrojanPassword}"
Width="260" />
</StackPanel>
</StackPanel> </StackPanel>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -17,181 +17,143 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <StackPanel Grid.Column="0">
<RowDefinition Height="50" /> <!--XTLS-->
<RowDefinition Height="50" /> <CheckBox Content="VLESS Over TCP With XTLS&#x0a;性能数倍,首选方式。"
<RowDefinition Height="50" /> Margin="0,10,0,0"
<RowDefinition Height="50" /> FontSize="13"
<RowDefinition Height="50" /> Style="{StaticResource MahApps.Styles.CheckBox}"
<RowDefinition Height="50" /> IsChecked="{Binding Path=Settings.Checked_VLESS_TCP_XTLS}"/>
<RowDefinition Height="50" />
<RowDefinition Height="50" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<!--XTLS--> <!--TCP-->
<CheckBox Content="VLESS Over TCP With XTLS&#x0a;性能数倍,首选方式。" <CheckBox Content="VLESS over TCP with TLS&#x0a;仍推荐XTLS"
FontSize="13" Margin="0,15,0,0"
Grid.Row="0" FontSize="13"
Grid.Column="0" Style="{StaticResource MahApps.Styles.CheckBox}"
Style="{StaticResource MahApps.Styles.CheckBox}" IsChecked="{Binding Path=Settings.Checked_VLESS_TCP}" />
IsChecked="{Binding Path=Settings.Checked_VLESS_TCP_XTLS}"/>
<!--TCP--> <!--WebSocket-->
<CheckBox Content="VLESS over TCP with TLS&#x0a;仍推荐XTLS" <CheckBox Content="VLESS over WS with TLS&#x0a;推荐支持CDN。"
Grid.Row="1" Margin="0,15,0,0"
Grid.Column="0" Style="{StaticResource MahApps.Styles.CheckBox}"
FontSize="13" IsChecked="{Binding Path=Settings.Checked_VLESS_WS}" />
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VLESS_TCP}" />
<!--WebSocket--> <!--mKCP-->
<CheckBox Content="VLESS over WS with TLS&#x0a;推荐支持CDN。" <CheckBox Content="VLESS mKCP&#x0a;游戏推荐,延迟低。"
Grid.Row="2" Margin="0,15,0,0"
Grid.Column="0" Grid.Column="0"
Style="{StaticResource MahApps.Styles.CheckBox}" Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VLESS_WS}" /> IsChecked="{Binding Path=Settings.Checked_VLESS_KCP}" />
<!--mKCP-->
<CheckBox Content="VLESS mKCP&#x0a;游戏推荐,延迟低。"
Grid.Row="3"
Grid.Column="0"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VLESS_KCP}" />
<!--gRPC-->
<CheckBox Content="VLESS gRPC&#x0a;基于http2多路复用。"
Grid.Row="4"
Grid.Column="0"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VLESS_gRPC}"/>
<!--gRPC-->
<!--<CheckBox Content="VLESS gRPC&#x0a;基于http2多路复用。"
Margin="0,15,0,0"
Grid.Column="0"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VLESS_gRPC}"/>-->
</StackPanel>
<!--************************** 参数 **************************--> <!--************************** 参数 **************************-->
<!--UUID--> <StackPanel Grid.Column="1">
<StackPanel Margin="40,0,0,10" <!--UUID-->
Grid.Row="0" <StackPanel Margin="40,10,0,0"
Grid.Column="1" Orientation="Horizontal">
Orientation="Horizontal"> <Label Content="UUID" Width="70" />
<Label Content="UUID" Width="70" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.UUID}" <TextBox Text="{Binding Path=Settings.UUID}"
VerticalAlignment="Bottom" Width="260" />
Width="260" />
<Button Style="{StaticResource MahApps.Styles.Button.Flat}" <Button Style="{StaticResource MahApps.Styles.Button.Flat}"
Margin="5,0,0,0" Margin="5,0,0,0"
Height="30" FontSize="12"
VerticalAlignment="Bottom" Command="{Binding Path=Settings.RandomUuid}"
Command="{Binding Path=Settings.RandomUuid}" Content="随机" />
Content="随机" /> </StackPanel>
</StackPanel>
<!--Domain--> <!--Domain-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="1" Orientation="Horizontal">
Grid.Column="1" <Label Content="域名" Width="70" />
Orientation="Horizontal"> <TextBox Text="{Binding Path=Settings.Domain}" Width="260" />
<Label Content="域名" Width="70" VerticalAlignment="Bottom" /> </StackPanel>
<TextBox Text="{Binding Path=Settings.Domain}" Width="260" VerticalAlignment="Bottom" />
</StackPanel>
<!--Mask Domain--> <!--Mask Domain-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="2" Orientation="Horizontal">
Grid.Column="1" <Label Content="伪装域名" Width="70" />
Orientation="Horizontal"> <TextBox Text="{Binding Path=Settings.MaskDomain}" Width="260" />
<Label Content="伪装域名" Width="70" VerticalAlignment="Bottom" /> </StackPanel>
<TextBox Text="{Binding Path=Settings.MaskDomain}" Width="260" VerticalAlignment="Bottom" />
</StackPanel>
<!--WebSocket Path--> <!--WebSocket Path-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="3" Orientation="Horizontal"
Grid.Column="1" Visibility="{
Orientation="Horizontal" Binding Path=Settings.Checked_VLESS_WS,
Visibility="{ Converter={StaticResource VisibleConverter}
Binding Path=Settings.Checked_VLESS_WS, }">
Converter={StaticResource VisibleConverter} <Label Content="WS路径" Width="70" />
}"> <TextBox Text="{Binding Path=Settings.VLESS_WS_Path}"
<Label Content="WS路径" Width="70" VerticalAlignment="Bottom" /> Width="260" />
<TextBox Text="{Binding Path=Settings.VLESS_WS_Path}" </StackPanel>
VerticalAlignment="Bottom"
Width="260" />
</StackPanel>
<!--seed--> <!--seed-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="4"
Grid.Column="1"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.Checked_VLESS_KCP,
Converter={StaticResource VisibleConverter}
}">
<Label Content="KCP Seed" Width="70" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.VLESS_KCP_Seed}" Width="260" VerticalAlignment="Bottom" />
</StackPanel>
<StackPanel Margin="40,0,0,10"
Grid.Row="5"
Grid.Column="1"
Orientation="Horizontal">
<!--kcp type-->
<StackPanel Margin="0,0,0,0"
Orientation="Horizontal" Orientation="Horizontal"
Visibility="{ Visibility="{
Binding Path=Settings.Checked_VLESS_KCP, Binding Path=Settings.Checked_VLESS_KCP,
Converter={StaticResource VisibleConverter} Converter={StaticResource VisibleConverter}
}"> }">
<Label Content="KCP伪装" Width="70" VerticalAlignment="Bottom"/> <Label Content="KCP Seed" Width="70" />
<ComboBox Width="100" <TextBox Text="{Binding Path=Settings.VLESS_KCP_Seed}" Width="260" />
VerticalAlignment="Bottom"
ItemsSource="{Binding Path=Settings.KcpTypes}"
SelectedValue="{Binding Settings.VLESS_KCP_Type,Mode=TwoWay}">
</ComboBox>
</StackPanel> </StackPanel>
<!--kcp port--> <!--kcp type and kcp port-->
<StackPanel Margin="10,0,0,0" <StackPanel Margin="40,15,0,0"
Orientation="Horizontal"
Visibility="{ Visibility="{
Binding Path=Settings.Checked_VLESS_KCP, Binding Path=Settings.Checked_VLESS_KCP,
Converter={StaticResource VisibleConverter} Converter={StaticResource VisibleConverter}
}"
Orientation="Horizontal">
<StackPanel Orientation="Horizontal">
<Label Content="KCP伪装" Width="70" />
<ComboBox Width="100"
ItemsSource="{Binding Path=Settings.KcpTypes}"
SelectedValue="{Binding Settings.VLESS_KCP_Type,Mode=TwoWay}">
</ComboBox>
</StackPanel>
<StackPanel Margin="10,0,0,0"
Orientation="Horizontal">
<Label Content="KCP端口" Width="70" />
<TextBox Text="{Binding Path=Settings.VLESS_KCP_Port}" Width="100" />
</StackPanel>
</StackPanel>
<!--gRPC Port-->
<StackPanel Margin="40,15,0,0"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.Checked_VLESS_gRPC,
Converter={StaticResource VisibleConverter}
}"> }">
<Label Content="KCP端口" Width="70" VerticalAlignment="Bottom" /> <Label Content="gRPC端口" Width="70" />
<TextBox Text="{Binding Path=Settings.VLESS_KCP_Port}" Width="100" VerticalAlignment="Bottom" /> <TextBox Text="{Binding Path=Settings.VLESS_gRPC_Port}" Width="100" />
<Label Content="服务器" Width="70" Margin="10,0,0,0" />
<TextBox Text="{Binding Path=Settings.VLESS_gRPC_ServiceName}" Width="100" />
</StackPanel>
<!--xray prot-->
<StackPanel Margin="40,15,0,0"
Orientation="Horizontal">
<Label Content="Xray端口" Width="70" />
<TextBox Text="{Binding Path=Settings.Port}" Width="100" />
<Label Content="默认端口443不建议修改" Foreground="Red" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<!--gRPC Port-->
<StackPanel Margin="40,0,0,10"
Grid.Row="6"
Grid.Column="1"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.Checked_VLESS_gRPC,
Converter={StaticResource VisibleConverter}
}">
<Label Content="gRPC端口" Width="70" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.VLESS_gRPC_Port}" Width="100" VerticalAlignment="Bottom" />
<Label Content="服务器" Width="70" VerticalAlignment="Bottom" Margin="10,0,0,0" />
<TextBox Text="{Binding Path=Settings.VLESS_gRPC_ServiceName}" Width="100" VerticalAlignment="Bottom" />
</StackPanel>
<!--xray prot-->
<StackPanel Margin="40,0,0,10"
Grid.Row="7"
Grid.Column="1"
Orientation="Horizontal">
<Label Content="Xray端口" Width="70" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.Port}" Width="100" VerticalAlignment="Bottom" />
<Label Content="默认端口443不建议修改" VerticalAlignment="Bottom" Foreground="Red" />
</StackPanel>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -17,152 +17,124 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <StackPanel Grid.Column="0">
<RowDefinition Height="50" /> <!--TCP-->
<RowDefinition Height="50" /> <CheckBox Content="VMESS over TCP with TLS&#x0a;不推荐"
<RowDefinition Height="50" /> Margin="0,10,0,0"
<RowDefinition Height="50" /> FontSize="13"
<RowDefinition Height="50" /> Style="{StaticResource MahApps.Styles.CheckBox}"
<RowDefinition Height="50" /> IsChecked="{Binding Path=Settings.Checked_VMESS_TCP}" />
<RowDefinition Height="50" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<!--TCP--> <!--WebSocket-->
<CheckBox Content="VMESS over TCP with TLS&#x0a;不推荐" <CheckBox Content="VMESS over WS with TLS&#x0a;推荐支持CDN。"
Grid.Row="0" Margin="0,15,0,0"
Grid.Column="0" Style="{StaticResource MahApps.Styles.CheckBox}"
FontSize="13" IsChecked="{Binding Path=Settings.Checked_VMESS_WS}" />
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VMESS_TCP}" />
<!--WebSocket-->
<CheckBox Content="VMESS over WS with TLS&#x0a;推荐支持CDN。"
Grid.Row="1"
Grid.Column="0"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VMESS_WS}" />
<!--mKCP-->
<CheckBox Content="VMESS mKCP&#x0a;游戏推荐,延迟低。"
Grid.Row="2"
Grid.Column="0"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VMESS_KCP}" />
<!--mKCP-->
<CheckBox Content="VMESS mKCP&#x0a;游戏推荐,延迟低。"
Margin="0,15,0,0"
Style="{StaticResource MahApps.Styles.CheckBox}"
IsChecked="{Binding Path=Settings.Checked_VMESS_KCP}" />
</StackPanel>
<!--************************** 参数 **************************--> <!--************************** 参数 **************************-->
<!--UUID--> <StackPanel Grid.Column="1">
<StackPanel Margin="40,0,0,10" <!--UUID-->
Grid.Row="0" <StackPanel Margin="40,10,0,0"
Grid.Column="1" Orientation="Horizontal">
Orientation="Horizontal"> <Label Content="UUID" Width="70" />
<Label Content="UUID" Width="70" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.UUID}" <TextBox Text="{Binding Path=Settings.UUID}"
VerticalAlignment="Bottom" Width="260" />
Width="260" />
<Button Style="{StaticResource MahApps.Styles.Button.Flat}" <Button Style="{StaticResource MahApps.Styles.Button.Flat}"
Margin="5,0,0,0" Margin="5,0,0,0"
Height="30" FontSize="12"
VerticalAlignment="Bottom" Command="{Binding Path=Settings.RandomUuid}"
Command="{Binding Path=Settings.RandomUuid}" Content="随机" />
Content="随机" /> </StackPanel>
</StackPanel>
<!--Domain--> <!--Domain-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="1" Orientation="Horizontal">
Grid.Column="1" <Label Content="域名" Width="70" />
Orientation="Horizontal"> <TextBox Text="{Binding Path=Settings.Domain}" Width="260" />
<Label Content="域名" Width="70" VerticalAlignment="Bottom" /> </StackPanel>
<TextBox Text="{Binding Path=Settings.Domain}" Width="260" VerticalAlignment="Bottom" />
</StackPanel>
<!--Mask Domain--> <!--Mask Domain-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="2" Orientation="Horizontal">
Grid.Column="1" <Label Content="伪装域名" Width="70" />
Orientation="Horizontal"> <TextBox Text="{Binding Path=Settings.MaskDomain}" Width="260" />
<Label Content="伪装域名" Width="70" VerticalAlignment="Bottom" /> </StackPanel>
<TextBox Text="{Binding Path=Settings.MaskDomain}" Width="260" VerticalAlignment="Bottom" />
</StackPanel>
<!--WebSocket Path--> <!--WebSocket Path-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="3" Orientation="Horizontal"
Grid.Column="1" Visibility="{
Orientation="Horizontal" Binding Path=Settings.Checked_VMESS_WS,
Visibility="{ Converter={StaticResource VisibleConverter}
Binding Path=Settings.Checked_VMESS_WS, }">
Converter={StaticResource VisibleConverter} <Label Content="WS路径" Width="70" />
}"> <TextBox Text="{Binding Path=Settings.VMESS_WS_Path}"
<Label Content="WS路径" Width="70" VerticalAlignment="Bottom" /> VerticalAlignment="Bottom"
<TextBox Text="{Binding Path=Settings.VMESS_WS_Path}" Width="260" />
VerticalAlignment="Bottom" </StackPanel>
Width="260" />
</StackPanel>
<!--seed--> <!--seed-->
<StackPanel Margin="40,0,0,10" <StackPanel Margin="40,15,0,0"
Grid.Row="4"
Grid.Column="1"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.Checked_VMESS_KCP,
Converter={StaticResource VisibleConverter}
}">
<Label Content="KCP Seed" Width="70" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.VMESS_KCP_Seed}" Width="260" VerticalAlignment="Bottom" />
</StackPanel>
<StackPanel Margin="40,0,0,10"
Grid.Row="5"
Grid.Column="1"
Orientation="Horizontal">
<!--kcp type-->
<StackPanel Margin="0,0,0,0"
Orientation="Horizontal" Orientation="Horizontal"
Visibility="{ Visibility="{
Binding Path=Settings.Checked_VMESS_KCP, Binding Path=Settings.Checked_VMESS_KCP,
Converter={StaticResource VisibleConverter} Converter={StaticResource VisibleConverter}
}"> }">
<Label Content="KCP伪装" Width="70" VerticalAlignment="Bottom"/> <Label Content="KCP Seed" Width="70" />
<ComboBox Width="100" <TextBox Text="{Binding Path=Settings.VMESS_KCP_Seed}" Width="260" />
VerticalAlignment="Bottom"
ItemsSource="{Binding Path=Settings.KcpTypes}"
SelectedValue="{Binding Settings.VMESS_KCP_Type,Mode=TwoWay}">
</ComboBox>
</StackPanel> </StackPanel>
<!--kcp port--> <StackPanel Margin="40,15,0,0"
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
Orientation="Horizontal" <!--kcp type-->
Visibility="{ <StackPanel Margin="0,0,0,0"
Binding Path=Settings.Checked_VMESS_KCP, Orientation="Horizontal"
Converter={StaticResource VisibleConverter} Visibility="{
}"> Binding Path=Settings.Checked_VMESS_KCP,
<Label Content="KCP端口" Width="70" VerticalAlignment="Bottom" /> Converter={StaticResource VisibleConverter}
<TextBox Text="{Binding Path=Settings.VMESS_KCP_Port}" Width="100" VerticalAlignment="Bottom" /> }">
<Label Content="KCP伪装" Width="70" VerticalAlignment="Bottom"/>
<ComboBox Width="100"
VerticalAlignment="Bottom"
ItemsSource="{Binding Path=Settings.KcpTypes}"
SelectedValue="{Binding Settings.VMESS_KCP_Type,Mode=TwoWay}">
</ComboBox>
</StackPanel>
<!--kcp port-->
<StackPanel Margin="10,0,0,0"
Orientation="Horizontal"
Visibility="{
Binding Path=Settings.Checked_VMESS_KCP,
Converter={StaticResource VisibleConverter}
}">
<Label Content="KCP端口" Width="70" />
<TextBox Text="{Binding Path=Settings.VMESS_KCP_Port}" Width="100" />
</StackPanel>
</StackPanel>
<!--xray prot-->
<StackPanel Margin="40,15,0,0"
Orientation="Horizontal">
<Label Content="Xray端口" Width="70" />
<TextBox Text="{Binding Path=Settings.Port}" Width="100" />
<Label Content="默认端口443不建议修改" Foreground="Red" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<!--xray prot-->
<StackPanel Margin="40,0,0,10"
Grid.Row="6"
Grid.Column="1"
Orientation="Horizontal">
<Label Content="Xray端口" Width="70" VerticalAlignment="Bottom" />
<TextBox Text="{Binding Path=Settings.Port}" Width="100" VerticalAlignment="Bottom" />
<Label Content="默认端口443不建议修改" VerticalAlignment="Bottom" Foreground="Red" />
</StackPanel>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -6,6 +6,7 @@
xmlns:local="clr-namespace:ProxySU_Core" xmlns:local="clr-namespace:ProxySU_Core"
xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls" xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"
mc:Ignorable="d" mc:Ignorable="d"
FontSize="15"
Title="主机控制台" Height="600" Width="800"> Title="主机控制台" Height="600" Width="800">
<StackPanel> <StackPanel>
<TextBox IsReadOnly="True" <TextBox IsReadOnly="True"
@ -82,9 +83,9 @@
IsEnabled="{Binding HasConnected}" IsEnabled="{Binding HasConnected}"
Click="UploadWeb"/> Click="UploadWeb"/>
<Button Content="重装Caddy" <Button Content="卸载Caddy"
Margin="10,0,0,0" Margin="10,0,0,0"
Click="ReinstallCaddy" Click="UninstallCaddy"
Height="26" Height="26"
IsEnabled="{Binding HasConnected}" IsEnabled="{Binding HasConnected}"
Width="120"/> Width="120"/>
@ -100,19 +101,22 @@
<Label Content="续签证书: 证书默认是自动续签,但不保证都能续签成功,如果失败请用[续签证书]手动续签" /> <Label Content="续签证书: 证书默认是自动续签,但不保证都能续签成功,如果失败请用[续签证书]手动续签" />
<Label Content="上传网站: 伪装网站正确的静态网页要有index.html文件(请检查),然后将网站压缩包上传。" /> <Label Content="上传网站: 伪装网站正确的静态网页要有index.html文件(请检查),然后将网站压缩包上传。" />
</StackPanel> </StackPanel>
<Label Content="如下是网友提供的静态网页连接请自行检查是否有index.html文件" />
<TextBlock> <Label Margin="0,10,0,0" Content="如下是网友提供的静态网页连接请自行检查是否有index.html文件" />
<Hyperlink NavigateUri="https://www.themezy.com" Click="OpenLink">Themezy</Hyperlink> <StackPanel Orientation="Horizontal">
</TextBlock> <TextBlock Margin="10,0,0,0">
<TextBlock> <Hyperlink NavigateUri="https://www.themezy.com" Click="OpenLink">Themezy</Hyperlink>
<Hyperlink NavigateUri="https://onepagelove.com/templates/free-templates" Click="OpenLink">One Page Love</Hyperlink> </TextBlock>
</TextBlock> <TextBlock Margin="20,0,0,0">
<TextBlock> <Hyperlink NavigateUri="https://onepagelove.com/templates/free-templates" Click="OpenLink">One Page Love</Hyperlink>
<Hyperlink NavigateUri="https://html5up.net/" Click="OpenLink">HTML5 UP</Hyperlink> </TextBlock>
</TextBlock> <TextBlock Margin="20,0,0,0">
<TextBlock> <Hyperlink NavigateUri="https://html5up.net/" Click="OpenLink">HTML5 UP</Hyperlink>
<Hyperlink NavigateUri="https://templatemo.com/" Click="OpenLink">template mo</Hyperlink> </TextBlock>
</TextBlock> <TextBlock Margin="20,0,0,0">
<Hyperlink NavigateUri="https://templatemo.com/" Click="OpenLink">template mo</Hyperlink>
</TextBlock>
</StackPanel>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</metro:MetroWindow> </metro:MetroWindow>

View File

@ -173,7 +173,7 @@ namespace ProxySU_Core
{ {
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {
project.Uninstall(); project.UninstallProxy();
}); });
} }
@ -193,11 +193,11 @@ namespace ProxySU_Core
fileDialog.ShowDialog(); fileDialog.ShowDialog();
} }
private void ReinstallCaddy(object sender, RoutedEventArgs e) private void UninstallCaddy(object sender, RoutedEventArgs e)
{ {
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {
project.ReinstallCaddy(); project.DoUninstallCaddy();
}); });
} }

View File

@ -7,5 +7,6 @@
<package id="MaterialDesignThemes.MahApps" version="0.1.6" targetFramework="net461" /> <package id="MaterialDesignThemes.MahApps" version="0.1.6" targetFramework="net461" />
<package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net461" /> <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net461" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" /> <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />
<package id="QRCoder" version="1.4.1" targetFramework="net461" />
<package id="SSH.NET" version="2020.0.1" targetFramework="net461" /> <package id="SSH.NET" version="2020.0.1" targetFramework="net461" />
</packages> </packages>