Skip to content

Commit

Permalink
add brook
Browse files Browse the repository at this point in the history
  • Loading branch information
next-autumn committed Jul 2, 2021
1 parent a2b2707 commit 5bd7529
Show file tree
Hide file tree
Showing 13 changed files with 398 additions and 2 deletions.
35 changes: 35 additions & 0 deletions ProxySuper.Core/Models/Projects/BrookSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProxySuper.Core.Models.Projects
{
public class BrookSettings : IProjectSettings
{
public string Domain { get; set; }

public string Password { get; set; }

public BrookType BrookType { get; set; }

public int Port { get; set; } = 443;

public List<int> FreePorts
{
get
{
return new List<int>()
{
Port
};
}
}

public string Email => "[email protected]";

public ProjectType Type { get; set; } = ProjectType.Brook;

}
}
15 changes: 15 additions & 0 deletions ProxySuper.Core/Models/Projects/BrookType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProxySuper.Core.Models.Projects
{
public enum BrookType
{
server,
wsserver,
wssserver
}
}
3 changes: 2 additions & 1 deletion ProxySuper.Core/Models/Projects/ProjectType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public enum ProjectType
{
Xray = 0,
TrojanGo = 1,
NaiveProxy = 2
NaiveProxy = 2,
Brook = 3,
}
}
7 changes: 6 additions & 1 deletion ProxySuper.Core/Models/Record.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ public Host Host
[JsonProperty("naiveProxySettings")]
public NaiveProxySettings NaiveProxySettings { get; set; }

[JsonProperty("brook")]
public BrookSettings BrookSettings { get; set; }


[JsonIgnore]
public ProjectType Type
Expand All @@ -63,7 +66,9 @@ public ProjectType Type

if (TrojanGoSettings != null) return ProjectType.TrojanGo;

return ProjectType.NaiveProxy;
if (NaiveProxySettings != null) return ProjectType.NaiveProxy;

return ProjectType.Brook;
}
}

Expand Down
4 changes: 4 additions & 0 deletions ProxySuper.Core/ProxySuper.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@
<Compile Include="Models\Hosts\Host.cs" />
<Compile Include="Models\Hosts\LocalProxyType.cs" />
<Compile Include="Models\Hosts\LoginSecretType.cs" />
<Compile Include="Models\Projects\BrookSettings.cs" />
<Compile Include="Models\Projects\BrookType.cs" />
<Compile Include="Models\Projects\IProjectSettings.cs" />
<Compile Include="Models\Hosts\LocalProxy.cs" />
<Compile Include="Models\Projects\NaiveProxySettings.cs" />
Expand All @@ -84,13 +86,15 @@
<Compile Include="Models\Record.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Helpers\Utils.cs" />
<Compile Include="Services\BrookProject.cs" />
<Compile Include="Services\NaiveProxyProject.cs" />
<Compile Include="Services\ProjectBase.cs" />
<Compile Include="Services\ShareLink.cs" />
<Compile Include="Services\TrojanGoConfigBuilder.cs" />
<Compile Include="Services\TrojanGoProject.cs" />
<Compile Include="Services\XrayConfigBuilder.cs" />
<Compile Include="Services\XrayProject.cs" />
<Compile Include="ViewModels\BrookEditorViewModel.cs" />
<Compile Include="ViewModels\HomeViewModel.cs" />
<Compile Include="ViewModels\NaiveProxyConfigViewModel.cs" />
<Compile Include="ViewModels\NaiveProxyEditorViewModel.cs" />
Expand Down
112 changes: 112 additions & 0 deletions ProxySuper.Core/Services/BrookProject.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
using ProxySuper.Core.Models.Projects;
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProxySuper.Core.Services
{
public class BrookProject : ProjectBase<BrookSettings>
{
public BrookProject(SshClient sshClient, BrookSettings parameters, Action<string> writeOutput) : base(sshClient, parameters, writeOutput)
{
}

public override void Install()
{

WriteOutput("检测安装系统环境...");
EnsureSystemEnv();
WriteOutput("检测安装系统环境完成");

WriteOutput("配置服务器端口...");
ConfigurePort();
WriteOutput("端口配置完成");

WriteOutput("安装必要的系统工具...");
ConfigureSoftware();
WriteOutput("系统工具安装完成");

WriteOutput("检测IP6...");
ConfigureIPv6();
WriteOutput("检测IP6完成");

WriteOutput("配置防火墙...");
ConfigureFirewall();
WriteOutput("防火墙配置完成");

if (Parameters.BrookType == BrookType.wssserver)
{
WriteOutput("检测域名是否绑定本机IP...");
ValidateDomain();
WriteOutput("域名检测完成");
}



}

public void InstallBrook()
{
Console.WriteLine("安装nami");
RunCmd("source <(curl -L https://git.io/getnami)");
Console.WriteLine("安装nami完成");

Console.WriteLine("安装Brook");
RunCmd("echo y | nami install github.com/txthinking/brook");
Console.WriteLine("安装Brook完成");

Console.WriteLine("安装joker");
RunCmd("echo y | nami install github.com/txthinking/joker");
Console.WriteLine("安装joker完成");

Console.WriteLine("安装jinbe");
RunCmd("echo y | nami install github.com/txthinking/jinbe");
Console.WriteLine("安装jinbe完成");


var runBrookCmd = string.Empty;

if (Parameters.BrookType == BrookType.server)
{
runBrookCmd = $"joker brook server --listen :{Parameters.Port} --password {Parameters.Password}";
}

if (Parameters.BrookType == BrookType.wsserver)
{
runBrookCmd = $"joker brook wsserver --listen :{Parameters.Port} --password {Parameters.Password}";
}

if (Parameters.BrookType == BrookType.wsserver)
{
runBrookCmd = $"joker brook wssserver --domain {Parameters.Domain} --password {Parameters.Password}";
}

RunCmd("jinbe " + runBrookCmd);

Console.WriteLine("*************安装完成,尽情享用吧**********");
}

public void Uninstall()
{
RunCmd("jinbe remove 0");
RunCmd("killall joker");

Console.WriteLine("卸载jinbe");
RunCmd("echo y | nami remove github.com/txthinking/jinbe");

Console.WriteLine("卸载joker");
RunCmd("echo y | nami remove github.com/txthinking/joker");

Console.WriteLine("卸载brook");
RunCmd("echo y | nami remove github.com/txthinking/brook");

Console.WriteLine("关闭端口");
ClosePort(Parameters.FreePorts.ToArray());

Console.WriteLine("******卸载完成******");
}
}
}
23 changes: 23 additions & 0 deletions ProxySuper.Core/Services/ProjectBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ public enum CmdType
Yum
}

public enum ArchType
{
x86,
arm,
}

public abstract class ProjectBase<TSettings> where TSettings : IProjectSettings
{
private SshClient _sshClient;
Expand All @@ -28,6 +34,8 @@ public abstract class ProjectBase<TSettings> where TSettings : IProjectSettings

protected CmdType CmdType { get; set; }

protected ArchType ArchType { get; set; }

protected bool IsSELinux { get; set; }

protected bool OnlyIpv6 { get; set; }
Expand Down Expand Up @@ -67,6 +75,21 @@ protected void EnsureSystemEnv()
{
string cmd;

// cpu架构
var result = RunCmd("uname -m");
if (result.Contains("x86"))
{
ArchType = ArchType.x86;
}
else if (result.Contains("arm") || result.Contains("arch"))
{
ArchType = ArchType.arm;
}
else
{
throw new Exception($"未识别的架构处理器架构:{result}");
}

// 确认安装命令
if (CmdType == CmdType.None)
{
Expand Down
76 changes: 76 additions & 0 deletions ProxySuper.Core/ViewModels/BrookEditorViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using MvvmCross.Commands;
using MvvmCross.Navigation;
using MvvmCross.ViewModels;
using ProxySuper.Core.Models;
using ProxySuper.Core.Models.Hosts;
using ProxySuper.Core.Models.Projects;
using ProxySuper.Core.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProxySuper.Core.ViewModels
{
public class BrookEditorViewModel : MvxViewModel<Record, Record>
{
public string Id { get; set; }

public Host Host { get; set; }

public BrookSettings Settings { get; set; }

public List<string> BrookTypes
{
get
{
return new List<string> {
BrookType.server.ToString(),
BrookType.wsserver.ToString(),
BrookType.wssserver.ToString(),
};
}
}

public string CheckedBrookType
{
get
{
return Settings.BrookType.ToString();
}
set
{
Settings.BrookType = (BrookType)Enum.Parse(typeof(BrookType), value);
RaisePropertyChanged("EnablePort");
RaisePropertyChanged("EnableDomain");
}
}

public bool EnablePort => Settings.BrookType != BrookType.wssserver;

public bool EnableDomain => Settings.BrookType == BrookType.wssserver;

public IMvxCommand SaveCommand => new MvxCommand(() => Save());

public IMvxNavigationService NavigationService { get; }

public override void Prepare(Record parameter)
{
var record = Utils.DeepClone(parameter);
Id = record.Id;
Host = record.Host;
Settings = record.BrookSettings;
}

public void Save()
{
NavigationService.Close(this, new Record()
{
Id = Id,
Host = Host,
BrookSettings = Settings,
});
}
}
}
17 changes: 17 additions & 0 deletions ProxySuper.Core/ViewModels/HomeViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ public void SaveToJson()

public IMvxCommand AddNaiveProxyCommand => new MvxAsyncCommand(AddNaiveProxyRecord);

public IMvxCommand AddBrookCommand => new MvxAsyncCommand(AddBrookRecord);

public IMvxCommand RemoveCommand => new MvxAsyncCommand<string>(DeleteRecord);

public IMvxCommand EditCommand => new MvxAsyncCommand<string>(EditRecord);
Expand Down Expand Up @@ -118,6 +120,21 @@ public async Task AddNaiveProxyRecord()
SaveToJson();
}

public async Task AddBrookRecord()
{
Record record = new Record();
record.Id = Utils.GetTickID();
record.Host = new Host();
record.BrookSettings = new BrookSettings();

var result = await _navigationService.Navigate<BrookEditorViewModel, Record, Record>(record);
if (result == null) return;

Records.Add(result);

SaveToJson();
}


public async Task EditRecord(string id)
{
Expand Down
7 changes: 7 additions & 0 deletions ProxySuper.WPF/ProxySuper.WPF.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,9 @@
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Views\BrookEditorView.xaml.cs">
<DependentUpon>BrookEditorView.xaml</DependentUpon>
</Compile>
<Compile Include="Views\HomeView.xaml.cs">
<DependentUpon>HomeView.xaml</DependentUpon>
</Compile>
Expand Down Expand Up @@ -201,6 +204,10 @@
<Generator>MSBuild:Compile</Generator>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Page>
<Page Include="Views\BrookEditorView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\HomeView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
Expand Down
Loading

0 comments on commit 5bd7529

Please sign in to comment.