mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-07 03:40:09 +00:00
turn APIHandler into a singleton
This commit is contained in:
parent
6b0543ba27
commit
e1f9f7b6dc
@ -7,6 +7,7 @@ using System.Net;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace WinUI
|
namespace WinUI
|
||||||
{
|
{
|
||||||
@ -18,7 +19,95 @@ namespace WinUI
|
|||||||
|
|
||||||
private string url = null;
|
private string url = null;
|
||||||
|
|
||||||
public APIHandler()
|
private static APIHandler instance;
|
||||||
|
|
||||||
|
public static APIHandler Instance
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (instance == null)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool initHandler()
|
||||||
|
{
|
||||||
|
String localZtDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\ZeroTier\\One";
|
||||||
|
String globalZtDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One";
|
||||||
|
|
||||||
|
String authToken = "";
|
||||||
|
Int32 port = 9993;
|
||||||
|
|
||||||
|
if (!File.Exists(localZtDir + "\\authtoken.secret") || !File.Exists(localZtDir + "\\zerotier-one.port"))
|
||||||
|
{
|
||||||
|
// launch external process to copy file into place
|
||||||
|
String curPath = System.Reflection.Assembly.GetEntryAssembly().Location;
|
||||||
|
int index = curPath.LastIndexOf("\\");
|
||||||
|
curPath = curPath.Substring(0, index);
|
||||||
|
ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", globalZtDir + " " + localZtDir);
|
||||||
|
startInfo.Verb = "runas";
|
||||||
|
|
||||||
|
|
||||||
|
var process = Process.Start(startInfo);
|
||||||
|
process.WaitForExit();
|
||||||
|
}
|
||||||
|
|
||||||
|
authToken = readAuthToken(localZtDir + "\\authtoken.secret");
|
||||||
|
|
||||||
|
if ((authToken == null) || (authToken.Length <= 0))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Unable to read ZeroTier One authtoken", "ZeroTier One");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
port = readPort(localZtDir + "\\zerotier-one.port");
|
||||||
|
instance = new APIHandler(port, authToken);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String readAuthToken(String path)
|
||||||
|
{
|
||||||
|
String authToken = "";
|
||||||
|
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
byte[] tmp = File.ReadAllBytes(path);
|
||||||
|
authToken = System.Text.Encoding.UTF8.GetString(tmp).Trim();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
MessageBox.Show("Unable to read ZeroTier One Auth Token from:\r\n" + path, "ZeroTier One");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return authToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Int32 readPort(String path)
|
||||||
|
{
|
||||||
|
Int32 port = 9993;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
byte[] tmp = File.ReadAllBytes(path);
|
||||||
|
port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim());
|
||||||
|
if ((port <= 0) || (port > 65535))
|
||||||
|
port = 9993;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
private APIHandler()
|
||||||
{
|
{
|
||||||
url = "http://127.0.0.1:9993";
|
url = "http://127.0.0.1:9993";
|
||||||
}
|
}
|
||||||
|
@ -24,94 +24,11 @@ namespace WinUI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class ToolbarItem : Window
|
public partial class ToolbarItem : Window
|
||||||
{
|
{
|
||||||
APIHandler handler;
|
APIHandler handler = APIHandler.Instance;
|
||||||
|
|
||||||
public ToolbarItem()
|
public ToolbarItem()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
if (InitAPIHandler())
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MessageBox.Show("ZeroTier API Initialization Failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String readAuthToken(String path)
|
|
||||||
{
|
|
||||||
String authToken = "";
|
|
||||||
|
|
||||||
if (File.Exists(path))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
byte[] tmp = File.ReadAllBytes(path);
|
|
||||||
authToken = System.Text.Encoding.UTF8.GetString(tmp).Trim();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
MessageBox.Show("Unable to read ZeroTier One Auth Token from:\r\n" + path, "ZeroTier One");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return authToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Int32 readPort(String path)
|
|
||||||
{
|
|
||||||
Int32 port = 9993;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
byte[] tmp = File.ReadAllBytes(path);
|
|
||||||
port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim());
|
|
||||||
if ((port <= 0) || (port > 65535))
|
|
||||||
port = 9993;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
return port;
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool InitAPIHandler()
|
|
||||||
{
|
|
||||||
String localZtDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\ZeroTier\\One";
|
|
||||||
String globalZtDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One";
|
|
||||||
|
|
||||||
String authToken = "";
|
|
||||||
Int32 port = 9993;
|
|
||||||
|
|
||||||
if (!File.Exists(localZtDir + "\\authtoken.secret") || !File.Exists(localZtDir + "\\zerotier-one.port"))
|
|
||||||
{
|
|
||||||
// launch external process to copy file into place
|
|
||||||
String curPath = System.Reflection.Assembly.GetEntryAssembly().Location;
|
|
||||||
int index = curPath.LastIndexOf("\\");
|
|
||||||
curPath = curPath.Substring(0, index);
|
|
||||||
ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", globalZtDir + " " + localZtDir);
|
|
||||||
startInfo.Verb = "runas";
|
|
||||||
|
|
||||||
|
|
||||||
var process = Process.Start(startInfo);
|
|
||||||
process.WaitForExit();
|
|
||||||
}
|
|
||||||
|
|
||||||
authToken = readAuthToken(localZtDir + "\\authtoken.secret");
|
|
||||||
|
|
||||||
if ((authToken == null) || (authToken.Length <= 0))
|
|
||||||
{
|
|
||||||
MessageBox.Show("Unable to read ZeroTier One authtoken", "ZeroTier One");
|
|
||||||
this.Close();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
port = readPort(localZtDir + "\\zerotier-one.port");
|
|
||||||
handler = new APIHandler(port, authToken);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ToolbarItem_TrayContextMenuOpen(object sender, System.Windows.RoutedEventArgs e)
|
private void ToolbarItem_TrayContextMenuOpen(object sender, System.Windows.RoutedEventArgs e)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user