1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-25 22:56:09 +03:00
ProxySU/ProxySuper.WPF/Views/TrojanGoInstallerView.xaml.cs

176 lines
5.1 KiB
C#
Raw Normal View History

2021-05-21 13:03:40 +03:00
using Microsoft.Win32;
using MvvmCross.Platforms.Wpf.Presenters.Attributes;
2021-05-20 13:32:17 +03:00
using MvvmCross.Platforms.Wpf.Views;
using ProxySuper.Core.Models.Hosts;
using ProxySuper.Core.Services;
using ProxySuper.Core.ViewModels;
using Renci.SshNet;
using System;
using System.Collections.Generic;
2021-05-21 13:03:40 +03:00
using System.ComponentModel;
2021-05-24 13:57:17 +03:00
using System.Diagnostics;
2021-05-20 13:32:17 +03:00
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace ProxySuper.WPF.Views
{
/// <summary>
/// TrojanGoInstallerView.xaml 的交互逻辑
/// </summary>
2021-05-21 13:03:40 +03:00
[MvxWindowPresentation(Identifier = nameof(TrojanGoInstallerView), Modal = false)]
2021-05-20 13:32:17 +03:00
public partial class TrojanGoInstallerView : MvxWindow
{
public TrojanGoInstallerView()
{
InitializeComponent();
}
public new TrojanGoInstallerViewModel ViewModel
{
get
{
return (TrojanGoInstallerViewModel)base.ViewModel;
}
}
public TrojanGoProject Project { get; set; }
private SshClient _sshClient;
private void OpenConnect()
{
WriteOutput("正在登陆服务器 ...");
var conneInfo = CreateConnectionInfo(ViewModel.Host);
_sshClient = new SshClient(conneInfo);
try
{
_sshClient.Connect();
}
catch (Exception ex)
{
WriteOutput("登陆失败!");
WriteOutput(ex.Message);
return;
}
WriteOutput("登陆服务器成功!");
ViewModel.Connected = true;
Project = new TrojanGoProject(_sshClient, ViewModel.Settings, WriteOutput);
}
private void WriteOutput(string outShell)
{
if (!outShell.EndsWith("\n"))
{
outShell += "\n";
}
Dispatcher.Invoke(() =>
{
OutputTextBox.AppendText(outShell);
OutputTextBox.ScrollToEnd();
});
}
private ConnectionInfo CreateConnectionInfo(Host host)
{
AuthenticationMethod auth = null;
if (host.SecretType == LoginSecretType.Password)
{
auth = new PasswordAuthenticationMethod(host.UserName, host.Password);
}
else if (host.SecretType == LoginSecretType.PrivateKey)
{
auth = new PrivateKeyAuthenticationMethod(host.UserName, new PrivateKeyFile(host.PrivateKeyPath));
}
if (host.Proxy.Type == LocalProxyType.None)
{
return new ConnectionInfo(host.Address, host.Port, host.UserName, auth);
}
else
{
return new ConnectionInfo(
host: host.Address,
port: host.Port,
username: host.UserName,
proxyType: (ProxyTypes)(int)host.Proxy.Type,
proxyHost: host.Proxy.Address,
proxyPort: host.Proxy.Port,
proxyUsername: host.Proxy.UserName,
proxyPassword: host.Proxy.Password,
authenticationMethods: auth);
}
}
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
base.Loaded += (sender, arg) =>
{
Task.Factory.StartNew(OpenConnect);
};
}
2021-05-24 13:57:17 +03:00
private void OpenLink(object sender, RoutedEventArgs e)
{
Hyperlink link = sender as Hyperlink;
Process.Start(new ProcessStartInfo(link.NavigateUri.AbsoluteUri));
}
2021-05-21 13:03:40 +03:00
private void Install(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(Project.Install);
}
2021-05-20 13:32:17 +03:00
2021-05-21 13:03:40 +03:00
private void Uninstall(object sender, RoutedEventArgs e)
{
2021-05-24 13:57:17 +03:00
var result = MessageBox.Show("您确认要卸载代理吗?", "提示", MessageBoxButton.YesNo);
if (result == MessageBoxResult.Yes)
{
Task.Factory.StartNew(Project.Uninstall);
}
2021-05-21 13:03:40 +03:00
}
2021-05-20 13:32:17 +03:00
2021-05-21 13:03:40 +03:00
private void InstallCert(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(Project.InstallCertToTrojanGo);
}
2021-05-20 13:32:17 +03:00
2021-05-21 13:03:40 +03:00
private void UploadWeb(object sender, RoutedEventArgs e)
{
var fileDialog = new OpenFileDialog();
fileDialog.Filter = "压缩文件|*.zip";
fileDialog.FileOk += DoUploadWeb;
fileDialog.ShowDialog();
}
private void DoUploadWeb(object sender, CancelEventArgs e)
{
Task.Factory.StartNew(() =>
{
var file = sender as OpenFileDialog;
using (var stream = file.OpenFile())
{
Project.UploadWeb(stream);
}
});
}
2021-05-20 13:32:17 +03:00
}
}