mirror of
https://github.com/proxysu/ProxySU.git
synced 2025-02-18 07:23:17 +03:00
update
This commit is contained in:
parent
5e1e9e90cf
commit
3b79a7ca44
@ -1,23 +1,32 @@
|
|||||||
using System;
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace ProxySuper.Core.Services
|
namespace ProxySuper.Core.Services
|
||||||
{
|
{
|
||||||
public class Base64
|
public class Utils
|
||||||
{
|
{
|
||||||
public static string Encode(string plainText)
|
public static string Base64Encode(string plainText)
|
||||||
{
|
{
|
||||||
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
|
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
|
||||||
return System.Convert.ToBase64String(plainTextBytes);
|
return System.Convert.ToBase64String(plainTextBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Decode(string base64EncodedData)
|
public static string Base64Decode(string base64EncodedData)
|
||||||
{
|
{
|
||||||
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
|
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
|
||||||
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
|
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static T DeepClone<T>(T obj) where T : class
|
||||||
|
{
|
||||||
|
var serialized = JsonConvert.SerializeObject(obj);
|
||||||
|
return JsonConvert.DeserializeObject<T>(serialized);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,8 +6,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace ProxySuper.Core.Models.Hosts
|
namespace ProxySuper.Core.Models.Hosts
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
public class Host
|
public class Host
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -6,26 +6,26 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace ProxySuper.Core.Models.Projects
|
namespace ProxySuper.Core.Models.Projects
|
||||||
{
|
{
|
||||||
public interface IProjectSettings
|
public class IProjectSettings
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 端口
|
/// 端口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
int Port { get; set; }
|
public virtual int Port { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 域名
|
/// 域名
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string Domain { get; set; }
|
public virtual string Domain { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 额外需要开放的端口
|
/// 额外需要开放的端口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
List<int> FreePorts { get; }
|
public virtual List<int> FreePorts { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 类型
|
/// 类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ProjectType Type { get; set; }
|
public virtual ProjectType Type { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ namespace ProxySuper.Core.Models.Projects
|
|||||||
{
|
{
|
||||||
public class TrojanGoSettings : IProjectSettings
|
public class TrojanGoSettings : IProjectSettings
|
||||||
{
|
{
|
||||||
public List<int> FreePorts
|
public override List<int> FreePorts
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -16,17 +16,17 @@ namespace ProxySuper.Core.Models.Projects
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProjectType Type { get; set; } = ProjectType.TrojanGo;
|
public override ProjectType Type { get; set; } = ProjectType.TrojanGo;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 域名
|
/// 域名
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Domain { get; set; }
|
public override string Domain { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 端口
|
/// 端口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int Port { get; set; }
|
public override int Port { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 密码
|
/// 密码
|
||||||
|
@ -8,7 +8,7 @@ namespace ProxySuper.Core.Models.Projects
|
|||||||
{
|
{
|
||||||
public partial class XraySettings : IProjectSettings
|
public partial class XraySettings : IProjectSettings
|
||||||
{
|
{
|
||||||
public List<int> FreePorts
|
public override List<int> FreePorts
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -21,23 +21,23 @@ namespace ProxySuper.Core.Models.Projects
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProjectType Type { get; set; } = ProjectType.Xray;
|
public override ProjectType Type { get; set; } = ProjectType.Xray;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 端口
|
||||||
|
/// </summary>
|
||||||
|
public override int Port { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 域名
|
||||||
|
/// </summary>
|
||||||
|
public override string Domain { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// UUID
|
/// UUID
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string UUID { get; set; }
|
public string UUID { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 端口
|
|
||||||
/// </summary>
|
|
||||||
public int Port { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 域名
|
|
||||||
/// </summary>
|
|
||||||
public string Domain { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 伪装域名
|
/// 伪装域名
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -46,7 +46,7 @@ namespace ProxySuper.Core.Models.Projects
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 安装类型
|
/// 安装类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<XrayType> Types { get; set; }
|
public List<XrayType> Types { get; set; } = new List<XrayType>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据xray类型获取路径
|
/// 根据xray类型获取路径
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
using Newtonsoft.Json;
|
using MvvmCross;
|
||||||
|
using MvvmCross.Commands;
|
||||||
|
using MvvmCross.Navigation;
|
||||||
|
using MvvmCross.ViewModels;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using ProxySuper.Core.Models.Hosts;
|
using ProxySuper.Core.Models.Hosts;
|
||||||
using ProxySuper.Core.Models.Projects;
|
using ProxySuper.Core.Models.Projects;
|
||||||
|
using ProxySuper.Core.ViewModels;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -10,19 +15,46 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace ProxySuper.Core.Models
|
namespace ProxySuper.Core.Models
|
||||||
{
|
{
|
||||||
public class Record
|
public class Record : MvxViewModel
|
||||||
{
|
{
|
||||||
|
[JsonProperty("id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("host")]
|
||||||
public Host Host { get; set; }
|
public Host Host { get; set; }
|
||||||
|
|
||||||
[JsonProperty("settings")]
|
[JsonProperty("settings")]
|
||||||
public dynamic Settings { get; set; }
|
public XraySettings XraySettings { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("trojanGoSettings")]
|
||||||
|
public TrojanGoSettings TrojanGoSettings { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public string Type
|
[JsonIgnore]
|
||||||
|
public ProjectType Type
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return Settings.type ?? "Xray";
|
if (XraySettings != null) return ProjectType.Xray;
|
||||||
|
return ProjectType.TrojanGo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public IMvxCommand NavToEditorCommand => new MvxAsyncCommand(NavigateToEditor);
|
||||||
|
|
||||||
|
public async Task NavigateToEditor()
|
||||||
|
{
|
||||||
|
var nav = Mvx.IoCProvider.Resolve<IMvxNavigationService>();
|
||||||
|
if (Type == ProjectType.Xray)
|
||||||
|
{
|
||||||
|
var result = await nav.Navigate<XrayEditorViewModel, Record, Record>(this);
|
||||||
|
if (result == null) return;
|
||||||
|
|
||||||
|
this.Host = result.Host;
|
||||||
|
this.XraySettings = result.XraySettings;
|
||||||
|
|
||||||
|
await RaisePropertyChanged("Host");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@
|
|||||||
<Compile Include="Models\Projects\XrayType.cs" />
|
<Compile Include="Models\Projects\XrayType.cs" />
|
||||||
<Compile Include="Models\Record.cs" />
|
<Compile Include="Models\Record.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Services\Base64.cs" />
|
<Compile Include="Helpers\Utils.cs" />
|
||||||
<Compile Include="Services\ProjectBase.cs" />
|
<Compile Include="Services\ProjectBase.cs" />
|
||||||
<Compile Include="Services\ShareLink.cs" />
|
<Compile Include="Services\ShareLink.cs" />
|
||||||
<Compile Include="Services\TrojanGoConfigBuilder.cs" />
|
<Compile Include="Services\TrojanGoConfigBuilder.cs" />
|
||||||
|
@ -41,7 +41,7 @@ namespace ProxySuper.Core.Services
|
|||||||
var _server = settings.Domain;
|
var _server = settings.Domain;
|
||||||
var _port = settings.ShadowSocksPort;
|
var _port = settings.ShadowSocksPort;
|
||||||
|
|
||||||
var base64URL = Base64.Encode($"{_method}:{_password}@{_server}:{_port}");
|
var base64URL = Utils.Base64Encode($"{_method}:{_password}@{_server}:{_port}");
|
||||||
return "ss://" + base64URL + "#ShadowSocks";
|
return "ss://" + base64URL + "#ShadowSocks";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ namespace ProxySuper.Core.Services
|
|||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
var base64Url = Base64.Encode(JsonConvert.SerializeObject(vmess));
|
var base64Url = Utils.Base64Encode(JsonConvert.SerializeObject(vmess));
|
||||||
return $"vmess://" + base64Url;
|
return $"vmess://" + base64Url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
using MvvmCross.Navigation;
|
using MvvmCross.Commands;
|
||||||
|
using MvvmCross.Navigation;
|
||||||
using MvvmCross.ViewModels;
|
using MvvmCross.ViewModels;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using ProxySuper.Core.Models;
|
using ProxySuper.Core.Models;
|
||||||
|
using ProxySuper.Core.Models.Hosts;
|
||||||
|
using ProxySuper.Core.Models.Projects;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -26,14 +29,32 @@ namespace ProxySuper.Core.ViewModels
|
|||||||
var json = File.ReadAllText("Data/Record.json");
|
var json = File.ReadAllText("Data/Record.json");
|
||||||
var records = JsonConvert.DeserializeObject<List<Record>>(json);
|
var records = JsonConvert.DeserializeObject<List<Record>>(json);
|
||||||
this.Records = new MvxObservableCollection<Record>();
|
this.Records = new MvxObservableCollection<Record>();
|
||||||
|
|
||||||
records.ForEach(item =>
|
records.ForEach(item =>
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrEmpty(item.Id))
|
||||||
|
{
|
||||||
|
item.Id = Guid.NewGuid().ToString();
|
||||||
|
}
|
||||||
this.Records.Add(item);
|
this.Records.Add(item);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MvxObservableCollection<Record> Records { get; set; }
|
public MvxObservableCollection<Record> Records { get; set; }
|
||||||
|
|
||||||
|
public IMvxCommand AddXrayCommand => new MvxAsyncCommand(AddXrayRecord);
|
||||||
|
|
||||||
|
public async Task AddXrayRecord()
|
||||||
|
{
|
||||||
|
Record record = new Record();
|
||||||
|
record.Id = Guid.NewGuid().ToString();
|
||||||
|
record.Host = new Host();
|
||||||
|
record.XraySettings = new XraySettings();
|
||||||
|
|
||||||
|
var result = await _navigationService.Navigate<XrayEditorViewModel, Record, Record>(record);
|
||||||
|
if (result == null) return;
|
||||||
|
|
||||||
|
Records.Add(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
using MvvmCross.Commands;
|
using MvvmCross;
|
||||||
|
using MvvmCross.Commands;
|
||||||
|
using MvvmCross.Navigation;
|
||||||
using MvvmCross.ViewModels;
|
using MvvmCross.ViewModels;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using ProxySuper.Core.Models;
|
using ProxySuper.Core.Models;
|
||||||
@ -15,21 +17,42 @@ using System.Windows.Input;
|
|||||||
|
|
||||||
namespace ProxySuper.Core.ViewModels
|
namespace ProxySuper.Core.ViewModels
|
||||||
{
|
{
|
||||||
public partial class XrayEditorViewModel : MvxViewModel<Record>
|
public partial class XrayEditorViewModel : MvxViewModel<Record, Record>
|
||||||
{
|
{
|
||||||
public XrayEditorViewModel()
|
private IMvxNavigationService _navigationService;
|
||||||
|
public XrayEditorViewModel(IMvxNavigationService mvxNavigationService)
|
||||||
{
|
{
|
||||||
|
_navigationService = mvxNavigationService;
|
||||||
_randomUuid = new MvxCommand(() => GetUuid());
|
_randomUuid = new MvxCommand(() => GetUuid());
|
||||||
|
SaveCommand = new MvxCommand(() => Save());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
public Host Host { get; set; }
|
public Host Host { get; set; }
|
||||||
|
|
||||||
public XraySettings Settings { get; set; }
|
public XraySettings Settings { get; set; }
|
||||||
|
|
||||||
|
public IMvxCommand SaveCommand { get; }
|
||||||
|
|
||||||
public override void Prepare(Record parameter)
|
public override void Prepare(Record parameter)
|
||||||
{
|
{
|
||||||
Host = parameter.Host;
|
var record = Utils.DeepClone(parameter);
|
||||||
Settings = JsonConvert.DeserializeObject<XraySettings>(JsonConvert.SerializeObject(parameter.Settings));
|
Id = record.Id;
|
||||||
|
Host = record.Host;
|
||||||
|
Settings = record.XraySettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Save()
|
||||||
|
{
|
||||||
|
var result = new Record()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
Host = Host,
|
||||||
|
XraySettings = Settings,
|
||||||
|
};
|
||||||
|
_navigationService.Close(this, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,26 +45,26 @@
|
|||||||
|
|
||||||
<Label Content="{DynamicResource HostTag}" Grid.Row="0" Grid.Column="0" />
|
<Label Content="{DynamicResource HostTag}" Grid.Row="0" Grid.Column="0" />
|
||||||
<TextBox Grid.Row="0" Grid.Column="1"
|
<TextBox Grid.Row="0" Grid.Column="1"
|
||||||
Width="180"
|
Width="170"
|
||||||
Text="{Binding Host.Tag}"
|
Text="{Binding Host.Tag}"
|
||||||
VerticalContentAlignment="Center" />
|
VerticalContentAlignment="Center" />
|
||||||
|
|
||||||
|
|
||||||
<Label Content="{DynamicResource HostAddress}" Grid.Row="1" Grid.Column="0" />
|
<Label Content="{DynamicResource HostAddress}" Grid.Row="1" Grid.Column="0" />
|
||||||
<TextBox Grid.Row="1" Grid.Column="1"
|
<TextBox Grid.Row="1" Grid.Column="1"
|
||||||
Width="180"
|
Width="170"
|
||||||
Text="{Binding Host.Address}"
|
Text="{Binding Host.Address}"
|
||||||
VerticalContentAlignment="Center" />
|
VerticalContentAlignment="Center" />
|
||||||
|
|
||||||
<Label Content="{DynamicResource HostUserName}" Grid.Row="2" Grid.Column="0" />
|
<Label Content="{DynamicResource HostUserName}" Grid.Row="2" Grid.Column="0" />
|
||||||
<TextBox Grid.Row="2" Grid.Column="1"
|
<TextBox Grid.Row="2" Grid.Column="1"
|
||||||
Width="180"
|
Width="170"
|
||||||
Text="{Binding Host.UserName}"
|
Text="{Binding Host.UserName}"
|
||||||
VerticalContentAlignment="Center" />
|
VerticalContentAlignment="Center" />
|
||||||
|
|
||||||
<Label Content="{DynamicResource HostPassword}" Grid.Row="3" Grid.Column="0" />
|
<Label Content="{DynamicResource HostPassword}" Grid.Row="3" Grid.Column="0" />
|
||||||
<TextBox Grid.Row="3" Grid.Column="1"
|
<TextBox Grid.Row="3" Grid.Column="1"
|
||||||
Width="180"
|
Width="170"
|
||||||
Text="{Binding Host.Password}"
|
Text="{Binding Host.Password}"
|
||||||
VerticalContentAlignment="Center" />
|
VerticalContentAlignment="Center" />
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<convert:VisibleConverter x:Key="VisibleConverter" />
|
<convert:VisibleConverter x:Key="VisibleConverter" />
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<StackPanel Width="220">
|
<StackPanel Width="220">
|
||||||
<!--XTLS-->
|
<!--XTLS-->
|
||||||
@ -88,24 +89,24 @@
|
|||||||
|
|
||||||
<!--************************** 参数 **************************-->
|
<!--************************** 参数 **************************-->
|
||||||
|
|
||||||
<StackPanel Width="auto">
|
<StackPanel>
|
||||||
|
|
||||||
<!--Domain-->
|
<!--Domain-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal">
|
Orientation="Horizontal">
|
||||||
<Label Content="{DynamicResource XrayDomain}" Width="120" />
|
<Label Content="{DynamicResource XrayDomain}" Width="120" />
|
||||||
<TextBox Text="{Binding Path=Domain}" Width="200" />
|
<TextBox Text="{Binding Path=Domain}" Width="200" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--Mask Domain-->
|
<!--Mask Domain-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal">
|
Orientation="Horizontal">
|
||||||
<Label Content="{DynamicResource XrayMarkDomain}" Width="120" />
|
<Label Content="{DynamicResource XrayMarkDomain}" Width="120" />
|
||||||
<TextBox Text="{Binding Path=MaskDomain}" Width="200" />
|
<TextBox Text="{Binding Path=MaskDomain}" Width="200" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--UUID-->
|
<!--UUID-->
|
||||||
<StackPanel Margin="40,10,0,0"
|
<StackPanel Margin="30,10,0,0"
|
||||||
Orientation="Horizontal">
|
Orientation="Horizontal">
|
||||||
<Label Content="{DynamicResource XrayUUID}" Width="120" />
|
<Label Content="{DynamicResource XrayUUID}" Width="120" />
|
||||||
|
|
||||||
@ -119,7 +120,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--WebSocket Path-->
|
<!--WebSocket Path-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VLESS_WS,
|
Binding Path=Checked_VLESS_WS,
|
||||||
@ -131,7 +132,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--seed-->
|
<!--seed-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VLESS_KCP,
|
Binding Path=Checked_VLESS_KCP,
|
||||||
@ -142,7 +143,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--kcp type-->
|
<!--kcp type-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VLESS_KCP,
|
Binding Path=Checked_VLESS_KCP,
|
||||||
Converter={StaticResource VisibleConverter}
|
Converter={StaticResource VisibleConverter}
|
||||||
@ -156,7 +157,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--kcp port-->
|
<!--kcp port-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VLESS_KCP,
|
Binding Path=Checked_VLESS_KCP,
|
||||||
Converter={StaticResource VisibleConverter}
|
Converter={StaticResource VisibleConverter}
|
||||||
@ -167,7 +168,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--gRPC Port-->
|
<!--gRPC Port-->
|
||||||
<!--<StackPanel Margin="40,15,0,0"
|
<!--<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VLESS_gRPC,
|
Binding Path=Checked_VLESS_gRPC,
|
||||||
@ -181,7 +182,7 @@
|
|||||||
</StackPanel>-->
|
</StackPanel>-->
|
||||||
|
|
||||||
<!--Tcp Path-->
|
<!--Tcp Path-->
|
||||||
<!--<StackPanel Margin="40,15,0,0"
|
<!--<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VMESS_TCP,
|
Binding Path=Checked_VMESS_TCP,
|
||||||
@ -194,7 +195,7 @@
|
|||||||
</StackPanel>-->
|
</StackPanel>-->
|
||||||
|
|
||||||
<!--WebSocket Path-->
|
<!--WebSocket Path-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VMESS_WS,
|
Binding Path=Checked_VMESS_WS,
|
||||||
@ -207,7 +208,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--seed-->
|
<!--seed-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VMESS_KCP,
|
Binding Path=Checked_VMESS_KCP,
|
||||||
@ -218,7 +219,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--kcp type-->
|
<!--kcp type-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VMESS_KCP,
|
Binding Path=Checked_VMESS_KCP,
|
||||||
@ -233,7 +234,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--kcp port-->
|
<!--kcp port-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_VMESS_KCP,
|
Binding Path=Checked_VMESS_KCP,
|
||||||
@ -244,7 +245,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--ss密码-->
|
<!--ss密码-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=CheckedShadowSocks,
|
Binding Path=CheckedShadowSocks,
|
||||||
@ -256,7 +257,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--ss加密方式-->
|
<!--ss加密方式-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=CheckedShadowSocks,
|
Binding Path=CheckedShadowSocks,
|
||||||
@ -270,7 +271,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--Trojan密码-->
|
<!--Trojan密码-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal"
|
Orientation="Horizontal"
|
||||||
Visibility="{
|
Visibility="{
|
||||||
Binding Path=Checked_Trojan_TCP,
|
Binding Path=Checked_Trojan_TCP,
|
||||||
@ -282,7 +283,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!--xray prot-->
|
<!--xray prot-->
|
||||||
<StackPanel Margin="40,15,0,0"
|
<StackPanel Margin="30,15,0,0"
|
||||||
Orientation="Horizontal">
|
Orientation="Horizontal">
|
||||||
<Label Content="{DynamicResource XrayPort}" Foreground="Gray" Width="120" />
|
<Label Content="{DynamicResource XrayPort}" Foreground="Gray" Width="120" />
|
||||||
<TextBox Text="{Binding Path=Port}" Width="120" />
|
<TextBox Text="{Binding Path=Port}" Width="120" />
|
||||||
@ -290,4 +291,5 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
|
<!--common-->
|
||||||
|
<sys:String x:Key="Random">Random</sys:String>
|
||||||
|
<sys:String x:Key="Save">Save</sys:String>
|
||||||
|
|
||||||
<!--Main Menu-->
|
<!--Main Menu-->
|
||||||
<sys:String x:Key="MainMenuAddHost">Add Host</sys:String>
|
<sys:String x:Key="MainMenuAddHost">Add Host</sys:String>
|
||||||
<sys:String x:Key="MainMenuActions">Actions</sys:String>
|
<sys:String x:Key="MainMenuActions">Actions</sys:String>
|
||||||
@ -49,7 +53,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!--Xray-->
|
<!--Xray-->
|
||||||
<sys:String x:Key="Random">Random</sys:String>
|
|
||||||
<sys:String x:Key="VlessXtlsDesc" xml:space="preserve">VLESS over TCP With XTLS
Preferred</sys:String>
|
<sys:String x:Key="VlessXtlsDesc" xml:space="preserve">VLESS over TCP With XTLS
Preferred</sys:String>
|
||||||
<sys:String x:Key="VlessTcpDesc" xml:space="preserve">VLESS over TCP with TLS
XTLS is Preferred</sys:String>
|
<sys:String x:Key="VlessTcpDesc" xml:space="preserve">VLESS over TCP with TLS
XTLS is Preferred</sys:String>
|
||||||
<sys:String x:Key="VlessWsDesc" xml:space="preserve">VLESS over WS with TLS
Support CDN</sys:String>
|
<sys:String x:Key="VlessWsDesc" xml:space="preserve">VLESS over WS with TLS
Support CDN</sys:String>
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
xmlns:sys="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
|
<!--common-->
|
||||||
|
<sys:String x:Key="Random">随机</sys:String>
|
||||||
|
<sys:String x:Key="Save">保存</sys:String>
|
||||||
|
|
||||||
<!--Main Menu-->
|
<!--Main Menu-->
|
||||||
<sys:String x:Key="MainMenuAddHost">添加主机</sys:String>
|
<sys:String x:Key="MainMenuAddHost">添加主机</sys:String>
|
||||||
<sys:String x:Key="MainMenuActions">操作</sys:String>
|
<sys:String x:Key="MainMenuActions">操作</sys:String>
|
||||||
@ -48,7 +52,6 @@
|
|||||||
<sys:String x:Key="ProxyTypeSocks5">Socks5</sys:String>
|
<sys:String x:Key="ProxyTypeSocks5">Socks5</sys:String>
|
||||||
|
|
||||||
<!--Xray-->
|
<!--Xray-->
|
||||||
<sys:String x:Key="Random">随机</sys:String>
|
|
||||||
<sys:String x:Key="VlessXtlsDesc" xml:space="preserve">VLESS Over TCP With XTLS
性能数倍,首选方式。</sys:String>
|
<sys:String x:Key="VlessXtlsDesc" xml:space="preserve">VLESS Over TCP With XTLS
性能数倍,首选方式。</sys:String>
|
||||||
<sys:String x:Key="VlessTcpDesc" xml:space="preserve">VLESS over TCP with TLS
仍推荐XTLS。</sys:String>
|
<sys:String x:Key="VlessTcpDesc" xml:space="preserve">VLESS over TCP with TLS
仍推荐XTLS。</sys:String>
|
||||||
<sys:String x:Key="VlessWsDesc" xml:space="preserve">VLESS over WS with TLS
推荐,支持CDN。</sys:String>
|
<sys:String x:Key="VlessWsDesc" xml:space="preserve">VLESS over WS with TLS
推荐,支持CDN。</sys:String>
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<Menu Background="White" Grid.Row="0" BorderThickness="0,0,0,2" BorderBrush="#eee">
|
<Menu Background="White" Grid.Row="0" BorderThickness="0,0,0,2" BorderBrush="#eee">
|
||||||
<MenuItem Header="{DynamicResource MainMenuAddHost}" Padding="10,3">
|
<MenuItem Header="{DynamicResource MainMenuAddHost}" Padding="10,3">
|
||||||
<MenuItem Padding="0,5" Header="Xray"></MenuItem>
|
<MenuItem Padding="0,5" Header="Xray" Command="{Binding AddXrayCommand}"></MenuItem>
|
||||||
<MenuItem Padding="0,5" Header="Trojan-Go"></MenuItem>
|
<MenuItem Padding="0,5" Header="Trojan-Go"></MenuItem>
|
||||||
<MenuItem Padding="0,5" Header="NaiveProxy"></MenuItem>
|
<MenuItem Padding="0,5" Header="NaiveProxy"></MenuItem>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
@ -65,14 +65,14 @@
|
|||||||
|
|
||||||
<DataGridTemplateColumn Header="{DynamicResource MainDataGridColumnAction}" Width="400">
|
<DataGridTemplateColumn Header="{DynamicResource MainDataGridColumnAction}" Width="400">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<ItemContainerTemplate>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Button Click="NavToEditor"
|
<Button Click="NavToEditor"
|
||||||
Margin="5,0"
|
Margin="5,0"
|
||||||
Padding="12,3"
|
Padding="12,3"
|
||||||
Content="{DynamicResource MainDataGridColumnActionInstall}" />
|
Content="{DynamicResource MainDataGridColumnActionInstall}" />
|
||||||
|
|
||||||
<Button Click="NavToEditor"
|
<Button Command="{Binding NavToEditorCommand}"
|
||||||
Margin="5,0"
|
Margin="5,0"
|
||||||
Padding="12,3"
|
Padding="12,3"
|
||||||
Content="{DynamicResource MainDataGridColumnActionEdit}" />
|
Content="{DynamicResource MainDataGridColumnActionEdit}" />
|
||||||
@ -82,7 +82,7 @@
|
|||||||
Padding="12,3"
|
Padding="12,3"
|
||||||
Content="{DynamicResource MainDataGridColumnActionDelete}" />
|
Content="{DynamicResource MainDataGridColumnActionDelete}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DataTemplate>
|
</ItemContainerTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</DataGridTemplateColumn>
|
||||||
</DataGrid.Columns>
|
</DataGrid.Columns>
|
||||||
|
@ -28,7 +28,7 @@ namespace ProxySuper.WPF.Views
|
|||||||
var navSrv = Mvx.IoCProvider.Resolve<IMvxNavigationService>();
|
var navSrv = Mvx.IoCProvider.Resolve<IMvxNavigationService>();
|
||||||
|
|
||||||
var vm = ViewModel as HomeViewModel;
|
var vm = ViewModel as HomeViewModel;
|
||||||
navSrv.Navigate<XrayEditorViewModel, Record>(vm.Records[0]);
|
navSrv.Navigate<XrayEditorViewModel, Record, Record>(vm.Records[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,13 +11,13 @@
|
|||||||
Icon="/Resources/ProxySU.ico"
|
Icon="/Resources/ProxySU.ico"
|
||||||
BorderThickness="0,1,0,0"
|
BorderThickness="0,1,0,0"
|
||||||
BorderBrush="#EEE"
|
BorderBrush="#EEE"
|
||||||
Title="XrayEditorView" Height="600" Width="1000">
|
Title="XrayEditorView" Height="610" Width="1015">
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="320" />
|
<ColumnDefinition Width="310" />
|
||||||
<ColumnDefinition Width="1" />
|
<ColumnDefinition Width="1" />
|
||||||
<ColumnDefinition Width="auto" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<StackPanel Grid.Column="0" Margin="10">
|
<StackPanel Grid.Column="0" Margin="10">
|
||||||
@ -27,7 +27,33 @@
|
|||||||
<StackPanel Grid.Column="1" Background="#EEE"></StackPanel>
|
<StackPanel Grid.Column="1" Background="#EEE"></StackPanel>
|
||||||
|
|
||||||
<StackPanel Grid.Column="2">
|
<StackPanel Grid.Column="2">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="500" />
|
||||||
|
<RowDefinition Height="80" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<ScrollViewer Name="scroll"
|
||||||
|
Padding="10"
|
||||||
|
Height="500"
|
||||||
|
Grid.Row="0"
|
||||||
|
HorizontalScrollBarVisibility="Auto"
|
||||||
|
VerticalScrollBarVisibility="Auto" >
|
||||||
<ctrl:XraySettingsControl />
|
<ctrl:XraySettingsControl />
|
||||||
|
</ScrollViewer>
|
||||||
|
|
||||||
|
<Border Grid.Row="1"
|
||||||
|
BorderBrush="#eee"
|
||||||
|
BorderThickness="0,1,0,0">
|
||||||
|
<Button Content="{DynamicResource Save}"
|
||||||
|
Command="{Binding SaveCommand}"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Height="30"
|
||||||
|
Width="100"
|
||||||
|
Margin="40,0" />
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</views:MvxWindow>
|
</views:MvxWindow>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user