initial source commit

This commit is contained in:
Gary Sharp
2013-02-01 12:35:28 +11:00
parent 543a005d31
commit 0a93429800
1103 changed files with 285609 additions and 0 deletions
+137
View File
@@ -0,0 +1,137 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Disco.Models.ClientServices;
using Disco.Client.Extensions;
namespace Disco.Client
{
public static class Program
{
public static bool IsAuthenticated { get; set; }
public static bool RebootRequired { get; set; }
public static bool AllowUninstall { get; set; }
[STAThread]
public static void Main(string[] args)
{
bool keepProcessing;
// Initialize Environment Settings
SetupEnvironment();
// Report to Bootstrapper
Presentation.WriteBanner();
// WhoAmI Phase
keepProcessing = Program.WhoAmI();
// Enrol Phase
if (keepProcessing)
keepProcessing = Program.Enrol();
// End conversation with Bootstrapper
Presentation.WriteFooter(Program.RebootRequired, Program.AllowUninstall, !keepProcessing);
}
public static void SetupEnvironment()
{
// Hookup Unhandled Error Handling
AppDomain.CurrentDomain.UnhandledException += ErrorReporting.CurrentDomain_UnhandledException;
// Ignore Local Proxies
WebRequest.DefaultWebProxy = new WebProxy();
// Override Http 100 Continue Behavour
ServicePointManager.Expect100Continue = false;
// Assume success unless otherwise notified
AllowUninstall = true;
// Detect Disco.Bootstrapper - Create Enable UI Delay if Running
try
{
Presentation.DelayUI = (System.Diagnostics.Process.GetProcessesByName("Disco.ClientBootstrapper").Length > 0);
}
catch (Exception)
{
Presentation.DelayUI = true; // Add Delays on Error
}
}
public static bool WhoAmI()
{
try
{
WhoAmIResponse response;
WhoAmI request;
// Build Request
request = new WhoAmI();
// Send Request
Presentation.UpdateStatus("Connecting to Preparation Server", "Determining connection authentication, please wait...", true, -1);
response = request.Post(true);
// Process Response
response.Process();
// Complete
return true;
}
catch (WebException webEx)
{
// Check for 'Unauthenticated' Connection
if ((webEx.Status == WebExceptionStatus.ProtocolError) && ((HttpWebResponse)webEx.Response).StatusCode == HttpStatusCode.Unauthorized)
{
WhoAmIExtensions.UnauthenticatedResponse();
return true;
}
else
{
// Some other Web Error
ErrorReporting.ReportError(webEx, false);
}
}
catch (Exception ex)
{
ErrorReporting.ReportError(ex, true);
}
return false;
}
public static bool Enrol()
{
try
{
Enrol request;
EnrolResponse response = null;
// Build Request
Presentation.UpdateStatus("Enrolling Device", "Building enrolment request and preparing to send data to the server.", true, -1);
request = new Enrol();
request.Build();
// Send Request
Presentation.UpdateStatus("Enrolling Device", "Sending the enrolment request to the server.", true, -1);
response = request.Post(Program.IsAuthenticated);
// Process Response
Presentation.UpdateStatus("Enrolling Device", "Processing the enrolment response from the server.", true, -1);
response.Process();
// Complete
return true;
}
catch (Exception ex)
{
ErrorReporting.ReportError(ex, true);
return false;
}
}
}
}