138 lines
4.2 KiB
C#
138 lines
4.2 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|