From cf6d02980537ca5bc5e42584a63a89c4a45bae3d Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 1 Jan 2016 08:46:19 +1100 Subject: [PATCH] Add a skip ssl validation button. --- Launcher2/Gui/Screens/DirectConnectScreen.cs | 2 +- Launcher2/Gui/Screens/LauncherScreen.cs | 11 ++--- .../Gui/Screens/MainScreen.Classicube.cs | 40 +++++++++++++++++++ Launcher2/Gui/Screens/MainScreen.cs | 8 +++- .../Gui/Widgets/LauncherBooleanWidget.cs | 2 +- 5 files changed, 54 insertions(+), 9 deletions(-) diff --git a/Launcher2/Gui/Screens/DirectConnectScreen.cs b/Launcher2/Gui/Screens/DirectConnectScreen.cs index ce519ab83..409543278 100644 --- a/Launcher2/Gui/Screens/DirectConnectScreen.cs +++ b/Launcher2/Gui/Screens/DirectConnectScreen.cs @@ -46,7 +46,7 @@ namespace Launcher2 { 125, 50, (x, y) => game.SetScreen( new MainScreen( game ) ) ); MakeLabelAt( "", titleFont, Anchor.Centre, Anchor.Centre, 0, 100 ); MakeLabelAt( "Use classicube.net for skins", inputFont, Anchor.Centre, Anchor.Centre, 30, 130 ); - MakeBooleanAt( Anchor.Centre, Anchor.Centre, booleanFont, + MakeBooleanAt( Anchor.Centre, Anchor.Centre, booleanFont, true, 30, 30, -110, 130, UseClassicubeSkinsClick ); } diff --git a/Launcher2/Gui/Screens/LauncherScreen.cs b/Launcher2/Gui/Screens/LauncherScreen.cs index abb80265a..d659053f5 100644 --- a/Launcher2/Gui/Screens/LauncherScreen.cs +++ b/Launcher2/Gui/Screens/LauncherScreen.cs @@ -165,8 +165,8 @@ namespace Launcher2 { protected void MakeLabelAt( string text, Font font, Anchor horAnchor, Anchor verAnchor, int x, int y ) { if( widgets[widgetIndex] != null ) { - LauncherLabelWidget input = (LauncherLabelWidget)widgets[widgetIndex]; - input.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y ); + LauncherLabelWidget label = (LauncherLabelWidget)widgets[widgetIndex]; + label.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y ); } else { LauncherLabelWidget widget = new LauncherLabelWidget( game, text ); widget.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y ); @@ -175,13 +175,14 @@ namespace Launcher2 { widgetIndex++; } - protected void MakeBooleanAt( Anchor horAnchor, Anchor verAnchor, Font font, + protected void MakeBooleanAt( Anchor horAnchor, Anchor verAnchor, Font font, bool initValue, int width, int height, int x, int y, Action onClick ) { if( widgets[widgetIndex] != null ) { - LauncherBooleanWidget input = (LauncherBooleanWidget)widgets[widgetIndex]; - input.DrawAt( drawer, horAnchor, verAnchor, x, y ); + LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[widgetIndex]; + widget.DrawAt( drawer, horAnchor, verAnchor, x, y ); } else { LauncherBooleanWidget widget = new LauncherBooleanWidget( game, font, width, height ); + widget.Value = initValue; widget.DrawAt( drawer, horAnchor, verAnchor, x, y ); widget.OnClick = onClick; widgets[widgetIndex] = widget; diff --git a/Launcher2/Gui/Screens/MainScreen.Classicube.cs b/Launcher2/Gui/Screens/MainScreen.Classicube.cs index 0ede2dc6b..8fa660c15 100644 --- a/Launcher2/Gui/Screens/MainScreen.Classicube.cs +++ b/Launcher2/Gui/Screens/MainScreen.Classicube.cs @@ -9,6 +9,7 @@ namespace Launcher2 { public sealed partial class MainScreen : LauncherInputScreen { + const int skipSSLIndex = 9; public override void Init() { base.Init(); Resize(); @@ -82,6 +83,13 @@ namespace Launcher2 { } if( signingIn ) return; UpdateSignInInfo( Get( 0 ), Get( 1 ) ); + + LauncherBooleanWidget booleanWidget = widgets[skipSSLIndex] as LauncherBooleanWidget; + if( booleanWidget != null && booleanWidget.Value ) { + ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; + } else { + ServicePointManager.ServerCertificateValidationCallback = null; + } game.Session.LoginAsync( Get( 0 ), Get( 1 ) ); game.MakeBackground(); @@ -108,6 +116,15 @@ namespace Launcher2 { Environment.NewLine + "Unable to resolve classicube.net" + Environment.NewLine + "you may not be connected to the internet."; SetStatus( text ); + } else if( ex.Status == WebExceptionStatus.TrustFailure ) { + string text = "&eFailed to validate SSL certificate"; + SetStatus( text ); + using( drawer ) { + drawer.SetBitmap( game.Framebuffer ); + widgetIndex = 9; + MakeSSLSkipValidationBoolean(); + MakeSSLSkipValidationLabel(); + } } else { string text = "&eFailed to " + action + ":" + Environment.NewLine + ex.Status; @@ -115,6 +132,29 @@ namespace Launcher2 { } } + void MakeSSLSkipValidationBoolean() { + MakeBooleanAt( Anchor.Centre, Anchor.Centre, inputFont, true, 30, 30, 160, -40, SSLSkipValidationClick ); + } + + void MakeSSLSkipValidationLabel() { + MakeLabelAt( "Skip SSL check", inputFont, Anchor.Centre, Anchor.Centre, 250, -40 ); + } + + void SSLSkipValidationClick( int mouseX, int mouseY ) { + using( drawer ) { + drawer.SetBitmap( game.Framebuffer ); + LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[skipSSLIndex]; + SetBool( !widget.Value ); + } + } + + void SetBool( bool value ) { + LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[skipSSLIndex]; + widget.Value = value; + widget.Redraw( game.Drawer ); + Dirty = true; + } + void StoreFields() { Dictionary metadata; if( !game.ScreenMetadata.TryGetValue( "screen-CC", out metadata ) ) { diff --git a/Launcher2/Gui/Screens/MainScreen.cs b/Launcher2/Gui/Screens/MainScreen.cs index 2c4899e2e..a870357bf 100644 --- a/Launcher2/Gui/Screens/MainScreen.cs +++ b/Launcher2/Gui/Screens/MainScreen.cs @@ -10,7 +10,7 @@ namespace Launcher2 { public MainScreen( LauncherWindow game ) : base( game, true ) { buttonFont = new Font( "Arial", 16, FontStyle.Bold ); enterIndex = 2; - widgets = new LauncherWidget[11]; + widgets = new LauncherWidget[13]; LoadResumeInfo(); } @@ -44,8 +44,12 @@ namespace Launcher2 { MakeButtonAt( "Update check", 160, buttonHeight, buttonFont, Anchor.BottomOrRight, Anchor.BottomOrRight, -10, -10, (x, y) => game.SetScreen( new UpdatesScreen( game ) ) ); + if( widgets[widgetIndex] != null ) { + MakeSSLSkipValidationBoolean(); + MakeSSLSkipValidationLabel(); + } } - + const int buttonWidth = 220, buttonHeight = 35, sideButtonWidth = 150; string resumeUser, resumeIp, resumePort, resumeMppass; bool resumeCCSkins, resumeValid; diff --git a/Launcher2/Gui/Widgets/LauncherBooleanWidget.cs b/Launcher2/Gui/Widgets/LauncherBooleanWidget.cs index c27e11cf1..0ad3a1a84 100644 --- a/Launcher2/Gui/Widgets/LauncherBooleanWidget.cs +++ b/Launcher2/Gui/Widgets/LauncherBooleanWidget.cs @@ -28,7 +28,7 @@ namespace Launcher2 { DrawTextArgs args = new DrawTextArgs( "X", font, false ); Size size = drawer.MeasureSize( ref args ); args.SkipPartsCheck = true; - drawer.DrawText( ref args, X + (Width - size.Width) / 2, + drawer.DrawText( ref args, X + (Width + 2 - size.Width) / 2, // account for border Y + (Height - size.Height) / 2 ); } drawer.DrawRectBounds( FastColour.White, 2, X, Y, Width, Height );