1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-22 13:16:09 +03:00
This commit is contained in:
nuxt-autumn 2021-05-22 17:14:27 +08:00
parent cb7d7e5f21
commit 970843f561
14 changed files with 135 additions and 98 deletions

View File

@ -12,12 +12,12 @@ namespace ProxySuper.Core.Models.Projects
/// <summary> /// <summary>
/// ss password /// ss password
/// </summary> /// </summary>
public string ShadowsocksPassword { get; set; } public string ShadowSocksPassword { get; set; }
/// <summary> /// <summary>
/// ss method /// ss method
/// </summary> /// </summary>
public string ShadowsocksMethod { get; set; } public string ShadowSocksMethod { get; set; }
/// <summary> /// <summary>
/// ss port /// ss port

View File

@ -9,6 +9,7 @@ using ProxySuper.Core.Models.Projects;
using ProxySuper.Core.ViewModels; using ProxySuper.Core.ViewModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -56,7 +57,6 @@ namespace ProxySuper.Core.Models
} }
} }
[JsonIgnore] [JsonIgnore]
public IMvxCommand NavToInstallerCommand => new MvxAsyncCommand(NavigateToInstaller); public IMvxCommand NavToInstallerCommand => new MvxAsyncCommand(NavigateToInstaller);
@ -76,7 +76,6 @@ namespace ProxySuper.Core.Models
this.Host = result.Host; this.Host = result.Host;
this.XraySettings = result.XraySettings; this.XraySettings = result.XraySettings;
await RaisePropertyChanged("Host");
} }
if (Type == ProjectType.TrojanGo) if (Type == ProjectType.TrojanGo)
@ -87,6 +86,7 @@ namespace ProxySuper.Core.Models
this.Host = result.Host; this.Host = result.Host;
this.TrojanGoSettings = result.TrojanGoSettings; this.TrojanGoSettings = result.TrojanGoSettings;
} }
await RaisePropertyChanged("Host");
} }
public async Task NavigateToInstaller() public async Task NavigateToInstaller()

View File

@ -36,8 +36,8 @@ namespace ProxySuper.Core.Services
private static string BuildShadowSocksShareLink(XraySettings settings) private static string BuildShadowSocksShareLink(XraySettings settings)
{ {
var _method = settings.ShadowsocksMethod; var _method = settings.ShadowSocksMethod;
var _password = settings.ShadowsocksPassword; var _password = settings.ShadowSocksPassword;
var _server = settings.Domain; var _server = settings.Domain;
var _port = settings.ShadowSocksPort; var _port = settings.ShadowSocksPort;

View File

@ -201,8 +201,8 @@ namespace ProxySuper.Core.Services
{ {
var ssBound = GetBound("Shadowsocks-AEAD.json"); var ssBound = GetBound("Shadowsocks-AEAD.json");
ssBound.port = parameters.ShadowSocksPort; ssBound.port = parameters.ShadowSocksPort;
ssBound.settings.clients[0].password = parameters.ShadowsocksPassword; ssBound.settings.clients[0].password = parameters.ShadowSocksPassword;
ssBound.settings.clients[0].method = parameters.ShadowsocksMethod; ssBound.settings.clients[0].method = parameters.ShadowSocksMethod;
xrayConfig.inbounds.Add(JToken.FromObject(ssBound)); xrayConfig.inbounds.Add(JToken.FromObject(ssBound));
} }

View File

@ -23,12 +23,27 @@ namespace ProxySuper.Core.ViewModels
{ {
_navigationService = navigationService; _navigationService = navigationService;
ReadRecords(); ReadRecords();
_navigationService.AfterClose += _navigationService_AfterClose;
}
private void _navigationService_AfterClose(object sender, MvvmCross.Navigation.EventArguments.IMvxNavigateEventArgs e)
{
if (e.ViewModel is XrayEditorViewModel ||
e.ViewModel is TrojanGoEditorViewModel)
{
SaveToJson();
}
} }
public void ReadRecords() public void ReadRecords()
{
List<Record> records = new List<Record>();
if (File.Exists("Data/Record.json"))
{ {
var json = File.ReadAllText("Data/Record.json"); var json = File.ReadAllText("Data/Record.json");
var records = JsonConvert.DeserializeObject<List<Record>>(json); records = JsonConvert.DeserializeObject<List<Record>>(json);
}
this.Records = new MvxObservableCollection<Record>(); this.Records = new MvxObservableCollection<Record>();
records.ForEach(item => records.ForEach(item =>
@ -41,9 +56,9 @@ namespace ProxySuper.Core.ViewModels
}); });
} }
public void SaveRecords() public void SaveToJson()
{ {
var json = JsonConvert.SerializeObject(Records); var json = JsonConvert.SerializeObject(this);
File.WriteAllText("Data/Record.json", json); File.WriteAllText("Data/Record.json", json);
} }
@ -64,6 +79,9 @@ namespace ProxySuper.Core.ViewModels
if (result == null) return; if (result == null) return;
Records.Add(result); Records.Add(result);
SaveToJson();
} }
public async Task AddTrojanGoRecord() public async Task AddTrojanGoRecord()

View File

@ -24,6 +24,76 @@ namespace ProxySuper.Core.ViewModels
Settings = parameter; Settings = parameter;
} }
public bool Checked_VLESS_TCP_XTLS
{
get
{
return Settings.Types.Contains(XrayType.VLESS_TCP_XTLS);
}
}
public bool Checked_VLESS_TCP
{
get
{
return Settings.Types.Contains(XrayType.VLESS_TCP);
}
}
public bool Checked_VLESS_WS
{
get
{
return Settings.Types.Contains(XrayType.VLESS_WS);
}
}
public bool Checked_VLESS_KCP
{
get
{
return Settings.Types.Contains(XrayType.VLESS_KCP);
}
}
public bool Checked_VMESS_TCP
{
get
{
return Settings.Types.Contains(XrayType.VMESS_TCP);
}
}
public bool Checked_VMESS_WS
{
get
{
return Settings.Types.Contains(XrayType.VMESS_WS);
}
}
public bool Checked_VMESS_KCP
{
get
{
return Settings.Types.Contains(XrayType.VMESS_KCP);
}
}
public bool Checked_Trojan_TCP
{
get
{
return Settings.Types.Contains(XrayType.Trojan_TCP);
}
}
public bool CheckedShadowSocks
{
get
{
return Settings.Types.Contains(XrayType.ShadowsocksAEAD);
}
}
} }
} }

View File

@ -174,18 +174,18 @@ namespace ProxySuper.Core.ViewModels
} }
public string ShadowSocksPassword public string ShadowSocksPassword
{ {
get => Settings.ShadowsocksPassword; get => Settings.ShadowSocksPassword;
set => Settings.ShadowsocksPassword = value; set => Settings.ShadowSocksPassword = value;
} }
public string ShadowSocksMethod public string ShadowSocksMethod
{ {
get => Settings.ShadowsocksMethod; get => Settings.ShadowSocksMethod;
set set
{ {
var namespaceStr = typeof(ComboBoxItem).FullName + ":"; var namespaceStr = typeof(ComboBoxItem).FullName + ":";
var trimValue = value.Replace(namespaceStr, ""); var trimValue = value.Replace(namespaceStr, "");
trimValue = trimValue.Trim(); trimValue = trimValue.Trim();
Settings.ShadowsocksMethod = trimValue; Settings.ShadowSocksMethod = trimValue;
RaisePropertyChanged("ShadowSocksMethod"); RaisePropertyChanged("ShadowSocksMethod");
} }
} }

View File

@ -38,7 +38,7 @@
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="80" /> <ColumnDefinition Width="80" />
<ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
@ -111,7 +111,7 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="80" /> <ColumnDefinition Width="80" />
<ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Content="{DynamicResource ProxyType}" Grid.Row="0" Grid.Column="0" /> <Label Content="{DynamicResource ProxyType}" Grid.Row="0" Grid.Column="0" />

View File

@ -1,54 +0,0 @@
[
{
"host": {
"tag": "123",
"address": "122.23.36.32",
"userName": null,
"password": null,
"port": 22,
"privateKeyPath": null,
"proxy": {
"address": "127.0.0.1",
"port": 1080,
"type": 0,
"userName": null,
"password": null
},
"secretType": 0
},
"settings": {
"port": 443,
"uuid": "ac082c52-0be1-4a20-a1ee-aa7e29ce2d1e",
"vlesS_WS_Path": "/vlessws",
"vlesS_H2_Path": "/vlessh2",
"vlesS_KCP_Seed": "ac082c52-0be1-4a20-a1ee-aa7e29ce2d1e",
"vlesS_KCP_Type": "none",
"vlesS_KCP_Port": 2001,
"vlesS_gRPC_ServiceName": "xray_gRPC",
"vlesS_gRPC_Port": 2002,
"vmesS_WS_Path": "/vmessws",
"vmesS_TCP_Path": "/vmesstcp",
"vmesS_H2_Path": "/vmessh2",
"vmesS_KCP_Seed": "ac082c52-0be1-4a20-a1ee-aa7e29ce2d1e",
"vmesS_KCP_Type": "none",
"vmesS_KCP_Port": 3001,
"trojanPassword": "ac082c52-0be1-4a20-a1ee-aa7e29ce2d1e",
"trojan_WS_Path": "/trojanws",
"shadowsocksPassword": "ac082c52-0be1-4a20-a1ee-aa7e29ce2d1e",
"shadowsocksMethod": "aes-128-gcm",
"shadowSocksPort": 4001,
"domain": "www.baodu.com",
"maskDomain": null,
"types": [
100,
101,
102,
104,
202,
204,
401,
301
]
}
}
]

View File

@ -258,9 +258,6 @@
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<None Include="Data\Record.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
@ -395,7 +392,9 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource> </Resource>
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup>
<Folder Include="Data\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\System.Runtime.WindowsRuntime.4.6.0\build\net461\System.Runtime.WindowsRuntime.targets" Condition="Exists('..\packages\System.Runtime.WindowsRuntime.4.6.0\build\net461\System.Runtime.WindowsRuntime.targets')" /> <Import Project="..\packages\System.Runtime.WindowsRuntime.4.6.0\build\net461\System.Runtime.WindowsRuntime.targets" Condition="Exists('..\packages\System.Runtime.WindowsRuntime.4.6.0\build\net461\System.Runtime.WindowsRuntime.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

View File

@ -34,13 +34,14 @@
<!--Editor Window--> <!--Editor Window-->
<sys:String x:Key="HostGroupName">Host</sys:String>
<sys:String x:Key="HostTag">Tag</sys:String> <sys:String x:Key="HostTag">Tag</sys:String>
<sys:String x:Key="HostAddress">Address</sys:String> <sys:String x:Key="HostAddress">Address</sys:String>
<sys:String x:Key="HostUserName">UserName</sys:String> <sys:String x:Key="HostUserName">UserName</sys:String>
<sys:String x:Key="HostPassword">Password</sys:String> <sys:String x:Key="HostPassword">Password</sys:String>
<sys:String x:Key="HostPort">Port</sys:String> <sys:String x:Key="HostPort">Port</sys:String>
<sys:String x:Key="HostSecretType">SecretType</sys:String> <sys:String x:Key="HostSecretType">SecretType</sys:String>
<sys:String x:Key="HostUploadSecretKey">UploadSecretKey</sys:String> <sys:String x:Key="HostUploadSecretKey">UploadKey</sys:String>
<sys:String x:Key="HostSertTypePassword">Password</sys:String> <sys:String x:Key="HostSertTypePassword">Password</sys:String>
<sys:String x:Key="HostSertTypePrivateKey">PrivateKey</sys:String> <sys:String x:Key="HostSertTypePrivateKey">PrivateKey</sys:String>

View File

@ -26,8 +26,8 @@
</MenuItem> </MenuItem>
<MenuItem Header="{DynamicResource MainMenuLanguage}" Padding="10,3"> <MenuItem Header="{DynamicResource MainMenuLanguage}" Padding="10,3">
<MenuItem Padding="0,5" Header="{DynamicResource MainMenuLanguageEn}"></MenuItem> <MenuItem Padding="0,5" Header="{DynamicResource MainMenuLanguageEn}" Click="SetEnglish"></MenuItem>
<MenuItem Padding="0,5" Header="{DynamicResource MainMenuLanguageCn}"></MenuItem> <MenuItem Padding="0,5" Header="{DynamicResource MainMenuLanguageCn}" Click="SetSimpleChinese"></MenuItem>
</MenuItem> </MenuItem>
<MenuItem Header="{DynamicResource MainMenuHelper}" Padding="10,3"> <MenuItem Header="{DynamicResource MainMenuHelper}" Padding="10,3">
@ -37,6 +37,7 @@
<StackPanel Grid.Row="1" Margin="0,10"> <StackPanel Grid.Row="1" Margin="0,10">
<DataGrid AutoGenerateColumns="False" <DataGrid AutoGenerateColumns="False"
Name="DataGrid"
ItemsSource="{Binding Records}" ItemsSource="{Binding Records}"
VerticalContentAlignment="Bottom" VerticalContentAlignment="Bottom"
IsReadOnly="True" IsReadOnly="True"
@ -82,7 +83,7 @@
Padding="12,3" Padding="12,3"
Content="{DynamicResource MainDataGridColumnActionViewConfig}" /> Content="{DynamicResource MainDataGridColumnActionViewConfig}" />
<Button Click="NavToEditor" <Button Command="{Binding NavToEditorCommand}"
Margin="5,0" Margin="5,0"
Padding="12,3" Padding="12,3"
Content="{DynamicResource MainDataGridColumnActionDelete}" /> Content="{DynamicResource MainDataGridColumnActionDelete}" />

View File

@ -44,16 +44,18 @@ namespace ProxySuper.WPF.Views
System.Diagnostics.Process.Start("explorer.exe", "https://github.com/proxysu/ProxySU"); System.Diagnostics.Process.Start("explorer.exe", "https://github.com/proxysu/ProxySU");
} }
private void NavToEditor(object sender, RoutedEventArgs e)
ResourceDictionary resource = new ResourceDictionary();
private void SetSimpleChinese(object sender, RoutedEventArgs e)
{ {
NavigationService.Navigate<XrayEditorViewModel, Record, Record>(ViewModel.Records[0]); resource.Source = new Uri(@"Resources\Languages\zh_cn.xaml", UriKind.Relative);
Application.Current.Resources.MergedDictionaries[0] = resource;
} }
protected override void Dispose(bool disposing) private void SetEnglish(object sender, RoutedEventArgs e)
{ {
ViewModel.SaveRecords(); resource.Source = new Uri(@"Resources\Languages\en.xaml", UriKind.Relative);
base.Dispose(disposing); Application.Current.Resources.MergedDictionaries[0] = resource;
} }
} }
} }

View File

@ -25,70 +25,70 @@
SelectionChanged="BuildQrCode"> SelectionChanged="BuildQrCode">
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.VLESS_TCP_XTLS}" Tag="{x:Static models:XrayType.VLESS_TCP_XTLS}"
IsEnabled="{Binding Settings.Checked_VLESS_TCP_XTLS}" IsEnabled="{Binding Checked_VLESS_TCP_XTLS}"
Header="VLESS-TCP-XTLS"> Header="VLESS-TCP-XTLS">
<ctrl:VLESS_XTLS_Control /> <ctrl:VLESS_XTLS_Control />
</TabItem> </TabItem>
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.VLESS_TCP}" Tag="{x:Static models:XrayType.VLESS_TCP}"
IsEnabled="{Binding Settings.Checked_VLESS_TCP}" IsEnabled="{Binding Checked_VLESS_TCP}"
Header="VLESS-TCP-TLS"> Header="VLESS-TCP-TLS">
<ctrl:VLESS_TCP_TLS_Control /> <ctrl:VLESS_TCP_TLS_Control />
</TabItem> </TabItem>
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.VLESS_WS}" Tag="{x:Static models:XrayType.VLESS_WS}"
IsEnabled="{Binding Settings.Checked_VLESS_WS}" IsEnabled="{Binding Checked_VLESS_WS}"
Header="VLESS-WebSocket-TLS"> Header="VLESS-WebSocket-TLS">
<ctrl:VLESS_WS_TLS_Control /> <ctrl:VLESS_WS_TLS_Control />
</TabItem> </TabItem>
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.VLESS_KCP}" Tag="{x:Static models:XrayType.VLESS_KCP}"
IsEnabled="{Binding Settings.Checked_VLESS_KCP}" IsEnabled="{Binding Checked_VLESS_KCP}"
Header="VLESS-mKCP"> Header="VLESS-mKCP">
<ctrl:VLESS_KCP_Control /> <ctrl:VLESS_KCP_Control />
</TabItem> </TabItem>
<!--<TabItem Width="200" <!--<TabItem Width="200"
Tag="{x:Static models:XrayType.VLESS_gRPC}" Tag="{x:Static models:XrayType.VLESS_gRPC}"
IsEnabled="{Binding Settings.Checked_VLESS_gRPC}" IsEnabled="{Binding Checked_VLESS_gRPC}"
Header="VLESS-gRPC"> Header="VLESS-gRPC">
<ctrl:VLESS_gRPC_Control /> <ctrl:VLESS_gRPC_Control />
</TabItem>--> </TabItem>-->
<TabItem Width="200" Height="40" <!--<TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.VMESS_TCP}" Tag="{x:Static models:XrayType.VMESS_TCP}"
IsEnabled="{Binding Settings.Checked_VMESS_TCP}" IsEnabled="{Binding Checked_VMESS_TCP}"
Header="VMESS-TCP-TLS"> Header="VMESS-TCP-TLS">
<ctrl:VMESS_TCP_TLS_Control /> <ctrl:VMESS_TCP_TLS_Control />
</TabItem> </TabItem>-->
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.VMESS_WS}" Tag="{x:Static models:XrayType.VMESS_WS}"
IsEnabled="{Binding Settings.Checked_VMESS_WS}" IsEnabled="{Binding Checked_VMESS_WS}"
Header="VMESS-WebSocket-TLS"> Header="VMESS-WebSocket-TLS">
<ctrl:VMESS_WS_TLS_Control /> <ctrl:VMESS_WS_TLS_Control />
</TabItem> </TabItem>
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.VMESS_KCP}" Tag="{x:Static models:XrayType.VMESS_KCP}"
IsEnabled="{Binding Settings.Checked_VMESS_KCP}" IsEnabled="{Binding Checked_VMESS_KCP}"
Header="VMESS-mKCP"> Header="VMESS-mKCP">
<ctrl:VMESS_KCP_Control /> <ctrl:VMESS_KCP_Control />
</TabItem> </TabItem>
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.Trojan_TCP}" Tag="{x:Static models:XrayType.Trojan_TCP}"
IsEnabled="{Binding Settings.Checked_Trojan_TCP}" IsEnabled="{Binding Checked_Trojan_TCP}"
Header="Trojan-TCP"> Header="Trojan-TCP">
<ctrl:Trojan_TCP_Control /> <ctrl:Trojan_TCP_Control />
</TabItem> </TabItem>
<TabItem Width="200" Height="40" <TabItem Width="200" Height="40"
Tag="{x:Static models:XrayType.ShadowsocksAEAD}" Tag="{x:Static models:XrayType.ShadowsocksAEAD}"
IsEnabled="{Binding Settings.CheckedShadowSocks}" IsEnabled="{Binding CheckedShadowSocks}"
Header="ShadowSocks"> Header="ShadowSocks">
<ctrl:ShadowSocksControl /> <ctrl:ShadowSocksControl />
</TabItem> </TabItem>