forked from proxysu/ProxySU
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
eab70cc
commit 7b72512
Showing
20 changed files
with
550 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace ProxySuper.Core.Models.Projects | ||
{ | ||
public class MTProxyGoSettings : IProjectSettings | ||
{ | ||
public MTProxyGoSettings() | ||
{ | ||
Port = 443; | ||
|
||
Domain = string.Empty; | ||
|
||
Cleartext = "bing.com"; | ||
|
||
SecretText = string.Empty; | ||
} | ||
|
||
public int Port { get; set; } | ||
|
||
public string Domain { get; set; } | ||
|
||
public List<int> FreePorts => new List<int> { Port }; | ||
|
||
public string Email => ""; | ||
|
||
public string Cleartext { get; set; } | ||
|
||
public string SecretText { get; set; } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
using ProxySuper.Core.Models.Hosts; | ||
using ProxySuper.Core.Models.Projects; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using System.Windows; | ||
|
||
namespace ProxySuper.Core.Services | ||
{ | ||
public class MTProxyGoService : ServiceBase<MTProxyGoSettings> | ||
{ | ||
public MTProxyGoService(Host host, MTProxyGoSettings settings) : base(host, settings) | ||
{ | ||
} | ||
|
||
public void Install() | ||
{ | ||
Task.Factory.StartNew(() => | ||
{ | ||
try | ||
{ | ||
Progress.Step = "1. 检测系统环境"; | ||
Progress.Percentage = 0; | ||
|
||
EnsureRootUser(); | ||
EnsureSystemEnv(); | ||
Progress.Percentage = 15; | ||
|
||
Progress.Step = "2. 安装必要的系统工具"; | ||
InstallSystemTools(); | ||
Progress.Percentage = 25; | ||
|
||
Progress.Step = "3. 配置防火墙"; | ||
ConfigFirewalld(); | ||
Progress.Percentage = 35; | ||
|
||
Progress.Step = "4. 安装docker"; | ||
InstallDocker(); | ||
Progress.Percentage = 50; | ||
|
||
Progress.Step = "5. 生成密钥"; | ||
Settings.SecretText = RunCmd($"docker run nineseconds/mtg generate-secret {Settings.Cleartext}"); | ||
Progress.Percentage = 65; | ||
|
||
Progress.Step = "6. 生成配置文件"; | ||
Progress.Desc = "创建配置"; | ||
RunCmd("touch /etc/mtg.toml"); | ||
|
||
Progress.Desc = "写入配置内容"; | ||
RunCmd($"echo secret=\"{Settings.SecretText}\" > /etc/mtg.toml"); | ||
RunCmd($"echo bind-to=\"0.0.0.0:{Settings.Port}\" >> /etc/mtg.toml"); | ||
Progress.Percentage = 80; | ||
|
||
Progress.Step = "7. 启动MTProxy服务"; | ||
RunCmd($"docker run -d -v /etc/mtg.toml:/config.toml --name=mtg --restart=always -p {Settings.Port + ":" + Settings.Port} nineseconds/mtg"); | ||
Progress.Desc = "设置自启动MTProxy服务"; | ||
|
||
Progress.Step = "安装完成"; | ||
Progress.Percentage = 100; | ||
|
||
} | ||
catch (Exception ex) | ||
{ | ||
MessageBox.Show(ex.Message); | ||
} | ||
}); | ||
} | ||
|
||
public void Uninstall() | ||
{ | ||
Task.Factory.StartNew(() => | ||
{ | ||
try | ||
{ | ||
Progress.Percentage = 0; | ||
Progress.Step = "卸载MTProxy"; | ||
|
||
Progress.Desc = "检测系统环境"; | ||
EnsureRootUser(); | ||
Progress.Percentage = 30; | ||
|
||
Progress.Desc = "删除docker容器"; | ||
var cid = RunCmd("docker ps -q --filter name=mtg"); | ||
RunCmd($"docker stop {cid}"); | ||
RunCmd($"docker rm {cid}"); | ||
Progress.Percentage = 100; | ||
Progress.Desc = "卸载完成"; | ||
} | ||
catch (Exception ex) | ||
{ | ||
MessageBox.Show(ex.Message); | ||
} | ||
}); | ||
} | ||
|
||
public void UpdateSettings() | ||
{ | ||
Task.Factory.StartNew(() => | ||
{ | ||
try | ||
{ | ||
Progress.Percentage = 0; | ||
Progress.Step = "卸载MTProxy"; | ||
|
||
|
||
Progress.Desc = "停止MTProxy服务"; | ||
var cid = RunCmd("docker ps -q --filter name=mtg"); | ||
RunCmd($"docker stop {cid}"); | ||
Progress.Percentage = 50; | ||
|
||
Progress.Desc = "修改配置文件"; | ||
RunCmd($"echo secret=\"{Settings.SecretText}\" > /etc/mtg.toml"); | ||
RunCmd($"echo bind-to=\"0.0.0.0:{Settings.Port}\" >> /etc/mtg.toml"); | ||
Progress.Percentage = 80; | ||
|
||
Progress.Desc = "重启MTProxy服务"; | ||
RunCmd($"docker restart {cid}"); | ||
|
||
Progress.Percentage = 100; | ||
Progress.Desc = "更新配置成功"; | ||
} | ||
catch (Exception ex) | ||
{ | ||
MessageBox.Show(ex.Message); | ||
} | ||
}); | ||
} | ||
|
||
private void InstallDocker() | ||
{ | ||
Progress.Desc = "执行docker安装脚本"; | ||
RunCmd("yes | curl https://get.docker.com | sh"); | ||
|
||
if (!FileExists("/usr/bin/docker")) | ||
{ | ||
Progress.Desc = "docker安装失败"; | ||
throw new Exception("docker安装失败"); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
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 MTProxyGoEditorViewModel : MvxViewModel<Record, Record> | ||
{ | ||
public MTProxyGoEditorViewModel(IMvxNavigationService navigationService) | ||
{ | ||
NavigationService = navigationService; | ||
} | ||
|
||
public IMvxNavigationService NavigationService { get; } | ||
|
||
public IMvxCommand SaveCommand => new MvxCommand(Save); | ||
|
||
public IMvxCommand SaveAndInstallCommand => new MvxCommand(SaveAndInstall); | ||
|
||
public string Id { get; set; } | ||
|
||
public Host Host { get; set; } | ||
|
||
public MTProxyGoSettings Settings { get; set; } | ||
|
||
public override void Prepare(Record parameter) | ||
{ | ||
var record = Utils.DeepClone(parameter); | ||
|
||
Id = record.Id; | ||
Host = record.Host; | ||
Settings = record.MTProxyGoSettings; | ||
} | ||
|
||
private void Save() | ||
{ | ||
NavigationService.Close(this, new Record | ||
{ | ||
Id = this.Id, | ||
Host = this.Host, | ||
MTProxyGoSettings = Settings, | ||
}); | ||
} | ||
|
||
private void SaveAndInstall() | ||
{ | ||
var record = new Record | ||
{ | ||
Id = this.Id, | ||
Host = this.Host, | ||
MTProxyGoSettings = Settings, | ||
}; | ||
NavigationService.Close(this, record); | ||
NavigationService.Navigate<MTProxyGoInstallViewModel, Record>(record); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
using MvvmCross.Commands; | ||
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.IO; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
|
||
namespace ProxySuper.Core.ViewModels | ||
{ | ||
public class MTProxyGoInstallViewModel : MvxViewModel<Record> | ||
{ | ||
Host _host; | ||
|
||
MTProxyGoSettings _settings; | ||
|
||
MTProxyGoService _mtproxyService; | ||
|
||
public override void Prepare(Record parameter) | ||
{ | ||
_host = parameter.Host; | ||
_settings = parameter.MTProxyGoSettings; | ||
} | ||
|
||
public override Task Initialize() | ||
{ | ||
_mtproxyService = new MTProxyGoService(_host, _settings); | ||
_mtproxyService.Progress.StepUpdate = () => RaisePropertyChanged("Progress"); | ||
_mtproxyService.Progress.LogsUpdate = () => RaisePropertyChanged("Logs"); | ||
_mtproxyService.Connect(); | ||
return base.Initialize(); | ||
} | ||
|
||
public override void ViewDestroy(bool viewFinishing = true) | ||
{ | ||
_mtproxyService.Disconnect(); | ||
this.SaveInstallLog(); | ||
base.ViewDestroy(viewFinishing); | ||
} | ||
|
||
public ProjectProgress Progress | ||
{ | ||
get => _mtproxyService.Progress; | ||
} | ||
|
||
public string Logs | ||
{ | ||
get => _mtproxyService.Progress.Logs; | ||
} | ||
|
||
|
||
#region Command | ||
|
||
public IMvxCommand InstallCommand => new MvxCommand(_mtproxyService.Install); | ||
|
||
public IMvxCommand UpdateSettingsCommand => new MvxCommand(_mtproxyService.UpdateSettings); | ||
|
||
public IMvxCommand UninstallCommand => new MvxCommand(_mtproxyService.Uninstall); | ||
|
||
#endregion | ||
|
||
|
||
private void SaveInstallLog() | ||
{ | ||
if (!Directory.Exists("Logs")) | ||
{ | ||
Directory.CreateDirectory("Logs"); | ||
} | ||
|
||
var fileName = System.IO.Path.Combine("Logs", DateTime.Now.ToString("yyyy-MM-dd hh-mm") + ".mtproxy-go.txt"); | ||
File.WriteAllText(fileName, Logs); | ||
} | ||
} | ||
} |
Oops, something went wrong.