From 1e0885728b4d0ec26cd0fb23edac2dbec30130ab Mon Sep 17 00:00:00 2001 From: Jeremy Tellier - ROG Date: Fri, 12 Jun 2020 17:25:29 +0100 Subject: [PATCH 1/4] Version Update Configuration --- ZitiUpdateService/UpdateService.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/ZitiUpdateService/UpdateService.cs b/ZitiUpdateService/UpdateService.cs index f8a9262f..58100f54 100644 --- a/ZitiUpdateService/UpdateService.cs +++ b/ZitiUpdateService/UpdateService.cs @@ -23,13 +23,13 @@ namespace ZitiUpdateService { private bool _isNew = true; /// private int _majorVersion = 1; private string _versionUrl = "https://netfoundry.jfrog.io/netfoundry/ziti-maven-snapshot/ziti-tunnel-win/amd64/windows/ziti-tunnel-win/maven-metadata.xml"; - private string _serviceUrl = "https://netfoundry.jfrog.io/netfoundry/ziti-maven-snapshot/ziti-tunnel-win/amd64/windows/ziti-tunnel-win/${version}/ziti-tunnel-win-${version}.zip"; + private string _serviceUrl = "https://netfoundry.jfrog.io/netfoundry/ziti-maven-snapshot/ziti-tunnel-win/amd64/windows/ziti-tunnel-win/0.0.8-SNAPSHOT/ziti-tunnel-win-0.0.8-SNAPSHOT.zip"; private System.Timers.Timer _checkTimer = new System.Timers.Timer(); private System.Timers.Timer _updateTimer = new System.Timers.Timer(); private string _rootDirectory = ""; private string _logDirectory = ""; private bool _isJustStopped = true; - private string _versionType = "release"; + private string _versionType = "latest"; ServiceController controller; public UpdateService() { @@ -37,8 +37,12 @@ namespace ZitiUpdateService { } protected override void OnStart(string[] args) { - if (ConfigurationManager.AppSettings.Get("UpdateUrl")!=null) _versionUrl = ConfigurationManager.AppSettings.Get("UpdateUrl"); - if (ConfigurationManager.AppSettings.Get("Version") !=null) _versionType = ConfigurationManager.AppSettings.Get("Version"); + try { + if (ConfigurationManager.AppSettings.Get("UpdateUrl") != null) _versionUrl = ConfigurationManager.AppSettings.Get("UpdateUrl"); + if (ConfigurationManager.AppSettings.Get("Version") != null) _versionType = ConfigurationManager.AppSettings.Get("Version"); + } catch (Exception e) { + + } _rootDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "NetFoundry"); if (!Directory.Exists(_rootDirectory)) Directory.CreateDirectory(_rootDirectory); _logDirectory = Path.Combine(_rootDirectory, "Logs"); @@ -97,7 +101,7 @@ namespace ZitiUpdateService { xmlDoc.LoadXml(result); XmlNode node = xmlDoc.SelectSingleNode("metadata/versioning/"+ _versionType); string version = node.InnerText; - Log("Version Checked: " + version+" on "+_version); + Log("Version Checked: " + version+" on "+_version+" from "+_versionType); if (version != _version) { StopZiti(); UpdateServiceFiles(); @@ -135,9 +139,9 @@ namespace ZitiUpdateService { var result = readStream.ReadToEnd(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(result); - XmlNode node = xmlDoc.SelectSingleNode("metadata/versioning/release"); + XmlNode node = xmlDoc.SelectSingleNode("metadata/versioning/"+_versionType); string version = node.InnerText; - Log("Got Version: " + version); + Log("Got Version: " + version+" from "+_versionType); string remoteService = _serviceUrl.Replace("${version}", version); @@ -152,6 +156,7 @@ namespace ZitiUpdateService { } } WebClient webClient = new WebClient(); + Log("Get From: "+remoteService); webClient.DownloadFile(remoteService, Path.Combine(_rootDirectory, "Service") + @"\windows-tunneler.zip"); Log("Zip Downloaded"); ZipFile.ExtractToDirectory(Path.Combine(_rootDirectory, "Service") + @"\windows-tunneler.zip", Path.Combine(_rootDirectory, "Service")); From 25675dc3b3a67c0f61f55865b03b699533c5d2cc Mon Sep 17 00:00:00 2001 From: Jeremy Tellier - ROG Date: Fri, 12 Jun 2020 18:26:05 +0100 Subject: [PATCH 2/4] Remove Logo and New Ico --- ZitiConsoleApp/Program.cs | 33 --------------------------- ZitiConsoleApp/ZitiConsoleApp.csproj | 9 -------- ZitiTunneler/MainMenu.xaml | 1 - ZitiTunneler/ZitiTunneler.csproj | 6 +++-- ZitiTunneler/ziti.ico | Bin 0 -> 43851 bytes ZitiUpdateService/UpdateService.cs | 2 +- 6 files changed, 5 insertions(+), 46 deletions(-) delete mode 100644 ZitiConsoleApp/Program.cs delete mode 100644 ZitiConsoleApp/ZitiConsoleApp.csproj create mode 100644 ZitiTunneler/ziti.ico diff --git a/ZitiConsoleApp/Program.cs b/ZitiConsoleApp/Program.cs deleted file mode 100644 index 8fbdbf97..00000000 --- a/ZitiConsoleApp/Program.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.IO; -using System.Net; -using System.Xml; -using System.Text; - -namespace ZitiConsoleApp { - class Program { - - private static string _versionUrl = "https://netfoundry.jfrog.io/netfoundry/ziti-maven-snapshot/ziti-tunnel-win/amd64/windows/ziti-tunnel-win/maven-metadata.xml"; - private static string _serviceUrl = "https://netfoundry.jfrog.io/netfoundry/ziti-maven-snapshot/ziti-tunnel-win/amd64/windows/ziti-tunnel-win/${version}/ziti-tunnel-win-${version}.zip"; - - static void Main(string[] args) { - var request = WebRequest.Create(_versionUrl) as HttpWebRequest; - var response = request.GetResponse(); - - Stream receiveStream = response.GetResponseStream(); - StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); - - var result = readStream.ReadToEnd(); - - XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.LoadXml(result); - - XmlNode node = xmlDoc.SelectSingleNode("metadata/versioning/release"); - string version = node.InnerText; - Console.WriteLine(version); - - string remoteService = _serviceUrl.Replace("${version}", version); - Console.WriteLine(remoteService); - } - } -} diff --git a/ZitiConsoleApp/ZitiConsoleApp.csproj b/ZitiConsoleApp/ZitiConsoleApp.csproj deleted file mode 100644 index 052b6d93..00000000 --- a/ZitiConsoleApp/ZitiConsoleApp.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - Exe - netcoreapp3.1 - Debug;Release;Releases - - - diff --git a/ZitiTunneler/MainMenu.xaml b/ZitiTunneler/MainMenu.xaml index 92ecd1a5..b9084adf 100644 --- a/ZitiTunneler/MainMenu.xaml +++ b/ZitiTunneler/MainMenu.xaml @@ -69,7 +69,6 @@ - diff --git a/ZitiTunneler/ZitiTunneler.csproj b/ZitiTunneler/ZitiTunneler.csproj index 4d75f041..6a12c611 100644 --- a/ZitiTunneler/ZitiTunneler.csproj +++ b/ZitiTunneler/ZitiTunneler.csproj @@ -81,7 +81,7 @@ bin\Releases\ - Assets\Images\icon.ico + ziti.ico @@ -333,7 +333,9 @@ false - + + + diff --git a/ZitiTunneler/ziti.ico b/ZitiTunneler/ziti.ico new file mode 100644 index 0000000000000000000000000000000000000000..141e513d9cb6798652607a400debf101c0f8cbf7 GIT binary patch literal 43851 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 VEu=RKC~JiAT188__N7(${{WTZr4s-E literal 0 HcmV?d00001 diff --git a/ZitiUpdateService/UpdateService.cs b/ZitiUpdateService/UpdateService.cs index 58100f54..fe0c1444 100644 --- a/ZitiUpdateService/UpdateService.cs +++ b/ZitiUpdateService/UpdateService.cs @@ -41,7 +41,7 @@ namespace ZitiUpdateService { if (ConfigurationManager.AppSettings.Get("UpdateUrl") != null) _versionUrl = ConfigurationManager.AppSettings.Get("UpdateUrl"); if (ConfigurationManager.AppSettings.Get("Version") != null) _versionType = ConfigurationManager.AppSettings.Get("Version"); } catch (Exception e) { - + Log(e.ToString()); } _rootDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "NetFoundry"); if (!Directory.Exists(_rootDirectory)) Directory.CreateDirectory(_rootDirectory); From 7b1e8bdced2c4573b6e8ccfdff17268589b47539 Mon Sep 17 00:00:00 2001 From: Jeremy Tellier - ROG Date: Fri, 12 Jun 2020 19:41:27 +0100 Subject: [PATCH 3/4] Add Service Version to Version --- ZitiTunneler/MainMenu.xaml | 3 +-- ZitiTunneler/MainWindow.xaml.cs | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ZitiTunneler/MainMenu.xaml b/ZitiTunneler/MainMenu.xaml index b9084adf..9b10b042 100644 --- a/ZitiTunneler/MainMenu.xaml +++ b/ZitiTunneler/MainMenu.xaml @@ -53,7 +53,6 @@ - @@ -69,7 +68,7 @@ - + diff --git a/ZitiTunneler/MainWindow.xaml.cs b/ZitiTunneler/MainWindow.xaml.cs index 5f5d484a..8bbaa953 100644 --- a/ZitiTunneler/MainWindow.xaml.cs +++ b/ZitiTunneler/MainWindow.xaml.cs @@ -30,6 +30,7 @@ namespace ZitiTunneler { private int _right = 75; private int _bottom = 0; private double _maxHeight = 800d; + private string _serviceVersion = "0.0.8"; private string[] suffixes = { "bps", "kbps", "mbps", "gbps", "tbps", "pbps" }; private List identities { @@ -65,6 +66,8 @@ namespace ZitiTunneler { notifyIcon.Visible = true; LaunchOrInstall(); + + MainMenu.ServiceVersion.Content = _serviceVersion; SetNotifyIcon("white"); InitializeComponent(); } From c7839597b2fcde23f2784dbfa78b7a9808dc0b09 Mon Sep 17 00:00:00 2001 From: Jeremy Tellier - ROG Date: Tue, 16 Jun 2020 20:10:33 +0100 Subject: [PATCH 4/4] #31 Application Logs Scrollbar #33 Hide on Browse Away #35 Loading Screen Impl #26 UI Logs #23 Service Count Alignment #21 Long Running Add Loading Screen #20 Powered By Removed #18 This was always there --- ZitiTunneler/IdentityItem.xaml.cs | 10 +-- ZitiTunneler/MainMenu.xaml | 5 +- ZitiTunneler/MainMenu.xaml.cs | 15 ++++- ZitiTunneler/MainWindow.xaml | 91 ++++++++++++++++++++++++- ZitiTunneler/MainWindow.xaml.cs | 107 +++++++++++++++++++++--------- ZitiTunneler/Models/UILog.cs | 26 ++++++++ ZitiTunneler/ZitiTunneler.csproj | 4 ++ 7 files changed, 214 insertions(+), 44 deletions(-) create mode 100644 ZitiTunneler/Models/UILog.cs diff --git a/ZitiTunneler/IdentityItem.xaml.cs b/ZitiTunneler/IdentityItem.xaml.cs index 514d1c2b..0569c7e1 100644 --- a/ZitiTunneler/IdentityItem.xaml.cs +++ b/ZitiTunneler/IdentityItem.xaml.cs @@ -22,7 +22,7 @@ namespace ZitiTunneler { public delegate void Click(ZitiIdentity identity); public event Click OnClick; - private ZitiIdentity _identity; + public ZitiIdentity _identity; public ZitiIdentity Identity { get { return _identity; @@ -64,14 +64,10 @@ namespace ZitiTunneler { ToggleStatus.Content = "DISABLED"; // MessageBox.Show("jeremy - update the identity and services here. When disabled there will be no services, service count: " + id?.Services?.Count()); } - } - catch(ServiceClient.ServiceException se) - { + } catch(ServiceClient.ServiceException se) { MessageBox.Show("Unexpected error 5 the toggle needs to be rolled back!!! jeremy!", se.Message); MessageBox.Show(se.AdditionalInfo, se.Message); - } - catch (Exception ex) - { + } catch (Exception ex) { MessageBox.Show("Unexpected error 5 the toggle needs to be rolled back!!! jeremy!", ex.Message); } } diff --git a/ZitiTunneler/MainMenu.xaml b/ZitiTunneler/MainMenu.xaml index 9b10b042..4c36e7f5 100644 --- a/ZitiTunneler/MainMenu.xaml +++ b/ZitiTunneler/MainMenu.xaml @@ -56,7 +56,8 @@ - + + @@ -65,7 +66,7 @@ - + diff --git a/ZitiTunneler/MainMenu.xaml.cs b/ZitiTunneler/MainMenu.xaml.cs index 008233f7..ec1c812e 100644 --- a/ZitiTunneler/MainMenu.xaml.cs +++ b/ZitiTunneler/MainMenu.xaml.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System; using System.Threading; using System.Management.Automation; +using ZitiTunneler.Models; namespace ZitiTunneler { @@ -55,6 +56,10 @@ namespace ZitiTunneler menuState = "Logs"; UpdateState(); } + private void ShowUILogs(object sender, MouseButtonEventArgs e) { + menuState = "UILogs"; + UpdateState(); + } private void UpdateState() { MainItems.Visibility = Visibility.Collapsed; @@ -82,10 +87,16 @@ namespace ZitiTunneler BackArrow.Visibility = Visibility.Visible; } else if (menuState=="Logs") { ServiceClient.Client client = (ServiceClient.Client)Application.Current.Properties["ServiceClient"]; - MenuTitle.Content = "Application Logs"; + MenuTitle.Content = "Service Logs"; LogsItems.Text = client.GetLogs(); LogsItems.Visibility = Visibility.Visible; BackArrow.Visibility = Visibility.Visible; + } else if (menuState == "UILogs") { + ServiceClient.Client client = (ServiceClient.Client)Application.Current.Properties["ServiceClient"]; + MenuTitle.Content = "Application Logs"; + LogsItems.Text = UILog.GetLogs(); + LogsItems.Visibility = Visibility.Visible; + BackArrow.Visibility = Visibility.Visible; } else if (menuState=="Config") { MenuTitle.Content = "Tunnel Configuration"; ConfigItems.Visibility = Visibility.Visible; @@ -103,7 +114,7 @@ namespace ZitiTunneler } private void GoBack(object sender, MouseButtonEventArgs e) { - if (menuState=="Config"||menuState=="Logs") { + if (menuState=="Config"||menuState=="Logs"||menuState=="UILogs") { menuState = "Advanced"; } else if (menuState=="Licenses") { menuState = "About"; diff --git a/ZitiTunneler/MainWindow.xaml b/ZitiTunneler/MainWindow.xaml index de557717..d2f1c26a 100644 --- a/ZitiTunneler/MainWindow.xaml +++ b/ZitiTunneler/MainWindow.xaml @@ -12,7 +12,72 @@ ClipToBounds="False" Icon="Assets/Images/icon.png" AllowsTransparency="True" Closing="Window_Closing" - WindowStyle="None" Loaded="MainWindow1_Loaded" Background="#000F0F23"> + WindowStyle="None" Loaded="MainWindow1_Loaded" Deactivated="MainUI_Deactivated" Activated="MainUI_Activated" Background="#000F0F23"> + + + + + + @@ -153,6 +218,30 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/ZitiTunneler/MainWindow.xaml.cs b/ZitiTunneler/MainWindow.xaml.cs index 8bbaa953..ef3a22e1 100644 --- a/ZitiTunneler/MainWindow.xaml.cs +++ b/ZitiTunneler/MainWindow.xaml.cs @@ -14,6 +14,8 @@ using System.Diagnostics; using System.Security.Principal; using System.Net; using System.Windows.Controls; +using System.Threading.Tasks; +using System.Threading; namespace ZitiTunneler { @@ -47,7 +49,8 @@ namespace ZitiTunneler { if (ctl.Status!=ServiceControllerStatus.Running) { try { ctl.Start(); - } catch /*ignored for now (Exception e)*/ { + } catch (Exception e) { + UILog.Log(e.Message); SetCantDisplay(); } } @@ -211,15 +214,8 @@ namespace ZitiTunneler { if (e.Action == "added") { ZitiService zs = new ZitiService(e.Service.Name, e.Service.HostName, e.Service.Port); var svc = found.Services.Find(s => s.Name == zs.Name); - - if (svc == null) - { - found.Services.Add(zs); - } - else - { - Debug.WriteLine("the service named " + zs.Name + " is already accounted for on this identity."); - } + if (svc == null) found.Services.Add(zs); + else Debug.WriteLine("the service named " + zs.Name + " is already accounted for on this identity."); } else { Debug.WriteLine("removing the service named: " + e.Service.Name); found.Services.RemoveAll(s => s.Name == e.Service.Name); @@ -232,8 +228,7 @@ namespace ZitiTunneler { { if (e == null) return; //just skip it for now... Debug.WriteLine($"==== TunnelStatusEvent: "); - this.Dispatcher.Invoke(() => - { + this.Dispatcher.Invoke(() => { InitializeTimer((int)e.Status.Duration); LoadStatusFromService(e.Status); LoadIdentities(); @@ -243,7 +238,7 @@ namespace ZitiTunneler { private void IdentityForgotten(ZitiIdentity forgotten) { ZitiIdentity idToRemove = null; foreach (var id in identities) { - if(id.Fingerprint == forgotten.Fingerprint) { + if (id.Fingerprint == forgotten.Fingerprint) { idToRemove = id; break; } @@ -305,10 +300,8 @@ namespace ZitiTunneler { private void updateViewWithIdentity(Identity id) { var zid = ZitiIdentity.FromClient(id); - foreach (var i in identities) - { - if(i.Fingerprint == zid.Fingerprint) - { + foreach (var i in identities) { + if (i.Fingerprint == zid.Fingerprint) { identities.Remove(i); break; } @@ -331,6 +324,11 @@ namespace ZitiTunneler { IdentityMenu.SetHeight(this.Height-160); for (int i=0; i { }), System.Windows.Threading.DispatcherPriority.ContextIdle); + DoConnect(); + HideLoad(); + } + + private void DoConnect() { + try { + serviceClient.SetTunnelState(true); + SetNotifyIcon("green"); + ConnectButton.Visibility = Visibility.Collapsed; + DisconnectButton.Visibility = Visibility.Visible; + + for (int i = 0; i < identities.Count; i++) { + serviceClient.IdentityOnOff(identities[i].Fingerprint, true); + } + for (int i = 0; i < IdList.Children.Count; i++) { + IdentityItem item = IdList.Children[i] as IdentityItem; + item.isOn = true; + item._identity.IsEnabled = true; + item.RefreshUI(); + } + } catch (ServiceException se) { + ShowError(se.AdditionalInfo, se.Message); + } catch (Exception ex) { + ShowError("Unexpected Error", "Code 3:" + ex.Message); + } + } private void Disconnect(object sender, RoutedEventArgs e) { + ShowLoad(); try { ConnectedTime.Content = "00:00:00"; _timer.Stop(); @@ -417,11 +432,31 @@ namespace ZitiTunneler { SetNotifyIcon("white"); ConnectButton.Visibility = Visibility.Visible; DisconnectButton.Visibility = Visibility.Collapsed; + for (int i = 0; i < identities.Count; i++) { + serviceClient.IdentityOnOff(identities[i].Fingerprint, false); + } + for (int i = 0; i < IdList.Children.Count; i++) { + IdentityItem item = IdList.Children[i] as IdentityItem; + item.isOn = false; + item._identity.IsEnabled = false; + item.RefreshUI(); + } } catch (ServiceException se) { ShowError(se.AdditionalInfo, se.Message); } catch (Exception ex) { ShowError("Unexpected Error", "Code 4:"+ex.Message); } + HideLoad(); + } + + private void ShowLoad() { + LoadProgress.IsIndeterminate = true; + LoadingScreen.Visibility = Visibility.Visible; + } + + private void HideLoad() { + LoadingScreen.Visibility = Visibility.Collapsed; + LoadProgress.IsIndeterminate = false; } private void FormFadeOut_Completed(object sender, EventArgs e) { @@ -449,5 +484,13 @@ namespace ZitiTunneler { private void CloseApp(object sender, MouseButtonEventArgs e) { Application.Current.Shutdown(); } + + private void MainUI_Deactivated(object sender, EventArgs e) { + this.WindowState = WindowState.Minimized; + } + + private void MainUI_Activated(object sender, EventArgs e) { + this.WindowState = WindowState.Normal; + } } } diff --git a/ZitiTunneler/Models/UILog.cs b/ZitiTunneler/Models/UILog.cs new file mode 100644 index 00000000..4fbe77b2 --- /dev/null +++ b/ZitiTunneler/Models/UILog.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.IO; + +namespace ZitiTunneler.Models { + public class UILog { + + private static string _logDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "NetFoundry" ,"Logs", "Log.log"); + public static void Log(string message) { + try { + File.WriteAllText(_logDirectory, message); + } catch (Exception e) { + Console.WriteLine(e.Message); + } + } + + public static string GetLogs() { + return File.ReadAllText(_logDirectory); + } + } +} diff --git a/ZitiTunneler/ZitiTunneler.csproj b/ZitiTunneler/ZitiTunneler.csproj index 6a12c611..4976fa17 100644 --- a/ZitiTunneler/ZitiTunneler.csproj +++ b/ZitiTunneler/ZitiTunneler.csproj @@ -132,6 +132,7 @@ MainMenu.xaml + ServiceInfo.xaml @@ -339,5 +340,8 @@ + + + \ No newline at end of file