add pending enrollment identifier

This commit is contained in:
Gary Sharp
2024-01-24 16:38:50 +11:00
parent 37e2e5a08c
commit f90eda4101
9 changed files with 186 additions and 124 deletions
+1 -1
View File
@@ -147,7 +147,7 @@ namespace Disco.Client
var secondsConsumed = (DateTimeOffset.Now - startTime).TotalSeconds; var secondsConsumed = (DateTimeOffset.Now - startTime).TotalSeconds;
var progress = (int)((secondsConsumed / totalSeconds) * 100); var progress = (int)((secondsConsumed / totalSeconds) * 100);
Presentation.UpdateStatus("Pending Device Enrollment Approval", $"Waiting for enrollment session to be approved.{Environment.NewLine}Reason: {response.PendingReason}", true, progress); Presentation.UpdateStatus($"Pending Device Enrollment Approval: {response.PendingIdentifier}", $"Waiting for enrollment session '{response.PendingIdentifier}' to be approved.{Environment.NewLine}Reason: {response.PendingReason}", true, progress);
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10)); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));
} }
else else
@@ -32,5 +32,6 @@ namespace Disco.Models.ClientServices
public string PendingAuthorization { get; set; } public string PendingAuthorization { get; set; }
public string PendingReason { get; set; } public string PendingReason { get; set; }
public DateTimeOffset PendingTimeout { get; set; } public DateTimeOffset PendingTimeout { get; set; }
public string PendingIdentifier { get; set; }
} }
} }
@@ -81,14 +81,15 @@ namespace Disco.Services.Devices.Enrolment
System.Enum.GetName(EnrolmentType.GetType(), EnrolmentType) System.Enum.GetName(EnrolmentType.GetType(), EnrolmentType)
}); });
} }
public static void LogSessionPending(string SessionId, string HostId, EnrolmentTypes EnrolmentType, string Reason) public static void LogSessionPending(string SessionId, string HostId, EnrolmentTypes EnrolmentType, string Reason, string Identifier)
{ {
Log(EventTypeIds.SessionPending, new object[] Log(EventTypeIds.SessionPending, new object[]
{ {
SessionId, SessionId,
HostId, HostId,
System.Enum.GetName(EnrolmentType.GetType(), EnrolmentType), System.Enum.GetName(EnrolmentType.GetType(), EnrolmentType),
Reason Reason,
Identifier
}); });
} }
public static void LogSessionPendingApproved(string SessionId, string Username, string Reason) public static void LogSessionPendingApproved(string SessionId, string Username, string Reason)
@@ -383,7 +384,7 @@ namespace Disco.Services.Devices.Enrolment
Id = (int)EventTypeIds.SessionPending, Id = (int)EventTypeIds.SessionPending,
ModuleId = _ModuleId, ModuleId = _ModuleId,
Name = "Session Pending", Name = "Session Pending",
Format = "Pending '{2}' Enrollment for {1} (Session# {0}; Reason: {3})", Format = "Pending '{2}' Enrollment for {1} (Session# {0}; Reason: {3}; Identifier: {4})",
Severity = 0, Severity = 0,
UseLive = true, UseLive = true,
UsePersist = true, UsePersist = true,
@@ -14,6 +14,8 @@ namespace Disco.Services.Devices.Enrolment
{ {
public static class WindowsDeviceEnrolment public static class WindowsDeviceEnrolment
{ {
private static readonly string pendingIdentifierAlphabet = "23456789ABCDEFGHJKMNPQRSTWXYZ";
private static readonly Random pendingIdentifierRng = new Random();
private static readonly ConcurrentDictionary<string, EnrolResponse> pendingEnrolments = new ConcurrentDictionary<string, EnrolResponse>(); private static readonly ConcurrentDictionary<string, EnrolResponse> pendingEnrolments = new ConcurrentDictionary<string, EnrolResponse>();
private static void CleanupPendingEnrolments() private static void CleanupPendingEnrolments()
@@ -26,6 +28,28 @@ namespace Disco.Services.Devices.Enrolment
pendingEnrolments.TryRemove(expiredEnrolment, out _); pendingEnrolments.TryRemove(expiredEnrolment, out _);
} }
private static string GeneratePendingIdentifier()
{
var identifier = default(string);
var chars = new char[4];
var retryAllowed = 100;
while (--retryAllowed > 0)
{
lock (pendingIdentifierRng)
{
for (var i = 0; i < chars.Length; i++)
{
chars[i] = pendingIdentifierAlphabet[pendingIdentifierRng.Next(pendingIdentifierAlphabet.Length)];
}
}
identifier = new string(chars);
if (!GetPendingEnrolments().Any(e => string.Equals(e.PendingIdentifier, identifier, StringComparison.Ordinal)))
break;
}
return identifier;
}
public static List<EnrolResponse> GetPendingEnrolments() public static List<EnrolResponse> GetPendingEnrolments()
{ {
var now = DateTimeOffset.Now; var now = DateTimeOffset.Now;
@@ -185,8 +209,9 @@ namespace Disco.Services.Devices.Enrolment
response.PendingAuthorization = Convert.ToBase64String(authBytes); response.PendingAuthorization = Convert.ToBase64String(authBytes);
} }
response.PendingTimeout = DateTimeOffset.Now.Add(Database.DiscoConfiguration.Bootstrapper.PendingTimeout); response.PendingTimeout = DateTimeOffset.Now.Add(Database.DiscoConfiguration.Bootstrapper.PendingTimeout);
response.PendingIdentifier = GeneratePendingIdentifier();
EnrolmentLog.LogSessionPending(sessionId, Request.SerialNumber, EnrolmentTypes.Normal, response.PendingReason); EnrolmentLog.LogSessionPending(sessionId, Request.SerialNumber, EnrolmentTypes.Normal, response.PendingReason, response.PendingIdentifier);
if (pendingEnrolments.TryAdd(sessionId, response)) if (pendingEnrolments.TryAdd(sessionId, response))
return response; return response;
@@ -15,7 +15,8 @@
<h3> <h3>
<span data-bind="text: title"></span> <span data-bind="text: title"></span>
<span class="details" data-bind="text: '(' + deviceModelDescription() + ')'"></span> <span class="details" data-bind="text: '(' + deviceModelDescription() + ')'"></span>
<i class="fa fa-exclamation-circle" data-bind="visible: isPending"></i> <span class="pending" data-bind="visible: isPending"><code data-bind="text: pendingIdentifier"></code> <i class="fa fa-exclamation-circle"></i></span>
</h3> </h3>
<p class="sessionStart" data-bind="text: startTime"></p> <p class="sessionStart" data-bind="text: startTime"></p>
<p class="sessionStatus" data-bind="text: progressStatus"></p> <p class="sessionStatus" data-bind="text: progressStatus"></p>
@@ -30,6 +31,7 @@
<div id="formResolveSessionPending" data-bind="visible: isPending"> <div id="formResolveSessionPending" data-bind="visible: isPending">
@using (Html.BeginForm(MVC.API.Enrollment.ResolveSessionPending(), FormMethod.Post)) @using (Html.BeginForm(MVC.API.Enrollment.ResolveSessionPending(), FormMethod.Post))
{ {
<code data-bind="text: pendingIdentifier"></code>
@Html.AntiForgeryToken(); @Html.AntiForgeryToken();
<input type="hidden" name="sessionId" data-bind="value: id" /> <input type="hidden" name="sessionId" data-bind="value: id" />
<div class="reason"> <div class="reason">
@@ -152,6 +154,7 @@
self.id = id; self.id = id;
self.title = ko.observable(id); self.title = ko.observable(id);
self.isPending = ko.observable(false); self.isPending = ko.observable(false);
self.pendingIdentifier = ko.observable();
self.messages = ko.observableArray(); self.messages = ko.observableArray();
self.console = ko.observableArray(); self.console = ko.observableArray();
self.serialNumber = ko.observable(); self.serialNumber = ko.observable();
@@ -247,6 +250,7 @@
break; break;
case 14: // SessionPending case 14: // SessionPending
session.isPending(true); session.isPending(true);
session.pendingIdentifier(log.Arguments[4]);
session.messages.unshift(log); session.messages.unshift(log);
session.progressValue(-1); session.progressValue(-1);
session.progressStatus('Pending enrollment approval'); session.progressStatus('Pending enrollment approval');
@@ -91,13 +91,21 @@ WriteLiteral(" class=\"details\"");
WriteLiteral(" data-bind=\"text: \'(\' + deviceModelDescription() + \')\'\""); WriteLiteral(" data-bind=\"text: \'(\' + deviceModelDescription() + \')\'\"");
WriteLiteral("></span>\r\n <i"); WriteLiteral("></span>\r\n <span");
WriteLiteral(" class=\"fa fa-exclamation-circle\""); WriteLiteral(" class=\"pending\"");
WriteLiteral(" data-bind=\"visible: isPending\""); WriteLiteral(" data-bind=\"visible: isPending\"");
WriteLiteral("></i>\r\n </h3>\r\n <p"); WriteLiteral("><code");
WriteLiteral(" data-bind=\"text: pendingIdentifier\"");
WriteLiteral("></code> <i");
WriteLiteral(" class=\"fa fa-exclamation-circle\"");
WriteLiteral("></i></span>\r\n \r\n </h3>\r\n <p");
WriteLiteral(" class=\"sessionStart\""); WriteLiteral(" class=\"sessionStart\"");
@@ -152,28 +160,40 @@ WriteLiteral(" data-bind=\"visible: isPending\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 31 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 32 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
#line default #line default
#line hidden #line hidden
#line 31 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 32 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
using (Html.BeginForm(MVC.API.Enrollment.ResolveSessionPending(), FormMethod.Post)) using (Html.BeginForm(MVC.API.Enrollment.ResolveSessionPending(), FormMethod.Post))
{ {
#line default #line default
#line hidden #line hidden
WriteLiteral(" <code");
#line 33 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" WriteLiteral(" data-bind=\"text: pendingIdentifier\"");
WriteLiteral("></code>\r\n");
#line 35 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
#line default
#line hidden
#line 35 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Html.AntiForgeryToken()); Write(Html.AntiForgeryToken());
#line default #line default
#line hidden #line hidden
#line 33 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 35 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
; ;
@@ -226,7 +246,7 @@ WriteLiteral(" class=\"button\"");
WriteLiteral(">Reject</button>\r\n </div>\r\n"); WriteLiteral(">Reject</button>\r\n </div>\r\n");
#line 42 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 44 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
} }
@@ -406,7 +426,7 @@ WriteLiteral(@">
var deviceBaseUrl = '"); var deviceBaseUrl = '");
#line 122 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 124 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Url.Action(MVC.Device.Show())); Write(Url.Action(MVC.Device.Show()));
@@ -415,7 +435,7 @@ WriteLiteral(@">
WriteLiteral("/\'\r\n var deviceModelImageUrl = \'"); WriteLiteral("/\'\r\n var deviceModelImageUrl = \'");
#line 123 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 125 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Url.Action(MVC.API.DeviceModel.Image())); Write(Url.Action(MVC.API.DeviceModel.Image()));
@@ -424,7 +444,7 @@ WriteLiteral("/\'\r\n var deviceModelImageUrl = \'");
WriteLiteral("/\'\r\n var iconWarningUrl = \'url("); WriteLiteral("/\'\r\n var iconWarningUrl = \'url(");
#line 124 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 126 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Links.ClientSource.Style.Images.Status.warning32_png); Write(Links.ClientSource.Style.Images.Status.warning32_png);
@@ -433,7 +453,7 @@ WriteLiteral("/\'\r\n var iconWarningUrl = \'url(");
WriteLiteral(")\';\r\n var iconErrorUrl = \'url("); WriteLiteral(")\';\r\n var iconErrorUrl = \'url(");
#line 125 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 127 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Links.ClientSource.Style.Images.Status.fail32_png); Write(Links.ClientSource.Style.Images.Status.fail32_png);
@@ -451,110 +471,112 @@ WriteLiteral(")\';\r\n\r\n function pageViewModel() {\r\n var
" }\r\n };\r\n }\r\n function sessionViewModel(id) " + " }\r\n };\r\n }\r\n function sessionViewModel(id) " +
"{\r\n var self = this;\r\n\r\n self.id = id;\r\n self.t" + "{\r\n var self = this;\r\n\r\n self.id = id;\r\n self.t" +
"itle = ko.observable(id);\r\n self.isPending = ko.observable(false);\r\n " + "itle = ko.observable(id);\r\n self.isPending = ko.observable(false);\r\n " +
" self.messages = ko.observableArray();\r\n self.console = ko." + " self.pendingIdentifier = ko.observable();\r\n self.messages " +
"observableArray();\r\n self.serialNumber = ko.observable();\r\n " + "= ko.observableArray();\r\n self.console = ko.observableArray();\r\n " +
" self.sessionDeviceInfo = ko.observable();\r\n self.progressStatus = k" + " self.serialNumber = ko.observable();\r\n self.sessionDeviceInfo " +
"o.observable();\r\n self.progressValue = ko.observable();\r\n " + "= ko.observable();\r\n self.progressStatus = ko.observable();\r\n " +
"self.startTime = ko.observable();\r\n self.sessionEnded = ko.observable" + " self.progressValue = ko.observable();\r\n self.startTime = ko.obser" +
"(false);\r\n self.progressbar = null;\r\n self.hasError = ko.o" + "vable();\r\n self.sessionEnded = ko.observable(false);\r\n sel" +
"bservable(false);\r\n self.hasWarning = ko.observable(false);\r\n " + "f.progressbar = null;\r\n self.hasError = ko.observable(false);\r\n " +
" self.deviceModelId = ko.observable();\r\n self.deviceModelDescripti" + " self.hasWarning = ko.observable(false);\r\n self.deviceModelId = " +
"on = ko.computed(function () {\r\n var deviceModelId = self.deviceM" + "ko.observable();\r\n self.deviceModelDescription = ko.computed(function" +
"odelId();\r\n var sessionDeviceInfo = self.sessionDeviceInfo();\r\n " + " () {\r\n var deviceModelId = self.deviceModelId();\r\n " +
" if (deviceModelId) {\r\n var dm = deviceModels[de" + " var sessionDeviceInfo = self.sessionDeviceInfo();\r\n if (deviceM" +
"viceModelId];\r\n if (dm) {\r\n if (dm.Des" + "odelId) {\r\n var dm = deviceModels[deviceModelId];\r\n " +
"cription)\r\n return dm.Description;\r\n " + " if (dm) {\r\n if (dm.Description)\r\n " +
" else\r\n return dm.Manufacturer + \' \' + dm.Model" + " return dm.Description;\r\n else\r\n " +
";\r\n }\r\n }\r\n if (sessionDeviceIn" + " return dm.Manufacturer + \' \' + dm.Model;\r\n }\r" +
"fo) {\r\n return sessionDeviceInfo.Arguments[6] + \' \' + session" + "\n }\r\n if (sessionDeviceInfo) {\r\n " +
"DeviceInfo.Arguments[7];\r\n }\r\n });\r\n self.d" + " return sessionDeviceInfo.Arguments[6] + \' \' + sessionDeviceInfo.Arguments[7];\r" +
"eviceUrl = ko.computed(function () {\r\n var serialNumber = self.se" + "\n }\r\n });\r\n self.deviceUrl = ko.computed(fu" +
"rialNumber();\r\n if (serialNumber)\r\n return dev" + "nction () {\r\n var serialNumber = self.serialNumber();\r\n " +
"iceBaseUrl + serialNumber;\r\n else\r\n return nul" + " if (serialNumber)\r\n return deviceBaseUrl + serialNumber" +
"l;\r\n });\r\n self.deviceModelImageUrl = ko.computed(function" + ";\r\n else\r\n return null;\r\n });\r\n " +
" () {\r\n var deviceModelImage;\r\n if (self.deviceMod" + " self.deviceModelImageUrl = ko.computed(function () {\r\n va" +
"elId())\r\n deviceModelImage = \'url(\' + deviceModelImageUrl + s" + "r deviceModelImage;\r\n if (self.deviceModelId())\r\n " +
"elf.deviceModelId() + \')\';\r\n else\r\n deviceMode" + " deviceModelImage = \'url(\' + deviceModelImageUrl + self.deviceModelId() + \')\'" +
"lImage = \'url(\' + deviceModelImageUrl + \')\';\r\n if (self.hasError(" + ";\r\n else\r\n deviceModelImage = \'url(\' + deviceM" +
"))\r\n return iconErrorUrl + \', \' + deviceModelImage;\r\n " + "odelImageUrl + \')\';\r\n if (self.hasError())\r\n r" +
" else\r\n if (self.hasWarning())\r\n " + "eturn iconErrorUrl + \', \' + deviceModelImage;\r\n else\r\n " +
" return iconWarningUrl + \', \' + deviceModelImage;\r\n else\r\n " + " if (self.hasWarning())\r\n return iconWarningUrl +" +
" return \'none, \' + deviceModelImage;\r\n });\r\n " + " \', \' + deviceModelImage;\r\n else\r\n ret" +
" self.select = function (e, d) {\r\n vm.currentSession(self)" + "urn \'none, \' + deviceModelImage;\r\n });\r\n self.select = fun" +
";\r\n hostDialogSessions.dialog(\'open\');\r\n hostDialo" + "ction (e, d) {\r\n vm.currentSession(self);\r\n hostDi" +
"gSessions.dialog(\'option\', \'title\', \'Device Enrollment: \' + self.title());\r\n " + "alogSessions.dialog(\'open\');\r\n hostDialogSessions.dialog(\'option\'" +
" }\r\n }\r\n\r\n function parseLog(log) {\r\n if (log.Mo" + ", \'title\', \'Device Enrollment: \' + self.title());\r\n }\r\n }\r\n\r\n " +
"duleId === 50 && log.Arguments && log.Arguments.length > 0) {\r\n /" + " function parseLog(log) {\r\n if (log.ModuleId === 50 && log.Argu" +
"/ find session\r\n var sessionId = log.Arguments[0];\r\n " + "ments && log.Arguments.length > 0) {\r\n // find session\r\n " +
" var session = vm.sessionIndex[sessionId];\r\n if (!session && lo" + " var sessionId = log.Arguments[0];\r\n var session = vm.sessi" +
"g.EventTypeId === 10) { // Starting Session (Ignore \'partial\' sessions)\r\n " + "onIndex[sessionId];\r\n if (!session && log.EventTypeId === 10) { /" +
" session = new sessionViewModel(sessionId);\r\n vm." + "/ Starting Session (Ignore \'partial\' sessions)\r\n session = ne" +
"sessionIndex[sessionId] = session;\r\n vm.sessions.unshift(sess" + "w sessionViewModel(sessionId);\r\n vm.sessionIndex[sessionId] =" +
"ion);\r\n vm.noSessions(false);\r\n }\r\n " + " session;\r\n vm.sessions.unshift(session);\r\n " +
" if (session) {\r\n switch (log.EventTypeId) {\r\n " + " vm.noSessions(false);\r\n }\r\n if (session) {\r\n " +
" case 10: // SessionStarting\r\n session.ti" + " switch (log.EventTypeId) {\r\n case 10: // " +
"tle(log.Arguments[1]);\r\n session.startTime(log.Format" + "SessionStarting\r\n session.title(log.Arguments[1]);\r\n " +
"tedTimestamp.substring(log.FormattedTimestamp.indexOf(\' \') + 1));\r\n " + " session.startTime(log.FormattedTimestamp.substring(lo" +
" session.messages.unshift(log);\r\n break" + "g.FormattedTimestamp.indexOf(\' \') + 1));\r\n session.me" +
";\r\n case 11: // SessionProgress\r\n " + "ssages.unshift(log);\r\n break;\r\n " +
" //session.progressbar.progressbar(\'option\', \'value\', log.Arguments[1]);\r\n " + " case 11: // SessionProgress\r\n //session.progressbar" +
" session.progressValue(log.Arguments[1]);\r\n " + ".progressbar(\'option\', \'value\', log.Arguments[1]);\r\n " +
" session.progressStatus(log.Arguments[2]);\r\n " + "session.progressValue(log.Arguments[1]);\r\n session.pr" +
" break;\r\n case 12: // SessionDevice\r\n " + "ogressStatus(log.Arguments[2]);\r\n break;\r\n " +
" session.title(log.Arguments[1]);\r\n sessi" + " case 12: // SessionDevice\r\n session.titl" +
"on.serialNumber(log.Arguments[1]);\r\n if (log.Argument" + "e(log.Arguments[1]);\r\n session.serialNumber(log.Argum" +
"s.length >= 3 && log.Arguments[2])\r\n session.devi" + "ents[1]);\r\n if (log.Arguments.length >= 3 && log.Argu" +
"ceModelId(log.Arguments[2]);\r\n break;\r\n " + "ments[2])\r\n session.deviceModelId(log.Arguments[2" +
" break;\r\n case 13: // SessionDeviceInfo\r\n " + "]);\r\n break;\r\n break;\r\n " +
" session.title(log.Arguments[1]);\r\n " + " case 13: // SessionDeviceInfo\r\n " +
" session.serialNumber(log.Arguments[1]);\r\n sess" + "session.title(log.Arguments[1]);\r\n session.serialNumb" +
"ion.sessionDeviceInfo(log);\r\n if (log.Arguments.lengt" + "er(log.Arguments[1]);\r\n session.sessionDeviceInfo(log" +
"h >= 10 && log.Arguments[9])\r\n session.deviceMode" + ");\r\n if (log.Arguments.length >= 10 && log.Arguments[" +
"lId(log.Arguments[9]);\r\n break;\r\n " + "9])\r\n session.deviceModelId(log.Arguments[9]);\r\n " +
" case 14: // SessionPending\r\n session.isPending(tr" + " break;\r\n case 14: // SessionPe" +
"ue);\r\n session.messages.unshift(log);\r\n " + "nding\r\n session.isPending(true);\r\n " +
" session.pendingIdentifier(log.Arguments[4]);\r\n " +
" session.messages.unshift(log);\r\n session.progressV" +
"alue(-1);\r\n session.progressStatus(\'Pending enrollmen" +
"t approval\');\r\n break;\r\n case " +
"15: // SessionPendingApproved\r\n session.isPending(fal" +
"se);\r\n session.messages.unshift(log);\r\n " +
" session.progressValue(-1);\r\n session.pr" + " session.progressValue(-1);\r\n session.pr" +
"ogressStatus(\'Pending enrollment approval\');\r\n break;" + "ogressStatus(\'Enrollment approval, waiting for client\');\r\n " +
"\r\n case 15: // SessionPendingApproved\r\n " + " break;\r\n case 16: // SessionPendingRejected\r\n " +
" session.isPending(false);\r\n session.message" + " session.isPending(false);\r\n ses" +
"s.unshift(log);\r\n session.progressValue(-1);\r\n " + "sion.messages.unshift(log);\r\n session.progressValue(-" +
" session.progressStatus(\'Enrollment approval, waiting for cl" + "1);\r\n session.progressStatus(\'Enrollment rejected, wa" +
"ient\');\r\n break;\r\n case 16: //" + "iting for client\');\r\n break;\r\n " +
" SessionPendingRejected\r\n session.isPending(false);\r\n" + " case 17: // SessionContinuing\r\n session.isPending(fa" +
" session.messages.unshift(log);\r\n " + "lse);\r\n session.messages.unshift(log);\r\n " +
" session.progressValue(-1);\r\n session.progress" + " break;\r\n case 20: // SessionFinished\r\n " +
"Status(\'Enrollment rejected, waiting for client\');\r\n " + " session.sessionEnded(true);\r\n " +
"break;\r\n case 17: // SessionContinuing\r\n " + " session.isPending(false);\r\n if (session.hasError())\r" +
" session.isPending(false);\r\n session.messag" + "\n session.progressStatus(\'Enrollment Finished wit" +
"es.unshift(log);\r\n break;\r\n ca" + "h an Error\');\r\n else\r\n " +
"se 20: // SessionFinished\r\n session.sessionEnded(true" + " if (session.hasWarning())\r\n session.progress" +
");\r\n session.isPending(false);\r\n " + "Status(\'Enrollment Finished with a Warning\');\r\n e" +
" if (session.hasError())\r\n session.progress" + "lse\r\n session.progressStatus(\'Enrollment Fini" +
"Status(\'Enrollment Finished with an Error\');\r\n else\r\n" + "shed Successfully\');\r\n session.messages.unshift(log);" +
" if (session.hasWarning())\r\n " + "\r\n break;\r\n case 21: // Sessio" +
" session.progressStatus(\'Enrollment Finished with a Warning\');\r\n " + "nDiagnosticInformation\r\n session.console.push(log);\r\n" +
" else\r\n session." + " break;\r\n case 22: // SessionW" +
"progressStatus(\'Enrollment Finished Successfully\');\r\n " + "arning\r\n session.hasWarning(true);\r\n " +
" session.messages.unshift(log);\r\n break;\r\n " + " session.messages.unshift(log);\r\n break;\r\n " +
" case 21: // SessionDiagnosticInformation\r\n " + " case 23: // SessionError\r\n case 24" +
" session.console.push(log);\r\n break;\r\n " + ": // SessionErrorWithInner\r\n case 25: // SessionClientErr" +
" case 22: // SessionWarning\r\n session.hasWa" + "or\r\n session.hasError(true);\r\n " +
"rning(true);\r\n session.messages.unshift(log);\r\n " + " session.messages.unshift(log);\r\n break;\r\n " +
" break;\r\n case 23: // SessionError\r\n" + " default:\r\n session.messages.unshift(" +
" case 24: // SessionErrorWithInner\r\n " + "log);\r\n }\r\n }\r\n }\r\n }\r\n " +
" case 25: // SessionClientError\r\n session.hasError(" + " function init() {\r\n hostDialogSessions.dialog({\r\n m" +
"true);\r\n session.messages.unshift(log);\r\n " + "odal: true,\r\n height: 574,\r\n width: 900,\r\n " +
" break;\r\n default:\r\n " + " resizable: false,\r\n autoOpen: false\r\n });\r\n " +
" session.messages.unshift(log);\r\n }\r\n }\r\n" + " //hostDialogSessionsProgress.progressbar();\r\n\r\n // Create Vi" +
" }\r\n }\r\n function init() {\r\n hostDialogSessi" + "ew Model\r\n vm = new pageViewModel();\r\n $.ajax({\r\n " +
"ons.dialog({\r\n modal: true,\r\n height: 574,\r\n " + " url: \'");
" width: 900,\r\n resizable: false,\r\n autoOp" +
"en: false\r\n });\r\n //hostDialogSessionsProgress.progressbar" +
"();\r\n\r\n // Create View Model\r\n vm = new pageViewModel();\r\n" +
" $.ajax({\r\n url: \'");
#line 314 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 318 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Url.Action(MVC.API.DeviceModel.Index())); Write(Url.Action(MVC.API.DeviceModel.Index()));
@@ -588,7 +610,7 @@ WriteLiteral(@"',
url: '"); url: '");
#line 339 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 343 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Url.Action(MVC.API.Logging.RetrieveEvents())); Write(Url.Action(MVC.API.Logging.RetrieveEvents()));
@@ -627,7 +649,7 @@ WriteLiteral(@"',
$.connection.hub.qs = { LogModules: '"); $.connection.hub.qs = { LogModules: '");
#line 369 "..\..\Areas\Config\Views\Enrolment\Status.cshtml" #line 373 "..\..\Areas\Config\Views\Enrolment\Status.cshtml"
Write(Disco.Services.Devices.Enrolment.EnrolmentLog.Current.LiveLogGroupName); Write(Disco.Services.Devices.Enrolment.EnrolmentLog.Current.LiveLogGroupName);
+5 -1
View File
@@ -473,7 +473,7 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.message {
#enrolStatus #sessions .session > h3 span.details { #enrolStatus #sessions .session > h3 span.details {
font-size: 0.8em; font-size: 0.8em;
} }
#enrolStatus #sessions .session > h3 i { #enrolStatus #sessions .session > h3 span.pending {
float: right; float: right;
color: #F0A30A; color: #F0A30A;
} }
@@ -532,6 +532,10 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.message {
overflow: hidden; overflow: hidden;
margin-bottom: 3px; margin-bottom: 3px;
} }
#dialogSession .sessionProgress code {
font-size: 2em;
color: #E51400;
}
#dialogSession .sessionProgress div.reason { #dialogSession .sessionProgress div.reason {
margin-bottom: 3px; margin-bottom: 3px;
} }
+6 -1
View File
@@ -480,7 +480,7 @@ div.logEventsViewport {
font-size: .8em; font-size: .8em;
} }
i { span.pending {
float: right; float: right;
color: @ThemeAmber; color: @ThemeAmber;
} }
@@ -554,6 +554,11 @@ div.logEventsViewport {
margin-bottom: 3px; margin-bottom: 3px;
} }
& code {
font-size: 2em;
color: @ThemeRed;
}
& div.reason { & div.reason {
margin-bottom: 3px; margin-bottom: 3px;
} }
File diff suppressed because one or more lines are too long