summaryrefslogtreecommitdiff
path: root/windows/WinUI/APIHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'windows/WinUI/APIHandler.cs')
-rw-r--r--windows/WinUI/APIHandler.cs91
1 files changed, 90 insertions, 1 deletions
diff --git a/windows/WinUI/APIHandler.cs b/windows/WinUI/APIHandler.cs
index 2a8dea13..f2fb1d21 100644
--- a/windows/WinUI/APIHandler.cs
+++ b/windows/WinUI/APIHandler.cs
@@ -7,6 +7,7 @@ using System.Net;
using System.IO;
using System.Windows;
using Newtonsoft.Json;
+using System.Diagnostics;
namespace WinUI
{
@@ -18,7 +19,95 @@ namespace WinUI
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";
}