mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-11-17 15:25:35 +00:00
99 lines
4.4 KiB
C#
99 lines
4.4 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Net.Security;
|
|
using System.Reflection;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Windows.Forms;
|
|
|
|
namespace network.loki.lokinet.win32.ui
|
|
{
|
|
public partial class dlgBootstrap : Form
|
|
{
|
|
public dlgBootstrap()
|
|
{
|
|
InitializeComponent();
|
|
if (Program.platform == PlatformID.Win32NT)
|
|
default_path = Environment.ExpandEnvironmentVariables("%APPDATA%\\.lokinet");
|
|
else
|
|
default_path = Environment.ExpandEnvironmentVariables("%HOME%/.lokinet");
|
|
label2.Text = String.Format("This file is automatically saved as {0}{1}{2}.", default_path, Path.DirectorySeparatorChar, rcName);
|
|
}
|
|
|
|
private WebClient wc;
|
|
private string default_path;
|
|
private const string rcName = "bootstrap.signed";
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
Directory.CreateDirectory(default_path);
|
|
var build = ((AssemblyInformationalVersionAttribute)Assembly
|
|
.GetAssembly(typeof(main_frame))
|
|
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false)[0])
|
|
.InformationalVersion;
|
|
// add something more unique, this is the IE 5.0 default string
|
|
try
|
|
{
|
|
ServicePointManager.ServerCertificateValidationCallback += cert_check;
|
|
ServicePointManager.SecurityProtocol = (SecurityProtocolType)48 | 0 | (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;
|
|
wc = new WebClient();
|
|
wc.Headers.Add("User-Agent", string.Format("Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0); lokinet-win32-managed-ui/{0}", build));
|
|
wc.DownloadFile(uriBox.Text, string.Format("{0}{1}{2}", default_path, Path.DirectorySeparatorChar, rcName));
|
|
MessageBox.Show("LokiNET node bootstrapped", "LokiNET", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
DialogResult = DialogResult.OK;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string lokinetExeString;
|
|
Process lokinet_bootstrap = new Process();
|
|
|
|
if (Program.platform == PlatformID.Win32NT)
|
|
lokinetExeString = String.Format("{0}\\lokinet-bootstrap.exe", Directory.GetCurrentDirectory());
|
|
else
|
|
lokinetExeString = String.Format("{0}/lokinet-bootstrap", Directory.GetCurrentDirectory());
|
|
|
|
lokinet_bootstrap.StartInfo.UseShellExecute = false;
|
|
lokinet_bootstrap.StartInfo.CreateNoWindow = true;
|
|
lokinet_bootstrap.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();
|
|
lokinet_bootstrap.StartInfo.FileName = lokinetExeString;
|
|
lokinet_bootstrap.StartInfo.Arguments = string.Format("--cacert rootcerts.pem -L {0} --output \"{1}{2}{3}\"", uriBox.Text, default_path, Path.DirectorySeparatorChar, rcName);
|
|
lokinet_bootstrap.Start();
|
|
lokinet_bootstrap.WaitForExit();
|
|
if (lokinet_bootstrap.ExitCode == 0)
|
|
{
|
|
DialogResult = DialogResult.OK;
|
|
MessageBox.Show("LokiNET node bootstrapped", "LokiNET", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(string.Format("An error occured while downloading data. {0}", ex.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
|
DialogResult = DialogResult.Abort;
|
|
}
|
|
}
|
|
Close();
|
|
}
|
|
|
|
private bool cert_check(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
|
|
{
|
|
// If the certificate is a valid, signed certificate, return true.
|
|
if (error == System.Net.Security.SslPolicyErrors.None)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
MessageBox.Show(string.Format("X509Certificate [{0}] Policy Error: '{1}'",
|
|
cert.Subject,
|
|
error.ToString()), "SSL Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
|
|
|
|
return false;
|
|
}
|
|
|
|
private void button1_Click_1(object sender, EventArgs e)
|
|
{
|
|
DialogResult = DialogResult.Cancel;
|
|
Close();
|
|
}
|
|
}
|
|
}
|