Add a skip ssl validation button.

This commit is contained in:
UnknownShadow200 2016-01-01 08:46:19 +11:00
parent 28b076a798
commit cf6d029805
5 changed files with 54 additions and 9 deletions

View File

@ -46,7 +46,7 @@ namespace Launcher2 {
125, 50, (x, y) => game.SetScreen( new MainScreen( game ) ) ); 125, 50, (x, y) => game.SetScreen( new MainScreen( game ) ) );
MakeLabelAt( "", titleFont, Anchor.Centre, Anchor.Centre, 0, 100 ); MakeLabelAt( "", titleFont, Anchor.Centre, Anchor.Centre, 0, 100 );
MakeLabelAt( "Use classicube.net for skins", inputFont, Anchor.Centre, Anchor.Centre, 30, 130 ); 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 ); 30, 30, -110, 130, UseClassicubeSkinsClick );
} }

View File

@ -165,8 +165,8 @@ namespace Launcher2 {
protected void MakeLabelAt( string text, Font font, Anchor horAnchor, Anchor verAnchor, int x, int y ) { protected void MakeLabelAt( string text, Font font, Anchor horAnchor, Anchor verAnchor, int x, int y ) {
if( widgets[widgetIndex] != null ) { if( widgets[widgetIndex] != null ) {
LauncherLabelWidget input = (LauncherLabelWidget)widgets[widgetIndex]; LauncherLabelWidget label = (LauncherLabelWidget)widgets[widgetIndex];
input.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y ); label.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y );
} else { } else {
LauncherLabelWidget widget = new LauncherLabelWidget( game, text ); LauncherLabelWidget widget = new LauncherLabelWidget( game, text );
widget.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y ); widget.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y );
@ -175,13 +175,14 @@ namespace Launcher2 {
widgetIndex++; 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<int, int> onClick ) { int width, int height, int x, int y, Action<int, int> onClick ) {
if( widgets[widgetIndex] != null ) { if( widgets[widgetIndex] != null ) {
LauncherBooleanWidget input = (LauncherBooleanWidget)widgets[widgetIndex]; LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[widgetIndex];
input.DrawAt( drawer, horAnchor, verAnchor, x, y ); widget.DrawAt( drawer, horAnchor, verAnchor, x, y );
} else { } else {
LauncherBooleanWidget widget = new LauncherBooleanWidget( game, font, width, height ); LauncherBooleanWidget widget = new LauncherBooleanWidget( game, font, width, height );
widget.Value = initValue;
widget.DrawAt( drawer, horAnchor, verAnchor, x, y ); widget.DrawAt( drawer, horAnchor, verAnchor, x, y );
widget.OnClick = onClick; widget.OnClick = onClick;
widgets[widgetIndex] = widget; widgets[widgetIndex] = widget;

View File

@ -9,6 +9,7 @@ namespace Launcher2 {
public sealed partial class MainScreen : LauncherInputScreen { public sealed partial class MainScreen : LauncherInputScreen {
const int skipSSLIndex = 9;
public override void Init() { public override void Init() {
base.Init(); base.Init();
Resize(); Resize();
@ -82,6 +83,13 @@ namespace Launcher2 {
} }
if( signingIn ) return; if( signingIn ) return;
UpdateSignInInfo( Get( 0 ), Get( 1 ) ); 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.Session.LoginAsync( Get( 0 ), Get( 1 ) );
game.MakeBackground(); game.MakeBackground();
@ -108,6 +116,15 @@ namespace Launcher2 {
Environment.NewLine + "Unable to resolve classicube.net" + Environment.NewLine + "Unable to resolve classicube.net" +
Environment.NewLine + "you may not be connected to the internet."; Environment.NewLine + "you may not be connected to the internet.";
SetStatus( text ); 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 { } else {
string text = "&eFailed to " + action + ":" + string text = "&eFailed to " + action + ":" +
Environment.NewLine + ex.Status; 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() { void StoreFields() {
Dictionary<string, object> metadata; Dictionary<string, object> metadata;
if( !game.ScreenMetadata.TryGetValue( "screen-CC", out metadata ) ) { if( !game.ScreenMetadata.TryGetValue( "screen-CC", out metadata ) ) {

View File

@ -10,7 +10,7 @@ namespace Launcher2 {
public MainScreen( LauncherWindow game ) : base( game, true ) { public MainScreen( LauncherWindow game ) : base( game, true ) {
buttonFont = new Font( "Arial", 16, FontStyle.Bold ); buttonFont = new Font( "Arial", 16, FontStyle.Bold );
enterIndex = 2; enterIndex = 2;
widgets = new LauncherWidget[11]; widgets = new LauncherWidget[13];
LoadResumeInfo(); LoadResumeInfo();
} }
@ -44,8 +44,12 @@ namespace Launcher2 {
MakeButtonAt( "Update check", 160, buttonHeight, buttonFont, MakeButtonAt( "Update check", 160, buttonHeight, buttonFont,
Anchor.BottomOrRight, Anchor.BottomOrRight, -10, -10, Anchor.BottomOrRight, Anchor.BottomOrRight, -10, -10,
(x, y) => game.SetScreen( new UpdatesScreen( game ) ) ); (x, y) => game.SetScreen( new UpdatesScreen( game ) ) );
if( widgets[widgetIndex] != null ) {
MakeSSLSkipValidationBoolean();
MakeSSLSkipValidationLabel();
}
} }
const int buttonWidth = 220, buttonHeight = 35, sideButtonWidth = 150; const int buttonWidth = 220, buttonHeight = 35, sideButtonWidth = 150;
string resumeUser, resumeIp, resumePort, resumeMppass; string resumeUser, resumeIp, resumePort, resumeMppass;
bool resumeCCSkins, resumeValid; bool resumeCCSkins, resumeValid;

View File

@ -28,7 +28,7 @@ namespace Launcher2 {
DrawTextArgs args = new DrawTextArgs( "X", font, false ); DrawTextArgs args = new DrawTextArgs( "X", font, false );
Size size = drawer.MeasureSize( ref args ); Size size = drawer.MeasureSize( ref args );
args.SkipPartsCheck = true; 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 ); Y + (Height - size.Height) / 2 );
} }
drawer.DrawRectBounds( FastColour.White, 2, X, Y, Width, Height ); drawer.DrawRectBounds( FastColour.White, 2, X, Y, Width, Height );