Added prompts for SSL failures

This commit is contained in:
Cyberboss
2017-09-18 00:19:55 -04:00
parent 5ddb4887fb
commit d655a31bdb
3 changed files with 116 additions and 60 deletions
+24 -5
View File
@@ -56,9 +56,9 @@ namespace TGCommandLine
}
if (badConnectionString)
{
Console.WriteLine("Remote connection usage: <-c/--connect> username:password@address:port");
return ExitCode.BadCommand;
{
Console.WriteLine("Remote connection usage: <-c/--connect> username:password@address:port");
return ExitCode.BadCommand;
}
var res = Server.VerifyConnection();
@@ -113,11 +113,30 @@ namespace TGCommandLine
return result;
}
static bool BadCertificateInteractive(string message)
{
Console.WriteLine(message);
Console.Write("Do you wish to continue? NOT RECCOMENDED! (y/N): ");
var result = Console.ReadLine().Trim().ToLower();
return result == "y" || result == "yes";
}
static int Main(string[] args)
{
Command.OutputProcVar.Value = Console.WriteLine;
if (args.Length != 0)
return (int)RunCommandLine(new List<string>(args));
if (args.Length != 0)
{
Server.SetBadCertificateHandler((message) => {
foreach (var I in args)
if (I.ToLower() == "--disable-ssl-verification") //im just not even going to document this because i hate it so much
return true;
return false;
});
//allow self signed certs in debug mode
return (int)RunCommandLine(new List<string>(args));
}
Server.SetBadCertificateHandler(BadCertificateInteractive);
Console.WriteLine("Type 'remote' to connect to a remote service");
//interactive mode
+63 -51
View File
@@ -5,58 +5,70 @@ using TGServiceInterface;
namespace TGControlPanel
{
static class Program
{
[STAThread]
static void Main(string [] args)
{
try
{
if (Properties.Settings.Default.UpgradeRequired)
{
Properties.Settings.Default.Upgrade();
Properties.Settings.Default.UpgradeRequired = false;
Properties.Settings.Default.Save();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
catch (Exception e)
{
ServiceDisconnectException(e);
}
finally
{
Properties.Settings.Default.Save();
}
}
static class Program
{
[STAThread]
static void Main(string[] args)
{
Server.SetBadCertificateHandler(BadCertificateHandler);
try
{
if (Properties.Settings.Default.UpgradeRequired)
{
Properties.Settings.Default.Upgrade();
Properties.Settings.Default.UpgradeRequired = false;
Properties.Settings.Default.Save();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
catch (Exception e)
{
ServiceDisconnectException(e);
}
finally
{
Properties.Settings.Default.Save();
}
}
static bool SSLErrorPromptResult = false;
static bool BadCertificateHandler(string message)
{
if (!SSLErrorPromptResult)
{
var result = MessageBox.Show(message + " IT IS HIGHLY RECCOMENDED YOU DO NOT PROCEED! Continue?", "SSL Error", MessageBoxButtons.YesNo) == DialogResult.Yes;
SSLErrorPromptResult = result;
return result;
}
return true;
}
public static void ServiceDisconnectException(Exception e)
{
MessageBox.Show("An unhandled exception occurred. This usually means we lost connection to the service. Error" + e.ToString());
}
public static void ServiceDisconnectException(Exception e)
{
MessageBox.Show("An unhandled exception occurred. This usually means we lost connection to the service. Error" + e.ToString());
}
public static string TextPrompt(string caption, string text)
{
Form prompt = new Form()
{
Width = 500,
Height = 150,
FormBorderStyle = FormBorderStyle.FixedDialog,
Text = caption,
StartPosition = FormStartPosition.CenterScreen
};
Label textLabel = new Label() { Left = 50, Top = 20, Text = text, AutoSize = true };
TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };
Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70, DialogResult = DialogResult.OK };
confirmation.Click += (sender, e) => { prompt.Close(); };
prompt.Controls.Add(textBox);
prompt.Controls.Add(confirmation);
prompt.Controls.Add(textLabel);
prompt.AcceptButton = confirmation;
public static string TextPrompt(string caption, string text)
{
Form prompt = new Form()
{
Width = 500,
Height = 150,
FormBorderStyle = FormBorderStyle.FixedDialog,
Text = caption,
StartPosition = FormStartPosition.CenterScreen
};
Label textLabel = new Label() { Left = 50, Top = 20, Text = text, AutoSize = true };
TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };
Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70, DialogResult = DialogResult.OK };
confirmation.Click += (sender, e) => { prompt.Close(); };
prompt.Controls.Add(textBox);
prompt.Controls.Add(confirmation);
prompt.Controls.Add(textLabel);
prompt.AcceptButton = confirmation;
return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : null;
}
}
return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : null;
}
}
}
+29 -4
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Security;
using System.ServiceModel;
namespace TGServiceInterface
{
@@ -37,6 +38,34 @@ namespace TGServiceInterface
/// </summary>
static string HTTPSPassword;
public static void SetBadCertificateHandler(Func<string, bool> handler)
{
ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) =>
{
string ErrorMessage;
switch (error)
{
case SslPolicyErrors.None:
return true;
case SslPolicyErrors.RemoteCertificateChainErrors:
ErrorMessage = "There are certificate chain errors.";
break;
case SslPolicyErrors.RemoteCertificateNameMismatch:
ErrorMessage = "The certificate name does not match.";
break;
case SslPolicyErrors.RemoteCertificateNotAvailable:
ErrorMessage = "The certificate doesn't exist in the trust store.";
break;
default:
ErrorMessage = "An unknown error occurred.";
break;
}
ErrorMessage = String.Format("The certificate failed to verify for {0}:{1}. {2} {3}", HTTPSURL, HTTPSPort, ErrorMessage, cert.ToString());
return handler(ErrorMessage);
};
}
/// <summary>
/// Set the interface to look for services on the current computer
/// </summary>
@@ -93,10 +122,6 @@ namespace TGServiceInterface
outChannel.Credentials.UserName.UserName = HTTPSUsername;
outChannel.Credentials.UserName.Password = HTTPSPassword;
}
#if DEBUG
//allow self signed certs in debug mode
ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) => true;
#endif
return outChannel.CreateChannel();
}