add pending enrollment identifier
This commit is contained in:
1 parent
37e2e5a08c
commit
f90eda4101
9 files changed
+185
-123
No files matched your search
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatrLine truncated
|
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer a.button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatrLine truncated
|
||||||
Reference in new issue
Block a user